渲染管道简介


浏览:392 次

在讨论渲染管道之前,首先了解Flutter的三树模型(实际上有一个层树,但它太低级,无法讨论)

三棵颤振树示意图

Widget Tree可以被开发人员直接感知,但它的最终形式和代码会有所不同,因为有些Widget本身是由其他Widget组成的。上图中的ColoredBox和其他小部件不是开发人员直接使用的,但它们存在于最终的小部件树中。每个Widget都将有一个对应的Element和一个相应的Element Tree。事实上,元素树是内存中的真实数据。Widget Tree和Render Tree由Element Tree驱动。由于这种机制,元素树在虚拟DOM中扮演管理者的角色。在元素树中,RenderObjectElement类型的节点将生成RenderObjects并形成最终的渲染树。对于开发人员,渲染树是最低的UI描述,但对于框架,渲染树则是框架对UI的最高和最抽象的描述。任何UI框架,无论是Web还是Android,都有自己的渲染管道。UI框架的核心是渲染管道,它负责处理用户输入、生成UI描述、光栅绘制指令、屏幕上的最终数据等。Flutter也不例外。Flutter使用自渲染,因此渲染管道独立于平台。以Android为例,Flutter仅通过Embedder获取曲面或纹理作为渲染管道的最终输出目标。具体来说,Flutter的渲染管道包括以下七个步骤:

用户输入:响应用户通过鼠标、键盘、触摸屏和其他设备产生的手势行为。

动画:根据计时器更新当前帧的数据。

构建:在三个树的创建、更新和销毁阶段,StatelessWidget和State的构建方法将在更改阶段执行。

布局:渲染树将计算此阶段中每个节点的大小和位置。

绘制:渲染树遍历每个节点,生成层树和渲染对象的绘制方法在此阶段执行,以生成一系列绘制指令。

合成:处理层树以生成场景对象作为光栅化的输入。

光栅化:将绘图指令处理为GPU屏幕显示的原始数据。

在以上七个步骤中:用户输入和动画是相对独立的过程,一些简单的静态UI不需要处理。建造、布局和图纸直接关系到Flutter三棵树的维护和使用。它们是框架层的核心功能之一,也是深入理解Flutter基本工作原理的关键(在后续文章中详细描述)。合成和光栅化负责绘图指令的最终消耗,主要逻辑在Engine中实现。

相关资讯:
农产品电子商务向企业个人农产品电子贸易方向发展的效益

农产品电子商务向企业个人农产品电子贸易方向发展的效益

查看
Web 3.0技术的基本方向

Web 3.0技术的基本方向

查看
认知

认知

查看
面向对象的

面向对象的

查看
2018-12-25

2018-12-25

查看