首页 > 解决方案 > 有没有一种编程方式来查看游戏使用的图形 API?

问题描述

对于像 DOTA 2 这样可以使用 DX9、DX11、Vulkan 等不同图形 API 运行的游戏,我还没有找到一个可行的解决方案来检查它当前使用的是哪个 API。我想这样做以正确注入一个 dll 以便在游戏中显示图像。

我已经研究过手动检查游戏加载了哪些 dll,

此工具例如:https ://docs.microsoft.com/en-us/sysinternals/downloads/listdlls

但是,在 DOTA 的情况下,如果在 steam 的启动选项中未指定任何内容,它会同时加载 d3d9.dll 和 d3d11.dll 库。任何人对如何确定使用的正确图形 API 有任何其他想法吗?

标签: directxdirectx-11vulkansteamdirectx-9

解决方案


在 Vulkan 中,一种干净的方法是实现一个 Vulkan 层来进行覆盖。它比直接注入 dll 稍微干净一些。它可以在多个平台上运行。

在 DirectX 中,屏幕截图软件通常会执行此操作。一些软件添加了 FPS 计数器和这样的叠加层。似乎有类似目标的开源,例如:https ://github.com/GPUOpen-Tools/OCAT 。我相信传统上的方法是拦截(即在win32 api术语中的“挂钩”)所有适当的API调用。

至于简单的检测,如果它调用,D3D12CreateDevice那么它可能是 Direct3D 12。但同样,该应用程序也可以为所有 API 创建设备并继续不使用它们。但是我认为如果你只想做一个覆盖,API检测对你来说并不是特别重要;只要您拦截所有当前的呼叫并在其上绘制您的东西。


推荐阅读