SoloCodigo

Programación Específica => Programación de Videojuegos => DirectX => Mensaje iniciado por: Neko-sama en Lunes 8 de Agosto de 2005, 04:33

Título: Alt+tab
Publicado por: Neko-sama en Lunes 8 de Agosto de 2005, 04:33
Holas!

He estado mucho tiempo tratando de resolver el problema de no perder el dispositivo cuando estoy usando el juego en fullscreen y presiono ALT+TAB para minimizar la aplicación y despues vuelvo al juego pero igual se pierde...

lo uso de la siguiente manera... (resumen del codigo)

hr = g_pd3dDevice->TestCooperativeLevel();

if(hr == D3DERR_DEVICENOTRESET) {  

  hr = g_pd3dDevice->Reset(&d3dpp)

}

bueno... no hace el reset y siempre me entrega el mismo error: D3DERR_INVALIDCALL

donde está el problema??
tengo que hacer mas cosas antes??

agradecería mucho la ayuda  :D
Título: Re: Alt+tab
Publicado por: Amilius en Lunes 8 de Agosto de 2005, 07:02
Hmmmmm.... ¿Ya restauraste superficies?

Si pasas de "fullscreen" a modo cooperativo inevitablemente pierdes superficies alojadas en memoria de video, asi que tienes que restaurarlas.

Puedes restaurarlas o volver a construir las superficies que perdiste pero de lo que no te salvas es de copiar nuevamente su contenido de memoria de sistema a video (si tenías una copia en memoria de sistema), o cargarlas nuevamente de disco.
Título: Re: Alt+tab
Publicado por: JuanK en Lunes 8 de Agosto de 2005, 14:51
Tal como lo ha dicho amilus,
agregaria que seria cionveniente que en tu constructor tuvieras el llamado a una funcion  que creara las superficies, de tal manera que al ocurrir la excepcion, la atrapas y vuelves a llamar la funcion de creacion.

Una pregunta.. porque as esto?.. no seria mejor que no nse destruyera esa info?
Título: Re: Alt+tab
Publicado por: Neko-sama en Martes 9 de Agosto de 2005, 02:04
yo no hago nada...   como dice Amilius, la tontera se pierde nomas!

solo trato de resolver el problema del ALT+TAB...

como lo hacen ustedes??

yo estoy usando direct 3d  asi que no uso superficies...  y vi que el modo de hacerlo es de la forma que lo mostré... pero no consigo el resultado esperado...

supuestamente en esta linea....  -->    
hr = g_pd3dDevice->Reset(&d3dpp)

le paso el D3DPRESENT_PARAMETERS donde ya fue cargado todo pero igual tiene problemas...  

puede que esté haciendo todo mal...

por eso me gustaría saber como lo hacen ustedes para saber donde tengo que arreglarlo