用戶端會要求一組指令,做為未來未來相框中的顯示。單一視覺框架可擁有多個用戶端「存在」,而每個呈現方式都代表 Flatland 執行個體對全球場景圖的更新。本文件將說明在《觀察》中,要求如何成為像素的架構。
下圖說明用戶端要求在提出要求時採取的步驟。Flatland 是多執行緒系統,且除了會處理合成的中央轉譯執行緒外,還有 Flatland 執行個體各自儲存在執行緒中。
用戶端會對 Flatland API 發出各種呼叫,以修改其場景圖、建立轉換與矩形,以及新增圖片。用戶端建立映像檔時,會註冊多個
BufferCollectionImporterAPI 實作項目,包括 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來修訂變更。完成後,所有轉譯的資料都會顯示在螢幕上。