Impeller 渲染引擎
什么是 Impeller?
#Impeller 为 Flutter 提供了一个新的渲染运行时。Flutter 团队认为这解决了 Flutter 的 早期卡顿 问题。Impeller 在引擎构建时预编译了一组 更小、更简单的着色器,因此它们不会在运行时编译。
有关 Impeller 的视频介绍,请查看以下来自 Google I/O 2023 的演讲。
Impeller 具有以下目标
- 可预测的性能:Impeller 在构建时离线编译所有着色器和反射。它预先构建所有管道状态对象。引擎控制缓存并显式缓存。
- 可检测:Impeller 对所有图形资源(如纹理和缓冲区)进行标记和标签。它可以捕获动画并将其持久化到磁盘,而不会影响每帧渲染性能。
- 可移植:Flutter 不会将 Impeller 绑定到特定的客户端渲染 API。您可以编写一次着色器,并根据需要将其转换为特定于后端的格式。
- 利用现代图形 API:Impeller 使用但并不依赖于 Metal 和 Vulkan 等现代 API 中提供的功能。
- 利用并发性:必要时,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 上尝试使用它,您可以显式选择使用它。
要在支持 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 如何解决 OpenGL ES 2.0 中缺少统一缓冲区的问题
- 编写高效着色器的指南
- Impeller 中的颜色混合是如何工作的
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-07-06。 查看源代码 或 报告问题.