2017-07-16 60 views
1

看起來大多數人推薦只使用2或3.這是因爲3個以上的處理能力或其他東西(請原諒我對此有點新鮮)?在什麼樣的程序中你會使用3個以上的緩衝區?在java中使用createBufferStrategy()時,是否有助於擁有兩個以上的緩衝區?有缺點嗎?

2或3對我的程序正常工作,我只是好奇。

+0

記憶 - 要創建'大小相等的N'緩衝區,每個佔用內存。您可能會發現,如果你有一個非常高的幀速率,更多的緩衝區是有用的,但一般2-3應該是綽綽有餘大多數情況下 – MadProgrammer

+0

@MilesJohnson如果用戶回答了你的問題,也請** **接受他的答案([接受答案:它是如何工作的?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work))。如果不是,請說明還沒有答案,這是StackOverflow非常重要的一部分,非常感謝。 – Zabuza

回答

4

一旦你知道緩衝策略的好處,其實它很容易理解。我們來看看這三種情況會發生什麼。


單緩衝只有一個顯示將圖像數據寫入到。相比之下雙緩衝具有兩個顯示 s時,後臺緩衝區

通常,應用程序的渲染和邏輯進程被拆分並且並行運行(例如顯示器和圖形卡)。可以說渲染過程具有輪詢速率,每隔15ms在監視器上顯示一個圖像。想象一下,邏輯過程當前正在執行一些圖像操作(繪製一個圓圈),但目前尚未完成(圓圈只繪製了一半)。在單緩衝您現在將看到屏幕上的一個半圓,因爲渲染過程顯示未完成的圖像。

雙緩衝邏輯過程只會寫後緩衝區且僅當它已經結束了拉絲工藝成品它將標誌着後臺緩衝區。然後,您將後臺緩衝區的內容與前臺緩衝區交換,渲染過程現在將顯示完成的圖像,您將看不到任何工件。

Illustration of double buffering

所以優勢雙緩衝是,用戶將不會看到任何文物,也沒有像閃爍左右經驗的東西。然而,這需要增加運行時間(交換操作),尤其是增加空間成本(整個圖像的兩倍)。


趁現在就像三重緩衝正值更加經濟(3倍的圖像空間),這將加快這一進程。這裏你有兩個後臺緩衝區一個前臺緩衝區

假設你使用雙緩衝和當前正在交換的回緩衝區前緩衝你剛剛完成繪圖操作。這可能需要一些時間,同時您的圖形卡(這是非常快 - 比替換緩衝器軟件代碼更快)可以與未來繪圖操作開始,但它不能作爲緩衝被阻止。

隨着三重緩衝顯卡現在可能只是開始繪製其他緩衝作爲一個後緩衝區一直是免費的,並沒有參與任何交換機制。


現在我們知道事情是如何工作的,也不清楚爲什麼你沒有看到超過3緩衝區(至少不會在普通的應用程序)的緩衝溶液 - 它只是不從的觀點好處一般的概念。

增加的緩衝區量可以用三維虛擬現實的東西(立體圖像),例如處理時可以看到,你可以使用雙緩衝左和分別與四緩衝總結束右聲道。

作爲最後一個側面說明VSYNC手段同步的前緩衝的交換與顯示器的輪詢率以減少撕裂效果。

+2

所有這一切也意味着,只要你有一個單一的區域作爲你的輸出(所以沒有3D),擁有超過3個緩衝區幾乎沒有意義。 – biziclop

相關問題