目前比较常用的图形渲染API有以下几种:
下面将详细介绍各种API的特点。
直接3D
Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上开发的一套3D图形编程接口。 它是DirectX的一部分,目前被各种显示卡广泛支持。 它与 OpenGL 一起是计算机图形软件和计算机游戏最常用的两种图形编程接口之一。 目前仅在 Windows 平台上可用。
OpenGL(开放图形库)
OpenGL(开放图形库或“开放图形库”)是一种跨语言、跨平台的应用程序编程接口(API),用于渲染 2D 和 3D 矢量图形。 该接口由近 350 个不同的函数调用组成,用于从简单的图形位绘制复杂的三维场景。 OpenGL 常用于 CAD、虚拟现实、科学可视化程序和视频游戏开发。
OpenGL(利用图形加速硬件)的高效实现存在于 Windows、某些 UNIX 平台和 Mac OS 上。 这些实现通常由显示设备制造商提供,并且非常依赖于制造商提供的硬件。
OpenGL 规范由 OpenGL 架构审查委员会 (ARB) 维护,该委员会成立于 1992 年。ARB 由对创建统一、普遍可用的 API 特别感兴趣的公司组成。 据OpenGL官方网站称,2002年6月ARB的投票成员包括3Dlabs、苹果电脑、ATI Technologies、戴尔电脑、Evans & Sutherland、惠普、IBM、英特尔、Matrox、NVIDIA、SGI和Sun Microsystems。 微软是创始成员之一,但于2003年3月退出。
OpenGL ES(用于嵌入式系统的 OpenGL)
OpenGL ES 是 OpenGL 三维图形 API 的子集,专为手机、PDA 和游戏机等嵌入式设备而设计。 目前主要有两个版本。 OpenGLES1.x提供固定管线渲染,OpenGLES2.x及以上版本提供可编程管线渲染。 目前大部分手机都支持OpenGLES2.0及以上版本。 与OpenGL相比,OpenGL ES删除了所有低性能的操作方法。 高性能的有,低性能的也不剩。 即只追求性能而不追求兼容性。
OpenGL-ES 是一种免许可、跨平台、全功能的 2D 和 3D 图形应用编程接口 API,专为各种嵌入式系统设计 - 包括控制台、移动电话、手持设备、家用电器和汽车。 它由精心定义的桌面 OpenGL 子集组成,在软件和图形加速之间创建灵活且强大的底层交互接口。 OpenGL ES 包含浮点和定点算术系统描述以及 EGL 用于便携式设备的本机窗口系统规范。 OpenGL ES 1.X 专为固定功能硬件而设计,提供加速支持、图形质量和性能标准。 OpenGL ES 2.X 提供完全可编程的 3D 图形算法3D道具,包括掩模技术。 OpenGL ES-SC 专为具有高安全性要求的专业市场而构建。
WebGL(网页图形库)
WebGL(全称Web Graphics Library)是一种3D绘图协议。 该绘图技术标准允许 JavaScript 和 OpenGL ES 2.0 相结合。 通过添加 OpenGL ES 2.0 的 JavaScript 绑定,WebGL 可以为 HTML5 Canvas 提供硬件 3D。 加速渲染游戏角色,使 Web 开发人员可以使用系统显卡在浏览器中更流畅地显示 3D 场景和模型,并创建复杂的导航和数据可视化。 显然,WebGL技术标准免去了开发网页专用渲染插件的麻烦,可以用来创建复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等。
WebGL是基于OpenGL ES 2.0设计的,而不是纯粹的OpenGL ES。 WebGL使用HTML5的Canvas来处理DOM。 因此,与OpenGL ES 2.0一样,GLSL被用作Shading Language(一种C-Like顶点计算和着色语言,缓存并编译到GPU,并由GPU执行)。 WebGL 2.0 基于 OpenGL ES 3.0,确保提供许多可选的 WebGL 1.0 扩展并引入新的 API。
WebGL、OpenGL和OpenGL ES之间的关系
通过以上分析,可以得出以下关系:
伏尔甘
Vulkan 是一个跨平台 2D 和 3D 绘图应用程序编程接口 (API)现代图形游戏设计,由 Khronos Group 在 2015 年游戏开发者大会 (GDC) 上首次宣布。
Konas 最初将 VulkanAPI 称为“下一代 OpenGL 倡议”或“glNext”,但在 Vulkan 正式公布后,这些名称就不再使用。 与 OpenGL 一样,Vulkan 是为实时 3D 程序(例如视频游戏)而设计的,Vulkan 计划提供高性能和低 CPU 管理开销(overhead),这也是 Direct3D12 和 AMD 的 Mantle 的目标。 Vulkan 与 Mantle 的一个分支兼容,并使用 Mantle 的一些组件。
Vulkan旨在提供更低的CPU开销和更直接的GPU控制,其概念大致类似于Direct3D 12和Mantle。 Vulkan不再使用OpenGL的状态机设计,并且内部不存储全局状态变量。 显示资源完全由应用层管理。 包括内存管理、线程管理、多线程绘图命令生成、渲染队列提交等。应用程序可以充分利用CPU的多核多线程计算资源,减少CPU等待和延迟。 问题是。 线程之间的同步问题也是应用程序的责任,这对开发人员提出了更高的要求。
金属
在 WWDC 2014 上,苹果推出了面向游戏开发者的全新平台技术 Metal现代图形游戏设计,可以将 3D 图像的渲染性能提高 10 倍,并支持熟悉的游戏引擎和公司。
Metal是一项专为开发高沉浸感主机游戏的开发者而设计的全新技术,让开发者能够充分利用A7和A8芯片的性能。 该技术经过优化,可让处理器和图形处理器协同工作以获得最佳性能。 它专为多线程而设计,并提供了各种出色的工具来将您的所有内容整合到 Xcode 中。
总结
一些常用的渲染引擎,如Unity、Cocos2d-x、OpenSceneGraph、Skia等,都是基于上述图形API实现的。 归根结底,图形渲染最终是通过操作GPU来实现的,但不同的平台都有相应的图形渲染库。 OpenGL可以说是跨平台之王。
下表是常用的图形渲染API的对比: