WPF に基づいてマップ エディターを作成しようとしています。現在、DirectX コンテンツをレンダリングするためにハックを使用しています。WinFormsHost を作成し、WinForms-Panel でレンダリングしました。
これはすべて、DirectX (私は Featurelevel 10 で DirectX 11 を使用しています) がレンダリング先のハンドル (エイリアス IntPtr) を必要とするためです。ハンドルなしで DX デバイスを初期化して使用する方法がわかりません。
しかし、WPF コントロールにはハンドルがありません。それで、「D3DImage」という相互運用クラスがあることを知りました。しかし、私はそれを使用する方法を理解していません。
私の現在のシステムは次のように機能します。
内側のループは、「IGameloopElement」のリストを通過します。それぞれについて、「Draw()」を呼び出してコンテンツをレンダリングします。その後、スワップ チェーンの「Present()」を呼び出して変更を表示します。次に、デバイスをリセットしてハンドルを次の要素に切り替えます (ほとんどの場合、要素は 1 つだけです)。
さて、D3DImage にはハンドルがないので、どのようにレンダリングすればよいでしょうか? 「Lock()」、「SetBackBuffer()」、「AddDirtyRect()」、「Unlock()」の順に使用する必要があることはわかっています。
しかし、デバイスのハンドルを指定せずに DirectX11.Texture2D オブジェクトにレンダリングするにはどうすればよいでしょうか?
私は本当に迷っています... codeplex で "DirectX 4 WPF" サンプルを見つけましたが、これは DirectX のすべてのバージョンを実装し、デバイス自体を管理し、非常に大きなオーバーヘッドがあります。今の体制を維持したい。私は自分でデバイスを管理しています。WPF コントロールで処理したくありません。
ループは "Render()" を呼び出すだけで、バックバッファ テクスチャを WPF コントロールに渡します。
誰かがこれを行う方法を教えてもらえますか? 私は完全に立ち往生しています...
どうもありがとう :)
R