Impeller 渲染引擎
什麼是 Impeller?
#Impeller 為 Flutter 提供了新的渲染執行時。Impeller 在引擎構建時預編譯了更小、更簡單的著色器集,從而避免了在執行時編譯。
有關 Impeller 的影片介紹,請觀看 Google I/O 2023 的以下演講。
Impeller 的目標如下:
- 可預測的效能:Impeller 在構建時離線編譯所有著色器和反射。它預先構建所有管線狀態物件。引擎控制快取並顯式快取。
- 可追蹤:Impeller 為所有圖形資源(如紋理和緩衝區)打上標籤。它可以捕獲動畫並將其持久化到磁碟,而不會影響每幀渲染效能。
- 可移植:Flutter 不將 Impeller 繫結到特定的客戶端渲染 API。您可以編寫一次著色器,並在必要時將其轉換為特定後端格式。
- 利用現代圖形 API:Impeller 使用 Metal 和 Vulkan 等現代 API 中提供的功能,但並不依賴於它們。
- 利用併發:Impeller 可在必要時將單幀工作負載分佈到多個執行緒上。
可用性
#您可以在何處使用 Impeller?有關詳細資訊,請參閱 Impeller 可用性? 頁面。
iOS
#自 Flutter 3.29 起,Impeller 已成為iOS 上的預設設定,無法切換到 Skia。
Android
#Impeller在 Android API 29+ 上可用且預設啟用。在執行較低版本 Android 或不支援 Vulkan 的裝置上,Impeller 會回退到舊版 OpenGL 渲染器。此回退行為無需您採取任何操作。
要在除錯時停用 Impeller,請將
--no-enable-impeller引數傳遞給flutter run命令。flutter run --no-enable-impeller要在部署應用程式時停用 Impeller,請將以下設定新增到專案
AndroidManifest.xml檔案中的<application>標籤下:
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />Web
#Flutter 網頁版提供兩種渲染器——canvaskit 和 skwasm——它們目前都使用 Skia。未來它們可能會使用 Impeller。
macOS
#您可以透過一個標誌來嘗試 macOS 上的 Impeller。在未來的版本中,將移除退出使用 Impeller 的功能。
要在除錯時在 macOS 上啟用 Impeller,請將 --enable-impeller 引數傳遞給 flutter run 命令。
flutter run --enable-impeller要在部署應用程式時在 macOS 上啟用 Impeller,請在應用程式的 Info.plist 檔案中頂級 <dict> 標籤下新增以下標籤。
<key>FLTEnableImpeller</key>
<true />Bug 和問題
#團隊將繼續改進 Impeller 的支援。如果您在任何平臺上遇到 Impeller 的效能或保真度問題,請在 GitHub 問題跟蹤器上提交問題。在問題標題前加上 [Impeller],幷包含一個小的可重現的測試用例。
提交 Impeller 問題時,請包含以下資訊:
- 您正在執行的裝置,包括晶片資訊。
- 任何可見問題的螢幕截圖或錄影。
- 效能跟蹤的匯出檔案。將檔案壓縮並附加到 GitHub 問題中。
架構
#要了解有關 Impeller 設計和架構的更多詳細資訊,請檢視原始碼樹中的 README.md 檔案。