8

ライブ ストリームで HUD をオーバーレイするための WPF アプリケーションがあります。元のアイデアは、xsplit (ライブ ストリームを表示するための一般的なアプリケーション) のプラグインを作成して、WPF アプリケーションのコンテンツを表示することでした。このアプローチの問題点は、ビットマップを xsplit の COM インターフェイスにレンダリングすると、アプリケーションをリリースするために CPU のパフォーマンスが大幅に低下することです (xsplit の COM インターフェイスや、RenderTargetBitmap を使用して CPU に負荷をかけることにも問題があると思います)。

オーバーレイをゲーム (ターゲット DirectX アプリケーション) に直接レンダリングする方法を検討してきました。これには多くのメリットがあるためです。主に xsplit のパフォーマンスの問題を回避しますが、アプリケーションをさまざまなストリーミングおよびキャプチャ アプリケーションに開放します。


私はDirectXの経験が豊富ではありませんが、これがソリューションの概要だと思います

  1. WPF アプリケーションを初期化し、WPF の Direct3d デバイスをキャプチャします(このメソッドを使用)。

  2. ターゲット DirectX アプリケーションの EndScene 呼び出しを見つけてフックする(EasyHook+Slimdx を使用)

  3. フックされた DirectX アプリケーションの上に WPF デバイスのサーフェスのコンテンツをレンダリングする


私が持っている主な質問は、SlimDX を使用してステップ 3 を達成する方法です。フックされたアプリケーションのパフォーマンスに影響を与えないことが目標であるため、ソリューションが何らかの方法でサーフェスを再利用し、コピーに依存しないことを願っています。また、リージョンを制限して透過性をサポートできるようにしたいと考えています。また、フックされた DirectX アプリケーションのデバイスで WPF の Direct3d デバイスを使用すると、不安定になる可能性があるのではないかと考えています。

洞察をいただければ幸いです、ありがとう。

4

1 に答える 1

1

私は同じことをしようとしています。私がこれまでに見つけたのは、wpfvisualtreeをビットマップにレンダリングし、その後、ポイント2でキャプチャされたd3dデバイスにビットマップを書き込むことができるということです。

void render(Direct3D.Device device)
{

wpfRenderTargetBitmap.Render(WpfVisualTree);
wpfRenderTargetBitmap.CopyPixels(devicePtr);

}

私はまだこれをテストしていませんが、私はこれで正しい軌道に乗っていると思います。私が今抱えている唯一の問題は、ウィンドウからすべての双方向性を失うことです。ボタンのクリックなどはキャプチャされなくなります...

それについての助けがあればいいのですが。

于 2012-06-21T09:07:44.993 に答える