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>
标记下添加以下标记。<key>FLTEnableImpeller</key> <false />
该团队正在继续改进 iOS 支持。如果您在 iOS 上使用 Impeller 时遇到性能或保真度问题,请在 GitHub 跟踪器 中提交问题。在问题标题前加上 [Impeller]
,并附上一个可复现的小型测试用例。
macOS
从 Flutter 3.13 稳定版开始,Impeller 可在 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文件。