¿Qué puede hacer que ALT-TAB sea 'molesto' / lento / con fallas?

25

Esta es más una pregunta abierta, pero espero obtener una buena idea de cómo evitar el problema.

Al jugar juegos en Windows, es posible que desee ALT-TAB fuera de él. Algunos juegos no tienen problemas, otros no son tan fáciles: pueden tomar EDADES para cambiar y volver a entrar. Algunos incluso son propensos a fallar o a comportamientos extraños como distorsión gráfica o tartamudeo.

Me pregunto qué causa este comportamiento. ¿Es esto más una cosa de DirectX o de OpenGL? ¿Se debe a que los Juegos son "inteligentes" y almacenan en caché / borran el caché cada vez que cambia la configuración de la pantalla? (¿Asumo que reciben algún tipo de señal cuando ALT-TAB?)

No tengo ningún problema, pero me gustaría saber qué evitar y qué truco 'inteligente' puede causar este tipo de experiencia horrible para el cliente.

Michael Stum
fuente
1
Gran pregunta! ¡Esperamos obtener algunas respuestas perspicaces, como siempre!

Respuestas:

17

En algunas situaciones, ALT-TAB hará que se pierda el dispositivo DirectX. Cuando el dispositivo se pierde, todos los recursos de la GPU (vértices, texturas, sombreadores, etc.) deben considerarse no válidos y no se pueden volver a usar. Referencia de MSDN aquí .

Estos recursos perdidos deben liberarse y luego recrearse cuando se restaura el dispositivo. En el caso de la mayoría de los juegos, la restauración de estos recursos requiere que se carguen muchos datos desde el disco nuevamente, a menudo el mismo procedimiento de carga que al inicio del juego / nivel.

¿Qué se puede hacer para evitar esto?

  • Puede mantener una memoria caché de sus datos en la memoria RAM para que transferirlos de nuevo a la GPU sea más rápido que volver a cargarlos desde HD. Creo que hay una manera de hacer que DirectX haga esto automáticamente.
  • Use una nueva versión de DirectX. Esta cita ( fuente ) es de MSDN en DirectX 9Ex:

Los dispositivos ahora solo se pierden en dos circunstancias; cuando se reinicia el hardware porque está colgando, y cuando se detiene el controlador del dispositivo. Cuando el hardware se bloquea, el dispositivo se puede restablecer llamando a ResetEx. Si el hardware se bloquea, se pierde memoria de textura.

CiscoIPPhone
fuente
¿Podría proporcionar un enlace para esa cita? Encontramos que el dispositivo se pierde cuando bloquea el escritorio, también.
Kylotan
He agregado el enlace para la cotización.
CiscoIPPhone
1
El cambio en el comportamiento de DirectX es un efecto secundario del cambio en el modelo del controlador. Es decir, requiere WDDM. Entonces, solo es Vista / Win7.
Bahbar
7

En Direct3D, un dispositivo puede perderse cuando ALT-TAB sale de la ventana de pantalla completa. Si eso sucede, debe liberar y restaurar los recursos y reiniciar el dispositivo. Esto puede ser difícil de hacer correctamente dependiendo de la complejidad del juego o la pereza de los desarrolladores (¡Hola Valve!). No creo que OpenGL sufra el mismo problema porque el controlador es responsable de mantener el contexto de OpenGL para usted, pero no estoy seguro.

Hay una pregunta en StackOverflow sobre las mejores prácticas para el apoyo ALT-TAB en una aplicación de DirectX que incluye enlaces útiles a partir de MSDN y otras fuentes.

Firas Assaad
fuente
3
Tienes razón, la razón por la que OpenGL no sufre (tanto) de esto es porque el controlador guarda una copia de todo en Windows. Esto puede hacer que las aplicaciones GL utilicen más RAM que las aplicaciones DX, pero una aplicación DX con buen comportamiento debería almacenar en caché todo en caso de que necesite restaurar sus datos de contexto de todos modos, por lo que es responsabilidad de quién es la responsabilidad del almacenamiento en caché.
Branan
Eso es cierto (sobre OpenGL).
hacia el
0

Puede ser la cantidad disponible de ram gratis. Si es demasiado bajo, cuando su juego se ejecuta, Windows oculta la mayoría de sus servicios en el área de intercambio (es decir, toma la mayoría de los datos cargados en la RAM y los coloca en un área especial de su disco duro) para su juego. tener el máximo espacio de RAM disponible como sea posible.

Luego, cuando alt + tab del juego a Windows, necesita que estos servicios se carguen en la RAM para que funcione, por lo que tomará los datos del juego de la RAM, los almacenará en el intercambio y extraerá los datos de Windows de El intercambio a la RAM.

Y como sabes, escribir en el disco duro puede tomar EDADES en comparación con la RAM. Lo mismo sucede en realidad cuando sales de un juego pesado. Es por eso que tener suficiente espacio RAM tanto para un juego como para Windows puede ser realmente más cómodo.

Aurelien Ribon
fuente