0

1 つ以上のウィンドウを作成するアプリがあります。これらのウィンドウは、レンダリングを行う Direct3D コンテキストです。

Windows でデスクトップ (Aero) に対してハードウェア アクセラレーションが有効になっている場合、すべてが正常にレンダリングされます。ウィンドウを問題なく移動できます。

Windows テーマを Windows Basic に切り替えると、大変なことになります。ウィンドウは適切にレンダリングされますが、ウィンドウをドラッグすると、背後に画像の跡が残ります。ソリティアで勝つことを考えてみてください。

これを引き起こしている可能性のあるアイデア。それ以外は問題ありませんが、移動するとすべてが描画されるようです。

DirectX レンダラーは非常に単純です。クリア、テクスチャの選択、頂点バッファの選択、インデックス バッファの選択、描画。

アップデート

各ウィンドウのウィンドウ階層は次のとおりです。

親ウィンドウ、WS_EX_LAYEREDおよびWS_POPUP. GDI+ は、ウィンドウの周りにフレームを描画します。子ウィンドウ、WS_EX_TOOLCHAINおよびWS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN. DirectX は子を描画します。

4

1 に答える 1

0

私が判断したところによると、合成モードでない場合は、DirectX ウィンドウを移動するとこれが行われます。多くの例では、メイン ループにレンダリング コードが含まれています。これは、PeakMessage がレンダラーをハングさせていることを意味します。

解決策は、MoveWindow 呼び出しの前に、システム バージョン チェックと DwmIsCompositionEnabled を介して、合成が有効かどうかを検出することです。合成できない場合は、レンダリングされたウィンドウのスナップショットを作成し、DirectX ウィンドウを非表示にしてスナップショットを描画します。移動が完了したら、レンダリングをオンに戻します。

于 2013-09-27T16:02:06.033 に答える