OpenGL系统设计-OpenGL扩展

1.6        OpenGL扩展(OpenGL Extensions

和微软的Direct3D/DirectGraphics相比较,OpenGL的一个最大的优点是其扩展机制。对于显卡硬件的新功能,除非微软发布了DirectX的新版本,否则,程序员是无法使用的。但OpenGL就不同了,OpenGL给硬件厂商和程序员提供了扩展机制,让硬件厂商增加基于显卡的新功能,程序员通过扩展就可以使用这些新功能。

对程序员来说,并不希望总是更新自己的显卡来使用新功能,硬件厂商就提供了更新的显卡取得程序来满足要求。实际上,硬件厂商一直在这么作。这样,程序员可以通过升级自己显卡的驱动程序来使用OpenGL扩展。

所谓扩展,就是在OpenGL某一个版本的基础上,如1.1,增加的扩展功能。这些扩展功能可能会在新版本中成为基本功能。

但是任何事物都是有利有弊,由于有些扩展是硬件厂商完全针对自身开发的,因此使用某些针对特定显卡的扩展很有可能无法在另一种显卡上运行。这样,就会出现某些应用程序在一种显卡上运行很好,但在另一种显卡上效果却很一般。例如,DOOM3为了将显示技术发挥到极致,就分别针对nVidiaATI写了取得,里面就用到了各自特定的扩展。针对扩展不统一的问题,OpenGL ARB也想了一些办法。首先,是统一成标准扩展,其次是减少扩展数目。这些目标预计将在OpenGL 2.0中实现。

OpenGL的扩展名是有规律的,这些有助于程序员了解扩展的意义从而去使用。扩展是有扩展名来体现的,硬件所支持的所有扩展可以通过glGetString( GL_EXTENSIONS )来获取的。glGetString( GL_EXTENSIONS )返回的字符串包含了所有的扩展名,每个扩展名以空格隔开。

扩展名分为三部分组成,第一部分表示是针对OpenGL的哪一部分的扩展,第二部分表示开发扩展的机构,第三部分则表示扩展的含义,没有严格的要求,三部分以下划线连接,形成一个完整的扩展名。如GL_ARB_multitexture。表1-2给出了扩展名的三部分的说明。

 

1-2     OpenGL扩展名含义

 

 

扩展名

说明

例子

第一部分

GL

针对OpenGL核心的扩展

GL_ARB_multitexture

WGL

针对Windows平台的扩展

WGL_ARB_buffer_region

GLX

针对Unix/Linux平台的扩展

GLX_EXT_visual_info

GLU

针对OpenGL 实用库的扩展

GLU_EXT_nurbs_tessellator

第二部分

ARB

OpenGL ARB正式核准的扩展,往往由厂商开发的扩展发展而来,如果同时存在厂商开发的扩展和ARB扩展,应该优先使用ARB扩展

GL_ARB_texture_env_add

EXT

被多个硬件厂商支持的扩展

GL_EXT_vertex_array

NV

nVidia公司开发的扩展

GL_NV_texture_shader

ATI

ATI公司开发的扩展

GL_ATI_texture_mirror_once

SGI

SGI公司开发的扩展

GLX_SGI_video_sync

SGIX

SGI公司开发的实验性扩展

GL_SGIX_fog_offset

IBM

IBM公司开发的扩展

GL_IBM_static_data

WIN

微软公司开发的扩展

GL_WIN_specular_fog

SGIS

SGI公司开发的扩展

GL_SGIS_fog_function

HP

HP公司开发的扩展

GL_HP_image_transform

INTEL

Intel公司开发的扩展

GL_INTEL_texture_scissor

APPLE

Apple公司开发的扩展

GL_APPLE_specular_vector

SUN

SUN公司开发的扩展

GL_SUN_slice_accum

SUNX

SUN公司开发的实验性扩展

GL_SUNX_constant_data

INGR

INTERGRAPH公司开发的扩展

GL_INGR_color_clamp

MESA

Mesa公司开发的扩展

GLX_MESA_pixmap_colormap

3DFX

3DFX公司开发的扩展

GL_3DFX_multisample 

OML

OpenML扩展

GL_OML_interlace

I3D

Interactive 3D Graphics组织开发的扩展

WGL_I3D_digital_video_control

S3

S3公司开发的扩展

GL_S3_s3tc

PGI

PGI公司开发的扩展

GL_PGI_misc_hints

第三部分

accum

Accumulation Buffer

GL_SUN_slice_accum

env

Environment

GL_EXT_texture_env

vertex

 

GL_SGIX_vertex_preclip

list

Display List

GL_SUN_triangle_list

……

 

 

 

OpenGL扩展往往都会新增一些函数,或者新的状态变量。通过这些新的函数或状态变量来获取使用新功能。

由于众所周知的原因,目前的Windows平台上的OpenGL32.dll仍然只支持OpenGL1.1版本,而不是最新的1.5,因此,如果要使用如多重纹理这样的功能就必须通过扩展来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值