计算机图形程序接口 | 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苹果自家的操作系统。

图形程序接口知多少 | OpenGL、OpenCL、Vulkan、OpenGL ES、WebGL、Metal、Directx相关推荐

  1. opencl 加速 c语言程序_Win10应用获得面向OpenCL和OpenGL的兼容层

    今年早些时候,微软宣布正在努力在Windows 10的Direct3D 12(D3D12)中启用对OpenCL和OpenGL映射层的支持.为了启用映射层,解决设备上没有OpenCL和OpenGL硬件驱 ...

  2. OpenCV、OpenCL、OpenGL、OpenPCL

    对于几个开源库的总结,作为标记,以前看过,现在开始重视起来!更详细资料请移步 开源中国社区! 涉及:OpenCV,OpenCL,OpenGL,OpenPCL 截止到目前: OpenGL的最新版本为4. ...

  3. OpenCL、OpenGL和DirectX三者的区别

    什么是OpenCL? OpenCL全称Open Computing Language,是第一个面向异构系统通用目的并行编程的开放式.免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器 ...

  4. android opengl版本,Android OpenGL ES(一)开发入门

    早就听过大名鼎鼎的 OpenGL,却迟迟没有实践学习,有些惭愧.今天开始通过实践+博文方式学习掌握 OpenGL.此文对于 OpenGL 的学习分为以下部分: OpenGL 基础概念 OpenGL 坐 ...

  5. 【Android OpenGL开发】OpenGL ES与EGL介绍

    什么是OpenGL ES OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的编程图形程序接口,主要用于图像的渲染. Android提供了简化版的OpenGL接口,即O ...

  6. opencv,opengl,osg,vulkan,webgL,opencL,cuda

    OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上. 它轻量级而且高效--由一系 ...

  7. opengl和vulkan

    从OpenGL到Vulkan - 知乎 现阶段应该怎么学习计算机图形学呢? - 知乎 我的学习方法是,先找相同,后找不同. 我差不多刚从OpenGL转移到了Vulkan.开始的时候,Vulkan是挺吓 ...

  8. 图形程序学习过程分享.md

    从客户端到Unity图形程序将近4个月,过程中和同事交流学习经验,避开了不少弯路.做业务也有一段时间了,正好给自己做一个学习回顾,对其他人也能提供一份参考. 概述 在转岗之前,有过一段短暂使用Unit ...

  9. Vulkan与OpenGL对比——Vulkan的全新渲染架构

    OpenGL是Khronos Group组织发布的跨平台图像渲染引擎.在这里科普一下Khronos组织,由Intel.Nvidia等公司共同创立,致力于创建开放标准的应用程序API.大名鼎鼎的Open ...

最新文章

  1. matlab光滑曲线连接散点图
  2. 福州java培训哪里好_南通java培训哪家好
  3. 即时通讯开发(逐行、隔行扫描)
  4. 《一本书》文字展示网站Typecho主题
  5. 【华为云技术分享】【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题
  6. [原创] 在XP/2K 下实现 Win+Ctrl+Del 等键的屏蔽的方法,附源码与演示程序下载。...
  7. 第四章:FLASK结构拆分和循环引入问题
  8. C#,数独游戏(Sudoku Game)的算法与源代码
  9. 无密码解锁iPhone
  10. 浏览器导航被劫持解决方法
  11. python生成测试数据_Python基于Hypothesis测试库生成测试数据
  12. html5另存为本地文件,javascript实现文件另存为(web api)
  13. [译] 讨论 JS ⚡:文档
  14. 豆瓣时间“黑镜人生”的推荐书单
  15. VB:如何设置Richtextbox的行间距
  16. 个人杀毒软件及防火墙排名
  17. R语言创建新变量方法
  18. Linux shell:判断变量是否包含某个字符串的几种方法
  19. redis数据库的主从、哨兵和cluster模式的实现原理与搭建详解(win10系统)
  20. 有关老年计算机培训的报道,宝鸡市华厦老年大学

热门文章

  1. 【大数据之Hadoop】三十一、HDFS集群迁移之Apache和Apache集群间数据拷贝
  2. 下载有道词典遇到的问题
  3. 理财实践之港股和美股的投资办法、下篇
  4. phpBB3导入版面的Python脚本
  5. 【炉石】炉石传说iPad版不越狱不靠电脑用WiFi共享精灵登录
  6. Centos7安装jdk
  7. 中南民族大学计算机基础教材,中南民族大学大学计算机基础上机题库及答案.docx...
  8. 与豆瓣网杨勃聊天(续)
  9. Win10内核驱动断链式隐藏指定进程
  10. 怎么运行ajax项目,Ajax:修改了项目的ajax相关代码,点击运行没有效果