Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DirectX, problem z surface'ami

0 views
Skip to first unread message

Erge

unread,
Jul 2, 2005, 2:17:42 PM7/2/05
to

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

unread,
Jul 5, 2005, 9:06:36 AM7/5/05
to

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

unread,
Jul 6, 2005, 4:55:48 PM7/6/05
to

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

unread,
Jul 18, 2005, 1:49:04 AM7/18/05
to
> 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));

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


0 new messages