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

中午写的博文中,认为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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值