什么是图形API

我们常听到的OpenGL、DirectX、Metal等都属于图形API,它的本质是一整套编程接口,用来将应用程序与显卡驱动联系起来。有了图形API我们可以仅仅调用它的函数来更改渲染状态、缓存顶点数据、开始绘制等等,而如果没有它,我们就需要直接调用显卡驱动的接口来进行渲染,这会涉及到非常多的硬件接口,例如对寄存器的操作,相当繁琐。一般来说我们都不会希望在渲染的同时还要去关注对硬件的控制。

硬件显卡厂商例如NIVIDIA、AMD,他们如果要和图形API合作往往就需要在显卡驱动去实现这些API。正如前面所说,图形API本身只是一套接口并没有实现代码,只有显卡驱动实现了这些API后,这个显卡才可以支持这些图形API。

LowLevel的图形API一般会开放出更多与内存管理相关的接口给开发者,但这需要更细致的管理,使用得当可以显著降低CPU的开销。例如Vulkan、Metal便属于这种。

OpenGL的发展

OpenGL在1992年由SGI(Silicon Graphics Inc)发布,是应用于CAD、VR和游戏等领域的跨平台图形API,基于不同平台可能会有衍生的API,例如WebGL、OpenGL ES等。在2006年后,由非盈利团队Khronos维护,这个团队涵盖了显卡商、操作系统商还有浏览器商等,意在创建免费开放的跨平台API。

它最初是作为Iris GL的一个替代品而出现的。Iris GL是SGI的专用图形API,由于它有一些与3D图形无关的API以及一些专利等原因,不适合作为行业的广泛标准,于是SGI编写了OpenGL 1.0规范。在之后,每隔一段时间OpenGL便会出现新的增量更新。

1992年,SGI发布了OpenGL 1.0。
2003年7月,OpenGL ES 1.0发布,它是专为手机、平板电脑、游戏主机等嵌入式系统设计的一个OpenGL API子集。
2004年9月,SGI发布了OpenGL 2.0,这其中就有GLSL 1.0(OpenGL Shading Language)的面世,这是一种类C语言,可以用它对固定管线的顶点/片段着色器进行编程。与之相伴的还支持了MRT(Multiple render targets)和NPOT(Non-power-of-two textures)。
2006年7月,OpenGL API规范的控制权转交给Khronos团队。
2008年8月,OpenGL 3.0发布,支持FBO(Framebuffer Objects)以及VAO(Vertex Array Objects)等多个功能,同时支持了非常多的特性,从这版开始OpenGL支持向后兼容。
2009年8月,OpenGL 3.2发布,从这个版本开始,OpenGL官方文档废弃了固定渲染管线,发布了核心模式(Core Profile),这种模式的灵活性与效率更高,之后至今迭代也都是基于这个核心架构这个版本也增加了新的着色器阶段:几何着色器。
2010年3月,OpenGL 3.3和OpenGL 4.0一起发布,带来了新的标准规范,自此之后GLSL的版本号与OpenGL版本号保持一致,即GLSL 3.3/4.0。同时新增了曲面细分着色器。
2017年7月,OpenGL 4.6发布,这也是至今最新的版本。
2018年6月,苹果在所有平台上弃用OpenGL(其实也就是不维护了),鼓励开发者使用他们专有的Metal(这时候Metal已经发布几年了)。这可能使得开发者为了兼容多平台不得不使用好几种语言GLSL/HLSL/MSL。

Vulkan的发展

Vulkan于Khronos在GDC 2015上首次公开,它的也曾被叫做是“Next Generation OpenGL Initiative”(glNext),旨在对OpenGL和OpenGL ES的一次重新设计,将两者统一到一个API中。

与OpenGL相同它也是一个跨平台的2D、3D图形API,不同的是它是一个Low Level图形API,即会开放出更多与内存控制相关的接口。此外它还能较好的支持多线程并行(OpenGL4.0+是为单线程设计的),这使得它的操作和维护比OpenGL复杂得多。另外OpenGL使用GLSL来编写着色器,每个显卡商需要为GLSL单独编写编译器来转换为在显卡上运行的机器码,在这点上Vulkan不同,它会先由操作系统把GLSL预编译为一种名为SPIR-V(Standard Portable Intermediate Representation)的中间码,再由显卡商编写Vulkan驱动程序对GPU进行一些特定的优化,加载速度变快了还节省了显卡商的开发及维护成本。这和Direct3D的HLSL预编译很像。
2016年2月,Vulkan 1.0发布。
2018年2月,Khronos发布MoltenVK,可以理解为MoltenVK是用Metal实现了Vulkan的API,这使得macOS和iOS也能支持Vulkan了。虽然绕了趟远路,但从Dota2的表现上来看,依旧比OpenGL高出了50%的帧率。
2018年3月,Khronos和GPUOpen公开V-EZ项目,它是“Easy Mode”的缩写,是一个基于Vulkan的中间层,相比于Vulkan它保留了Vulkan的大部分API,提供了更简单的内存管理API,封装了诸多底层细节。旨在开发者更容易上手Vulkan。
2018年3月,Vulkan 1.1发布。支持了HLSL语法以及光线追踪。可以更好的模拟DirectX 12。spirv更新至1.3。
2020年1月,Vulkan 1.2发布。新增了23项扩展以及更好的支持HLSL。

Direct3D的发展

Direct3D是用于微软应用程序的3D图形API,是DirectX中的3D图形API(DirectX是微软平台上处理与多媒体相关的API合集)。使用HLSL语言编写着色器。

1996年6月,第一版Direct3D 2.0跟随DirectX 2.0发布,有"retained mode"和"immediate mode"。
1998年8月,Direct3D 6.0发布,增加了许多新特性,如multitexture、模板缓冲区等。
1999年,Direct3D 7.0支持了T&L硬件加速
2000年11月,Direct3D 8.0发布,引进了可编程管道概念,新增了顶点/片段着色器,这个时候Direct3D完全超越了OpenGL。
2002年12月,Direct3D 9.0发布,发布了Shader Model 2.0。支持浮点纹理格式、MRT(Multiple render targets),9.0是最后一个支持WindowsXP的版本。
2006年11月,Direct3D 10.0发布,仅支持Windows Vista以上操作系统。固定功能管线被淘汰,取而代之的是可编程渲染管线。新增了几何着色器阶段,发布了Shader Model 4.0。
2009年7月,Direct3D 11.0与Windows7一块被发布,Direct3D 11.0新增了曲面细分着色器和Computer Shader,支持了多线程处理技术,发布了Shader Model 5.0。

  • Shader Model提升到5.0,采用面向对象的概念,并且可以完全支持双精度数据;
  • Tessellation曲面细分技术获得微软正式支持,逐渐走向成熟;
  • Multithreading多线程处理;
  • 提出Compute Shader通用计算概念,可以直接把GPU当做并行处理器来用;
  • 新的Texture Compression纹理压缩方案,在画质损失极小的环境下带来了硬件资源的节约。
    两种新的压缩算法:BC6和BC7,BC6是专门针对HDR图像设计的压缩算法,压缩比为6:1,BC7是专门为LDR(低动态范围)图像设计的压缩算法,压缩比为3:1。

2015年1月,Direct3D 12.0包含在Windows10一块被发布,更好支持多核心、多线程的优化,降低GPU处理瓶颈,并提升硬件功耗表现。简化了Direct3D 11中的管道状态对象(Pipeline state objects)。在很多
2018年10月,发布了Direct3D 12光线追踪DirectX Raytracing (DXR)的扩展包。

Metal

Metal是一款Low Level、Low Overhead的3D图形API,由苹果公司开发,并在2014年6月随iOS8公开。相比于OpenGL,Metal对底层拥有更大的操控性,同时又有着多线程上大量的优化。Metal Shader使用的是Metal Shader Language(MSL),是一种基于C++ 14的语言。

2014年6月,Metal发布。
2017年6月,Metal 2发布,相比Metal有了大量的优化,支持了VR。

操作系统与图形API

参考文献

https://en.wikipedia.org/wiki/OpenGL
https://www.khronos.org/opengl/wiki/History_of_OpenGL
https://en.wikipedia.org/wiki/Vulkan_(API)
https://gpuopen.com/v-ez-brings-easy-mode-vulkan/
https://en.wikipedia.org/wiki/Direct3D
https://zh.wikipedia.org/wiki/DirectX
https://en.wikipedia.org/wiki/Metal_(API)

