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 | |
…… |
由于众所周知的原因,目前的Windows平台上的OpenGL32.dll仍然只支持OpenGL1.1版本,而不是最新的1.5,因此,如果要使用如多重纹理这样的功能就必须通过扩展来实现。
相关文章推荐
- OpenGL系统设计-扩展建模(1)
- OpenGL系统设计-扩展建模(2)
- OpenGL系统设计-扩展建模(5)
- OpenGL系统设计-扩展建模(3)
- OpenGL系统设计-扩展建模(5)
- OpenGL系统设计-扩展建模(6)
- OpenGL系统设计-粒子系统(2)
- OpenGL系统设计-纹理贴图(4)_包含JPEG解压缩解码
- OpenGL系统设计-1.2 OpenGL架构
- OpenGL系统设计-纹理贴图(1)
- OpenGL系统设计-位图 字体(3) 汉字显示
- 中小型商城系统中的分类/产品属性/扩展属性的数据库设计
- OpenGL系统设计-位图 字体(4) 读写像素
- 转载:如何设计一个可扩展的用户登录系统
- 如何设计一个易扩展的游戏技能系统?
- 基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展
- OpenGL系统设计-融合DirectXAudio
- OpenGL系统设计-全屏模式(1)
- 系统设计时请预留出扩展的余地
- OpenGL系统设计-OpenGL数据类型和状态机制