IOS渲染流程之RenderServer处理图层信息

2022-10-09 12:36:23 浏览数 (2)

theme: fancy

先来回顾一下Android的渲染史:

Android的渲染史:

Android4.0之前绘制是在主线程执行的,4.0之后除了引入Vsync和双缓冲还引入了单独处理绘制的RenderServer线程。在draw中保存记录绘制指令,稍后RenderServer会取出绘制指令进行调用GPU绘制,填充到Surface的缓冲区中,WindowManager将所有的Surface提供到缓冲区中,SurfaceFliger取出缓冲区的数据进行合成图层操作,合成策略会借鉴于HWComposer模块一起处理,HWComposer再将处理好的数据给到frameBuffer,Display取展示到屏幕。

RenderServer在IOS中是单独的进程去处理,在Android中RenderServer线程去处理绘制操作,只不过该线程是FM层维护的

同步至RenderServer进程

将CALayer的content数据打包通过IPC提交到RenderServer进程,RenderServer进行调用CoreAnimation框架进行处理阴影等信息:

RenderServer流程:

解析发送过来的图层信息包,里面包含图元信息。
调用OPGL生成图像将处理后的数据提交到GPU的command Buffer缓冲区中(最主要的工作)
GPU从command Buffer缓冲区中读取数据,进行处理图元信息

处理图元信息流程:

  • Triler对应于顶点处理器,给图元添加基本信息:光照,纹理等信息
  • 平铺:将图元转换为Vertex,链接Vertex,生成额外的Vertex用于生成更复杂的几何图形 ,并进行光栅化处理(生成像素跨国像素中心点的才是有效像素),并将像素信息提交到Parameter Buffer中
  • Tiler更新完像素信息,Parameter 缓冲区满自后,将像素处理转换为Bitmap(处理像素,生成Bitmap)。 这个里面会进行片段着色器等处理,对片段进行着色(计算图元的光照纹理信息...)....
  • 混合裁剪:减少不必要的渲染,对透明度等进行混合/......
  • 将处理后的数据放到renderBuffer缓冲区中【猜测是三缓冲的第三个缓冲区】

交换缓冲区

等待Vsync信号置换renderBuffer和BackBuffer的数据,BackBuffer和frameBuffer的数据,Display取出frameBuffer进行渲染

0 人点赞