Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Drácula en 01 de Enero de 1970, 01:00:00 AM

Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Cuando grabo el backbuffer, me aparece TODO del mismo color. Y no entiendo porqué, puesto que creo que lo hago correctamente.

Este es mi código:

   LPDIRECT3DSURFACE8 pBackBuffer;

   m_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );

   HRESULT hr=D3DXSaveSurfaceToFile(nombre,
      D3DXIFF_BMP,   // Formato
      pBackBuffer,
      NULL,   // Paleta
      NULL   // Rectángulo del area a grabar
      );
   if(hr!=D3D_OK) {
      EstablecerUltimoError(hr);
      Merlin.Debug(_T("CXVideo::GrabarPantalla"),*UltimoError());
   }
   pBackBuffer->Release();


¿Alguien puede ayudarme?
                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                Hi Drácula.

Ese código es correcto. Por si acaso lo he probado, pero efectivamente funciona.

No se que puede fallar. :triste:

Saludos.                                
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: Astat en 01 de Enero de 1970, 01:00:00 AM
                                Y ese color no sera el color con el que borras?

Prueba a pedir el FrontBuffer en vez del BackBuffer. Pasa de las D3DX y usa :

LPDIRECT3DSURFACE8 lpSurface = NULL;
m_pD3DDevice->CreateImageSurface(dwWidth, dwHeight, D3DFMT_A8R8G8B8, &lpSurface);
m_pD3DDevice->GetFrontBuffer(lpSurface);

y luego lo metes todo en una estructura BITMAPFILEHEADER y BITMAPINFOHEADER. Tambien tendras que pasar del formato de la surface a un DIB y listo! :ojo:


                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: mallrat en 01 de Enero de 1970, 01:00:00 AM
                                Drácula el problemilla es que no puedes leer directamente el backbuffer, tienes que crear una superficie en memoria de sistema con el mismo tamaño y formato y hacer un CopyRects(). El de memoria de sistema si le puedes hacer Lock() o grabar en disco o lo que quieras.

saludos
                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Gracias, ya lo he probado y me funciona. Tenía que coger el forntbuffer y crear una área, como me habeis dicho.
                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                Y se puede saber por qué a mi me funciona?                                
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: Astat en 01 de Enero de 1970, 01:00:00 AM
                                Pues seguramente, Nelo, porque NO borras el backbuffer en cada frame... digo yo, vamos...


                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                SI lo borro.                                
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: BeRSeRKeR en 01 de Enero de 1970, 01:00:00 AM
                                Por si sirve de algo, échale un vistazo a la page de Robert Dunlop

Un saludo
                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: mallrat en 01 de Enero de 1970, 01:00:00 AM
                                Buenas, capturando el FrontBuffer no habia el problema de que te pillaba tambien el escritorio del windows cuando estas en modo ventana? no estoy seguro pero creo que era por eso por lo que lo hice capturando el BackBuffer, Drácula tu lo habrás probado en modo ventana... funciona bien? porque si funciona bien paso del BackBuffer ya mismo.
                               
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: NeLo en 01 de Enero de 1970, 01:00:00 AM
                                Hi mallrat

Probé a coger el FrontBuffer, y en modo ventana me cogía toda la pantalla.

Yo seguiré con BackBuffer si no encuentro algo mejor. :-?

Saludos.                                
Título: Problemas con D3DXSaveSurfaceToFile
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Sí que se graba toda la pantalla al usar el FrontBuffer en modo ventana. Pero yo lo recorto, pasando a la función de grabar sólo el rectángulo de la ventana. Si quieres, puedo darte el código...