2010-07-16 22 views
10

Quiero que mi programa pueda ejecutar cualquier juego de Windows, y mientras el usuario lo está jugando, muestra intermitentemente texto o imágenes en alguna parte de la ventana del juego. El juego puede estar en modo ventana o pantalla completa. De lo que he podido deducir de los recursos en línea, esto podría hacerse usando una biblioteca de gráficos que admita superposiciones y use Windows Hooks para realizar un seguimiento de la ventana de la aplicación de destino. En este contexto, tengo algunas preguntas.¿Cómo superponer gráficos en juegos de Windows?

  1. ¿Las superposiciones afectarán el rendimiento del juego?
  2. ¿Cómo afectará la aplicación el enganche al rendimiento?
  3. ¿Hay alguna otra manera en que uno pueda lograr esto? Por ejemplo, ¿cómo cree que funciona PIX, la herramienta de depuración y análisis de DirectX?

Respuesta

12

Fraps es el ejemplo arquetípico de hacer este tipo de cosas a una aplicación de DirectX de pantalla completa desde una aplicación de terceros. Funciona conectando algunas llamadas al sistema e insertándose en la cadena de llamadas entre una aplicación y DirectX. Hay algún golpe de rendimiento, pero en general es mínimo.

This page parece tener algunos detalles y código de ejemplo sobre cómo enganchar la aplicación de esta manera.

Si recuerdo correctamente, de otras discusiones en el foro (no encuentro el enlace en este momento. Busque cosas como "cómo funciona fraps", es una pregunta popular), Fraps engancha algunas cosas para forzar la aplicación cargar su DLL, luego engancha las llamadas Presente() y ejecuta una llamada dispositivo-> Borrar() antes de llamar al Presente real(), con una lista de pequeños rectángulos para establecer un color diferente, que puede deletrear el número FPS que muestra. Esto tiene un impacto mínimo en el rendimiento y es ampliamente compatible con cualquier renderizado que la aplicación esté haciendo. La superposición de un mapa de bits sería más complicado, ya que no sería tan fácil hacerlo en el momento presente. Quizás si pudieras enlazar EndScene, podrías hacer más, pero tendrías que tener cuidado de no cambiar el estado del dispositivo.

PIX tiene acceso privilegiado al controlador DirectX, por lo que no esperaría poder usarlo como modelo para emular.

Si la aplicación de destino se ejecuta en modo de ventana, el enganche de DirectX aún funciona, pero también podría usar GDI.

Edit: Creo que this es el enlace en el que estaba originalmente pensando.

Cuestiones relacionadas