OpenGL的版本号历史和发展
Posted wzzkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL的版本号历史和发展相关的知识,希望对你有一定的参考价值。
来源请注明。本文永久地址为http://www.cnblogs.com/vertexshader/articles/2917540.html
OpenGL®作为业界最为广泛使用的2D和3D图形接口标准。应用在成千上万的各式各样的计算机的程序中。从初期的崭露头角,到与Direct3D激烈竞争。后经历黯淡被Khronos接手又发扬光大。已经历经波折发展了20年。
由于过去的黯淡。至今甚至仍有人站在错误的时间角度觉得它是落后的——它从未停止它前进的步伐,这篇文章就来简述OpenGL的版本号历史和发展。
OpenGL 1.0
公布时间: 1992年1月
OpenGL的最早版本号OpenGL 1.0由Mark Segal和Kurt Akeley公布于1992年1月。从这之后。OpenGL每隔一段时间都会公布一个新版本号的规范,这些规范定义了一些显卡必须支持的新扩展。
这就决定了OpenGL的每一个版本号事实上就是由各个扩展组成的,当硬件的驱动全部支持对应的扩展的时候,对应的OpenGL版本号就被支持了。
OpenGL 1.1
公布时间:1997年1月
扩展 | 特性添加 |
Vertex arrays | |
Polygon offset | |
Logical operation | |
Internal texture formats, texture proxy, and texture env | |
Copy texture and subtexture from framebuffer | |
Texture object |
时隔5年OpenGL才公布新的版本号OpenGL 1.1,而Direct3D的出现(尤其是红色警戒的大卖)使得OpenGL感觉到了压力。
顶点数组(Vertex arrays)的出现代替了glVertex*这类马上模式画图函数,多个数据能够被一个函数调用绘制了。降低了调用函数带来的CPU循环开销。polygon offset攻克了z-fighting和stitching的问题;在pre-fragment operation開始支持逻辑操作(logic operation)。纹理方面開始支持纹理代理(texture proxy)和纹理环境映射(texture environment)。以及从帧缓冲(frameuffer)复制像素至texture或者subtexture;纹理对象(texture object)的出现改变了过去仅仅能使用显示表(display list)来静态地使用纹理的方法。如今纹理和參数(texture parameter)能被改变了。
OpenGL 1.2
公布时间:1998年3月16日
扩展 | 特性 |
Three-dimensional texture | |
BGR or BGRA pixel format | |
Packed pixel formats | |
Normal rescaling | |
Separate specular color | |
Texture coordinate edge clamping | |
Texture LOD control | |
Vertex array draw element range |
这个版本号的OpenGL開始支持能够用于体渲染(volume rendering)和体纹理(solid texture)的texture 3D;BGRA和BGA的出现主要是为了兼容某些平台和硬件;包装像素(pack pixel)的出现使得像素能够在不同的对象之间进行像素传输(pixel transfer),这也就是像素缓冲对象(pixel buffer object)的前身;GL_SGIS_texture_edge_clamp扩展的出现将texture coordinate规范在[0,1]这个区间;GL_SGIS_Texture_lod扩展则带来了重要的MipMap技术,能够通过对纹理參数(texture parameter)的控制来完毕对MipMap的控制。
OpenGL 1.2.1
公布时间:1998年10月14日
这个版本号的OpenGL没有什么重大的改变,可是专门介绍了ARB扩展的概念。ARB扩展是经过OpenGL ARB认证的扩展。这种扩展将被广泛地实现。
OpenGL 1.3
公布时间:2001年8月14日
扩展 | 特性添加 |
compressed texture format | |
texture cube | |
GL_ARB_multitexture(removed) | multi-texture |
Texture add env mode, texture combine env mode, texture dot3 env mode | |
Texture border clamp | |
transpose matrix |
这个版本号開始支持压缩纹理(compressed texture),能够有效地降低存储和带宽的压力,如今广泛的应用于各种对存储大小和带宽敏感的手持设备上。立方体纹理(texture cube)的出现主要用于在天空盒(skybox)、动态反射(dynamic reflection)等技术上;而multisample的出现让OpenGL能够支持纹理和Framebuffer的MSAA抗锯齿技术,代替了过去在光栅化状态(rasterizer state)中趋近没用的抗锯齿设置。
OpenGL 1.4
公布版本号:2002年7月24日
扩展 | 特性添加 |
Automatic mipmap generation | |
Blend squaring | |
Depth texture adn shadows | |
Fog coordinate | |
Multi draw arrays | |
Point parameters | |
Secondary color | |
Separate blend functions | |
Stencil warp | |
Texture crossbar env mode | |
Texture mirrored repeat | |
Window raster position |
这个版本号開始支持纹理自己主动生成Mipmap。 以及关于point光栅化的parameter。
OpenGL 1.5
公布时间:2003年7月29日
扩展 | 特性添加 |
Buffer object | |
Occlusion query | |
Shadow functions |
这个版本号出现了缓冲对象(buffer object),彻底代替了过去的顶点数组(vertex array)和马上模式,顶点数据能够从客户端内存(client\'s memory)上传到服务端内存(server\'s memory)了;同一时候添加了很重要的遮挡查询(occlusion query)。
OpenGL 2.0
公布时间:2004年9月7日
扩展 | 特性添加 |
OpenGL Shading Language 1.00 | |
Multiple render targets | |
Non-power-of-two textures | |
Point sprites | |
Separate stencil |
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日
扩展 | 特性添加 |
Pixel buffer objects | |
sRGB textures |
这个版本号添加了像素缓冲对象(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.0
公布日期:2008年8月11日
扩展 | 特性添加 |
New functions for shading language | |
Framebuffer objects, along with blitting, multisample renderbuffer objects, and packed depth/stencil image formats | |
OpenGL的版本历史和发展 |