OpenGL 2.0 筹划中!(增补2)

 

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辛勤工作的大师们致敬

你可能感兴趣的:(编程,api,语言,extension,shader,distance)