1、前言
【iOS音视频】是个系列,里面会记录一些博主在iOS音视频
方面的学习笔记、踩到的坑,以便温故而知新。
此系列文章包括但不限于:
本文是这个系列的第1篇文章,主要目的是帮助大家快速了解OpenGL
,下面进入正文。
2、OpenGL简介
2.1 OpenGL是什么
OpenGL
(Open Graphics Library,译为 开放图形库
或 开放式图形库
):是用于 渲染 2D、3D矢量图形的跨语言、跨平台的应用程序编程接口库。
它是一种图形API库
,它把计算机的资源抽象成一个个OpenGL对象
,对这些资源的操作抽象成一个个OpenGL指令
。由于它只提供渲染功能(操作的是GPU芯片
),与窗口系统、音频、打印、键盘/鼠标或其他输入设备无关,所以具备跨平台性(主要运行在PC端,如Mac OS、Linux、Windows等)。
与OpenGL类似的图形API库还有OpenGL ES
、Metal
、DirectX
等,它们之间的主要区别是:
-
OpenGL ES
(OpenGL for Embedded Systems):是OpenGL
的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,去除了许多不必要的、性能较低的API。 -
Metal
:是苹果公司推出的平台技术,主要运行于苹果各大平台上(macOS、iOS、tvOS)。该技术专为多线程而设计,并提供各种出色工具将所有素材整合在XCode中。经过优化,Metal
使CPU
和GPU
能够协同工作来实现最优性能(它能够为3D图像提高10倍的渲染性能)。 -
DirectX
:是微软公司创建的多媒体编程接口,由很多API组成(不仅仅是图形API),仅限于Windows平台上使用(目前不支持Windows以外的平台)。按照性质可分为四大部分,分别是显示部分、声音部分、输⼊部分和网络部分。
由于博主主要从事iOS开发,所以
DirectX
在此系列文章中将不做赘述。
2.2 OpenGL解决什么问题
作为图形API库,OpenGL
、OpenGL ES
、Metal
在任何项目中解决问题的本质就是利用GPU芯片
来高效渲染图形图像。使用这些图形API库也是iOS开发者唯一接近GPU的方式。
因此,图形API库常常被用在下述场景中:
-
游戏开发中,对游戏场景的渲染
-
音视频开发中,对视频解码后的数据渲染,给视频加滤镜处理等
-
地图开发中,对地图数据的渲染
-
动画中,实现动画的绘制
-
航空航天、医疗行业等等
2.3 关于选择的问题
苹果于WWDC 2014
上提出Metal
,但直到WWDC 2018
年,苹果才完成系统内部从OpenGL ES
到Metal
的过渡,同时宣布在苹果设备上(macOS Mojave
、iOS 12
、tvOS 12
)弃用OpenGL/OpenGL ES/OpenCL
。从事图形API工作的开发者需要从自身角度考虑由哪个入门,可以从下面几方面综合考虑:
-
OpenGL/OpenGL ES
具备跨平台性,而Metal
仅限于苹果平台。 -
苹果自己的系统从
OpenGL/OpenGL ES
迁移到Metal
花费了大量时间(4年左右),针对的是苹果内部系统底层API依赖,OpenGL/OpenGL ES
由此变成了第三方图形API库。 -
目前大多数
OpenGL/OpenGL ES
项目组很庞大(如百度地图、高德地图、大部分音视频项目组),未完成往Metal
的迁移工作。此时仅仅会Metal
是不够的。
所谓艺多不压身,沿着 OpenGL
-> OpenGL ES
-> Metal
的路线全部