Наложение на игру DirectX11 - PullRequest
       35

Наложение на игру DirectX11

4 голосов
/ 15 апреля 2011

Я работаю над проектом, чтобы показать наложение на любые игры DirectX11. Теперь в некоторых играх DX11 в целом можно показать, а в некоторых - нет.

Я подключил DX11 API IDXGISwapChain :: Present () с помощью MS Detour. В функции Present () я настраиваю каждый конвейер, вызываю DrawIndex и ResourceCopy, обновляю мою текстуру наложения в память GPU, затем вызываю оригинальный Present, чтобы перенести задний буфер в передний буфер. Он отлично работает в некоторых играх, таких как Unigene и DIRT2, но не работает в некоторых других, таких как LostPlanet2 и DragonAge2.

Выполняя некоторые логи с перехватом всех функций DX11, я обнаружил интересную вещь - те, которые не работают, перед вызовом Present вызывают ResourceCopy и ResourceCopyRegion.

Как я уже говорил ранее, я также вызывал ResourceCopy в моем Present (). Это причина, почему это не работает? Как я могу обойти это?

Спасибо, Marshall

1 Ответ

1 голос
/ 23 декабря 2011

Я также разрабатываю похожий прокси-хук D3D11. Однако я начинаю с точек входа D3D11CreateDevice и D3D11CreateDeviceAndSwapChain. Тогда используйте замещающие классы как крючки для моих собственных. Я обнаружил, что в некоторых случаях Detours не может правильно выполнить обход: Ошибка обхода EntryPoint (): 6 Я обошел это, фактически изменив исходный код Detours 3.0, чтобы правильно батутить функцию.

Я работаю с 64-битной Windows 7, но скомпилирован для x86 Detours 3.0. Я могу попробовать эти двоичные файлы для работы. Довольно сложно объяснить, где ResourceCopy может влиять на путь вызова, кроме стиля рендеринга, используемого программистом. Если хотите, можете выслать мне свой код проекта, и я смогу помочь.

...