本文共 655 字,大约阅读时间需要 2 分钟。
在2022年6月,Google官方发布了Flutter 3.0版本,这一发布标志着Impeller渲染器正式从独立仓库中合并到Flutter Engine主干中进行迭代。这一举措是Flutter团队在2021年推动重新实现Flutter渲染后端以来的重要一步,Impeller的引入标志着Flutter渲染后端的未来发展方向。作为Flutter渲染后端的替代方案,Impeller的目标是彻底解决SkSL引入的Jank问题。那么,着色器编译Jank问题到底是什么呢?
众所周知,Flutter底层依赖Skia作为2D图形渲染库,而Skia内部定义了一套叫做SkSL(Skia Shading Language)的着色器编译语言。SkSL可以理解为基于特定版本的GLSL(OpenGL着色器语言)进行设计的变体,其主要作用是消除不同GPU驱动API下着色器语法的差异,从而为目标着色器语言(如GLSL、GLSL ES或Metal SL)提供一致的前编译语言。因此,SkSL可以被视为一种着色器的预编译语言。
在Flutter的渲染过程中,当需要使用着色器时,Skia会根据绘图命令和设备特性生成SkSL代码。随后,Skia会将生成的SkSL代码转换为目标平台的着色器语言(如GLSL、GLSL ES或Metal SL),并编译成设备具体的着色器程序。然而,这一着色器编译过程往往需要几百毫秒的时间,这会导致数十帧的画面丢失,引发用户体验上的明显问题。因此,定位着色器编译优化成为Flutter团队工作的重点方向。
转载地址:http://vihfk.baihongyu.com/