跳轉到主要內容

影像緩衝區

影像緩衝是記憶體的一部分,圖形引擎通過更新影像緩衝,將要在顯示器上顯示的下一幅圖像包含進來。

幀緩衝是RAM的一個連續部分,具有指定大小。

影像緩衝記憶體

影像緩衝具有相應的寬度和高度。 因此,我們通常將影像緩衝視為記憶體的一個二維部分,可通過x、y座標檢索。

二維影像緩衝記憶體

影像緩衝具有相應的色彩格式。 影像緩衝中的每個條目都是該色彩格式下的色彩。 我們將影像緩衝中的每一個這樣的條目稱為像素。

通過計算影像緩衝中像素的儲存位址和更新存儲的色彩,可以更新影像緩衝中位置 x,y 處的像素色彩。

uint32_t pixelAddress = x + y * WIDTH;
framebuffer[ pixelAddress ] = newColor;

同樣地,我們可以獲取影像緩衝中像素的色彩並用在計算中。 例如,暗化影像緩衝中像素的色彩(假設有暗化函數可用)。

uint32_t pixelAddress = x + y * WIDTH;
framebuffer[ pixelAddress ] = darken( framebuffer[ pixelAddress ] );

對於影像緩衝記憶體,通常不會如前文所述逐一讀寫像素,而是利用系統的底層硬體功能(如Chrom-ART DMA)進行讀寫。

顏色

在TouchGFX中,影像緩衝的像素色彩格式可以是:

  • 灰度1、2或4位元每像素(bpp)灰度,或者
  • 高或真彩16、24或32 bpp色彩

每個像素使用的位元數越多,影像緩衝能夠呈現的顏色就越清晰,此外,每個像素使用的位元數越多,影像緩衝消耗的儲存空間就越多。

Display

影像緩衝的內容最終會被傳輸並顯示在顯示器上。 因此,影像緩衝與顯示器的像素寬度和高度相同是十分常見的。

24 bpp影像緩衝內容和顯示器顯示內容

Further reading
參見關於顯示器技術的部分瞭解不同顯示器類型。

影像緩衝的位置

下面是一個基於微控制器的繪圖系統的簡圖。

繪圖系統簡圖

影像緩衝可以位於MCU或外部RAM中。

影像緩衝的可能位置

每個可能位置都具有潛在的優勢和不足。

內部RAM

如果影像緩衝位於MCU內部的RAM中,對影像緩衝的讀和寫存取會盡可能快地完成。 這意味著TouchGFX應用的運行會盡可能平穩。 反過來,內部RAM是十分稀少的資源,被系統的許多元件使用,因此,影像緩衝大量佔用內部RAM也不可行。

如果可行,由於無需額外的RAM,在內部RAM中提供影像緩衝可以降低系統的總體成本。

外部RAM

如果系統有外部RAM,可以選擇在外部RAM而不是內部RAM中提供影像緩衝。 對外部RAM的讀和寫存取通常會比內部RAM慢,但外部RAM的空間量通常大得多。 因此,有時候這是唯一可行的解決方案。

MCU可能具有一些功能(如快取記憶體),可加快外部RAM的存取速度。 參見關於MCU的部分瞭解詳細資訊。

具有嵌入式RAM的顯示器

顯示器上可能嵌入了記憶體,具體取決於系統中顯示器的類型。 此記憶體儲存顯示器“實際”像素的內容。 顯示器中有此像素記憶體,意味著在顯示器仍活動時,MCU可能處於空閒狀態。

由於顯示器記憶體並非記憶體映射,既不打算也不適合用於像素的隨機讀取或寫入,因此不可能在顯示器RAM中提供TouchGFX影像緩衝。 相反,TouchGFX將影像緩衝置於內部或外部RAM中,並在適當的時候將其傳輸到顯示器RAM。

影像緩衝的數量

TouchGFX可在應用中使用一個、多個或少於一個的影像緩衝。 影像緩衝的數量會影響應用的視覺上的表現、性能和儲存空間消耗。

一個影像緩衝

一個影像緩衝足以完全容納要傳輸到顯示器的所有像素。 當開發板上沒有顯示器RAM時,需要(至少)一個影像緩衝。 在這種情況下,如果所顯示圖形的複雜度不會產生任何視覺失真,則只需一個影像緩衝。

多於一個的影像緩衝

在TouchGFX中,具有多個影像緩衝表示有兩個影像緩衝。 一個影像緩衝用於寫入下一幅圖像,另一個影像緩衝用於將圖像傳輸到顯示器。 這意味著不會發生失真(如撕裂)。

少於一個的影像緩衝

少於一個的影像緩衝通常意味著

  • 消耗的儲存空間較少
  • 將執行更多繪製操作
  • 需要向顯示器傳輸更多內容

在TouchGFX中,不足一個的影像緩衝表示部分影像緩衝。 部分影像緩衝方案只適用於具有顯示器RAM的顯示器。

儲存空間消耗

影像緩衝中的色彩數量和像素數量決定了影像緩衝消耗的儲存空間。

影像緩衝使用的儲存空間通常為 寬 以位元數計的色深 / 8 位元組數。

解析度(像素)色彩(bpp)計算消耗的儲存空間(位元組)
800x48016 bpp800 480 16 / 8768.000 B
480x27224 bpp480 272 24 / 8391.680 B
100x1008 bpp100 100 8 / 810.000 B

當具有一個以上的影像緩衝時,消耗的存儲空間相對地較大。 例如,當使用雙重影像緩衝方案時,使用兩個影像緩衝會消耗兩倍的儲存空間。

當影像緩衝不足一個時,由應用明確地分配和控制存儲空間的量。 因此,存儲空間的消耗量是完全可定制的,但應注意的是,使用量過少會影響整體圖形性能。

Further reading
  • STM32 LTDC顯示器控制器文件提供了關於影像緩衝的更多資訊