OpenGL(5.1)深入理解從Fram Buffer到顯示設備
從Fram Buffer到顯示設備
簡介
繪製方式可以分爲2D和3D。上個世紀的顯卡大部分都是2D顯卡,而現在主流的桌面顯卡則都是以3D爲主同時包括2D功能,純2D功能的顯卡在服務器中還存在。
我們知道,顯示設備屏幕只是一個二維的平面。如果繪製的是一個平面上的點、線段和填充多邊形,一般被稱爲2D,比如Vista之前的桌面、菜單等都是用這種方式畫出來的。
如果要繪製三維空間中的物體,表現出它們的燈影效果,體現出移步換景、定點換景、定景換點的觀察效果,最終在二維的屏幕上顯示,就需要用到3D技術了。
而這些顯示都需要依賴於Fram Buffer;
on screen buffer
- 其實無論是2D 還是3D顯示到顯示設備上,最終都是建計算機上一塊連續的,存儲着像素信息的內存(memory)映射到對應相應分辨率的屏幕上。這裏的映射指的是,內存數據通過控制芯片(contoller)將顯示數據傳送到顯示設備的過程。這塊內存(memory) 也稱爲on screen buffer;
可以同時存在多塊memory,其內容都可以被Display Controller傳給顯示設備,而當前被通過控制芯片(contoller)傳輸數據的那塊memory就是on screen buffer。
Fram Buffer詳解
在GPU繪製過程中,爲了避免閃爍,以及在3D應用中需要考慮燈光,深度信息等問題,繪製內容不會直接放入on screen buffer中。
Frame Buffer類型如下圖所示:
對上圖的小結:
- 實際上,存在兩種類型的Frame Buffer,一種類型就是如前所述,和on screen buffer相關聯,最終要顯示出來的;另一種類型則和on screen buffer無關,一般是作爲中間結果暫存,不需要顯示,在frame buffer object技術中被引入。一般所說的frame buffer都是以顯示爲目的的。
所有一般我們所說的Frame buffer指的就是on screen buffer。 - 另外,從驅動層來講,爲了提高效率,depth buffer和stencil buffer在物理上可能是交叉在一起的。
- 如果不是全屏程序,front buffer其實只是on screen buffer的一部分。一個全屏程序,也就是說color buffer和屏幕分辨率是一致的,可以將back buffer中的數據拷貝到front buffer中進行顯示,也可以直接將back buffer的屬性設置爲on screen buffer,這樣減少拷貝過程可以大幅提高性能。
- 爲了某些設計上的考慮,front buffer可能和on screen buffer在物理上是分開的,當然,驅動程序會對外屏蔽這個特性。
在物理上是分開的,當然,驅動程序會對外屏蔽這個特性。