2012-02-01 18 views
5

管理対象外のC++コードからDirectX 11を使用し、GUIにWFPを使用します。 SlimDXは私には適していません。D3DImageを使用したWPFおよびDirectX 11

WPF & DirectX 10 via D3DImage

しかし、私は二つのボタンでのDirectX 11ただ、空白の画面でそれを動作するように管理することができませんでした:私は、DirectX 10とWPFを操作できるようにする解決策を発見した 。 誰でもWPFをDirectX 11で動作させる方法を知っていますか?

また、この例を実行していると、CPU使用率はIntel i5 750(Windows 7 64ビット、NVidia Geforce 430)。私はそれが多すぎると思う.. CPU使用量を減らすことは可能ですか?

あなたがここに私のコードを見つけることができます。私はその一例でDirectX11の仕事を作成する方法にコメントすることはできませんhttp://www.gamedev.net/topic/619534-wpf-directx-11-via-d3dimage/

+0

エラーメッセージが表示されますか?セットアップとレンダーコードを投稿できますか? –

+0

私のコードはここにあります:http://www.gamedev.net/topic/619534-wpf-directx-11-via-d3dimage/ – Alex

答えて

1

が、あなたが目撃している5%のCPUは、おそらくDirectXのでレンダリングループ回転しているが、ノーとやらなければならないこと。

レンダリングループは、シーン/物理/ AIを別のスレッドで更新しながら、できるだけ早くレンダリングするためにゲームでよく使用されます。デスクトップの視覚化アプリケーションでは、これは通常は必要ありません。

ユーザが対話(アイテムをドラッグ、ビューポートをパンするなど)したときにのみGUIが更新されるような科学的視覚化アプリケーションの場合、レンダリングループを更新してレンダリングするように設計し直しました。つまり、mousemove内のビューポートをパンする作業の後で、フラグなどを設定してDirectXに再描画を強制します。この方法で「必要なときに描画」すると、アプリケーションがアイドリングしている間にCPUがゼロに近くなり、デスクトップアプリケーションに適しています。

+0

はい、そうです。今WPFは〜60 fpsを再描画します。通知でのみ再描画できます。しかし、GUIが2つのボタンよりも複雑な場合は、必要に応じて再描画するだけでも、CPU使用率は最大10-15%増加します。 – Alex

2

D3DImage.AddDirtyRectの呼び出しがありません。 Direct3D11でシーンをレンダリングした後、新しい画像が表示される準備ができていることをWPFに伝える必要があります。これを行うには、あなたはd3dimageがあなたのD3DImageのインスタンスで次のことを、実行します。

d3dimage.Lock(); 

//... 
//your render code 
///... 

var surface = renderTexture.GetSurfaceLevel(0); 

d3dimage.SetBackBuffer(D3DResourceType.IDirect3DSurface9, surface.ComPointer); 

var rect = System.Windows.Int32Rect(0, 0, width, height); 

d3dimage.AddDirtyRect(rect); 

d3dimage.Unlock(); 

これは、各フレームを行う必要があります。

Additional info about AddDirtyRect

+0

いいえ、私はWindow1.xaml.csファイルで行います。私は間違いを見つけました。レイアウト{"POSITION"、0、DXGI_FORMAT_R32G32B32_FLOAT、0、0、D3D11_INPUT_PER_VERTEX_DATA、0}に間違ったフォーマットを使用しました。私はDXGI_FORMAT_B8G8R8A8_UNORMを使用しましたが、DXGI_FORMAT_R32G32B32_FLOATを持っていなければなりません – Alex

3

Iは、頂点バッファレイアウトの間違ったフォーマットを使用します。 DXGI_FORMAT_B8G8R8A8_UNORMを使用しましたが、私の場合はDXGI_FORMAT_R32G32B32_FLOATを使用する必要があります。

関連する問題