OpenGL(5.1)深入理解從Fram Buffer到顯示設備

OpenGL(5.1)深入理解從Fram Buffer到顯示設備

從Fram Buffer到顯示設備

簡介

繪製方式可以分爲2D和3D。上個世紀的顯卡大部分都是2D顯卡,而現在主流的桌面顯卡則都是以3D爲主同時包括2D功能,純2D功能的顯卡在服務器中還存在。
我們知道,顯示設備屏幕只是一個二維的平面。如果繪製的是一個平面上的點、線段和填充多邊形,一般被稱爲2D,比如Vista之前的桌面、菜單等都是用這種方式畫出來的。
如果要繪製三維空間中的物體,表現出它們的燈影效果,體現出移步換景、定點換景、定景換點的觀察效果,最終在二維的屏幕上顯示,就需要用到3D技術了。
而這些顯示都需要依賴於Fram Buffer;

on screen buffer

  1. 其實無論是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類型如下圖所示:
在這裏插入圖片描述
對上圖的小結:

  1. 實際上,存在兩種類型的Frame Buffer,一種類型就是如前所述,和on screen buffer相關聯,最終要顯示出來的;另一種類型則和on screen buffer無關,一般是作爲中間結果暫存,不需要顯示,在frame buffer object技術中被引入。一般所說的frame buffer都是以顯示爲目的的。
    所有一般我們所說的Frame buffer指的就是on screen buffer。
  2. 另外,從驅動層來講,爲了提高效率,depth buffer和stencil buffer在物理上可能是交叉在一起的。
  3. 如果不是全屏程序,front buffer其實只是on screen buffer的一部分。一個全屏程序,也就是說color buffer和屏幕分辨率是一致的,可以將back buffer中的數據拷貝到front buffer中進行顯示,也可以直接將back buffer的屬性設置爲on screen buffer,這樣減少拷貝過程可以大幅提高性能。
  4. 爲了某些設計上的考慮,front buffer可能和on screen buffer在物理上是分開的,當然,驅動程序會對外屏蔽這個特性。
    在物理上是分開的,當然,驅動程序會對外屏蔽這個特性。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章