Flutter 新一代图形渲染器 Impeller

15 篇文章 3 订阅
1 篇文章 0 订阅

目前 Flutter 社区的发展已经很庞大,官方统计在过去的一年里,数据上 Flutter 已经基本超过超过其他跨平台框架,成为最受欢迎的移动端跨平台开发工具,截至 2022 年 2 月,有近 50 万个应用程序使用 Flutter。国外&国内很多大厂,个人开发者,社区都投入进来,但由于fullter天生的动态性较差,包大小和一些航母级app的历史包袱等问题,目前国内的发展方向主要是To B业务或者以flutter插件的混合开发的探索。

从最近Flutter的更新步伐也看出,整体降速,稳中提质和完善能力的战略。比如flutter 2.0基本是对web能力的补足,包括一些体验的提升,支持多引擎等。Flutter的2022年目标还是提升用户月活,让自己的社区生态更加繁荣,以应对其他跨端平台的冲击。

2022 RoadMap简介

时间来到了2022年,flutter最新的战略图是围绕桌面,web,开发和交互体验,engine支持多窗口等点打磨自身能力,其中笔者最关注的是flutter为了解决渲染jank的问题的新思路--重构着色器,也就是今天的主题。关于着色器编译Jank问题,官方经过多次尝试依然无法彻底解决,因此在2022年中明确提出要重新考虑使用着色器的方式,计划重写图像渲染后端。

前面一文中我们对现有Flutter绘制引擎Skia进行了剖析,今天我们来认识下未来的新渲染器Impeller,该渲染器从目前看还是个雏形,仅实现了metal后端,支持iOS和Mac系统,flutter计划2022年在iOS上将 Flutter 迁移到新架构上,然后根据经验将该解决方案移植到其他平台上。该渲染器相当于对skia 的gpu模块进行了重写,未来是否替换flutter下的skia,还是共存未可知,笔者更倾向于融合进skia里,毕竟跨平台本身兼容性成本大,难度高。

Flutter jank

Flutter过去一年多的时间解决了很多Jank问题,但compile shader导致的Jank问题一直没有彻底解决。问题源于Flutter底层使用了skia做为2D图形渲染库,而skia内部定义了一套SkSL(Skia shading language),SkSL 属于 GLSL 变体。在光栅化阶段,第一次使用着色器时Skia会根据绘图命令和设备参数生成 SkSL,然后再将 SkSL 转换为特定后端(GLSL、GLSL ES 或 Metal SL)着色器,并在设备上编译为着色器程序。而compile shader可能花费几百毫秒,导致数十帧的jank。flutter经历了多次的尝试解决,在加了slkl预热后,benchmark效果明显,但仍然无法彻底解决问题。

Impeller

Impeller是为flutter量身定做的渲染器,目前=仅实现了metal后端。其依赖了 flutter fml 和 display list,并实现了display list dispatcher 接口,可方便的替换skia。Impeller的核心目标:

性能提升

编译时离线编译所有着色器,并根据着色器预先构建 pipeline state objects。且支持多线程上分发单帧工作负载。

方便移植

虽大量使用底层图形库的API(如Metal和Vulkan)的特性,但是不依赖,不捆绑

impeller大致分为Compiler、Renderer,Entity、Aiks以及基础库Geomety和Base等几个模块。impeller compiler模块是解决着色器编译Jank的关键所在,包含Compiler 和 Reflector。离线编译开始着色器的第一阶段,利用impellerc compiler 把//impeller/entity/shaders/目录下所有着色器源码(包括顶点着色器和片段着色)编译为着色器中间语言 SPIR-V。第二个阶段,将SPIR-V 转换为底层特定的着色器语言(如Metal SL),随后编译为 shader library。同时利用impellerc reflector处理SPIR-V生成 C++ shader binding,用于在运行时快速创建pipeline state objecs(PSO),从而避免编译着色器导致的jank问题,其他细节和原理后续再表。读者也可以从 #85737 上了解其相关进展。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值