一、各种渲染框架

iOS 中的绘图相关的架构如下:

iOS绘图架构

其中 OpenGL ES 在 iOS12 之后被正式废弃,并使用新框架 Metal 替换;

1. Quartz、Quartz 2D、QuartzCore

三个概念傻傻分不清楚,那么我们一个一个来看:

  1. Quartz

Quartz 是 MacOS 上的 framework,iOS 中不能使用。包括 Quart Composer、PDFKit、ImageKit 三大部分。这个框架功能很齐全,但是也相对比较重量级,实际开发中使用也相对较少,具体可以参阅官方文档:Quartz;

通过 #import <Quartz/Quartz.h> 来进入,该头文件包含的内容如下:

Quartz

如上图,引入了 QuartzCore,这个又是什么呢?

  1. QuartzCore

QuartzCore 就是 Core Animation,也就是文章最初的那张框架图中的 Core Animation。Core Animation 就不用多说了吧,掌握着绘制的整个流程,还能够做动画,这也是后文的重点,这里就不赘述了。

Core Animation 在 iOS 上合 MacOS 上都可以使用,但是不完全一样,来看看头文件;

iOS 中:

QuartzCore-iOS

MacOS 中:

QuartzCore-MacOS

其中的区别就不赘述了,可以直接去官方文档查阅:Core Animation;

  1. 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 进行实现的:

About OpenGL ES

OpenGL ES

OpenGL ES 已经被弃用,如果有兴趣可以查阅官方文档:OpenGL ES

为了使 OpenGL ES 相关的接口更加适配 iOS/MacOS 系统,提升性能和流畅度,在 iOS12 之后 Apple 就正式使用 Metal 替换了 OpenGL ES;Metal 的渲染也是基于 GPU 实现的,功能很强大,可以好好学习学习:Metal

3. Core Image

Core ImageCore Graphics 恰恰相反,Core Graphics 用于在 运行时创建图像,而 Core Image 是用来处理 创建的图像 。简而言之就是图片处理框架,Core Image 框架拥有一系列现成的图像过滤器,能对已存在的图像进行高效的处理。

大部分情况下,Core Image 会在 GPU 中完成工作,但如果 GPU 忙,会使用 CPU 进行处理:

Core Image

CGImageCreate 之类的方法也属于 Core GraphicsCore Image 框架的 Api 以 CI 开头;

4. 总结

  1. OpenGL/OpenGL ES 和 Metal 都是基于 GPU 实现的 3D 渲染框架;
  2. Quartz 是重量级的绘图框架,功能强大。而 Quartz 2D 就是基于此实现的轻量级的 2D 渲染框架;
  3. Core Animation 更像是一个组织者,在 3D 的维度上,本着 GPU 渲染优先的原则,基于自己的一套 Core Animation Pipline 来完成图元/纹理的生成、纹理渲染成 bitmap、视频控制器的交互、动画的实现等;
  4. Core Image 和 Quartz 2D 都是渲染框架,只不过 Quartz 2D 是将图元渲染成 bitmap,而 Core Image 是对已经渲染完成的 bitmap/image 添加滤镜效果;

http://www.taodudu.cc/news/show-1912754.html

相关文章:

  • Java基础(一):简介和基础数据类型
  • Java基础(二):面向对象
  • Java:常量池
  • Java基础(三):常用对象
  • Java基础(四):异常处理
  • Java基础(五):多线程
  • Android:权限处理
  • AsyncTask的基本使用
  • 在Nginx中配置SSL证书
  • Base64编码流程
  • Nginx配置基础认证
  • Cookie、Session、Token、RefreshToken
  • JSCore浅析及其在iOS上的使用
  • 编程语言的动态性(Dart和OC对比)
  • iOS:Universal Link
  • AFN中的鉴权
  • openGL ES 教程(二):渲染管线
  • MySQL(2)----DDL语句之增、删、改、查操作
  • MySQL(3)-----DML数据库操作(上)
  • 线性表的基本运算
  • MySQL(4)-----DML数据库操作(下)
  • MySQL(1)----帮助使用
  • MySQL(6)-----数据类型
  • (1)封装JSON数据的三种方式
  • (2)从文件中解析JSON数据
  • (1)I/O流对象-----FileInputStream与FileOutputStream
  • MyBatis(一)------目录
  • MyBatis(二)------使用JDBC编程问题总结
  • MySQL(5)-----DQL语句的基本查询与高级查询
  • MySQL(7)-----常用约束

