影像緩衝區
影像緩衝是記憶體的一部分,圖形引擎通過更新影像緩衝,將要在顯示器上顯示的下一幅圖像包含進來。
幀緩衝是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
影像緩衝的內容最終會被傳輸並顯示在顯示器上。 因此,影像緩衝與顯示器的像素寬度和高度相同是十分常見的。
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) | 計算 | 消耗的儲存空間(位元組) |
---|---|---|---|
800x480 | 16 bpp | 800 480 16 / 8 | 768,000 B |
480x272 | 24 bpp | 480 272 24 / 8 | 391,680 B |
100x100 | 8 bpp | 100 100 8 / 8 | 10,000 B |
當具有一個以上的影像緩衝時,消耗的存儲空間相對地較大。 例如,當使用雙重影像緩衝方案時,使用兩個影像緩衝會消耗兩倍的儲存空間。
當影像緩衝不足一個時,由應用明確地分配和控制存儲空間的量。 因此,存儲空間的消耗量是完全可定制的,但應注意的是,使用量過少會影響整體圖形性能。