Jump to content
Korean Random
reven86

Вывод графики через оверлей Direct3D 11

Recommended Posts

Расскажу как можно выводить графику в игре, работая напрямую с Direct3D 11.

 

spacer.png

 

Как это работает - мы подменяем несколько стандартных методов 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

  • Upvote 8

Share this post


Link to post

Short link
Share on other sites
06.09.2019 в 12:23, reven86 сказал:

нашу дополнительную геометрию

давно хотел универсализацию работы с моделями, дабы подгружать простецкие примитивы в любую игру WG из кастомного формата. Но что там со светом? Можно ли освещать дополнительную геометрию от источников освещения игры?

Share this post


Link to post

Short link
Share on other sites
07.09.2019 в 01:54, Mixaill сказал:

By the way, в XFW.Native есть централизованная подписка на IDXGISwapChain::Present() без проксирования DXGI

 

Круто. Получается я велосипед сделал)

 

17 часов назад, Pavel3333 сказал:

давно хотел универсализацию работы с моделями, дабы подгружать простецкие примитивы в любую игру WG из кастомного формата. Но что там со светом? Можно ли освещать дополнительную геометрию от источников освещения игры?

 

Это возможно только если рисовать геометрию в нужный момент внутри rendering pipeline, а не в конце кадра, как у меня в примере. Приэтом нужно знать в каких константных буфферах передается информация об освещении (а в идеале использовать шейдеры самой игры) и какие данные должен выводить шейдер.

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...