我有一个WPF应用程序,旨在叠加一个HUD到实时流中。最初的想法是创建一个xsplit插件(一个用于呈现实时流的流行应用程序)来显示WPF应用程序的内容。这种方法的问题在于将位图渲染到xsplit的COM接口会严重损害CPU性能,因此无法发布该应用程序(因为我认为xsplit的COM接口存在问题,使用RenderTargetBitmap也会对CPU造成负担)。
我一直在考虑直接将叠加层渲染到游戏中(目标DirectX应用程序),因为这样做提供了许多好处。主要是绕过xsplit中的性能问题,同时也使该应用程序适用于各种流媒体和捕获应用程序。
我不是很熟悉DirectX,但我认为这是解决方案的大纲:
我主要的问题是如何使用SlimDX完成第三步。我希望解决方案可以以某种方式重复使用表面,而不依赖于复制,因为目标是不影响被挂钩应用程序的性能。我还希望能够限制区域并支持透明度。我也想知道在被挂钩的DirectX应用程序的设备中使用WPF的Direct3d设备是否会导致任何不稳定性。任何见解都将不胜感激,谢谢。
我一直在考虑直接将叠加层渲染到游戏中(目标DirectX应用程序),因为这样做提供了许多好处。主要是绕过xsplit中的性能问题,同时也使该应用程序适用于各种流媒体和捕获应用程序。
我不是很熟悉DirectX,但我认为这是解决方案的大纲:
初始化WPF应用程序并捕获WPF的Direct3d设备(通过此方法)。
找到并钩住目标DirectX应用程序的EndScene调用(使用EasyHook+Slimdx)。
在钩住的DirectX应用程序上方渲染WPF设备表面的内容
我主要的问题是如何使用SlimDX完成第三步。我希望解决方案可以以某种方式重复使用表面,而不依赖于复制,因为目标是不影响被挂钩应用程序的性能。我还希望能够限制区域并支持透明度。我也想知道在被挂钩的DirectX应用程序的设备中使用WPF的Direct3d设备是否会导致任何不稳定性。任何见解都将不胜感激,谢谢。