Есть ли программный c способ узнать, какой графический API используется в игре? - PullRequest
1 голос
/ 12 марта 2020

Для игр, таких как DOTA 2, которые могут работать с различными графическими API, такими как DX9, DX11, Vulkan, я не смог придумать жизнеспособного решения для проверки того, какой из API используется в настоящее время. Я хочу сделать это, чтобы правильно внедрить dll для отображения изображений в игре.

Я смотрел вручную, проверяя, какие dll загружены играми,

этот инструмент, например: https://docs.microsoft.com/en-us/sysinternals/downloads/listdlls

однако, в случае DOTA, он загружается как в библиотеки d3d9.dll, так и в библиотеки d3d11.dll, если ни одна из них не указана в параметрах запуска на steam. У кого-нибудь есть другие идеи относительно того, как определить правильный используемый графический API?

1 Ответ

0 голосов
/ 13 марта 2020

В Vulkan чистым способом было бы реализовать слой Vulkan, делающий наложение. Это немного чище, чем прямая инъекция DLL. И он может работать на нескольких платформах.

В DirectX программное обеспечение screencap обычно делает это. Некоторое программное обеспечение добавляет счетчик FPS и такие оверлеи. Кажется, есть открытый исходный код с похожими целями, например здесь: https://github.com/GPUOpen-Tools/OCAT. Я считаю, что условно метод состоит в том, чтобы перехватить (т.е. «перехватить» в терминологии API Win32) все соответствующие вызовы API.

Что касается простого обнаружения, то, если он вызывает D3D12CreateDevice, то, скорее всего, это Direct3D 12. Но тогда Опять же, приложение может создавать устройства для всех API-интерфейсов и не использовать их. Но я думаю, что обнаружение API не особенно важно для вас, если вы хотите только наложить оверлей; до тех пор, пока вы просто перехватываете все текущие вызовы и рисуете свои вещи поверх него.

...