上一篇讲到了计算机图形的渲染机制,那么对于iOS设备来说具体是怎么渲染?
IOS图形渲染流程
1.App通过调用CoreAnimation、
CoreGraphics等图形渲染框架提供的接口来触发图形渲染操作,
2.图形渲染框架将渲染数据交由OpenGL ES/Metal底层库,然后由OpenGL ES/Metal驱动GPU做渲染,最后显示到屏幕上。具体如下图:
iOS图形渲染框架
1.UIKit
UIKit 是 我们最常用的框架,这个没有什么好说的。
2.Core Animation
Core Animation 是我们做动画常用的框架,源自于 Layer Kit,其中里面有个很重要概念(CALayer),这个等下再讲。
3.Core Graphics
Core Graphics 基于 Quartz 高级绘图引擎,主要用于运行时绘制图像。例如基于路径的绘图,转换,渐变和阴影,图像数据管理,图像创建和图像遮罩等。
4.Core Image
Core Image 用得不多,主要是用来处理 运行前创建的图像 的。Core Image 框架拥有一系列现成的图像过滤器,能对已存在的图像进行高效的处理。
5.OpenGL ES
OpenGL ES是OpenGL 的子集,而OpenGL是第三方针对视频,图像/图形处理的库。OpenGL是直接操作GPU的,它的代码一般由各GPU厂商负责开发维护.
6.Metal
Metal是苹果公司在OpenGL ES基础上进行二次封装的视频、图形/图像库。
CALayer
在CoreAnimation框架中有一个很重要的概念:CALayer。
它的作用是把我们界面上看到的东西,都转化成独立CALayer,然后统一处理并发送到OpenGL ES/Metal底层库。
我们创建的每一个UIView都有一个CALayer,它是UIView的基础。
UIView和CALayer有一些区别的:
1. UIView侧重内容的管理,CALayer侧重内容的绘制。
2.UIView继承NSResponse,能响应事件,而CALayer不能响应事件.
3.UIView显示的内容都依赖于CALayer,CALayer的显示需要UIView这个容器。
CALayer为什么又能实现显示呢?
答案就是:CALayer基本等同于纹理,这个纹理就是GPU的基本概念了。其实质就是一块contents的缓冲区,可以存放位图(Bitmap)信息。通过CALayer,打通了上层界面和GPU之间的联系。
参考资料:
iOS 图像渲染原理