iOS图形学(四):iOS中的绘图框架相关推荐

  1. iOS绘图框架CoreGraphics分析

    由于CoreGraphics框架有太多的API,对于初次接触或者对该框架不是十分了解的人,在绘图时,对API的选择会感到有些迷茫,甚至会觉得iOS的图形绘制有些繁琐.因此,本文主要介绍一下iOS的绘图 ...

  2. IOS中的AFNetworking框架的GET参数的使用

    IOS中的AFNetworking框架的GET参数的使用 加入ATS在info.plist 中加入ATS代码 <key>NSAppTransportSecurity</key> ...

  3. ios swift请求框架_使用Swift在iOS中创建二进制框架

    ios swift请求框架 We all use a lot of frameworks in our daily development routine. We just type the magi ...

  4. iOS系统架构及iPhone应用程序框架

    1.iOS介绍 2.Framework介绍3.iOS系统架构及iPhone应⽤用程序框架 4.iOS UItouch 及触摸事件与⼿手势 iOS介绍 1. iOS 操作系统是 iPhone. iPod ...

  5. iOS - 常用的iOS Mac框架和库以及常用的中文开发博客

    对于iOS以及Mac开发中常用到的一些框架,以及比较好的技术博客做了总结: 主要内容如下: UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关 隐藏与显示 HUD与Toast 对话框 ...

  6. ios的四个核心部分介绍

    ios四个核心部分 1.Cocoa Touch Cocoa Touch层的关键技术. (1)多任务       iOS SDK 4.0以及以后的SDK构建的程序(且运行在iOS 4.0和以后版本的设备 ...

  7. IOS的四种数据存储方式及优劣

    IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...

  8. ios wifi 定位_iOS中三种定位方式

    手机基站定位 原理 每个手机基站都有一个标识符,iPhone或3G iPad可以搜集周围所有收到信号的基站和它们的标识符,通过联网发送到苹果云端服务器,再由服务器根据这些基站的的位置信息查询并计算出当 ...

  9. 苹果马上又要更新系统,iOS 14.5 Beta中的所有新功能

    苹果今天发布了即将发布的iOS 14.5和iPadOS 14.5更新的第一个beta版本,尽管新软件是应用程序开发人员必须遵守应用程序跟踪透明度规则的最后期限,但还有一些其他值得注意的变化. Appl ...

  10. IOS之YYModel字典转模型第三方框架的使用

    IOS之YYModel字典转模型第三方框架的使用 字典转模型,可以使用原生的KVC方式,也可使用第三方框架,常见的有YYModel,MJExtension,JSONModel,FastEasyMapp ...

最新文章

  1. for循环 lamda python_Python中if-else判断语句、while循环语句以及for循环语句的使用...
  2. vbsedit无法创建空文档_vue文档里你没捡起来的宝藏
  3. 实习热招 | 想找「NLP」实习机会?这 7 家公司正在等你
  4. 【性能优化】 之 10053 事件
  5. linux下des加密命令,linux下的DES加密
  6. 如何使用 .NET Core 安全地加/解密文件
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试工程项目管理10324k2
  8. java 批量上传图片插件_java多文件上传plupload控件实现多图片上传(一)
  9. ios 旋转屏幕试图切换_iOS增强现实应用(AR)设计指南(上)
  10. 编程c语言顺口溜,C语言运算符优先级顺口溜[转]
  11. iOS初级开发学习笔记:APP生命周期的学习总结
  12. LongAdder和AtomicLong哪个性能更好,为什么?
  13. 面试机器学习、数据挖掘、大数据岗位时遇到的各种问题
  14. 【模板】堆优化 + dij +pair 存储
  15. 主流数据库之MySQL函数和MySQL数据操作基础知识及示例
  16. PyTorch常用5个抽样函数
  17. python中的异常、模块、文件
  18. 74%的人都在加班!职场人病痛排行榜出炉!
  19. 7 RRC Measurement -- 测量报告
  20. DATEADD的用法

热门文章

  1. 类的加载过程详解之过程三:Initialization(初始化)阶段
  2. Spring Cloud Sleuth服务链路跟踪之入门篇(学习总结)
  3. springcloud之feign远程调用
  4. SimpleDateFormat-多线程问题
  5. python3 学习日志 Microsoft Office 编程
  6. 多表无关联查询(范围查询):查询某个人属于哪个工资区间
  7. Java非对称加密开发(三)-代码及说明
  8. java第三方类库实现图片等比缩放
  9. AngularJS开发指南10:AngularJS依赖注入的详解
  10. PVLAN(Private VLAN)在局域网中的应用