GPU的繪製結果並不一定直接寫入on screen buffer中。On screen buffer中的數據是被用以顯示輸出的顏色信息,所以,on screen buffer屬於color buffer。在OpenGL中定義了多個color buffer,比如front buffer、back buffer、left buffer等等,其中front buffer就是on screen buffer。
如果將GPU的繪製結果直接寫入front buffer中,可能會出現閃爍現象。
可以將GPU的繪製結果先寫入back buffer中,然後再用某種機制顯示出來,比如在合適的時機將數據拷貝到front buffer中。這樣,就可以消除閃爍現象。
GPU繪製結果除了顏色信息外,還可能包括depth和stencil信息,假如存在的話,它們會被分別輸出到depth buffer和setncil buffer中。
所有的color buffer和depth buffer、stencil buffer、accum buffer組成爲Frame buffer,如下圖所示。
實際上,存在兩種類型的Frame Buffer,一種類型就是如前所述,和on screen buffer相關聯,最終要顯示出來的;另一種類型則和on screen buffer無關,一般是作爲中間結果暫存,不需要顯示,在frame buffer object技術中被引入。一般所說的frame buffer都是以顯示爲目的的。
以後,我們將不再使用on screen buffer這個說法,而用frame buffer這個術語。
深入到驅動開發層次,有些顯卡爲了效率考慮,depth buffer和stencil buffer在物理上可能是交叉在一起的。
如果是一個全屏程序,也就是說color buffer和屏幕分辨率是一致的,可以將back buffer中的數據拷貝到front buffer中進行顯示,也可以直接將back buffer的屬性設置爲on screen buffer,這樣減少拷貝過程可以大幅提高性能。
如果不是全屏程序,front buffer其實只是on screen buffer的一部分。
爲了某些設計上的考慮,front buffer可能和on screen buffer在物理上是分開的,當然,驅動程序會對外屏蔽這個特性。