iOS界面渲染机制

iOS渲染视图的核心是Core Animation


image.png

从中可以看到,界面显示的整体流程如下:
1、CoreAnimation提交会话,包括自己和子树(view hierarchy)的layout状态等;
2、RenderServer解析提交的子树状态,生成绘制指令;
3、GPU执行绘制指令;
4、显示渲染后的数据;

具体来说:

CPU阶段

布局(Frame)
显示(Core Graphics)
准备(QuartzCore/Core Animation)
通过IPC提交(打包好的图层树以及动画属性)

OpenGL ES阶段

生成(Generate)
绑定(Bind)
缓存数据(Buffer Data)
启用(Enable)
设置指针(Set Pointers)
绘图(Draw)
清除(Delete)

GPU阶段

接收提交的纹理(Texture)和顶点描述(三角形)
应用变换(transform)
合并渲染(离屏渲染等)

  • 首先一个视图由CPU进行Frame布局,准备视图和图层的层级关系,查询是否有重写drawRect:或drawLayer:inContext:方法。

  • CPU会将处理视图和图层的层级关系打包,通过IPC(内部处理通信)通道提交给渲染服务,渲染服务由OpenGL ES和GPU组成。

  • 渲染服务首先将图层数据交给OpenGL ES进行纹理生成和着色。生成前后帧缓存,再以设备的VSync信号和CADisplayLink为标准,进行前后帧缓存的切换。

  • 将最终要显示在画面上的后帧缓存交给GPU,进行采集图片和形状,运行变换,应用纹理和混合。最终显示在屏幕上

app从点击屏幕(硬件)到完全渲染的过程:

  • 首先一个视图由CPU进行Frame布局,准备视图和图层的层级关系。

  • CPU会将处理视图和图层的层级关系打包,通过IPC(内部处理通信)通道提交给渲染服务,渲染服务由OpenGL ES和GPU组成。

  • 渲染服务首先将图层数据交给OpenGL ES进行纹理生成和着色。生成前后帧缓存,再设备的VSync信号和CADisplayLink为标准,进行前后帧缓存的切换。

  • 将最终要显示在画面上的后帧缓存交给GPU,进行采集图片和形状,运行变换,应用纹理和混合。最终显示在屏幕上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 在最近的面试中,我发现一道面试题,其考点是:围绕iOS App中一个视图从添加到完全渲染,在这个过程中,iO...
    筑梦师Winston阅读 24,469评论 26 197
  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 10,573评论 3 23
  • 一、屏幕显像原理 上图显示的是CRT电子枪扫描路径,涉及到两个比较重要的概念:水平同步信号(HSync),垂直同步...
    绿叶竹林阅读 4,902评论 1 3
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,796评论 1 32
  • 她的妆不再为我而着 所行之事变得倦怠 看上去安静随和 却是另外一副样子 为她人愿得消瘦 目光再不曾追逐我分毫 留不...
    彧愔从阅读 1,690评论 0 0