如何在Windows游戏上叠加图形?

rup*_*rup 10 windows directx graphics overlay

我希望我的程序能够启动任何Windows游戏,当用户正在播放时,间歇性地在游戏窗口的某些部分显示一些文本或图片.游戏可以是窗口模式或全屏模式.从我从在线资源中可以看出,这可以使用支持叠加的图形库并使用Windows Hook来跟踪目标应用程序的窗口来完成.在这方面,我有一些问题.

  1. 叠加会影响游戏的性能吗?
  2. 如何挂钩应用程序会影响性能?
  3. 有没有其他方法可以实现这一目标?例如,您认为DirectX调试和分析工具PIX如何工作?

Ala*_*lan 14

Fraps是从第三方应用程序对全屏DirectX应用程序执行此类操作的典型示例.它通过挂钩一些系统调用并将自身插入应用程序和DirectX之间的调用链来工作.有一些性能损失,但总的来说它是最小的.

这个页面似乎有一些关于如何以这种方式挂钩应用程序的细节和示例代码.

如果我没记错的话,从其他论坛讨论中找不到(目前找不到链接.搜索"fraps如何工作"之类的东西,这是一个流行的问题),Fraps挂钩了一些东西来强制app加载其DLL ,然后挂钩Present()调用并在调用真实的Present()之前执行device-> Clear()调用,并使用一个小矩形列表设置为不同的颜色,这可以拼出它显示的FPS数字.这对性能影响最小,并且与应用程序正在执行的任何呈现广泛兼容.覆盖位图会更复杂,因为在现在这样做并不容易.也许如果您可以挂钩EndScene,那么您可以做更多,但您必须小心不要更改设备状态.

PIX具有对DirectX驱动程序的特权访问权限,因此我不希望能够将其用作模拟模型.

如果目标应用程序在窗口模式下运行,挂钩DirectX仍然有效,但您也可以使用GDI.

编辑: 我认为是我最初想到的链接.