基礎(chǔ)概念預(yù)學(xué)習(xí)
紋理映射(Texture Mapping)是繪制復(fù)雜場景真實感圖形最為常用的技術(shù)蒸播,它可以通過紋理來表達(dá)表面豐富的幾何細(xì)節(jié)和光照細(xì)節(jié)猬错,甚至可以通過映射后紋理的變形來表達(dá)物體的幾何形狀:在未增加物體多邊形數(shù)情況下,增強(qiáng)了物體的真實感效果
感覺就是用來表達(dá)圖形的一種表達(dá)方式补君,具體的我不知道
skia是個2D向量圖形處理函數(shù)庫,包含字型俩滥、坐標(biāo)轉(zhuǎn)換,以及點陣圖都有高效能且簡潔的表現(xiàn)画切。不僅用于Google Chrome瀏覽器宜岛,新興的Android開放手機(jī)平臺也采用skia作為繪圖處理长踊,搭配OpenGL/ES與特定的硬件特征,強(qiáng)化顯示的效果
應(yīng)該是一個函數(shù)庫萍倡,對圖形數(shù)據(jù)預(yù)處理身弊,可能轉(zhuǎn)換為GPU識別的指令啥的,再通過GL傳遞給GPU指令
Compositor 將來自各個應(yīng)用的 surface(s) 合成為一幀
排版列敲,感覺是將多個應(yīng)用的畫面出現(xiàn)在同一個畫面上阱佛,這里做排版使用
GPU可以訪問的數(shù)據(jù)我們先叫他們GPU資源,資源分為緩沖和各種紋理
Flutter 的架構(gòu)
Flutter 主要分為三個核心模塊
Framework:基于 Dart 語言構(gòu)建的 framework,包括了動畫以及各種組件
Engine:基于 C/C++ 構(gòu)建的引擎戴而,包括了 Skia 和 DartVM, 以及在不同平臺實現(xiàn)的 shell 層凑术,Engine 通過封裝好的 Embedder API 去調(diào)用不同平臺的能力
Embedder:嵌入層,將 Flutter 嵌入到各個平臺上所意。Embedder 負(fù)責(zé)范圍包括原生平臺插件淮逊、線程管理、事件循環(huán)等扶踊。
Flutter Engine 線程模型
UI Task Runner 是執(zhí)行 Dart root isolate 的地方壮莹,root isolate 稍微特殊一點,它綁定了很多函數(shù)姻檀,這個 isolate 也就是運行應(yīng)用所有 dart 代碼的地方,綁定的函數(shù)可以提交渲染幀給 Engine涝滴,供 Engine 去渲染:
- Root isolate 通知 Flutter Engine 有幀需要渲染
- Flutter Engine 通知平臺绣版,需要在下一個 vsync 的時候得到通知
- 平臺等待下一個vsync
- 對 Widgets進(jìn)行布局操作,并生成頁面的顯示信息的描述歼疮,并提交給 Engine
GPU Task Runner 主要用于執(zhí)行設(shè)備 GPU 的指令杂抽。UI Task Runner 創(chuàng)建的 Layer Tree 是跨平臺的,它不關(guān)心到底由誰來完成繪制韩脏。GPU Task Runner 負(fù)責(zé)將 Layer Tree 提供的信息轉(zhuǎn)化為平臺可執(zhí)行的GPU指令缩麸。GPU Task Runner 同時負(fù)責(zé)繪制所需要的GPU資源的管理。資源主要包括平臺 Framebuffer赡矢,Surface杭朱,Texture 和 Buffers等。
我的理解
- Flutter 代碼是運行在root isolate吹散,UI Task Runner之中弧械,如果新開isolate,則是運行中Dart VM線程之中,只能做一些計算任務(wù)
- Flutter運行開始會生成Layer Tree,并告訴Engine,Engin通知平臺空民,需要Vsync信號,平臺GPU得到Vsync,UI Thread在Dart層生成layer tree
- Engine里有Skia ,VM,Compositor等處理后刃唐,通過GL操作GPU生成屏幕數(shù)據(jù)
- 嵌入層提供了各種線程,四種TaskRunner,原生插件銜接工作等
參考資料
Flutter Engine 線程模型,重點
Flutter/Dart中的異步編程之Future
flutter-異步編程