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