OpenGL--资料汇总

1 简介

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
OpenGL规范由1992年成立的OpenGL架构评审委员会(ARB)维护。ARB由一些对创建一个统一的、普遍可用的API特别感兴趣的公司组成。
2006年7月,OpenGL架构评审委员会投票决定将OpenGL API标准的控制权交给Khronos Group。

2 版本历史

  • OpenGL 1.0
    发布时间: 1992年1月
    OpenGL的最早版本OpenGL 1.0由Mark Segal和Kurt Akeley发布于1992年1月。
  • OpenGL 1.1
    发布时间:1997年1月
    时隔5年OpenGL才发布新的版本OpenGL 1.1,而Direct3D的出现(尤其是红色警戒的大卖)使得OpenGL感觉到了压力。
  • OpenGL 1.2
    发布时间:1998年3月16日
    这个版本的OpenGL开始支持可以用于体渲染(volume rendering)和体纹理(solid texture)的texture 3D;BGRA和BGA的出现主要是为了兼容某些平台和硬件;包装像素(pack pixel)的出现使得像素可以在不同的对象之间进行像素传输(pixel transfer),这也就是像素缓冲对象(pixel buffer object)的前身;
  • OpenGL 1.2.1
    发布时间:1998年10月14日
    这个版本的OpenGL没有什么重大的改变,但是专门介绍了ARB扩展的概念。ARB扩展是经过OpenGL ARB认证的扩展,这样的扩展将被广泛地实现。
  • OpenGL 1.3
    发布时间:2001年8月14日
    这个版本开始支持压缩纹理(compressed texture),可以有效地减少存储和带宽的压力,现在广泛的应用于各种对存储大小和带宽敏感的手持设备上;立方体纹理(texture cube)的出现主要用于在天空盒(skybox)、动态反射(dynamic reflection)等技术上;而multisample的出现让OpenGL可以支持纹理和Framebuffer的MSAA抗锯齿技术,代替了过去在光栅化状态(rasterizer state)中趋近无用的抗锯齿设置。
  • OpenGL 1.4
    发布版本:2002年7月24日
    这个版本开始支持纹理自动生成Mipmap; 以及关于point光栅化的parameter。
  • OpenGL 1.5
    发布时间:2003年7月29日
    这个版本出现了缓冲对象(buffer object),彻底取代了过去的顶点数组(vertex array)和立即模式,顶点数据可以从客户端内存(client’s memory)上传到服务端内存(server’s memory)了;同时添加了非常重要的遮挡查询(occlusion query)。
  • OpenGL 2.0
    发布时间:2004年9月7日
    OpenGL终于有了自己的着色语言(shading language),ARB选择了3Dlabs的Dave设计的着色语言成为OpenGL原生的着色语言,同时OpenGL也开始有了顶点着色器(vertex shader)和片元着色器(fragment shader),导致这个阶段的OpenGL出现了固定管线和可编程管线并存的情况;OpenGL的片元着色器输出(fragment shader output)现在也可以输出到帧缓冲(framebuffer)的多个渲染目标(render target)上去了;同时OpenGL的纹理也不再有2^n大小的限制。
  • OpenGL 2.1
    发布时间:2006年7月2日
    这个版本增加了像素缓冲对象(pxiel buffer object),用来更快地像素传输(pixel tansfer)的工作,支持将像素从纹理对象(texture object)和帧缓冲对象(framebuffer object)包装到(pack)像素缓冲对象(pixel buffer object),或者从像素缓冲对象解包装到纹理对象和帧缓冲对象,另外像素缓冲对象也可以像普通的缓冲对象(buffer object)一样被映射(map)更新数据,通过DMA的方式更加快地传输纹理;同时支持sRGB格式的纹理对象。
  • 代号Longs Peak和OpenGL 3.0争议
  • 在OpenGL 3.0发布之前,这个版本的代号叫做Longs Peak,包含了很多大量修改OpenGL的工作方式以及根本性改变API的调用方式等内容。2008年8月11日OpenGL 3.0发布,这个版本的OpenGL开始分core profile和compatibility profile,并且Khronos Group希望只支持core profile,这个革新性的规范引起一片哗然,许多厂商明确表示不会接受这个建议,并表示会继续支持许多被划入compatibility profile的扩展,迫于压力compatibility profile被改为是可选的。OpenGL 3.0的出现改变了过去OpenGL一定会向下兼容的特性,在一定程度上简化了API的臃肿以及增加了API的灵活度。
  • OpenGL 3.1
    发布日期:2009年3月24日
    有了Instanced rendering,减轻了同类物体绘制所占有的带宽压力;Copy buffer的出现,是让数据在client端进行拷贝,也是一种性能的优化;Buffer texture其实是让buffer object像texture那样被访问,在某些特殊的场合有意想不到的用途;不得不谈的就是uniform buffer object,过去OpenGL上传uniform数据需要靠glUniform的函数进行上传,而OpenGL每个函数的调用所消耗的CPU循环都非常的大,频繁地调用glUniform会带来很大的性能问题,而且到后期这些单个的uniform也会被保存至OpenGL管理的default uniform buffer中,现在开放了uniform buffer object,通过map/unmap更新数据,函数调用开销明显地减少。
  • OpenGL 3.2
    发布日期:2009年8月3日
    这个版本最重磅的支持就是几何着色器(geometry shader), 可以用来生成新的图元类型(点、线和三角形),后期重要的tessellation等技术都会使用到它;还有一个就是Texture正式支持multisample,可以作为render target来进行framebuffer object上的抗锯齿,而不是经过的WGL_ARB_multisample和GLX_ARB_multisample进行窗口的抗锯齿。
  • OpenGL 3.3
    发布日期:2010年3月11日
    这个版本是shader model 4.0的OpenGL的最终版本,这个版本改变了程序需要查询输入变量(attribute)的location的方式,可以像HLSL指定semantic一样在shader里指定layout,减少了相应API的调用;同时将texture object和sampler state解耦,增加了sampler object,sampler object也可以绑定到ACTIVE_TEXTURE上了。
  • OpenGL 4.0
    发布日期:2010年3月11日
    这个版本和OpenGL 3.3同时发布,增加了令人兴奋的Tessellation Shader;Shader Language 4.00的subroutine提供了在运行时刻不需要切换着色器或者是重新编译或者使用if判断选择不同功能的方法,降低了切换着色器程序所带来的巨大开销(切换着色器的CPU循环消耗真的非常的惊人);另外GL_ARB_draw_buffers_blend让fragment shader输出的每条buffer都可以完成各自的pre-fragment operaion,而不是像过去那样每条都完成相同的pre-fragment operation;GL_ARB_transform_feedback2和GL_ARB_transform_feedback3提供了transform feedback object,以及transform feedback相关的控制(比如pause之类),也把transform feedback当做一个对象来进行处理。
  • OpenGL 4.1
    发布日期:2010年7月26日
    这个版本把OpenGL ES的一些功能划入core profile的范围,一方面反映出了OpenGL ES巨大的成功;GL_ARB_get_program_binary提供了可以将shader事先编译好序列化进入二进制文件,避免了运行时进行编译的方法;这个版本也提供了64位的浮点型输入变量,提升了数据精度。
  • OpenGL 4.2
    发布日期:2011年8月8日
    这个版本比较好的改动就是现在也支持Compressed pixel format transfer了,而过去这是不允许的;另外提供了immutable texture,可以调用一次API创建texture object而不是像过去一样要频繁地调用API;还有一个就是GL_ARB_texture_compression_bptc,以及compatibility profile的GL_EXT_texture_compression_s3tc,让OpenGL开始支持所有的Block Compression格式。
  • OpenGL 4.3
    发布日期:2012年8月6日
    这个版本最重要的增加就是可以用于并行计算的compute shader;GL_ARB_explicit_uniform_location提供了uniform也能在GLSL中像HLSL指定semantic一样指定layout的方法,这个版本的OpenGL的vertex shader input和fragment shader output,以及uniform现在都能在shader中指定layout了;把OpenGL ES 3的某些功能加入了OpenGL core profile;增加了texture view的概念,用来共享已经创建纹理的内容;另外加入的debug messaging帮助程序猿更好的调试OpenGL。
  • OpenGL 4.4
    发布日期:2013年7月23日
    GL_ARB_muti_bind允许通过一次调用来绑定多个资源,将绑定资源的开销分摊到一个调用上,并且和Direct3D11的接口相互兼容;GL_ARB_enhanced_layout允许uniform block内部指定layout,相当于Direct3D的registry;GL_ARB_buffer_object也提供了单个draw call完成创建buffer object的方法,并且提供presistent-mapped buffer来显著的减少glMapBuffer的调用。
  • OpenGL 4.5
    发布日期:2017年5月9日
  • OpenGL 4.6
    发布日期:2019年10月22日

