您的位置:首页 > 运维架构

OpenGL系统设计-OpenGL扩展

2009-10-24 12:30 323 查看

1.6 OpenGL扩展(OpenGL Extensions)

和微软的Direct3D/DirectGraphics相比较,OpenGL的一个最大的优点是其扩展机制。对于显卡硬件的新功能,除非微软发布了DirectX的新版本,否则,程序员是无法使用的。但OpenGL就不同了,OpenGL给硬件厂商和程序员提供了扩展机制,让硬件厂商增加基于显卡的新功能,程序员通过扩展就可以使用这些新功能。
对程序员来说,并不希望总是更新自己的显卡来使用新功能,硬件厂商就提供了更新的显卡取得程序来满足要求。实际上,硬件厂商一直在这么作。这样,程序员可以通过升级自己显卡的驱动程序来使用OpenGL扩展。
所谓扩展,就是在OpenGL某一个版本的基础上,如1.1,增加的扩展功能。这些扩展功能可能会在新版本中成为基本功能。
但是任何事物都是有利有弊,由于有些扩展是硬件厂商完全针对自身开发的,因此使用某些针对特定显卡的扩展很有可能无法在另一种显卡上运行。这样,就会出现某些应用程序在一种显卡上运行很好,但在另一种显卡上效果却很一般。例如,DOOM3为了将显示技术发挥到极致,就分别针对nVidia和ATI写了取得,里面就用到了各自特定的扩展。针对扩展不统一的问题,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,因此,如果要使用如多重纹理这样的功能就必须通过扩展来实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: