我正在做一个项目,以显示任何DirectX11游戏的覆盖。现在可以在一些DX11游戏中显示,但在其他一些游戏中不能显示。
我使用MS绕道挂接了DX11 API IDXGISwapChain::Present()。在函数Present()中,我设置了每个管道,调用DrawIndex和ResourceCopy将覆盖纹理更新到图形处理器的内存中,然后调用原始的Present将后台缓冲区带到前台缓冲区。它在Unigene和DIRT2等游戏中运行良好,但在LostPlanet2和DragonAge2等其他游戏中则不起作用。
通过连接所有DX11函数来做一些日志记录,我发现了一个有趣的事情--那些不能正常工作的游戏在调用Present之前会调用ResourceCopy和ResourceCopyRegion。
正如我前面所说的,我还在我的Present()中调用了ResourceCopy。这是它不起作用的原因吗?我该如何解决这个问题呢?
谢谢,马歇尔
发布于 2011-12-23 15:03:22
我也在开发一个类似的D3D11代理钩子。但是,我将从入口点D3D11CreateDevice和D3D11CreateDeviceAndSwapChain开始。然后使用替换类作为我自己的钩子。我发现在某些情况下,绕道实际上不能正确地执行绕道:错误绕行EntryPoint():6我通过实际修改Detours3.0源代码来正确地跳跃函数来解决这个问题。
我使用的是64位Windows7,但它是为x86 Detours3.0编译的。我可以尝试这些二进制文件来工作。除了程序员使用的呈现风格之外,很难解释ResourceCopy会在哪里影响调用路径。如果你愿意,你可以把你的项目代码发给我,我也许能帮上忙。
https://stackoverflow.com/questions/5674371
复制相似问题