OpenGL 2.0 筹划中!(增补2)

    技术2022-05-11  159

     

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


    最新回复(0)