3D游戏图形API简史相关推荐

  1. tilemap 菱形_使用Cocos creator制作【治愈七夕】-音乐游戏图形api绘制跳舞的线

    专栏概述及目录:笑苍天Smile:专栏概述及目录​zhuanlan.zhihu.com 游戏截图: 游戏地址:微信扫一扫 游戏源码 游戏技术:前端引擎-Cocos creator,语言-Ts. 写作目 ...

  2. 【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇...

    http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY GEAR ...

  3. [转载] 翻译 西川善司著针对3D游戏爱好者的”METAL GEAR SOLID 4”图形讲座(下)

    http://www.cnblogs.com/arai/articles/1701596.html 西川善司著针对3D游戏爱好者的"METAL GEAR SOLID 4"图形讲座 ...

  4. [转载] 翻译 西川善司著针对3D游戏爱好者的”METAL GEAR SOLID 4”图形讲座(上)

    http://www.cnblogs.com/arai/articles/1701543.html 西川善司著针对3D游戏爱好者的"METAL GEAR SOLID 4"图形讲座 ...

  5. 【翻译】西川善司为了3D游戏粉丝的[生化危机5]图形讲座(后篇)

    http://www.opengpu.org/forum.php?mod=viewthread&tid=7558&extra=page%3D1 西川善司为3D游戏粉丝的[生化危机5]图 ...

  6. 计算机 子分数 游戏图形,Windows7下如何开启和关闭系统分级功能.doc

    Windows7下如何开启和关闭系统分级功能.docWindows7下如何开启和关闭系统分级功能.docWindows7下如何开启和关闭系统分级功能.doc Windows 7下如何开启与关闭系统分级 ...

  7. 【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(1)...

    http://www.4gamer.net/games/216/G021678/20140703095/   新连载「实验做出的游戏图形」,是聚焦在特定游戏的图形上, 对它的结构和使用的技术解说为主旨 ...

  8. 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版

    [3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...

  9. 【翻译】为了3D游戏粉丝的[(超级)街头霸王4]图形讲座(前篇)

    http://www.opengpu.org/forum.php?mod=viewthread&tid=7161&extra=page%3D1 为了3D游戏粉丝的[(超级)街头霸王4] ...

  10. 7.从零开始手敲次世代游戏引擎(图形API封装简介)

    现在我们已经有了一个跨平台的基本应用框架.接下来我们可以开始图形方面的编码了. 参照我们编写应用模块的方式,我们可以很快地添加图形模块的骨架. 让我们在Framework/Common下面添加两个文件 ...

最新文章

  1. 史上最全的“大数据”学习资源
  2. 用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
  3. 配置ISCSI客户端(LINUX)
  4. 【Docker】Docker 一个偶现的错误 bash命令突然找不到
  5. Linux 新漏洞曝光,居然又双叒是提升权限漏洞!
  6. 造轮子:前端模板引擎
  7. 【iCore4 双核心板_uC/OS-II】例程十:信号量集
  8. 思科室外AP无法注册到WLC
  9. conda 安装本地包_export包本地安装以及R包被CRAN移除后如何继续安装
  10. 软件需求说明书 (1)
  11. 朴素贝叶斯+拉普拉斯平滑代码实现-方法二
  12. 质量管理:PDCA循环
  13. sql server 找到刚刚插入的indentify的数字
  14. 上游任务upstream task
  15. 三年半 Java 后端鹅厂面试经历
  16. 激活DataGrip
  17. Matlab进阶绘图第8期—聚类/分类散点图
  18. ChatGPT能够干翻谷歌吗?
  19. 23电工杯数学建模B题
  20. armel、armhf和arm64

热门文章

  1. AliOS Things学习笔记(5)——ESP8266对接天猫精灵下篇(设备端)
  2. 0基础学软件测试好学吗?这2个硬性要求没有达到的话奉劝你不要学...
  3. web前端期末大作业 html+css家乡旅游主题网页设计 湖北武汉家乡介绍网页设计实例
  4. 朱令被投毒案关键人物语料分析之孙维篇
  5. 网络安全年终盘点:2018年数据泄露事件回顾
  6. Halcon|通过旋转前后3维坐标点求旋转轴及旋转角度
  7. html如何给图片加链接
  8. linux usr/bin/和 usr/local/bin之间的关系,什么是软链接?
  9. Android补间动画之透明度动画
  10. 向梦想出发 - 全向轮移动底盘搭建