跳转至正文

Impeller 渲染引擎

什么是 Impeller,如何启用?

什么是 Impeller?

#

Impeller 为 Flutter 提供新的渲染运行时。 Impeller 在引擎构建时预编译 更小、更简单的着色器集,避免在运行时编译。

要了解 Impeller 的视频介绍,可观看 Google I/O 2023 的以下演讲。

Watch on YouTube in a new tab: "Introducing Impeller, Flutter's new rendering engine"

Impeller 的目标包括:

  • 可预测的性能: Impeller 在构建时离线编译所有着色器与反射,预先构建所有管线状态对象,由引擎显式控制缓存。

  • 可观测: Impeller 为纹理、缓冲区等图形资源打标签,可在不影响每帧渲染性能的情况下捕获动画并持久化到磁盘。

  • 可移植:Flutter 不将 Impeller 绑定到特定客户端渲染 API,可一次编写着色器并按需转换为后端格式。

  • 利用现代图形 API:Impeller 使用 Metal、Vulkan 等现代 API 的特性,但不依赖它们。

  • 利用并发:必要时 Impeller 可将单帧工作负载分布到多个线程。

可用性

#

在哪里可以使用 Impeller?详细 信息请参阅 我可以使用 Impeller 吗? 页面。

iOS

#

Impeller 是 iOS 上 唯一支持 的渲染引擎,无法切换回 Skia。

Android

#

Impeller 在 Android API 29+ 上默认可用并已启用。在较低 Android 版本或不支持 Vulkan 的设备上,Impeller 会回退到旧版 OpenGL 渲染器。你无需为此回退行为做任何操作。

  • 调试时 禁用 Impeller,向 flutter run 传入 --no-enable-impeller

    flutter run --no-enable-impeller
    
  • 部署应用时 禁用 Impeller,在项目的 AndroidManifest.xml<application> 标签下添加以下设置:

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

Web

#

目前,Flutter 在 web 端使用 Skia 进行渲染。未来可能会改用 Impeller。

macOS

#

从 Flutter 3.47 开始,Impeller 默认提供并启用。在未来版本将移除选择不使用 Impeller 的选项。

如果要在 macOS 调试时禁用 Impeller,可以向 flutter run 传入 -no-enable-impeller

flutter run --no-enable-impeller

如果要在 macOS 部署时禁用 Impeller,请在应用 Info.plist 顶层 <dict> 标签下添加以下内容:

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

Linux

#

Impeller is available and enabled by default as of Flutter 3.47. In a future release, the ability to opt out of using Impeller will be removed.

To disable Impeller on Linux when debugging, pass --no-enable-impeller to the flutter run command:

flutter run --no-enable-impeller

To disable Impeller on Linux when deploying your app, add the following setup to your project in linux/runner/my_application.cc:

c
g_autoptr(FlDartProject) project = fl_dart_project_new();
fl_dart_project_set_enable_impeller(project, FALSE);

Windows

#

Impeller is available and enabled by default as of Flutter 3.47. In a future release, the ability to opt out of using Impeller will be removed.

To disable Impeller on Windows when debugging, pass --no-enable-impeller to the flutter run command.

flutter run --no-enable-impeller

To disable Impeller on Windows when deploying your app, add the following setup to your project in windows\runner\main.cpp:

cpp
flutter::DartProject project(L"data");
project.set_impeller_switch(flutter::ImpellerSwitch::Disabled);

Bug 与 issue

#

团队持续改进 Impeller 支持。若在任何平台上遇到 Impeller 的性能或保真度问题,请在 GitHub tracker 提交 issue,标题以 [Impeller] 为前缀,并附上可复现的小型测试用例。

提交 Impeller 相关 issue 时请包含以下信息:

  • 运行设备,包括芯片信息。

  • 任何可见问题的截图或录屏。

  • 性能跟踪导出。将文件 zip 后附在 GitHub issue 中。

架构

#

要了解 Impeller 设计与架构的更多细节,请参阅源码树中的 README.md 文件。

更多信息

#