3

https://docs.microsoft.com/en-us/windows/win32/direct2d/comparing-direct2d-and-gdiを読む:

プレゼンテーション モデル

Windows が最初に設計されたとき、すべてのウィンドウを独自のビットマップに格納するにはメモリが不足していました。その結果、GDI は常に論理的に画面に直接レンダリングされ、さまざまなクリッピング領域が適用されて、ウィンドウの外にレンダリングされないようにしていました。対照的に、Direct2D は、アプリケーションがバック バッファーにレンダリングし、アプリケーションが描画を完了すると結果がアトミックに「反転」されるモデルに従います。これにより、Direct2D は GDI よりもはるかに流動的にアニメーション シナリオを処理できます。

著者は、Direct2D はバック バッファーを使用し、「反転」とはスワップ チェーンを意味していると述べています。マウス クリックでランダムな位置に四角形を描画する簡単なデモを作成しました。ただし、以前の長方形はクリアされていないため、画面に直接描画され、バックバッファーを使用していないようです。

4

3 に答える 3

4

Direct2D操作のRenderTargetを初期化するときに、2番目のパラメーターでD2D1_PRESENT_OPTIONSオプションを指定できます。

あなたを混乱させるのは、D2D1_PRESENT_OPTIONS_RETAIN_CONTENTSと、バッファーがスワップされないがコピーされるという事実だと思います。

于 2012-02-10T21:31:17.267 に答える
1

Direct2D は確かにバック バッファーを使用します。

begindraw を呼び出した直後に、レンダー ターゲット (バック バッファー) をクリアするのを忘れていたので、以前の描画がそこに残っていたのではないでしょうか?

于 2011-07-29T12:58:19.983 に答える
1

これはバックバッファの存在を否定するものではなく、再描画の間にバックバッファがクリアされないことを意味するだけです。正しい観察、間違った結論!

チェーン内のバック バッファの数を増やすと、クリックし続けると四角形がちらつくことに気付くようになるため、再描画の合間にバック バッファを常にクリアする必要があります。

于 2011-06-20T17:02:12.530 に答える