OpenGL的扩展机制

      这几天了解了一下OpenGL的扩展机制(extensions mechanism),方知OGL的另一片天地。
     OpenGL和D3D比较起来,最大的一个长处就是其扩展机制了。OpenGL扩展其实质是硬件的驱动程序的一部分,是针对硬件的特性而新开发的。它是由硬件设计者或OpenGL库设计者按其规格说明书进行设计。不同的OpenGL实现(OpenGL Implementation)支持的扩展可能不一样。只有随着某一扩展的推广与应用以及硬件技术的提高该扩展才会在所有的OpenGL实现中被给予支持,从而最终成为OpenGL标准库的一部分。
     OpenGL也不是没有缺点,正因为各个厂商都可以开发自己的扩展,所以扩展的数目比较多,而且混乱。有些扩展实现相同的功能,可是因为是不同厂商所开发的,接口也随之不同,所以程序中为了实现这个功能,往往要为不同的显卡写不同的程序。据说这个问题在OpenGL 2.0出来后就能解决了。2.0的一个目标就是统一扩展
 
      接下来了解一下扩展名,所有的OGL扩展均遵循以下命名方式:
GL__PREFIX__extension_name
第一段GL,用来表示针对OGL哪部分开发的扩展,有以下几个值:
GL——针对OpenGL可心的扩展
WGL——针对Windows平台的扩展
GLX——针对Unix/Linux平台的扩展
GLU——针对OpenGL Utility Library的扩展
第二段PREFIX用来表示是谁开发的此扩展,常见以下几个值:
ARB——经OpenGL Architecture Review Board(OpenGL管理机构)正式核准的扩展,往往由厂商开发的扩展发展而来,如果同时存在厂商开发的扩展和ARB扩展,应该优先使用ARB扩展
EXT – 被多个硬件厂商支持的扩展
NV  – nVIDIA 公司开发的扩展
ATI – ATI公司开发的扩展
ATIX– ATI公司开发的实验性扩展
SGI – Silicon GraphicsSGI)公司开发的扩展
SGIX– Silicon GraphicsSGI)公司开发的实验性扩展
第三段multitexture就是真正的扩展名了,如multitexture就是多重纹理扩展
 
如何使用扩展呢?
首先,建议赶紧查看显卡的型号,并升级到最新版本。因为windows对OpenGL的支持非常消极(为了推广其DX,鄙视他),只支持到1.1,至于以后的版本就得看你的显卡够不够劲了。
在windows平台下不能直接使用OGL的这些新特性,因为他们存在于显卡的驱动程序当中。可以在SGIXXX取得相应的头文件,然后升级你的显卡驱动。
然后,为每一个你想使用的扩展函数获得入口点(entry point)。
注意:这些扩展函数的入口点只能针对一个渲染上下文(rendering context),如果有超过一个的渲染上下文,必须分别为每一个获得函数入口点。
const char *str = glGetString( GL_EXTENSIONS );
以上代码获得当前显卡支持的所有扩展。返回一个字符串指针,不同的扩展名之间用空格隔开。
对函数指针类型的定义SGI大多为我们做好了,放在glext.h中,如:
typedef void (APIENTRY * PFNGLPOINTPARAMETERFARBPROC)(GLenum pname,GLfloat param);
typedef void (APIENTRY * PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname,const GLfloat *params);
然后是定义函数指针:
PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB = NULL;
PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB = NULL;
再检查显卡是否支持GL_ARB_point_parameters扩展。如果支持可以用wglGetProcAddress函数获取扩展函数的指针:
glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)/
       wglGetProcAddress( "glPointParameterfEXT" );
glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC) /
       wglGetProcAddress( "glPointParameterfvEXT" );
 
通过软件Opengl Extensions Viewer可以查看到当前配置可支持的extensions,此软件的search功能十分好用,可助你快速查询相应扩展的帮助文档,如图:
在使用扩展之前,确定是否真的有必要使用它?是否能使我们的程序运行的更流畅?是否能在大多数的显卡上正确运行?是否能改善我们程序的质量?
gamedev上有篇文章详细描述了如何在windows平台下使用扩展机制,并给出了一个DEMO,非常好的学习资料,呵呵!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值