我知道这个问题听起来有点傻,但我想知道是否有办法在不使用“暴力破解”的情况下做我假装的事情。
我正在开发一个使用一些 OpenGL 内容的大型应用程序,用于 GUI 目的。我一直在使用 OpenGL 的大量扩展。所有操作都是在具有良好图形卡的机器上完成的,因此一切始终运行良好。
现在我在一台显卡较弱的机器上测试了我的应用程序 - 第一台机器支持很多 opengl 4 功能,第二台机器只支持版本 3 中的几个功能 - 不幸的是,有几项功能没有显示出来。
我想说的原因是,不知何故,我正在使用一个在较弱的机器上不受支持的扩展,但我完全不知道哪个扩展或功能可能不受支持。
所以,问题是有什么方法可以找出是哪个扩展,例如,以某种方式禁用一个扩展,然后检查它是否仍在好机器上工作。我的问题是代码很大,以至于无法在好机器上逐行注释,直到我遇到同样的问题。
答案1
您可以使用调用枚举可用的 OpenGL 扩展
glGetString(GL_EXTENSIONS);
测试扩展尤其需要小心。此函数可在 OpenGL wiki 上找到:
// Helper to check for extension string presence. Adapted from:
// http://www.opengl.org/resources/features/OGLextensions/
static int isExtensionSupported(const char *extList, const char *extension)
{
const char *start;
const char *where, *terminator;
/* Extension names should not have spaces. */
where = strchr(extension, ' ');
if ( where || *extension == '\0' )
return 0;
/* It takes a bit of care to be fool-proof about parsing the
OpenGL extensions string. Don't be fooled by sub-strings,
etc. */
for ( start = extList; ; ) {
where = strstr( start, extension );
if ( !where )
break;
terminator = where + strlen( extension );
if ( where == start || *(where - 1) == ' ' )
if ( *terminator == ' ' || *terminator == '\0' )
return 1;
start = terminator;
}
return 0;
}
答案2
通常,您可以通过调用 OpenGL API 来获取扩展列表。例如,在 Linux 上使用glxinfo
查看扩展列表。