一、各种渲染框架
iOS 中的绘图相关的架构如下:
![](https://img.haomeiwen.com/i4044896/94abc18b57a43b1e.png)
其中 OpenGL ES 在 iOS12 之后被正式废弃,并使用新框架 Metal 替换;
1. Quartz、Quartz 2D、QuartzCore
三个概念傻傻分不清楚,那么我们一个一个来看:
- Quartz
Quartz 是 MacOS 上的 framework,iOS 中不能使用。包括 Quart Composer、PDFKit、ImageKit 三大部分。这个框架功能很齐全,但是也相对比较重量级,实际开发中使用也相对较少,具体可以参阅官方文档:Quartz;
通过 #import <Quartz/Quartz.h>
来进入,该头文件包含的内容如下:
![](https://img.haomeiwen.com/i4044896/5deb4856fff38c23.png)
如上图,引入了 QuartzCore,这个又是什么呢?
- QuartzCore
QuartzCore 就是 Core Animation,也就是文章最初的那张框架图中的 Core Animation。Core Animation 就不用多说了吧,掌握着绘制的整个流程,还能够做动画,这也是后文的重点,这里就不赘述了。
Core Animation 在 iOS 上合 MacOS 上都可以使用,但是不完全一样,来看看头文件;
iOS 中:
![](https://img.haomeiwen.com/i4044896/db6fb38d525791d1.png)
MacOS 中:
![](https://img.haomeiwen.com/i4044896/54fc2605c55eab8c.png)
其中的区别就不赘述了,可以直接去官方文档查阅:Core Animation;
- Quartz 2D
Quartz 2D 就是 Core Graphic,是基于 Quartz 实现的 2D 渲染接口集(framework),具有轻量、无与伦比的输出保证度(unmatched output fidelity)。
也就是说 Quartz 的功能是最齐全的,但是也相对重量级。 Apple 根据需要,则基于 Quartz 实现了轻量级的 Core Graphic ,主要用于 2D 渲染,功能包括:基于路径的绘制、颜色管理、离屏渲染、模板、渐变、图片数据管理、图像创建、图片遮罩、PDF的解析展示和创建等。在 MacOS 上, Core Graphic 还包括一些用于硬件展示、窗口系统、底层用户输入事件的服务。
具体可以参阅官方文档,这里也不赘述了:Core Graphics
另外,需要注意的是 Quartz 2D 的渲染接口是基于 CPU 实现的,不调用 GPU,而 OpenGL 和 Metal 是基于 GPU 实现的渲染。后文会详细讲述;
2. OpenGL 、OpenGL ES、Metal、DirectX
这几个名词都不是严格意义上的 Api,而是标准协议,OpenGL 更加通用,而 Metal 由 Apple 创建、实现并维护,DirectX 由微软创建、实现并维护。而 OpenGL ES 则是 OpenGL 的子集,更加适用于嵌入式设备;
协议只是一套标准,在 CPU 和 GPU 上都可以实现,所以有的 CPU 也是支持 OpenGL 协议的。但是现在一般都是由 GPU 来实现 OpenGL 相关的协议;
iOS 中的 OpenGLES.framework
就是针对 OpenGL ES 协议,使用了 C 语言进行了实现。其实现同 Metal 一样,是基于 GPU 进行实现的:
![](https://img.haomeiwen.com/i4044896/06e83ab9a16f9477.png)
![](https://img.haomeiwen.com/i4044896/8dbddb3e5fe91e8d.png)
OpenGL ES 已经被弃用,如果有兴趣可以查阅官方文档:OpenGL ES
为了使 OpenGL ES 相关的接口更加适配 iOS/MacOS 系统,提升性能和流畅度,在 iOS12 之后 Apple 就正式使用 Metal 替换了 OpenGL ES;Metal 的渲染也是基于 GPU 实现的,功能很强大,可以好好学习学习:Metal
3. Core Image
Core Image
与 Core Graphics
恰恰相反,Core Graphics
用于在 运行时创建图像,而 Core Image
是用来处理 创建的图像 。简而言之就是图片处理框架,Core Image
框架拥有一系列现成的图像过滤器,能对已存在的图像进行高效的处理。
大部分情况下,Core Image
会在 GPU 中完成工作,但如果 GPU 忙,会使用 CPU 进行处理:
![](https://img.haomeiwen.com/i4044896/3a80561b4a1e73b5.png)
CGImageCreate 之类的方法也属于
Core Graphics
,Core Image
框架的 Api 以 CI 开头;
4. 总结
- OpenGL/OpenGL ES 和 Metal 都是基于 GPU 实现的 3D 渲染框架;
- Quartz 是重量级的绘图框架,功能强大。而 Quartz 2D 就是基于此实现的轻量级的 2D 渲染框架;
- Core Animation 更像是一个组织者,在 3D 的维度上,本着 GPU 渲染优先的原则,基于自己的一套 Core Animation Pipline 来完成图元/纹理的生成、纹理渲染成 bitmap、视频控制器的交互、动画的实现等;
- Core Image 和 Quartz 2D 都是渲染框架,只不过 Quartz 2D 是将图元渲染成 bitmap,而 Core Image 是对已经渲染完成的 bitmap/image 添加滤镜效果;
网友评论