Impeller 渲染引擎
什么是 Impeller 以及如何启用它?
什么是 Impeller?
#Impeller 为 Flutter 提供了一个新的渲染运行时。Impeller 在引擎构建时预编译一个 更小、更简单的着色器集,因此它们不会在运行时编译。
有关 Impeller 的视频介绍,请查看 Google I/O 2023 的以下演讲。
Impeller 具有以下目标
- 可预测的性能:Impeller 在构建时离线编译所有着色器和反射。它提前构建所有管道状态对象。引擎控制缓存并显式缓存。
- 可检测性:Impeller 标记和标记所有图形资源,例如纹理和缓冲区。它可以捕获并持久化动画到磁盘,而不会影响每帧渲染性能。
- 可移植性:Flutter 不会将 Impeller 绑定到特定的客户端渲染 API。您可以编写一次着色器,并根据需要将其转换为后端特定的格式。
- 利用现代图形 API:Impeller 使用但不依赖于现代 API(如 Metal 和 Vulkan)中提供的功能。
- 利用并发性:如果需要,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 on the web 提供 两种渲染器 -- 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 />
错误和问题
#团队将继续改进 Impeller 的支持。如果您在任何平台上遇到 Impeller 的性能或保真度问题,请在 GitHub 跟踪器 中提交问题。在问题标题前加上 [Impeller],并包含一个小的可重现的测试用例。
提交 Impeller 问题时,请包含以下信息
- 您正在运行的设备,包括芯片信息。
- 任何可见问题的屏幕截图或录像。
- 性能跟踪的 导出。将文件压缩并将其附加到 GitHub 问题。
架构
#要了解有关 Impeller 设计和架构的更多详细信息,请查看源代码树中的 README.md 文件。