Pregunta

Al escribir aplicaciones DirectX, obviamente, es deseable soportar el usuario suspende la aplicación a través de Alt - Tab de una manera que es rápido y sin errores . ¿Cuál es el mejor conjunto de prácticas para asegurar esto? Cosas que necesitan ser abordados incluyen:

  1. Los mejores métodos para detectar cuando su aplicación se ha pestañas alt-fuera y cuando se ha vuelto a.
  2. ¿Qué recursos de DirectX se pierden cuando el usuario alt-pestañas, y las mejores maneras de hacer frente a esto.
  3. Las principales cosas que hacer y cosas que deben evitarse en la arquitectura de la aplicación con fines de apoyo alt-tab.
  4. Las diferencias significativas entre las principales versiones de DirectX que se aplican a los anteriores.

trucos interesantes y trampas también son buenos para escuchar.

¿Fue útil?

Solución

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 una plataforma de juego excelente que se encarga de todas estas cuestiones para usted.

1]

Este artículo es útil para los eventos de Windows en el procedimiento de ventana para detectar cuando una ventana pierde o gana foco, se podía manejar esto en su ventana principal: http://www.functionx.com/win32/Lesson05.htm . Además, la salida del mensaje WM_ACTIVATEAPP aquí: http: // MSDN .microsoft.com / es-es / library / ms632614 (VS.85) .aspx

2]

3]

Me aseguraría de que nunca se deshabilitar Alt-Tab. Es posible que desee una mínima carga de la CPU, mientras que la aplicación no está activa porque el usuario probablemente Alt-con pestañas porque quieren hacer algo más, por lo que podría hacer una pausa por completo la aplicación, o reducir los marcos prestados por segundo. Si se minimzed la aplicación, por supuesto, no es necesario hacer nada. Después de pensar en un juego de red, mi mejor solución es que todavía se debe reducir los marcos prestados por segundo, así como la cantidad de paquetes de red se maneja, posiblemente incluso tirar muchos de los paquetes que vienen en hasta que el juego se desactiva de nuevo.

4]

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

Por último, DirectX SDK tiene numerosos tutoriales y muestras: http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

Otros consejos

Hemos resuelto que al no utilizar un dispositivo de pantalla completa de DirectX en absoluto - en su lugar se utilizó una ventana de pantalla completa con la parte superior más a la bandera para que sea ocultar la barra de tareas. Si Alt-Tab de eso, se puede quitar la bandera y minimizar la ventana. Los recursos textura se mantienen vivas por la ventana.

Sin embargo, este enfoque no maneja el caso perdido dispositivo sucediendo debido a la 'pantalla de bloqueo', + Alt + Supr, conexiones de escritorio remoto, cambio de usuario Ctrl o similar. Pero esos no necesitan ser manejados extremadamente rápido o mayor eficiencia (al menos ese era el caso en nuestra aplicación)

Todas las aplicaciones D3D graves deben ser capaces de manejar los dispositivos perdidos ya que esto es algo que puede ocurrir por una variedad de razones.

En DX10 en Vista hay una nueva función de "Detección de tiempo de espera y recuperación" que hace que sea común en mi experiencia para dispositivos gráficos que se restablezca lo que causaría un dispositivo perdido para su aplicación. Esto parece estar mejorando a medida que los conductores maduros pero hay que manejarlo de todos modos.

En DX8 y 9 (10?) Si crea sus recursos (vértice y el índice de tampones y texturas principalmente) usando D3DPOOL_MANAGED persistirán a través de los dispositivos perdidos y no necesitarán volver a cargar. Esto se debe a que se almacenan en la memoria del sistema y las copias DX tiempo de ejecución en memoria de vídeo de forma automática. Sin embargo hay un costo de rendimiento debido a la copia y esto no es recomendable para cambiar rápidamente los datos de vértices. Por supuesto que sí Perfil para determinar si hay un problema de velocidad: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top