Impeller 渲染引擎
什么是 Impeller?
#Impeller 为 Flutter 提供了一个新的渲染运行时。Impeller 在引擎构建时预编译了更小、更简单的着色器集,因此它们不会在运行时编译。
要观看 Impeller 的视频介绍,请查看 Google I/O 2023 上的以下演讲。
Introducing Impeller, Flutter's new rendering engine
Impeller 的目标如下:
- 可预测的性能: Impeller 在构建时离线编译所有着色器和反射。它预先构建所有管道状态对象。引擎控制缓存并显式缓存。
- 可检测: Impeller 标记和标记所有图形资源,例如纹理和缓冲区。它可以捕获并将动画持久保存到磁盘,而不会影响每帧渲染性能。
- 可移植: Flutter 不会将 Impeller 绑定到特定的客户端渲染 API。您可以编写一次着色器,并根据需要将其转换为特定于后端的格式。
- 利用现代图形 API: Impeller 使用但不依赖于现代 API(如 Metal 和 Vulkan)中提供的功能。
- 利用并发: Impeller 可以根据需要将单帧工作负载分配到多个线程。
可用性
#您可以在哪里使用 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 />
Android
#Flutter 在 Android 上默认启用 Impeller。在不支持 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" />
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 文件。
其他信息
#- 常见问题
- Impeller 的坐标系
- 如何为使用 metal 的 GPU 帧捕获设置 Xcode
- 学习阅读 GPU 帧捕获
- 如何为命令行应用程序启用 metal 验证
- Impeller 如何解决 Open GL ES 2.0 中缺少统一缓冲区的问题
- 编写高效着色器的指南
- Impeller 中的颜色混合机制
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。