Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





GDI RGBA vs D3DTexture RGBA

Iniciado por MA]Mestre, 20 de Junio de 2007, 01:14:02 PM

« anterior - próximo »

MA]Mestre

Hola,

Usando OleDraw, que internamente llama a IViewObject::Draw()
...
hr = OleDraw(lpV, DVASPECT_TRANSPARENT, hdcDraw, &rTotal);
...
donde:

lpV – es una interfaz de IViewObject.
DVASPECT_TRANSPARENT dibuja usando alpha blenfing.
hdcDraw – offscreen HDC
rTotal – rectangulos cliente del total a pintar

El problema aparece cuando el hdcDraw lo quiero extraer de una textura de DirectX.

1.-Creo la textura vacia. (D3DFMT_A8R8G8B8)
2.-IDirect3DTexture9::GetSurfaceLevel
3.-IDirect3DSurface9::GetDC

falla el GetDC porque he creado una textura RGBA.

IDirect3DSurface9::GetDC is valid on the following formats only: D3DFMT_R5G6B5, D3DFMT_X1R5G5B5, D3DFMT_R8G8B8, and D3DFMT_X8R8G8B8. Formats that contain Alpha are not supported because the GDI implementations don't have a well-defined behavior on the alpha channel. For more information about formats, see D3DFORMAT.

Alguna idea de como puedo llegar a 'pintar' una textura con el contenido del hdcDraw con alpha ? el proceso deberia no ser muy lento, pues realizaria el proceso constantemente en el render.

Gracias.

marcode

¿y no te sirve usar D3DFMT_X8R8G8B8?
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

MA]Mestre

Hola marcode,

No, D3DFMT_X8R8G8B8 no funciona.

Todo y que no estoy 100% seguro de que OleDraw este trabajando bien, voy a asegurarme que pinta usando el Alpha pintando sobre otra cosa que no sea la textura de D3D.

Se me acaba de ocurrir que si pudiera hacer un 'GetBuffer' del HDC y este lo copio en la textura podia ser una solución. No se si es factible, tengo q bucear por google/msdn.

Se agradece cualquier idea.

marcode

pues yo creo que debería funcionar el X8R8G8B8, tiene el mismo tamaño estructura, que es lo que importa. no creo directx vea ninguna diferencia con una A8.... al aplicar el alpha.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.