OpenGL 2.0 版正在筹划中,详情见www.opengl.org 支持OpenGL的同志们敬请期待,OpenGL将再次将D3D甩在后面,提供最先进的功能和最有好的编程接口。
OpenGL 2.0由3Dlabs提议
当前主要问题: 系统和图像构筑自1992年来有了重大改变,但OpenGL没有跟上。 越来越感觉到OpenGL(核心)落后于今天先进硬件的功能和性能。 实现和应用的复杂性,导致了今天太多extension。 开发市场产品的需求。
目标: 提升到一个新的高度,以反映今天和不久的将来的显示硬件。(将由核心象D3D一样提供全部硬件功能) 展示下一代可编程图像硬件的图景。(将使用高级语言而不是汇编对显卡编程) 减小对extension的依赖,以可编程性取代复杂性。(由定义良好的核心功能取代大部分扩展功能) 对已有程序保持相当理想的兼容性。(老程序不经修改正常运行,并保持高效) 对不需要兼容性的场合,提供简洁干净的核心。(过时的函数剔除) 处理对动态媒体的需要。(提高动态材质等动态媒体的功能和效率)
新特性:
+标准化已有功能 -PBuffer功能提到核心功能 -包含大部分图象子系统 -集成并标准化WGL,GLX的功能 -大量Extension变为标准功能 +展现全部硬件能力 -使与图像系统的数据交换性能达到极限 -提高并行计算能力 +可编程性 -高级语言对显卡硬件及其他可编程部分编程 -丰富的功能集 -硬件无关 -标准化 -特别为OpenGL设计 +可编程顶点操作 -替代坐标变换,材质应用,光照 -允许任意单顶点操作 +可编程象素操作 -替代材质访问,材质应用,雾 -允许任意单象素操作 +可编程图象格式 -替代图象数据固定的紧缩和反紧缩操作 -允许任意图象类型和格式 +直接支持多通(MultiPass)算法 +更具伸缩性的帧缓冲配置 +离屏(OffScreen)渲染 +由应用程序控制材质存储 +所有OpenGL对象使用一致的框架 +更简洁高效的同步机制 +应用程序控制缓冲区翻转 +使用任意颜色缓冲当作材质
纯GL2.0内核:

平滑过渡:
=》OpenGL1.3 (2.0包含1.3全部功能,不需修改) =》OpenGL2.0 (应用程序可逐步使用2.0功能) =》Pure OpenGL 2.0 (慢慢逐渐转移到Pure OpenGL) =》今后的流线型API
重要新概念:
- Vertex Processor (顶点操作) - Fragment Processor (象素操作) - Pixel Pack Processor (象素紧缩操作) - Pixel Unpack Processor (象素反紧缩操作)

影像化(Shading)语言:
+与1.3紧密集成 -现有状态机被可编程单元大大增大 +允许逐渐替代1.3固定流程的功能 -自动追踪已有状态 +基于C语言,提供全面的矢量和矩阵类型 -集成了一些RenderMan(一个有名的高质量渲染器)的特性 +虚化流程资源 -大部分情况下程序员不需操心资源管理 +顶点影像化和象素影像化使用相同的语言 -内置的函数和数据标识
顶点,象素操作(VertexProcessor,FragmentProcessor)能力:
大体类似DX8,DX9的VertexShader,PixelShader,可参见MSDN,在此不赘述。
紧缩,反紧缩操作(Pack/Unpack Processor)能力:
+随意的内存图数据格式 +通过可编程性获得自由性 +消除对下列Extension的需要 - EXT_cmyka - SGIX_ycrcb - EXT_422_pixels - OML_subsample - OML_resample - NV_packed_depth_stencil - 以及以上Extension的变体
辅助数据缓冲区(AuxDataBuffer 新增,非原来的AuxBuffer):
+简单泛化的概念,增强可编程性 +储存浮点数据 +具有帧缓冲的特性 +应用举例 -多次积累输出(运动模糊等) -中间结果 -多光谱处理 -Sweeney style color/normal buffer (Sorry,此句我不懂) -可渲染浮点图象再读回主机以实现后端渲染加速(用于网络渲染?)
影化器(Shader)管理:
+运行于OpenGL处理机的程序叫做“影化器”(Shader) +影化器定义为一个字符串数组 +影化器用如下方法编译 - shaderID = CreateShaderObject(policy, priority, target, numStrings, strings); - success = CompileShader(shaderID) - (仍在寻找将上面两条合一的方案) +编译错误如下方法取得 - errlog = CompilerErrorLog() +指定当前影化器 - BindObject(shaderID) +删除 -DeleteObject(shaderID) +检察顶点影化器和象素影化器的兼容性 -ValidShader = CheckShaderBinding()
影化语言结构:
+修饰符 -const - attribute (给顶点影化器的顶点数据) -uniform (API提供的常量) -varying (插值量,顶点影化输出,象素影化输入) -uniform 和 varying 数组 +类型 -float - vec2,vec3,vec4(浮点矢量) -mat2, mat3, mat4(浮点矩阵) -int(16位整型,用于循环和数组下标) +表达式 -常量 -变量 -数量、矢量、矩阵操作 -+,-,*,/ -内置函数 -用户函数 -对矢量和矩阵的元素访问 -对矩阵的行或列访问 +流控制 -if, if else - for - while - do...while - break, continue +用户函数 -使用引用参数 -可修改参数用output关键字修饰 -支持函数重载 -可能需要定义返回值以消除歧义 -其他类似C语言 +内定函数可用于数量或矢量 -sin, cos, tan, asin, 等 - pow, log2, exp2, sqrt, inversesqrt - abs, sign, floor, ceil, fract, mod, min, max, clamp - mix, step, smoothstep - length, distance, normalize, dot, cross - element (仅用于顶点影化) - texture, lod, dPdx, dPdy, fwidth, kill, noise (仅用于象素段影化)
——待续
——向为OpenGL辛勤工作的大师们致敬 
|