3 硬件支持

3.1 工控机

IPC-研华ARK-10
DirectX* 11.1, OGL 3.0, OCL 1.1, OGL ES 2.0 support Encode
IPC-研华SOM-3568
DX 11.1, OpenGL 4.2, OpenGL ES 3.0, OpenCL 1.2
IPC-研华MIO-3260
DirectX®11, Open GL3.0, Open CL 1.1, OGLES 2.0

3.2 嵌入式板

RK3399
Arm Mali-T860 GPU 支持 OpenGL ES 1.1/2.0/3.0/3.1
IMX6Q
OpenGL ES2

4 版本选择

由于硬件对OpenGL 4 版本支持的少,为了兼容,还是 3.3 版本安全些。

5 资料

5.1 open.gl/

https://open.gl/

5.2 NeHe的OpenGL教程

http://nehe.gamedev.net/
https://www.cnblogs.com/arxive/p/6238969.html

5.3 OpenGL Step by Step

http://ogldev.atspace.co.uk/index.html

5.4 mbsoftworks

http://www.mbsoftworks.sk/index.php?page=tutorials&series=1

5.5 learnopengl

https://learnopengl.com/

5.6 qiliang

https://qiliang.net/old/nehe_qt/index.html

6 图形学重点

  • OpenGL渲染管线
  • 物体-世界-相机-裁剪-视口 坐标变换

参考

1、OpenGL经典教程及书籍推荐
2、从0开始的OpenGL学习(目录)
3、Qt OpenGL教程
4、Qt5–OpenGL学习脚印
5、现代OpenGL学习教程
6、Qt OpenGL现代学习教程
7、State-of-the-Art OpenGL with Qt
8、现代OpenGL入门教程
9、https://learnopengl.com/
10、https://learnopengl-cn.github.io/
11、opengl-tutorial
12、OGL
13、极客学院
14、Qt5 OpenGL
15、OpenGL–百度百科
16、Good–OpenGL原理介绍
17、OpenGL的版本历史和发展
18、GPU渲染简介

发布了496 篇原创文章 · 获赞 601 · 访问量 155万+

猜你喜欢

转载自blog.csdn.net/qq_38880380/article/details/104010090