Как наложить графику на игры для Windows? - PullRequest
10 голосов
/ 16 июля 2010

Я хочу, чтобы моя программа могла запускать любую игру для Windows, и пока пользователь играет в нее, периодически отображать текст или изображения в некоторой части окна игры.Игра может быть в оконном или полноэкранном режиме.Из того, что я смог выяснить по онлайн-ресурсам, это можно сделать с помощью графической библиотеки, которая поддерживает наложения, и с помощью хуков Windows для отслеживания окна целевого приложения.В этом контексте у меня есть несколько вопросов.

  1. Повлияет ли наложение на производительность игры?
  2. Как влияет приложение на производительность?
  3. Есть ли другой способ добиться этого?Например, как, по вашему мнению, PIX , инструмент отладки и анализа DirectX, работает?

1 Ответ

13 голосов
/ 16 июля 2010

Fraps - это архетипический пример такого рода действий с полноэкранным приложением DirectX из стороннего приложения. Он работает, перехватывая некоторые системные вызовы и вставляя себя в цепочку вызовов между приложением и DirectX. Есть некоторый удар по производительности, но в целом он минимальный.

Эта страница , кажется, содержит некоторые детали и пример кода о том, как подключить приложение таким образом.

Если я правильно помню, из других обсуждений на форуме (в данный момент не могу найти ссылку. Ищите такие вещи, как "как работает fraps", это популярный вопрос), Fraps перехватывает несколько вещей, чтобы заставить приложение загрузить свою DLL, затем перехватывает вызовы Present () и выполняет вызов device-> Clear () перед вызовом реального Present (), со списком маленьких прямоугольников, которые нужно установить для другого цвета, который может записать число FPS дисплеи. Это оказывает минимальное влияние на производительность и широко совместимо с любым рендерингом приложения. Наложение растрового изображения было бы более сложным, так как это было бы не так просто сделать в настоящее время. Возможно, если бы вы могли подключить EndScene, то вы могли бы сделать больше, но вы должны быть осторожны, чтобы не изменить состояние устройства.

PIX имеет привилегированный доступ к драйверу DirectX, поэтому я не ожидал, что смогу использовать его в качестве модели для эмуляции.

Если целевое приложение работает в оконном режиме, перехват DirectX по-прежнему работает, но вместо этого вы можете просто использовать GDI.

Редактировать: Я думаю это - это ссылка, о которой я изначально думал.

...