c – 在DirectX11游戏上叠加
我正在开展一个项目,以显示任何DirectX11游戏的叠加层.现在,在一些DX11游戏中可以显示但是在其他一些游戏中却无法显示.
我使用MS Detour连接了DX11 API IDXGISwapChain :: Present().在函数Present()中,我设置每个管道,调用DrawIndex和ResourceCopy将我的覆盖纹理更新到GPU的内存,然后调用原始Present将后缓冲区带到前缓冲区.它在Unigene和DIRT2等游戏中运行良好,但它不适用于LostPlanet2和DragonAge2等其他游戏. 通过挂钩所有DX11功能进行一些日志记录,我发现了一些有趣的事情 – 那些不工作的游戏在调用Present之前调用ResourceCopy和ResourceCopyRegion. 就像我之前说的那样,我也在我的Present()中调用了ResourceCopy.这是它不起作用的原因吗?我该怎么办呢? 谢谢, 解决方法
我也在开发类似的D3D11代理钩子.但是,我从入口点D3D11CreateDevice和D3D11CreateDeviceAndSwapChain开始.然后使用替换类作为我自己的钩子.我发现有些案例Detours实际上无法正确地绕行:
绕过EntryPoint()的错误:6 我通过实际修改Detours 3.0源代码来正确地蹦蹦跳跳这个功能. 我正在使用64位Windows 7,但编译为x86 Detours 3.0.我可以尝试使用这些二进制文件.除了程序员使用的渲染样式之外,很难解释ResourceCopy可以影响调用路径的位置.如果您愿意,可以将项目代码发送给我,我也许可以提供帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |