跳至主要內容

Impeller 渲染引擎

什麼是 Impeller?

#

Impeller 為 Flutter 提供新的渲染執行階段。Flutter 團隊認為這解決了 Flutter 的早期卡頓問題。Impeller 在引擎建構時預先編譯較小、較簡單的著色器集合,因此它們不會在執行階段編譯。

若要觀看 Impeller 的影片介紹,請參考 Google I/O 2023 的以下演講。


Impeller 介紹:Flutter 的新渲染引擎

Impeller 具有以下目標:

  • 可預測的效能:Impeller 在建置時會離線編譯所有著色器和反射。它會預先建立所有管線狀態物件。引擎會控制快取並明確地快取。
  • 可檢測性:Impeller 會標記並標籤所有圖形資源,例如紋理和緩衝區。它可以捕獲動畫並將其持久化到磁碟,而不會影響每幀渲染效能。
  • 可移植性:Flutter 不會將 Impeller 綁定到特定的客戶端渲染 API。您可以編寫一次著色器,並根據需要將其轉換為後端特定的格式。
  • 利用現代圖形 API:Impeller 使用現代 API(如 Metal 和 Vulkan)中提供的功能,但不依賴這些功能。
  • 利用並行性:Impeller 可以根據需要將單幀工作負載分配到多個執行緒。

可用性

#

您可以在哪裡使用 Impeller?

iOS

#

Flutter 在 iOS 上預設啟用 Impeller

  • 若要在偵錯時停用 iOS 上的 Impeller,請將 --no-enable-impeller 傳遞給 flutter run 命令。

    flutter run --no-enable-impeller
  • 若要在部署應用程式時停用 iOS 上的 Impeller,請在應用程式的 Info.plist 檔案中,於最上層的 <dict> 標籤下新增以下標籤。

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

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

macOS

#

從 3.19 版本開始,您可以使用標誌在 macOS 上試用 Impeller。在未來的版本中,將移除選擇不使用 Impeller 的功能。

若要在偵錯時啟用 macOS 上的 Impeller,請將 --enable-impeller 傳遞給 flutter run 命令。

flutter run --enable-impeller

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

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

Android

#

從 3.22 版本開始,Android 上使用 Vulkan 的 Impeller 是發佈候選版本。在不支援 Vulkan 的裝置上,Impeller 將回退到舊版的 OpenGL 渲染器。您無需針對此回退行為執行任何操作。在 Impeller 成為穩定版的預設選項之前,您可以考慮在 Android 上試用 Impeller,您可以明確選擇使用它。

若要在支援 Vulkan 的 Android 裝置上試用 Impeller,請將 --enable-impeller 傳遞給 flutter run

flutter run --enable-impeller

或者,您可以將以下設定新增到專案的 AndroidManifest.xml 檔案中,於 <application> 標籤下

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

錯誤與問題

#

如需 Impeller 已知錯誤和缺少功能的完整列表,最新的資訊位於 GitHub 上的 Impeller 專案看板中。

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

當您提交 Impeller 的問題時,請提供以下資訊:

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

架構

#

若要瞭解更多關於 Impeller 的設計和架構的詳細資訊,請查看原始程式碼樹中的 README.md 檔案。

其他資訊

#