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> 标记下添加以下标记。

      <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文件。

其他信息