OpenGL
OpenGL(Open Graphics Library),定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口,它将计算机的资源抽象成为一个个OpenGL 的对象,对这些资源的操作抽象为一个个的OpenGL 指令。它用于二维、三维图形,是一个功能强大,调用方便的底层图形库。OpenGL 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。
OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。
OpenGL ES
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,去除了许多不必要和性能较低的API接口。
OpenGL ES 是免授权费的、跨平台的,功能完善的2D和3D图形应用程序接口API,主要针对多种嵌入式系统专门设计 ,包括控制台、移动电话、手持设备、家电设备和汽车。它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。 OpenGL ES 包含浮点运算和定点运算系统描述以及 EGL针对便携设备的本地视窗系统规范。OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程3D图形算法。OpenGL ES-SC 专为有高安全性需求的特殊市场精心打造。
DirectX
DirectX(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。它是由很多API组成的,并不是⼀个单纯的图形API。最重要的是DirectX是属于Windows上⼀个多媒体处理API,并不支持Windows以外的平台,所以不是跨平台框架。按照性质分类,可以分为四⼤部分,显示部分、声音部分、输⼊部分和⽹络部分。
DirectX由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX 12,创建在最新的Windows10。
DirectX旨在使基于Windows 的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX 包括安全和性能更新程序,以及许多涵盖所有技术的新功能。但它不是跨平台的理想选择,只是针对 Windows 系统。
Metal
在 WWDC 2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D 图像提高 10 倍的渲染性能,并支持大家熟悉的游戏引擎及公司。Metal 是一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上。
Metal 是什么呢 ? apple 的官方文档中是这样描述的
The Metal framework supports GPU-accelerated advanced 3D graphics rendering and data-parallel computation workloads. Metal provides a modern and streamlined API for fine-grained, low-level control of the organization, processing, and submission of graphics and computation commands, as well as the management of the associated data and resources for these commands. A primary goal of Metal is to minimize the CPU overhead incurred by executing GPU workloads.
概括来说,Metal 提供了一组简明的 API,使得我们开发者拥有了直接和 GPU 对话的能力。在图像渲染,通用计算方面,通过发挥 GPU 的特性,极大提升性能。
在 Metal 整体的设计上,按 Apple 官方的话说,那就是要多厉害有多厉害。
1. 完美适配现代 GPU
2. API 清晰明了,使用简单,可控性强
3. 极大降低 CPU 负载
4. 甩 OpenGL 几条街
...
那么,如此牛逼的 Metal,能用来做什么呢?
概括来说, 跟显示,数据计算相关的,基本都能和 Metal 搭上关系,因为 Metal 本身只是一个发挥 GPU 能力的媒介。GPU 能做的,基本就是 Metal 能做的。再展开,比如图像处理,相机预览,游戏,甚至机器学习等,都可以借助 Metal。
直到 WWDC 2018,Apple 宣布 iOS 12 将弃用 OpenGL ES ,Metal 的时代,正式来临
Apps built using OpenGL ES will continue to run in iOS 12, but Open GL ES is deprecated in iOS 12. Games and graphics-intensive apps that previously used OpenGL ES should now adopt Metal.
Metal 是一项全新的技术,专为开发高临场感主机游戏的开发者打造,可让开发者全力发挥芯片的性能。该技术经过优化,使处理器和图形处理器能够协同工作来实现最优性能。它专为多线程而设计,并提供各种出色工具将所有素材整合在Xcode中。虽然苹果一直强调 Metal 很强悍,但是依然与 DX 一样,这不是一个跨平台支持的 API,只针对 iOS、macOS苹果自家的操作系统。
总结
图形API 目的是为了实现图形的底层渲染 ,比如在游戏开发中,对于游戏场景及游戏⼈物的渲染,在音视频开发中,对于视频解码后的数据渲染以及给视频加滤镜等,还可以绘制动画及渲染地图上的数据等等。
OpenGL /OpenGL ES/ Metal 在任何项⽬中解决问题的本质,就是利用GPU芯⽚来高效渲染图形图像。
图形API 是iOS开发者唯⼀接近GPU的方式。