Impeller 渲染引擎
什麼是 Impeller?
#Impeller 為 Flutter 提供新的渲染執行階段。Flutter 團隊認為這解決了 Flutter 的早期卡頓問題。Impeller 在引擎建構時預先編譯較小、較簡單的著色器集合,因此它們不會在執行階段編譯。
若要觀看 Impeller 的影片介紹,請參考 Google I/O 2023 的以下演講。
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>
標籤下新增以下標籤。
<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>
標籤下
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="true" />
錯誤與問題
#如需 Impeller 已知錯誤和缺少功能的完整列表,最新的資訊位於 GitHub 上的 Impeller 專案看板中。
團隊會持續改進 Impeller 支援。如果您在任何平台上使用 Impeller 時遇到效能或保真度問題,請在 GitHub 問題追蹤器中提交問題。請在問題標題前加上 [Impeller]
,並包含一個小的可重現測試案例。
當您提交 Impeller 的問題時,請提供以下資訊:
- 您正在執行的裝置,包括晶片資訊。
- 任何可見問題的螢幕截圖或錄影。
- 一份效能追蹤的匯出。請將該檔案壓縮並附加到 GitHub 問題。
架構
#若要瞭解更多關於 Impeller 的設計和架構的詳細資訊,請查看原始程式碼樹中的 README.md 檔案。
其他資訊
#- 常見問題
- Impeller 的座標系統
- 如何設定 Xcode 以使用 Metal 進行 GPU 幀捕獲
- 學習讀取 GPU 幀捕獲
- 如何為命令列應用程式啟用 Metal 驗證
- Impeller 如何解決 Open GL ES 2.0 中缺乏統一緩衝區的問題
- 撰寫高效著色器的指南
- Impeller 中色彩混合的工作原理
除非另有說明,本網站上的文件反映了 Flutter 的最新穩定版本。此頁面最後更新於 2024-07-06。 檢視原始碼 或 回報問題。