問題タブ [d3dimage]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
interop - マルチサンプリングとDirect3D10/D3DImage相互運用
Direct3D 10(SlimDX)とWPFを使用してレンダーエンジンを実装しようとしています。
適切なMultiSampleパラメーターを使用してデバイスとrendertargetviewを作成します(1,0 / 2,0および4,0が機能しています)
次に、D3DImageの共有テクスチャを作成しようとしているときに問題が発生しました...
..。
..。
私は何かが欠けていますか?
wpf - DirectX 11 を使用した WPF コントロールでのレンダリング
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
c# - D3Dアプリケーションの実行中にWPFフレームレートが異常に低い
D3Dアプリケーションが同時に実行されているときに、WPFアプリケーションが非常に低いフレームレートで実行されるという問題が発生しています。
状況は次のとおりです。最初のアプリケーションは、SlimDXとD3D10を使用して3DグラフィックスをレンダリングするWinformsフォームです。アプリケーションはフルスクリーンモードではなく、最大化されたウィンドウで実行されます。これは非常にスムーズで高速です。
2番目のアプリケーションは、いくつかの画像をレンダリングするWPFウィンドウで構成されてScatterView
います。WPFウィンドウは透明です(AllowsTransparency="True"
背景は透明です)。ここでの一般的な考え方は、WPFウィンドウは3Dシーンの上に合成されているように見える必要があるということです。
ただし、D3D10アプリケーションが実行されるとすぐに、WPFアプリのパフォーマンスは1〜2 fpsまで低下します(WPFパフォーマンスツールで測定)。これは、私のコンピューターハードウェアが両方のアプリケーションをレンダリングできないためではありません。D3D10アプリは常に3Dシーンを非常にスムーズにレンダリングし、両方のアプリケーションを実行しているときにGPUとCPUの使用率が最大になりません。WPFアプリに高いプロセス優先度を与えても、レンダリングパフォーマンスは1〜2fpsのままです。
また、両方のアプリケーションを1つのプロセスに結合D3DImage
し、共有D3D10サーフェス(D3D9Exデバイスを使用)を使用してにフィードすることも試みましたD3DImage
。さらに、を使っInteropBitmap
てフレームデータを書き込んでみました。これらのソリューションはすべて機能し、その上にいくつかのWPFコントロールを備えたD3D10シーンを生成しますが、WPFをスムーズに実行するものはありません。
2つの異なるアプリケーションプロセスを使用するというアイデアは、同じプロセスでD3D10レンダリングを行うことから生じる可能性のある最終的なパフォーマンスへの影響からWPFレンダリングスタックを切り離すという私の最終的なアイデアでした。
wpf - D3DImage共有リソースを使用したDirectX11/DirectX10のマルチサンプリング(MSAA)
D3DImageを使用してDX11でMSAAを取得しようとしていますが、http://msdn.microsoft.com/en-us/library/windows/に記載されているように、共有マルチサンプリングテクスチャが許可されていないため、不可能のようです。デスクトップ/ff476531(v=vs.85).aspx
実際、私はD3DImageのSharpDX実装を使用しています。これは、アンチアリサスなしで離れることができる限り、DX11とDX10で正常に機能します。
それを解決するためのアプローチは、このスレッドで説明されています:http ://sharpdx.org/forum/5-api-usage/1000-d3d11-problem-with-usage-of-texture2d成功していません。同様の質問をするさらに別のスレッドがあります:マルチサンプリングとDirect3D10/D3DImage相互運用
最後に、問題は、実際、誰かが確認できれば、DX10 /DX11からのアンチエイリアスコンテンツのレンダリングにD3DImageを使用することは絶対に不可能であるということです。
c# - システムに切り替え可能なグラフィックがあるかどうかをプログラムで判断する
WPF アプリケーションで、切り替え可能なグラフィック (AMD Radeon 7670M + Intel 4000) を備えたラップトップで次の問題に取り組んでいます。
一部のビデオを表示するために使用するD3DImageには、黒いフレームしか表示されません。これは、ディスクリート グラフィックス (AMD) がアプリケーションに対してアクティブな場合 (モードが高パフォーマンスに設定されている場合) にのみ発生します。Intel グラフィックスがアクティブな状態 (モードが省電力に設定されている) で動作します。この問題は私たちだけではないようです。Google で検索すると、AMD フォーラムで次の投稿が見つかりました。
D3DImage.CopyBackBufferを使用して回避策を見つけました- バックバッファに実際に正しいフレームが含まれているように見えるので、代わりにそれを表示しようとします。
しかし、必要な場合にのみこの回避策を適用するために、この質問の主題に行き着きます: システムに実際に切り替え可能なグラフィックスがあるかどうかを確認するにはどうすればよいですか?
WMI を使用したり、レジストリを調べたりする方法がいくつかあると思いますが、誰かが私を正しい方向に向けたり、その方法の例を示してくれたりすると、とてもうれしいです。
アップデート:
EnumDisplayDevices と System.Management.ManagementObjectSearcher を試しました。最初のものはすべてのデバイスを返しませんが、後者は返します。しかし、おそらくもっと良い方法がまだありますか?
c# - D3DImage: バイト配列からビットマップを表示
配列に生のビットマップ データ (ピクセル カラー、32 ビット) があります。このような「スプライト」を D3DImage に表示する簡単な方法はありますか? できればサードパーティのライブラリ (SharpDX など) を使用しないでください。
背景: 管理されていない DLL からの生のビットマップ フレームがあり、それらを WPF で高フレームレート/低 CPU 使用率で表示する必要があります。これまでのところ、WriteableBitmap と InteropBitmap を試してみましたが、遅すぎます (最大化されたウィンドウ (1680x1050 ディスプレイ)、Core i5 で ~110 fps が得られます)。これは、メモリをいっぱいにする簡単なテストにすぎません。 100% の CPU コア時間を使用せずにこれをはるかに高速に実行します)。VideoRendererElement ( C# で生の非圧縮バイト ソースからのライブ ビデオを表示: WPF と Win フォーム) も見ていますが、これは少し複雑です (管理されていない dll、regsvr32 登録などが含まれます)。
D3DImage のサンプルからわかるように、CPU に負荷をかけずに良好なフレームレートを実現しています。ビットマップ表示に使えるのかな。
UPD: 私はこれを見つけました: http://www.codeproject.com/Articles/113991/Using-Direct2D-with-WPF
これは基本的に私が探していたものです。私はそれを自分のプロジェクトにプラグインしました.InteropBitmapと同等ですが、少し遅くなります. 私の場合、メモリパフォーマンスがボトルネックになっているようです。どちらの場合も、ビットマップのコピーにほとんどの時間が費やされます (管理されていない memcpy を使用しています)。
wpf - D3DImage と ANGLE を介して WPF アプリケーションで OpenGL ES コードを使用することは可能ですか?
まとめ(TL:DR版)
最終的に私たちの目標は、Google の ANGLE プロジェクトを使用して、エアスペースやドライバーの問題なしに、WPF アプリケーションで OpenGL ES コードをネイティブに (つまり、SharpGL などではなく) 利用できるようにすることです。
バックグラウンド:
DirectX よりも OpenGL で気に入っている点の 1 つは、そのクロスプラットフォーム機能です。OS X と Linux の両方、および ES 経由の Android と iOS で優れたサポートを提供します。ただし、Windows では、これを使用するとドライバーの問題が発生するか、さらに悪いことに、多くのカードで適切に実装されていません。
Google のANGLE プロジェクト、または Most-Native-Graphics-Layer-Engine に入ります。
ANGLE は、Direct3D 実装の OpenGL ES 2.0 ラッパーです。つまり、実際の OpenGL ドライバーを必要とせずに、Windows で実行する OpenGL ES 2.0 コードを記述できます。ES 互換性テストに合格するだけでなく、実際に Chrome が WebGL を含むすべてのグラフィックス レンダリングを行う方法であるため、実績のあるテクノロジであることは間違いありません。
質問:
WPF には、WPF 内で Direct3D レンダリングをホストできる D3DImage コントロールがあり、その出力を WPF レンダリング スレッドに適切にコンポストすることで、空域の問題を解決していると考えられます。私の質問は、ANGLE は Direct3D 経由で実装され、D3DImage は Direct3D レンダリングのターゲットであるため、2 つを組み合わせて、OpenGL ES コードを記述し、Windows 上の WPF アプリケーションでホストできるようにすることは可能ですか? ?
これが私たちにとっての「聖杯」です。
しかし、ANGLE は独自のものを使用したいので、D3DImage コントロールによって作成された D3D サーフェス上でレンダリングをターゲットにするように ANGLE を取得する際に壁にぶつかり続けています。これが可能かどうかさえわかりません。これについて議論している記事や参考文献はどこにも見つかりません。
繰り返しになりますが、目標は、エアスペースの問題や OpenGL ドライバーの要件なしに、WPF アプリケーションで動作する共有のクロスプラットフォーム OpenGL (または ES) コードを取得することです。ANGLE/D3DImage を使用するという私の提案は、単なる試みです。それは私がこれまでに思いついた「手段」ですが、それは目標そのものではなく、目標への潜在的な手段にすぎません。私たちを同じ解決策に導く他のものは大歓迎です。
java - 任意の視点からの 3D 配列の画像の生成
3D オブジェクト (x、y、z) を表す 3D 配列があります。配列に格納される値は RGB カラーです。任意の視点からオブジェクトの画像を生成することは可能ですか?