問題タブ [direct-composition]
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.
c++ - DirectComposition はテクスチャにレンダリングしますか?
Directcomposition をテクスチャにレンダリングしたいと思います。これは可能ですか?
この理由は、gpu アクセラレーション ウィンドウレス トランスペアレント フラッシュ プレーヤー ActiveX コントロールを texture にレンダリングできるようにしたいからです。通常は不可能なことですが、DirectComposition で実現したいと考えています。
wpf - WPF ウィンドウで WinRT SwapChainPanel コントロールを使用する方法は?
SwapChainPanel
WinRT dll への参照を WPF プロジェクトに追加し、WPF ウィンドウ内で使用したいと考えています。それは本当に可能ですか?今のところ、私はそれを機能させることができません。
c++ - IDirectManipulationViewport::SetViewportRect の使用方法
これは、Windows 8 の従来のサンプルからわずかに変更された Direct Manipulation Sample アプリです。単一のビューポートとコンテンツ (市松模様のテクスチャ) を除くすべての要素を削除しました。IDirectManipulationVewport::SetViewportRect() を原点へのオフセット (例: SetViewportRect(100, 100, client_rect.right, client_rect.bottom)) に設定すると、コンテンツが 100, 100 に配置されることを期待します。ただし、コンテンツは常にウィンドウ (親 IDirectCompositionVisual) の起点。
IDirectManipulationViewport::SetViewportTransform() も変換マトリックスで試しましたが、結果は同じです。
ビューポートを原点ではなくビジュアルに配置する正しい方法は何ですか? 出来ますか?または、別の子 IDirectCompositionVisual をビューポートで作成し、それを SetOffsetX/Y で配置して、それにコンテンツを追加する必要がありますか?
ここにドキュメントへのリンクがあります
Rita Han の回答後の UPD: サンプルに次の変更を加えるだけの場合:
ズームアウトすると、次のように表示されます:
赤 - 実際には正しくないビューポートの四角形 (_viewportOuterRect.left と top の座標は無視されますが、サイズは変更されます)。
緑 - 予想されるビューポートの四角形。
青 - 予想されるコンテンツの配置位置。
resize - Windows のコンポジション エンジン (DWM) の背景色アーティファクト
ケニー・カーのブログからのコンテキスト:
Windows Vista では、デスクトップ ウィンドウ マネージャーと呼ばれるサービスが導入されました。名前は誤解を招くものであり、現在も誤解を招き続けています。Windows の合成エンジンまたはコンポジターと考えてください。この合成エンジンは、デスクトップ上でのアプリケーション ウィンドウのレンダリング方法を完全に変えました。各ウィンドウをディスプレイまたはディスプレイ アダプターに直接レンダリングするのではなく、すべてのウィンドウをオフスクリーン サーフェスまたはバッファーにレンダリングします。システムはトップレベル ウィンドウごとにこのようなサーフェスを 1 つ割り当て、すべての GDI、Direct3D、そしてもちろん Direct2D グラフィックスがこれらのサーフェスにレンダリングされます。これらのオフスクリーン サーフェスは、リダイレクト サーフェスと呼ばれます。これは、GDI 描画コマンドと Direct3D スワップ チェーン プレゼンテーション リクエストでさえ、リダイレクト サーフェスに (GPU 内で) リダイレクトまたはコピーされるためです。
ある時点で、特定のウィンドウとは関係なく、構成エンジンは、最新の変更のバッチが与えられたデスクトップを構成する時期であると判断します。これには、これらすべてのリダイレクト サーフェスをまとめて構成し、非クライアント領域 (ウィンドウ クロームと呼ばれることが多い) を追加し、おそらくいくつかの影やその他の効果を追加し、最終結果をディスプレイ アダプターに提示することが含まれます。
以前のSOの質問の背景(写真を参照) :
DirectX でサイズを縮小すると、右端または下端に win32 背景のアーティファクトが表示されます。WS_EX_NOREDIRECTIONBITMAP
これは、スタイルを適用することで修正できます。スワップチェーンがウィンドウよりも小さいか大きいかは問題ではないためWS_EX_NOREDIRECTIONBITMAP
、コンポジション エンジンがないと、リダイレクション サーフェスに小さすぎる長方形がコピーされるように見えます (ウィンドウ サイズがマウス位置/「長方形のドラッグ」よりも遅れるため)。
実際の質問
ただし、WS_EX_NOREDIRECTIONBITMAP
最上位のウィンドウでのみ機能し、DirectX を子ウィンドウとして WPF に埋め込もうとしていますが、子ウィンドウの背景からのアーティファクトがまだ通過しています。これは、いくつかの関連する質問に私を導きます:
- (オプション) スワップチェーンがウィンドウ サイズよりも小さい場合、ウィンドウの残りの部分は黒で塗りつぶされます (写真を参照)。これは、スワップチェーンからリダイレクション サーフェスへのコピーの結果であり、宛先ストライドの残り (ソース幅の後) がゼロになりますか?
- (オプション) win32 バックグラウンドからのアーティファクトはどのように表示されますか? スワップチェーンからコピーする前に、リダイレクト サーフェスはこの色で塗りつぶされていますか?
- (オプション) ウィンドウのサイズが変更されるたびにリダイレクト サーフェスのサイズが変更されますか?
- (必須) 各子ウィンドウには、最上位ウィンドウのリダイレクト サーフェスにコピーされるリダイレクト サーフェスがありますか。そうでない場合、子供の win32 バックグラウンド アーティファクトはどのように表示されますか?
- (必須) これは、WPF に組み込まれた win32 ウィンドウのフレーム レートが WPF の可変フレーム レートに制限されるということですか? (DirectX ウィンドウを WPF に埋め込む目的は、一定の 60fps フレーム レートを取得することでした)