ライブ ストリームで HUD をオーバーレイするための WPF アプリケーションがあります。元のアイデアは、xsplit (ライブ ストリームを表示するための一般的なアプリケーション) のプラグインを作成して、WPF アプリケーションのコンテンツを表示することでした。このアプローチの問題点は、ビットマップを xsplit の COM インターフェイスにレンダリングすると、アプリケーションをリリースするために CPU のパフォーマンスが大幅に低下することです (xsplit の COM インターフェイスや、RenderTargetBitmap を使用して CPU に負荷をかけることにも問題があると思います)。
オーバーレイをゲーム (ターゲット DirectX アプリケーション) に直接レンダリングする方法を検討してきました。これには多くのメリットがあるためです。主に xsplit のパフォーマンスの問題を回避しますが、アプリケーションをさまざまなストリーミングおよびキャプチャ アプリケーションに開放します。
私はDirectXの経験が豊富ではありませんが、これがソリューションの概要だと思います
WPF アプリケーションを初期化し、WPF の Direct3d デバイスをキャプチャします(このメソッドを使用)。
ターゲット DirectX アプリケーションの EndScene 呼び出しを見つけてフックする(EasyHook+Slimdx を使用)
フックされた DirectX アプリケーションの上に WPF デバイスのサーフェスのコンテンツをレンダリングする
私が持っている主な質問は、SlimDX を使用してステップ 3 を達成する方法です。フックされたアプリケーションのパフォーマンスに影響を与えないことが目標であるため、ソリューションが何らかの方法でサーフェスを再利用し、コピーに依存しないことを願っています。また、リージョンを制限して透過性をサポートできるようにしたいと考えています。また、フックされた DirectX アプリケーションのデバイスで WPF の Direct3d デバイスを使用すると、不安定になる可能性があるのではないかと考えています。
洞察をいただければ幸いです、ありがとう。