加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在DirectX11游戏上叠加

发布时间:2020-12-16 06:56:08 所属栏目:百科 来源:网络整理
导读:我正在开展一个项目,以显示任何DirectX11游戏的叠加层.现在,在一些DX11游戏中可以显示但是在其他一些游戏中却无法显示. 我使用MS Detour连接了DX11 API IDXGISwapChain :: Present().在函数Present()中,我设置每个管道,调用DrawIndex和ResourceCopy将我的覆
我正在开展一个项目,以显示任何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可以影响调用路径的位置.如果您愿意,可以将项目代码发送给我,我也许可以提供帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读