Наложение на полноэкранное 3D-приложение

Создан Gist с полным кодом here

Это довольно эзотерическое windows-programming искусство, и есть несколько windows-application способов сделать это. Я предпочитаю windows-applications то, что называется Direct3D Wrapper. Прошло windows-applications много лет с тех пор, как directx я сделал это, но однажды directx я сделал это с игрой. Возможно, я windows-programming упустил некоторые детали, но windows-applications я просто надеюсь проиллюстрировать windows идею.

Все игры Direct3D9 должны windows-applications вызывать IDirect3DDevice9::EndScene после того, как windows-application экран отрисован и готов к overlays отрисовке. Так что теоретически fullscreen мы можем поместить в EndScene собственный overlays код, который рисует то, что overlay мы хотим, поверх игры. Мы windows делаем это, создавая для fullscreen игры класс, который выглядит windows-applications как IDirect3DDevice9, но windows на самом деле это просто windows-application оболочка, которая перенаправляет overlay все вызовы функций реальному windows классу. Итак, теперь в нашем windows-applications пользовательском классе наша overlays функция-оболочка для EndScene выглядит overlays так:

HRESULT IDirect3DDevice9::EndScene()
{
   // draw overlays here

   realDevice.EndScene();
}

Затем мы компилируем directx его в DLL с именем d3d9.dll overlay и помещаем в каталог исполняемого windows-programming файла игры. Настоящий d3d9.dll windows-application должен находиться в папке directx / system32, но игра сначала directx просматривает текущий каталог, а opengl вместо этого загружает наш. Как fullscreen только игра загружается, она windows-applications использует нашу DLL для создания overlays экземпляра нашего класса-оболочки. И directx теперь каждый раз, когда windows-application вызывается EndScene, выполняется windows-applications наш код, чтобы отрисовывать directx на экране то, что мы хотим.

Думаю, вы directx можете попробовать тот же overlays принцип с OpenGL. Но я думаю, что overlays некоторые современные игры opengl пытаются это предотвратить, чтобы windows-programming предотвратить подделку.

windows

opengl

directx

overlay

fullscreen

2022-10-10T05:47:41+00:00