用戶端會要求一組指令,做為未來未來相框中的顯示。單一視覺框架可擁有多個用戶端「存在」,而每個呈現方式都代表 Flatland 執行個體對全球場景圖的更新。本文件將說明在《觀察》中,要求如何成為像素的架構。
下圖說明用戶端要求在提出要求時採取的步驟。Flatland 是多執行緒系統,且除了會處理合成的中央轉譯執行緒外,還有 Flatland 執行個體各自儲存在執行緒中。
用戶端會對 Flatland API 發出各種呼叫,以修改其場景圖、建立轉換與矩形,以及新增圖片。用戶端建立映像檔時,會註冊多個
BufferCollectionImporter
API 實作項目,包括 Vulkan 和顯示控制器實作項目。每個映像檔都會建立映像檔的內部內部表示法,以用於 sysmem 支援的網域 (例如 Vulkan 的 Vulkan 映像檔),這在之後成為重要,請參閱步驟 8)。準備就緒後,用戶端會呼叫Present()
進行修訂。FrameScheduler
會決定何時套用Present()
呼叫。並使用自身內部政策提前喚醒,以在下次 vsync 之前顯示影格。每個 Flatland 執行個體都與其專屬的
UberStruct
相關聯,即特定 Flatland 執行個體的本機資料集合,代表該執行個體呈現狀態的最新修訂版本。UberStruct
代表 Flatland 執行個體的本機狀態快照。因此,其僅包含資料,沒有外部資源參照。呼叫Present()
後,扁平執行個體的UberStruct
會在這個時間更新。接下來,
UberStructSystem
需要編譯UberStruct
資料。UberStructSystem
是所有 uberstruct 的中央管理工具,是將 Flatland 執行個體中的本機資料 (uberstructs) 匯總為整個場景圖的快照,以供轉譯迴圈使用。更明確地說,UberStructSystem
會擷取所有已取得信號的圍欄的 Uberstruct 快照。其意圖是讓個別工作站執行緒擁有每個 Flatland 執行個體、在本機執行緒中計算本機資料 (例如拓撲向量),然後以並行的方式將這些向量提交至UberStructSystem
。此處的
UberStructSystem
資料會傳送至Engine
,藉此將多個 Flatland 執行個體中的資料拉長成適合進行低階圖形顯示和顯示處理的長型 1 維陣列。此外,我們也在引擎進行矩形可轉譯資料的遮蔽。此時,轉譯程序可分為兩種可能的選項。 Flatland 可執行直接顯示合成和 Vulkan 式 GPU 合成。
DisplayCompositor
負責管理這兩個轉譯路徑,並選擇要用於某個影格的轉譯資料組合。我們建議採用直接顯示畫面的顯示路徑,因為它可將內容直接繫結至裝置硬體層,無須進行昂貴的算繪運算。但是,圖層數量有限 (視特定裝置而異),以及裝置套用圖片適用的特定規則。只要符合相關條件,就會直接跳到步驟 7。否則,我們會進行步驟 8。在直接顯示組合期間,
DisplayCompositor
會取得RectangleRenderable
資料,並將各個矩形分解為source
和dest
資料,以套用將套用該圖層的圖層。Source
資料是指要繪製圖片的紋素中的裁剪尺寸。Dest
資料是指圖片在螢幕空間中的像素像素尺寸。同時,我們也試著在這裡直接顯示色彩轉換。如果無法直接進行顯示直接組合,就會改用 GPU 合成。轉譯資料會從
DisplayCompositor
傳送至VkRenderer
。這裡列出的任何步驟之前,當用戶端在 Flatland 執行個體中設定圖片時,系統會使用VkRenderer
(步驟 1) 註冊這些映像檔,其針對 sysmem 支援的映像檔建立 Vulkan 紋理。進入這個步驟後,建立 Vulkan 紋理的作業就已完成。也就是說,所有VkRenderer::Render()
函式都必須將轉譯資料傳送至RectangleCompositor
(下方步驟 9) 之前建立新的Escher
頁框,透過轉換圖片版面配置並計算其適當的正規化 UV 座標,以及設定轉譯完成時,向信號發出 Vulkan 協議,以準備要轉譯的紋理。資料會從
VkRenderer
向下傳遞至RectangleCompositor
。RectangleCompositor
是一般的 2D Vulkan 合成器,利用 Escher 將圖片資料陣列轉譯成輸出圖像 (framebuffer)。為提高運作效率,系統會分開處理不透明和透明的資料。不透明資料會前後往前後公開,且 Vulkan CommandBuffers 會隨處更新,而其他資料則需要進行轉譯,例如推送常數。當所有指令都被推送至 Vulkan 指令緩衝區後,我們進入 GPU 等級,由則扁平專屬頂點和片段著色器正在處理轉譯資料。此外,如果在嘗試直接顯示多媒體廣告時未成功套用色彩轉換,系統也會在這裡叫用 Flatland 色彩轉換著色器,並直接計算色彩校正值,做為主要算繪通道之後的子通道。
所有資料都套用至顯示控制器設定後,我們會呼叫
ApplyConfig
來修訂變更。完成後,所有轉譯的資料都會顯示在螢幕上。