IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Flutter 新一代图形渲染器 Impeller -> 正文阅读

[游戏开发]Flutter 新一代图形渲染器 Impeller

目前 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?上了解其相关进展。

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:46:08  更:2022-04-24 09:47:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 15:10:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码