幀緩衝器

幀緩衝器是指計算機系統中專門用來存放正在合成或顯示的圖像的存儲器。

基本介紹

  • 中文名:幀緩衝器
  • 性質:視頻輸出設備
  • 領域:計算機
簡介,顯示模式,調色板,記憶體訪問,虛擬幀緩衝器,畫面交換,

簡介

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

顯示模式

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

調色板

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

記憶體訪問

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

虛擬幀緩衝器

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

畫面交換

由於幀緩衝器通常是為處理多個解析度而設計的,故其記憶體也通常比以低解析度顯示單幀所需要的記憶體大。由於記憶體的大小相當可觀,故可以在不妨礙當前所顯示幀的前提下向視頻記憶體中寫入新幀。這是通過告訴幀緩衝器為當前幀使用某一部分特定記憶體來實現的。這一部分的記憶體內容正在顯示時,另一部分完全獨立的記憶體被填充為下一幀的數據。一旦從緩衝區(通常稱為“後端緩衝區”)被填充,幀緩衝器就被要求查看從緩衝區。此時主緩衝區(通常稱為“前端緩衝區”)變成從緩衝區,從緩衝區則變成了主緩衝區。這一交換通常在垂直遮沒間隔中完成,以避免螢幕被“撕裂”(即顯示一半舊幀、一半新幀)。
現代多數幀緩衝器都有足夠多的記憶體,以執行主從緩衝區的交換——即使是在高解析度下。這樣,它就成了PC遊戲程式設計師所使用的一種標準技術。

相關詞條

熱門詞條

聯絡我們