Impeller 渲染引擎

Impeller 是什麼?

Impeller 為 Flutter 提供新的渲染執行時間。Flutter 團隊相信這解決了 Flutter 的 早期開始延遲 問題。Impeller 在引擎建置時預先編譯 較小、較簡單的著色器組,因此它們不會在執行時編譯。

如需 Impeller 的影片介紹,請觀看 Google I/O 2023 的以下演講。

介紹 Impeller - Flutter 的新渲染引擎

葉輪具有下列目標

  • 可預測的效能:葉輪會在建置時離線編譯所有著色器和反射。它會預先建置所有管線狀態物件。引擎會控制快取並明確快取。
  • 可儀器化:葉輪會標記和標籤所有圖形資源,例如紋理和緩衝區。它可以在不影響每幀渲染效能的情況下擷取動畫並將其儲存在磁碟中。
  • 可攜式:Flutter 沒有將葉輪繫結到特定客戶端渲染 API。您可以編寫著色器一次,並依需要將其轉換為後端特定格式。
  • 利用現代圖形 API:葉輪會使用 Metal 和 Vulkan 等現代 API 中提供的功能,但不會依賴這些功能。
  • 利用並行性:葉輪可以在必要時將單一幀工作負載分配到多個執行緒。

可用性

您可以在哪裡使用葉輪?

iOS

Flutter 在 iOS 上預設啟用葉輪。

  • 若要在除錯時停用 iOS 上的葉輪,請將 --no-enable-impeller 傳遞給 flutter run 指令。

    flutter run --no-enable-impeller
    
  • 若要在部署應用程式時停用 iOS 上的葉輪,請在應用程式的 Info.plist 檔案中的頂層 <dict> 標籤下加入下列標籤。

      <key>FLTEnableImpeller</key>
      <false />
    

團隊持續改善 iOS 支援。如果您在 iOS 上的葉輪中遇到效能或保真度問題,請在 GitHub 追蹤器 中提交問題。在問題標題加上 [Impeller] 前綴,並包含一個小型可重製的測試案例。

macOS

Impeller 已於 Flutter 3.13 穩定版中以預覽版形式提供給 macOS。在 3.19 版本中,它仍處於預覽階段。

若要在除錯時於 macOS 上啟用 Impeller,請將 --enable-impeller 傳遞給 flutter run 指令。

flutter run --enable-impeller

若要在部署應用程式時於 macOS 上啟用 Impeller,請在應用程式的 Info.plist 檔案中頂層 <dict> 標籤下加入下列標籤。

  <key>FLTEnableImpeller</key>
  <true />

Android

從 Flutter 3.16 開始,Impeller 可在支援 Vulkan 的 Android 裝置上透過標記使用。在 3.19 版本中,它仍處於預覽階段。

您可以透過將 --enable-impeller 傳遞給 flutter run 來在支援 Vulkan 的 Android 裝置上嘗試 Impeller

flutter run --enable-impeller

或者,您可以在專案的 AndroidManifest.xml 檔案中 <application> 標籤下加入下列設定

<meta-data
    android:name="io.flutter.embedding.android.EnableImpeller"
    android:value="true" />

錯誤和問題

有關 Impeller 所有已知錯誤和遺失功能的完整清單,最新資訊請參閱 GitHub 上的 Impeller 專案看板

團隊持續改善 Impeller 支援。如果您在任何平台上遇到 Impeller 的效能或保真度問題,請在 GitHub 追蹤器 中提交問題。在問題標題前加上 [Impeller] 並附上一個小型可重製的測試案例。

提交 Impeller 問題時,請包含下列資訊

  • 您執行的裝置,包括晶片資訊。
  • 任何可見問題的螢幕截圖或錄製。
  • 效能追蹤的匯出。將檔案壓縮,並附加到 GitHub 議題。

架構

若要深入了解 Impeller 的設計和架構,請查看原始碼樹中的 README.md 檔案。

其他資訊