Linux framebuffer ---double buffer

來源:互聯網
上載者:User

【什麼是FrameBuffer】

FrameBuffer直譯就是,幀緩衝。

Frame幀:你所看到的螢幕的映像,或者在一個視窗中的映像,就叫一幀。

Buffer緩衝:一段RAM,用來暫存映像資料,這些資料會被直接寫入到顯示裝置。

幀緩衝就相當於介於 圖形操作 和 映像輸出中間的一個中間人。將程式對圖形資料的處理操作,反饋到顯示輸出上。

顯卡(顯存中的資料) <-> 幀緩衝(程式對其中的資料進行處理) <-> 顯示器(輸出映像)

幀緩衝可用於,實現原先視訊卡並不支援的解析度。

顯卡可能並不支援你當前某個更大解析度的顯示器,但是可以通過幀緩衝擷取顯卡的顯存中的資料,處理之後,實現更大的解析度的映像,然後將資料直接輸出到顯示器上。

【雙顯示器例子】

一個例子,可能就是雙顯示,最近剛剛看到實際某開發人員的系統,就是兩個顯示器,滑鼠移動超過單個顯示器,到最右邊的時候,就跑到另一個顯示器了。對於常常用多系統或者需要開啟很多東西的開發人員,這個功能很實用。

幀緩衝可以用於 頁面交換page flipping(也常叫做 雙緩衝double buffering),許多遊戲都是採用此技術,以實現更流暢的視頻輸出,以便使用者獲得更好的遊戲體驗。此技術也被用於3D圖形加速。

【雙緩衝的主要實現原理】

假如你的顯示器是VGA模式,640×400,也就是虛擬解析度是640X800,也就是800線(每一行的資料,稱為一條線,也就是640X1 的資料了)。800線的資料存放區於Framebuffer,而實際的顯示內容,只是400線,Linux核心中的Framebuffer模型中,對應有個變數yoffset,就是表示的這個具體的縱座標,預設是0,所以顯示的內容就是,0-399線,由於和實際顯示頁面大小等同,所以此處可以簡稱為第一幀。如果yoffset改變了,比如此例中變為400,那就是顯示剩餘的部分,400-799線。此處簡稱為第二幀。

在系統顯示第一幀的時候,系統在後台悄悄地準備第二幀的資料,所以,等第一幀顯示完成,多數時候,第二幀的資料也準備好了,就可以直接顯示,同時系統又在準備接下來的一幀的資料,這樣就可以大大提高顯示效率。

【平滑地滾動頁面的實現原理】

同上,在顯示完第一幀資料的時候,也就是0-399線的時候,將yoffset設定為1,就可以顯示1-400線的資料了,顯示完成後,再設定 yoffset為2,就顯示2-401線的資料,這樣,就可以一點點地,平滑地顯示整個滾動畫面了。其實也就是畫面在垂直方向的滾動。其中yoffset 的增加,可以使用定時器,各個一段時間,比如10us,增加1,系統自動會更新顯示對應的內容,這樣我們所看到的內容就是滾動的畫面了。

此外,Linux中的Framebuffer模型中,提供了一些ioctl功能,給定一些參數,然後系統可以實現對應的功能,其中有個參數就是FBIOPAN_DISPLAY。具體也就是類似如下調用:

ioctl (framebuffer_handler, FBIOPAN_DISPLAY, &variable_info);
而這個調用,如果顯示不支援framebuffer的雙緩衝的話,那麼其framebuffer的緩衝大小,就是和物理上的顯示器大小等同,那麼對應的yoffset也就不會像雙緩衝那樣變化了。

也就是說,如果顯卡/顯示屏控制器不支援雙緩衝,那麼yoffset就應該一直為0,並且在運行時候,也不應該改變,也不應該去給FBIOPAN_DISPLAY的參數調用ioctl。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.