3. OpenGL綜合知識---Frame Buffer

GPU的繪製結果並不一定直接寫入on screen buffer中。On screen buffer中的數據是被用以顯示輸出的顏色信息,所以,on screen buffer屬於color buffer。在OpenGL中定義了多個color buffer,比如front bufferback bufferleft buffer等等,其中front buffer就是on screen buffer

如果將GPU的繪製結果直接寫入front buffer中,可能會出現閃爍現象。

可以將GPU的繪製結果先寫入back buffer中,然後再用某種機制顯示出來,比如在合適的時機將數據拷貝到front buffer中。這樣,就可以消除閃爍現象。

 

GPU繪製結果除了顏色信息外,還可能包括depthstencil信息,假如存在的話,它們會被分別輸出到depth buffersetncil buffer中。

 

所有的color bufferdepth bufferstencil bufferaccum buffer組成爲Frame buffer,如下圖所示。

 

4 

 

實際上,存在兩種類型的Frame Buffer,一種類型就是如前所述,和on screen buffer相關聯,最終要顯示出來的;另一種類型則和on screen buffer無關,一般是作爲中間結果暫存,不需要顯示,在frame buffer object技術中被引入。一般所說的frame buffer都是以顯示爲目的的。

以後,我們將不再使用on screen buffer這個說法,而用frame buffer這個術語。

 

 

深入到驅動開發層次,有些顯卡爲了效率考慮,depth bufferstencil buffer在物理上可能是交叉在一起的。

如果是一個全屏程序,也就是說color buffer和屏幕分辨率是一致的,可以將back buffer中的數據拷貝到front buffer中進行顯示,也可以直接將back buffer的屬性設置爲on screen buffer,這樣減少拷貝過程可以大幅提高性能。

如果不是全屏程序,front buffer其實只是on screen buffer的一部分。

爲了某些設計上的考慮,front buffer可能和on screen buffer在物理上是分開的,當然,驅動程序會對外屏蔽這個特性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章