计算机图形程序接口 | Graphics API
对于普通的电脑玩家来说这是一个不重要的东西,但对于游戏开发、玩游戏做三维的人来说,这部分知识可能会常常被提及,尤其是涉及到游戏相关的。计算机图形程序接口是一套可编程的开放标准,3D\2D 都需要这部分底层的 API 支持。如果你是一名游戏开发者,没有借助图形 API 来开发游戏的话,这意味着你的游戏想要调用系统硬件(GPU)的时候,这部分的程序需要自己独立开发,这无疑是增加了游戏开发的成本。Graphics API 就是解决这一难题的,开发者只要输入很小的一段代码即可通过 API 来访问硬件,无论是效率还是质量都会得到极大的提升。但不代表计算机图形程序接口就一定是非常好的,Graphics API 本身是软件,并不是硬件,只是提前为你写好了调用硬件的代码,但是也有一些问题:
-
图形接口运行与操作系统中,大家所熟知的微软、苹果系统都发布了自己独有的 Graphics API,想要让自己开发的游戏运行在不同的操作系统,可能会需要不同的 API。
-
与之相反的还有跨平台图形程序接口,跨平台意味着不需要单独适配操作系统,开发一次即可发布到全平台。但跨平台并不能真正的完全优化在各个操作系统中的表现,最后是比较折中的。
-
还有高低层区别:高层开发成本越低、维护越难、权限越小;底层开发成本越高,维护越低,权限越大。
OpenGL
OpenGL(全写Open Graphics Library),定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维、二维图形,是一个功能强大,调用方便的底层图形库。OpenGL 是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。
目前 OpenGL 已经停止了开发,将 OpenCL 一起合并后重点推广 Vulkan 接口,这是由同一家公司维护的图形接口,也可以说 Vulkan 将会是下一代跨平台图形接口标准,具体请阅读:Vulkan
苹果最近宣布公布放弃 OpenGL \ OpenCL,推广自家的 Metal 图形接口,这就代表很多的三维软件、游戏等无法通过 OpenGL 等接口稳定的运行于 macOS系统中,更有可能直接无法运行。想要更好的运行需要单独的适配 Metal 接口。具体的信息请查看:Metal
OpenGL
OpenCL(全称Open Computing Language,开放运算语言)是第一个跨平台系统通用的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。
OpenCL最初苹果公司开发,拥有其商标权,并在与AMD,IBM,英特尔和NVIDIA技术团队的合作之下初步完善。随后,苹果将这一草案提交至Khronos Group,最新的消息苹果放弃了 OpenCL 并停止了对其进行维护。
VulKan
Vulkan是Khronos组织制定的“下一代”开放的图形显示API。是与DirectX12能够匹敌的GPU API标准。Vulkan是基于AMD的Mantle API演化而来,Vulkan提供了能直接控制和访问底层GPU的显示驱动抽象层。 显示驱动仅仅是对硬件薄薄的封装,这样能够显著提升操作GPU硬件的效率和性能。之前OpenGL的驱动层对开发人员隐藏的非常多细节,如今都暴露出来。Vulkan甚至不包括执行期的错误检查层。驱动层干的事情少了,隐藏的bug也就少了。
Vulkan不再使用OpenGL的状态机设计,内部也不保存全局状态变量。显示资源全然由应用层负责管理。包括内存管理、线程管理、多线程绘制命令产生、渲染队列提交等。应用程序能够充分利用CPU的多核多线程的计算资源,降低CPU等待,降低延迟。 带来的问题是。线程间的同步问题也由应用程序负责,从而对开发人员的要求也更高。
“GPU 最初是为图形计算而生的,时至今日它依然是GPU最重要的任务,绝大多数药使用微软的DX及Khronos的OpenGL, Vulkan规范。后来通用计算兴起了,使用GPU做运算的应用、场合也多了起来,业界又推出了通用计算规范,比如OpenCL、NVIDIA自己搞得CUDA也是此类。计算与通信API也有分有合,Khronos现在已经决定把OpenCL规范融合到Vulkan中,未来一个API就能实现计算和图形两种计算了” ---http://www.360doc.com/content/20/1028/19/72127748_942859243.shtml
OpenGL ES
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。
OpenGL- ES 是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,主要针对多种嵌入式系统专门设计 - 包括控制台、移动电话、手持设备、家电设备和汽车。它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。 OpenGL ES 包含浮点运算和定点运算系统描述以及 EGL针对便携设备的本地视窗系统规范。OpenGL ES 1.X 面向功能固定的硬件所设计并提供加速支持、图形质量及性能标准。OpenGL ES 2.X 则提供包括遮盖器技术在内的全可编程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完美地解决了现有的Web交互式三维动画的两个问题:1,它通过HTML脚本本身实现Web交互式三维动画的制作,无需任何浏览器插件支持。2,它利用底层的图形硬件加速功能进行的图形渲染,是通过统一的、标准的、跨平台的OpenGL接口实现的。
WebGL标准已出现在Mozilla Firefox、Apple Safari及开发者预览版Google Chrome等浏览器中,这项技术支持Web开发人员借助系统显示芯片在浏览器中展示各种3D模型和场景,未来有望推出3D网页游戏及复杂3D结构的网站页面。
DirectX
DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX 12,创建在最新的Windows10。
旨在使基于Windows 的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX 包括安全和性能更新程序,以及许多涵盖所有技术的新功能。但这不是跨平台的理想选择,只是针对 Windows 系统。
Metal
在 WWDC 2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D 图像提高 10 倍的渲染性能,并支持大家熟悉的游戏引擎及公司。Metal 是一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上。Metal 提升了苹果 A 系列处理器效能,让其性能完全发挥。
Metal 是一项全新的技术,专为开发高临场感主机游戏的开发者打造,可让开发者全力发挥芯片的性能。该技术经过优化,使处理器和图形处理器能够协同工作来实现最优性能。它专为多线程而设计,并提供各种出色工具将所有素材整合在Xcode中。虽然苹果一直强调 Metal 很强悍,但是依然与 DX 一样,这不是一个跨平台支持的 API,只针对 iOS、macOS苹果自家的操作系统。