我有一个 WPF 应用程序,用于在实时流中覆盖 HUD。最初的想法是为 xsplit(一种用于呈现实时流的流行应用程序)创建一个插件来显示 WPF 应用程序的内容。这种方法的问题是,将位图渲染到 xsplit 的 COM 接口对释放应用程序的 CPU 性能有很大的损害(因为我相信 xsplit 的 COM 接口以及使用 RenderTargetBitmap 会对 CPU 造成负担)。
我一直在研究将叠加层直接渲染到游戏中(目标 DirectX 应用程序),因为它提供了许多好处。主要是它规避了 xsplit 中的性能问题,而且还向各种流和捕获应用程序开放了应用程序。
我对 DirectX 不是很有经验,但我认为这是解决方案的大纲
初始化 WPF 应用程序并捕获 WPF 的 Direct3d 设备(通过此方法)
查找并挂钩目标 DirectX 应用程序的 EndScene 调用(使用 EasyHook+Slimdx)
将 WPF 设备表面的内容渲染到挂钩的 DirectX 应用程序之上
我的主要问题是如何使用 SlimDX 完成第 3 步。我希望解决方案能够以某种方式重用表面而不依赖于复制,因为目标是不影响挂钩应用程序的性能。我还希望能够限制该地区并支持透明度。我还想知道在挂钩的 DirectX 应用程序的设备中使用 WPF 的 Direct3d 设备是否会导致任何不稳定。
任何见解将不胜感激,谢谢。