在DirectX11游戏上叠加

时间:2011-04-15 08:49:37

标签: c++ directx hook

我正在开展一个项目,以显示任何DirectX11游戏的叠加层。现在,在一些DX11游戏中可以显示但是在其他一些游戏中却无法显示。

我使用MS Detour连接了DX11 API IDXGISwapChain :: Present()。在函数Present()中,我设置每个管道,调用DrawIndex和ResourceCopy将我的覆盖纹理更新到GPU的内存,然后调用原始Present将后缓冲区带到前缓冲区。它在Unigene和DIRT2等游戏中运行良好,但它不适用于LostPlanet2和DragonAge2等其他游戏。

通过挂钩所有DX11函数进行一些日志记录,我发现了一些有趣的事情 - 那些不工作的游戏在调用Present之前调用ResourceCopy和ResourceCopyRegion。

就像我之前说的那样,我也在我的Present()中调用了ResourceCopy。这是它不起作用的原因吗?我该如何解决它?

谢谢, 马歇尔

1 个答案:

答案 0 :(得分:1)

我也正在开发类似的D3D11代理钩子。但是,我从入口点D3D11CreateDevice和D3D11CreateDeviceAndSwapChain开始。然后使用替换类作为我自己的钩子。我发现有些案例Detours实际上无法正确地绕行: 绕过EntryPoint()的错误:6 我通过实际修改Detours 3.0源代码来正确地蹦蹦跳来解决这个问题。

我正在使用64位Windows 7但是为x86 Detours 3.0编译。我可以尝试使用这些二进制文件。除了程序员使用的渲染样式之外,很难解释ResourceCopy可以影响调用路径的位置。如果您愿意,可以将项目代码发送给我,我也许可以提供帮助。