OpenGL对扩展是否支持的检测的方法

来源:互联网 发布:mac系统翻墙 编辑:程序博客网 时间:2024/05/21 12:40

中午写的博文中,认为glcolortable()函数发生错误是opengl版本问题或者是显卡问题,经过一下午的在查看资料发现,其主要原因是对opengl GL_ARB_imaging扩展模块的不支持。查看glew.h头文件你会发现glColorTable()函数定义在GL_ARB_imaging下面。我们如何查看计算机是否对GL_ARB_imaging支持那,请看下面代码:

static GLboolean CheckExtension(char *extName, const char *extString)    {/* ** Search for extName in the extensions string.  Use of strstr() ** is not sufficient because extension names can be prefixes of ** other extension names.  Could use strtok() but the constant ** string returned by glGetString can be in read-only memory. */char *p = (char *)extString;char *end;int extNameLen;extNameLen = strlen(extName);end = p + strlen(p);while (p < end) {    int n = strcspn(p, " ");    if ((extNameLen == n) && (strncmp(extName, p, n) == 0)) {return GL_TRUE;    }    p += (n + 1);}return GL_FALSE;    }


 

 const GLubyte *ext_string;    int new_ext_supported = GL_FALSE;    if (CheckExtension("GL_ARB_imaging", glGetString(GL_EXTENSIONS)))new_ext_supported = GL_TRUE;

 

以上代码来自:http://www.opengl.org/registry/doc/rules.html

glGetString(GL_EXTENSIONS)获取opengl扩展的支持字符串,CheckExtension()函数是对字符串的分析,第一个参数为扩展名称。

opengl的扩展名称以及之间的包含关系可以在glew.h中查看。

glColortable函数属于GL_ARB_imaging,

glGenVertexArrays属于GL_ARB_vertex_array_object扩展。

在使用glColortable之前应该检测一下计算机是否支持GL_ARB_imaging,以防止程序崩溃。

也可以通过如下面判断:

PFNGLCOLORTABLEPROC pGLColorTable = NULL;

pGLColorTable = (PFNGLCOLORTABLEPROC)wglGetProcAddress("glColorTable");

如果pGLColorTable为空,则不支持。

 

另一种方法:

// 检测图像子集if(gltIsExtSupported("GL_ARB_imaging") == 0){    printf("Imaging subset not supported\r\n");    return 0;}
原创粉丝点击