Discussion:
DirectX, problem z surface'ami
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Erge
2005-07-02 18:17:42 UTC
Permalink
Mam nastêpuj±cy problem. Chcê wczytaæ z pliku graficznego surface i wrzuciæ
go do back buffera. To samo w sobie nie sprawia problemu. Problemem jest
zmuszenie Directa aby uwzglêdni³ kana³ alpha.

Poni¿ej zamieszczam wycinki kodu:

Wczytywanie:

LPDIRECT3DSURFACE9 sBB;
m_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &sBB);
D3DSURFACE_DESC desc;
sBB->GetDesc(&desc);
m_pd3dDevice->CreateOffscreenPlainSurface(desc.Width, desc.Height,
desc.Format, D3DPOOL_SYSTEMMEM, &fgSurface, NULL);
D3DXLoadSurfaceFromFile(fgSurface, NULL, NULL, filename, NULL, D3DX_DEFAULT,
0, NULL);

Renderowanie:

LPDIRECT3DSURFACE9 sBB;
m_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &sBB);
D3DXLoadSurfaceFromSurface(sBB, NULL, NULL, fgSurface, NULL, NULL,
D3DX_DEFAULT, D3DCOLOR_ARGB(255,0,0,0));

Jakie¶ rady, sugestie?

pozdrawiam
Erge
Daniel Biesiada
2005-07-05 13:06:36 UTC
Permalink
Nie za bardzo znam sie na DX9 ale post render processing jak juz innej
drogi nie znajdziesz to moze przez Lock i zoptymalizuj sobie jakis
alphablending rodem z starych rozwiazan jeszcze ddrawowych. Zrodel na
alpha blending optymalizowane na mmxy/sse/inne jest w cholere na sieci.
Tutaj masz pokrewny przyklad jeno z gausem:
http://www.gamedev.net/reference/articles/article2108.asp

Ale byc moze nie bedzie takiej potrzeby jednak nie mialem okazji
sprawdzic zrodla dostepnego pod tym adresem:
http://www.codesampler.com/dx9src/dx9src_4.htm#dx9_alpha_blending_framebuffer

pozdrawiam,
hollowone
Erge
2005-07-06 20:55:48 UTC
Permalink
Post by Daniel Biesiada
Nie za bardzo znam sie na DX9 ale post render processing jak juz innej
drogi nie znajdziesz to moze przez Lock i zoptymalizuj sobie jakis
alphablending rodem z starych rozwiazan jeszcze ddrawowych. Zrodel na
alpha blending optymalizowane na mmxy/sse/inne jest w cholere na sieci.
http://www.gamedev.net/reference/articles/article2108.asp
Ale byc moze nie bedzie takiej potrzeby jednak nie mialem okazji
http://www.codesampler.com/dx9src/dx9src_4.htm#dx9_alpha_blending_framebuffe
r

witam

Zrobi³em to ju¿ za pomoc± zwyk³ych trójk±tów (przetransformowany typ
wierzcho³ka) i tekstury. Dzia³a idealnie. Co ciekawe szukaj±c w Internecie
sposobu rozwi±zania tego problemu za pomoc± surface'ów zauwa¿y³em ¿e sporo
osób te¿ tego próbowa³o ale odpowiedzi nigdzie nie ma :D Có¿, chyba to
pozostanie tajemnic± Microsoftu.

pozdrawiam
Erge
Ko³ek Szymon
2005-07-18 05:49:04 UTC
Permalink
Post by Erge
LPDIRECT3DSURFACE9 sBB;
m_pd3dDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &sBB);
D3DXLoadSurfaceFromSurface(sBB, NULL, NULL, fgSurface, NULL, NULL,
D3DX_DEFAULT, D3DCOLOR_ARGB(255,0,0,0));
Hardkorowy killer wydajnosci :). A nie lepiej utworzyc sobie teksturke i
Draw*Primitive uzyc ?. (To pytanie retoryczne - bo oczywiscie lepiej :) ).
Operacja bedzie w pelni akcelerowana, nie ma zadnych problemow z kanalem
alpha itp itd.

pozdr.
Simon

Loading...