reven86 35 Posted September 6, 2019 Расскажу как можно выводить графику в игре, работая напрямую с Direct3D 11. Как это работает - мы подменяем несколько стандартных методов D3D11, чтобы получить Device и SwapChain, подменяем метод Present, и рисуем в конце кадра то, что хотим. Метод работает не зависимо от конкретного приложения и подходит для других игр. Более подробно: 1. Создаем прокси dxgi.dll, где переопределяем метод CreateDXGIFactory 2. В CreateDXGIFactory получаем интерфейс IDXGIFactory и меняем виртуальную таблицу, подменяем функцию CreateSwapChain на нашу собственную 3. В CreateSwapChain получаем объект ID3D11Device и также меняем виртуальную таблицу, подменяя функции интерфейса IDXGISwapChain Present и ResizeBuffers на наши собственные. 4. В этот момент, когда у нас есть и IDXGISwapChain и ID3D11Device можно загрузить все необходимые ресурсы (создать модели, загрузить шейдеры). 5. В методе Present рисуем нашу дополнительную геометрию. Пример, поместить файлы dxgi.dll и shaders.shader в папку с игрой. В примере рисуется треугольник поверх игры с инверсией цветов. .overlay_D3D11.zip Исходники (Visual Studio 2017) overlay_src.zip 8 Quote Share this post Link to post Short link Share on other sites
Mixaill 1,737 #466785 Posted September 6, 2019 (edited) By the way, в XFW.Native есть централизованная подписка на IDXGISwapChain::Present() без проксирования DXGI Пример с выводом демки ImGUI: https://gitlab.com/xvm/xfw/xfw-example-d3dhook Edited September 6, 2019 by Mixaill 4 Quote Share this post Link to post Short link Share on other sites
Pavel3333 1,148 #466803 Posted September 7, 2019 06.09.2019 в 12:23, reven86 сказал: нашу дополнительную геометрию давно хотел универсализацию работы с моделями, дабы подгружать простецкие примитивы в любую игру WG из кастомного формата. Но что там со светом? Можно ли освещать дополнительную геометрию от источников освещения игры? Quote Share this post Link to post Short link Share on other sites
reven86 35 #466841 Posted September 8, 2019 07.09.2019 в 01:54, Mixaill сказал: By the way, в XFW.Native есть централизованная подписка на IDXGISwapChain::Present() без проксирования DXGI Круто. Получается я велосипед сделал) 17 часов назад, Pavel3333 сказал: давно хотел универсализацию работы с моделями, дабы подгружать простецкие примитивы в любую игру WG из кастомного формата. Но что там со светом? Можно ли освещать дополнительную геометрию от источников освещения игры? Это возможно только если рисовать геометрию в нужный момент внутри rendering pipeline, а не в конце кадра, как у меня в примере. Приэтом нужно знать в каких константных буфферах передается информация об освещении (а в идеале использовать шейдеры самой игры) и какие данные должен выводить шейдер. Quote Share this post Link to post Short link Share on other sites