2011-06-20 70 views
2

閱讀http://blogs.msdn.com/b/directx/archive/2009/09/29/comparing-direct2d-and-gdi.aspxDirect2D是否使用回緩衝區?

演示模型

當被 第一設計的Windows,沒有足夠的內存 ,讓每一個窗口是存儲在自己的位圖 。因此,GDI總是邏輯上直接將 呈現到屏幕上,並應用各種剪輯 區域以確保它不會在其窗口之外進行渲染。在 合同中,Direct2D遵循 的模型,其中應用程序呈現爲 後臺緩衝區,結果爲 當 應用程序完成繪圖時,以原子方式「翻轉」。這個 允許Direct2D處理動畫 更流暢地GDI 可以。

作者說,Direct2D使用後緩衝區,通過「翻轉」他意味着交換鏈我猜。我創建了一個簡單的演示,在鼠標點擊的隨機位置繪製一個矩形。但以前的矩形不會被清除,因此它似乎直接繪製到屏幕上,並且不使用任何後臺緩衝區。

回答

1

這並不能證明back-buffer的存在,它只意味着在重繪之間不清除back-buffer。正確的觀察,錯誤的結論!

如果增加鏈中的後置緩衝區的數量,當您繼續單擊時,您會開始注意到閃爍的矩形,因此您應該始終在重繪之間清除後臺緩衝區。

+0

如果我點擊兩次,則會出現兩個矩形。如果使用back-buffer,那不應該是我想的情況。 – Alice

+0

你爲什麼這麼想? – Blindy

+0

我猜如果使用back-buffer,每當我調用BeginDraw時它都會被交換。所以,如果我使用兩個BeginDraw調用繪製兩個矩形,那麼一個矩形轉到緩衝區1,另一個矩形轉到緩衝區2.然後,我們應該只看到一個矩形。 – Alice

1

Direct2D的確使用了後臺緩衝區。

也許你忘記清除你的渲染目標,這是後緩衝區,剛剛調用begindraw後,所以以前的繪製呆在那裏?

4

當您爲Direct2D操作初始化RenderTarget時,可以在第二個參數中指定D2D1_PRESENT_OPTIONS選項。

我想什麼使你感到困惑的是D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS和緩衝區沒有交換但複製的事實。

相關問題