OpenGL学习笔记:版本和扩展

来源:互联网 发布:java md5加密是否可逆 编辑:程序博客网 时间:2024/04/29 00:49

可以通过以下方法获取自己系统中的OpenGL版本:

const char* version = (const char*)glGetString(GL_VERSION); 

printf("OpenGL 版本:%s/n", version);

glGetString(GL_VENDOR); 返回OpenGL的提供厂商。

glGetString(GL_RENDERER); 返回执行OpenGL渲染的设备,通常就是显卡的名字。

glGetString(GL_EXTENSIONS); 返回所支持的所有扩展,每两个扩展之间用空格隔开。

 

除了可以用OpenGL标准函数,还可以用OpenGL扩展包

 

厂商在发行OpenGL时,除了遵照OpenGL标准,提供标准所规定的各种功能外,往往还提供其它一些额外的功能,这就是扩展。

扩展可以提供各种很新很潮的效果哟~

 

每个OpenGL扩展,都必须向OpenGL的网站注册,确认后才能成为扩展。注册后的扩展有编号和名字。编号仅仅是一个序号,名字则与扩展所提供的功能相关。

名字用下划线分为三部分。举例来说,一个扩展的名字可能为:GL_NV_half_float,其意义如下:

第一部分为扩展的目标。比如GL表示这是一个OpenGL扩展。如果是WGL则表示这是一个针对Windows的OpenGL扩展,

如果是GLX则表示这是一个针对linux的X Window系统的OpenGL扩展。

第二部分为提供扩展的厂商。比如NV表示这是nVidia公司所提供的扩展。相应的还有ATI, IBM, SGI, APPLE, MESA等。

剩下的部分就表示扩展所提供的内容了。比如half_float,表示半精度的浮点数,每个浮点数的精度只有单精度浮点数的一半,

因此只需要两个字节就可以保存。这种扩展功能可以节省内存空间,也节省从内存到显卡的数据传输量,代价就是精确度有所降低。

 

EXT扩展是由多个厂商共同协商后形成的扩展

ARB扩展不仅是由多个厂商共同协商形成,还需要经过OpenGL体系结构审核委员会(即ARB)的确认

 

在使用OpenGL所提供的功能时,应该按照标准功能、ARB扩展、EXT扩展、其它扩展这样的优先顺序。

例如有ARB扩展支持这个功能时,就不使用EXT扩展。

 

扩展的函数、常量,在命名时与通常的OpenGL函数、常量有少许区别。那就是扩展的函数、常量将以厂商的名字作为后缀。

比如ARB扩展,所有ARB扩展的函数,函数名都以ARB结尾,常量名都以_ARB结尾。例如:

glGenBufferARB(函数)

GL_ARRAY_BUFFER_ARB(常量)

 

如何使用扩展:

 

搜索开源项目GLEE, 下载GLee.c/h文件,放到程序中一起编译

 

#include "GLee.h"   // 注意顺序,GLee.h要在glut.h之前使用

#include <GL/glut.h>

 

if( GLEE_ARB_window_pos ) 

 

// 如果支持GL_ARB_window_pos, 则使用glWindowPos2iARB函数,指定绘制位置 

printf("支持GL_ARB_window_pos/n"); 

printf("使用glWindowPos函数/n"); 

glWindowPos2iARB(100, 100); 

}

 

看起来蛮简单的

 

OpenGL Extension Viewer软件,很好用,可以查看本机各种OpenGL信息