複製鏈接
請複製以下鏈接發送給好友

幀緩衝器

鎖定
幀緩衝器是指計算機系統中專門用來存放正在合成或顯示的圖像的存儲器。
中文名
幀緩衝器
性    質
視頻輸出設備
領    域
計算機
類    別
存儲器

幀緩衝器簡介

幀緩衝器是一個視頻輸出設備,它從一個包含了完整幀數據的內存緩衝區驅動視頻顯示器。
內存緩衝區中的信息通常包含屏幕上每個像素的色彩值,色彩值常以1位、4位、8位、16位及 24位真彩色格式存儲。有時還有一個alpha通道來保存像素的透明度。驅動幀緩衝器所需的總內存量取決於輸出信號的分辨率(分辨率)、色彩深度和調色板大小。
向量顯示器比幀緩衝器出現得早,二者有很大的不同。使用向量顯示器時,只存儲了圖元(graphics primitives)的頂點。輸出顯示器的電子束按命令從一個頂點移動到另一個頂點,在這些點之間形成一個模擬的線條。而使用幀緩衝器時,電子束(如果顯示技術使用了電子束)按命令在整個屏幕上從左到右、從上到下描繪(trace),也就是電視機呈現廣播信號的方式。與此同時,屏幕上每個點的色彩信息從幀緩衝器中取出,形成一系列離散的像素 [1] 

幀緩衝器顯示模式

個人和家用計算機中的幀緩衝器中常有一些定義好的模式,也就是幀緩衝器可以工作的模式。這些模式可以自動配置硬件以輸出不同的分辨率、色彩深度、內存佈局及刷新頻率等。
Unix中則通常沒有這些便利,而是更傾向於直接操縱硬件。這可以更靈活地設置可以使用的分辨率、色彩深度和刷新頻率,只受限於可用作幀緩衝器的內存。這種方法的一個副作用是,顯示設備可能被迫工作在其力不能及的模式下,有時這會導致設備器硬件上的損壞。不過更常見的是,它會產生一些垃圾而無用的輸出。現代的CRT顯示器通過引入智能保護電路而解決了這一問題。如果被設置成了不可用的顯示模式,則會顯示出錯誤信息。
LCD也會含有這樣一個保護電路,但並不是出於這個原因。由於LCD必須以數字形式採樣顯示信號(這樣來模擬電子束),所以超出範圍的信號無法物理地顯示在監視器上。 [1] 

幀緩衝器調色板

傳統的幀緩衝器支持的色彩模式很廣泛。受限於昂貴的內存,大多數早期的幀緩衝器使用的是1位、2位、4位或 8位的色深。小的色深導致不能產生完整的色彩範圍。其解決方法是為幀緩衝器增加一個查找表(lookup table,LUT),把幀緩衝器中存儲的每個“顏色”作為一個索引。這就是所謂的索引色(indexed color)模式。
查找表扮演着調色板的角色,它包含的數據用以定義數量有限的——比如256種——色彩。但這256種色彩中的每種色彩本身,則是可能是用許多位(比如24b,每8位對應於三原色中的一色)定義的。有了24位,色彩就可以定義得更精細了。色彩總數有限的圖像總還有些捉襟見肘,不過它們可以被精挑細選出來,故仍被認為比直接使用8位色略勝一疇。
索引色模式下,幀緩衝器中存儲的數據決定了調色板中256種色彩中的哪一種將用於當前像素,然後查找表中存儲的數據被送往3個數-模轉換器,這樣來為顯示器創建視頻信號。
在有些設計中,也可以臨時向查找表中寫入數據或在已有調色板中切換,也允許把圖像分區成一個個水平條,每個水平條使用自己的調色板,這樣就可以呈現調色板範圍更廣的圖像了。 [1] 

幀緩衝器內存訪問

幀緩衝器通常是以直接映射到CPU內存空間的方式訪問的,但這並不是唯一的方法。比如:
  • 把整個幀緩衝器映射到一個給定的內存範圍;
  • 通過操作對應端口直接控制像素點或者色塊;
  • 把幀緩衝器映射到一個比它小的內存範圍內,必要時進行內存庫切換(bank switching)。 [2] 

幀緩衝器虛擬幀緩衝器

許多系統嘗試模擬幀緩衝器設備的功能,通常是出於兼容性的考慮。兩個最常見的虛擬幀緩衝器是Linux的fbdev及X Window的Xvfb。Linux的fbdev把對訪問底層幀緩衝器的物理方式抽象成一個可靠的內存映射,以易於程序訪問。這樣增加了移植性,因為程序無須應對內存映射不連續的系統或要求內存庫切換(bank switching)了。
X Window System中添加Xvfb是為了在沒有圖形幀緩衝器時運行X,最初的原因已不可考,而在現代系統中它常被用以支持JVM之類的程序,這些程序不允許在無界面環境中產生動態圖形。 [2] 

幀緩衝器畫面交換

由於幀緩衝器通常是為處理多個分辨率而設計的,故其內存也通常比以低分辨率顯示單幀所需要的內存大。由於內存的大小相當可觀,故可以在不妨礙當前所顯示幀的前提下向視頻內存中寫入新幀。這是通過告訴幀緩衝器為當前幀使用某一部分特定內存來實現的。這一部分的內存內容正在顯示時,另一部分完全獨立的內存被填充為下一幀的數據。一旦從緩衝區(通常稱為“後端緩衝區”)被填充,幀緩衝器就被要求查看從緩衝區。此時主緩衝區(通常稱為“前端緩衝區”)變成從緩衝區,從緩衝區則變成了主緩衝區。這一交換通常在垂直遮沒間隔中完成,以避免屏幕被“撕裂”(即顯示一半舊幀、一半新幀)。
現代多數幀緩衝器都有足夠多的內存,以執行主從緩衝區的交換——即使是在高分辨率下。這樣,它就成了PC遊戲程序員所使用的一種標準技術。 [2] 
參考資料
  • 1.    Noll, A. Michael (March 1971). "Scanned-Display Computer Graphics". Communications of the ACM. 14 (3): 145–150. doi:10.1145/362566.362567.
  • 2.    "Smart Computing Dictionary Entry - video buffer". Archived from the original on 2012-03-24. Retrieved 2015-04-21.