36 votos

Las mejores prácticas para Alt-Tab de apoyo en una DirectX app?

Cuando la escritura de aplicaciones DirectX, obviamente, es deseable soporte al usuario la suspensión de la aplicación a través de Alt-Tab de una manera rápida y libre de errores. ¿Cuál es el mejor conjunto de prácticas para garantizar esto? Cosas que necesitan ser abordados incluyen:

  1. Los mejores métodos de detección cuando la aplicación ha sido alt-fichas de y cuando no ha sido devuelta.
  2. Lo de DirectX recursos se pierden cuando el usuario alt-tab, y la mejor manera de lidiar con esto.
  3. Las principales cosas que hacer y cosas a evitar en la arquitectura de la aplicación para fines de alt-tab de apoyo.
  4. Diferencias significativas entre las principales versiones de DirectX como se aplican a la anterior.

Muy interesante, trucos y trampas también son buenos para escuchar.

41voto

PsychoDad Puntos 7582

Voy a suponer que usted está usando C++ para los propósitos de mis respuestas, pero si usted puede permitirse el lujo de utilizar C#, XNA (http://creators.xna.com/) es un excelente juego de plataforma que se encarga de todos estos problemas para usted.

1]

Este artículo es útil para los eventos de windows en el procedimiento de ventana para detectar cuando una ventana gana o pierde el foco, no se podría manejar esto por su ventana principal: http://www.functionx.com/win32/Lesson05.htm. Además, echa un vistazo a la WM_ACTIVATEAPP mensaje aquí: http://msdn.microsoft.com/en-us/library/ms632614(VS.85).aspx

2]

3]

Me gustaría asegurarse de que nunca deshabilitar Alt-Tab. Usted probablemente querrá un mínimo de carga de la CPU, mientras que la aplicación no está activa porque el usuario probablemente Alt-Pestañas porque quieren hacer algo más, por lo que podría completamente pausa la aplicación, o reducir los marcos prestados por segundo. Si la aplicación es minimzed, que por supuesto no necesidad de hacer nada. Después de pensar en un juego de red, mi mejor solución es que usted debe reducir los marcos prestados por segundo, así como la cantidad de paquetes de red que maneja, posiblemente incluso tirar muchos de los paquetes que entran hasta que el juego se activa de nuevo.

4]

Sinceramente me gustaría que sólo se adhieren a DirectX 9.0 c (o DirectX 10 si desea limitar su sistema operativo de destino a la Vista y más reciente), si es posible :)

Finalmente, el DirectX sdk cuenta con numerosos tutoriales y muestras: http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

2voto

chris166 Puntos 3333

Hemos resuelto que, por no utilizar una pantalla completa DirectX dispositivo todo - en su lugar se utilizó una ventana de pantalla completa con la parte superior de la bandera para hacer que se oculte la barra de tareas. Si usted Alt-Tab fuera de eso, usted puede quitar la bandera y minimizar la ventana. La textura de los recursos se mantiene viva por la ventana.

Sin embargo, este enfoque no controlar el dispositivo perdido evento debido a la "pantalla de bloqueo', Ctrl+Alt+Supr, las conexiones de escritorio remoto, cambio de usuario o similares. Pero los que no se deben manejar muy rápido o eficiente (al menos ese fue el caso de nuestra aplicación)

2voto

Captain Lepton Puntos 86

Todos los graves D3D de las aplicaciones deben ser capaces de manejar los dispositivos perdidos como esto es algo que puede suceder por una variedad de razones.

En DX10 en Vista que hay un nuevo "tiempo de espera de Detección y Recuperación", característica que hace que sea común en mi experiencia para dispositivos gráficos para restablecer lo que provocaría un dispositivo perdido para su aplicación. Esto parece estar mejorando a medida que los conductores maduros pero que usted necesita para manejar todos modos.

1voto

Martin Rennix Puntos 1089

En DX8 y 9 (10?) si usted cree sus recursos (vértice y el índice de búferes y texturas principalmente) mediante D3DPOOL_MANAGED puedan persistir a través de los dispositivos perdidos y no habrá necesidad de recarga. Esto es debido a que se almacenan en la memoria del sistema y el DX de tiempo de ejecución de las copias a la memoria de vídeo de forma automática. Sin embargo, hay un costo de rendimiento debido a la copia y no es recomendable para el rápido cambio de los datos de los vértices. Por supuesto, usted podría perfil para determinar si hay un problema de velocidad :-)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X