Как наложить графику на игры для Windows?

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

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

person Community    schedule 16.07.2010    source источник


Ответы (1)


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

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

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

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

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

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

person Community    schedule 16.07.2010