查找支持的GLSL版本

10

如何可靠地在编程中找到OpenGL实现支持的GLSL版本?

最好的方法是获取GL_SHADING_LANGUAGE_VERSION字符串并尝试解析它吗?这个字符串返回的格式是否是可以被信赖的?我的Intel驱动程序返回1.20,这很容易解析,但我的nVidia显卡返回4.20 NVIDIA via Cg compiler。它可以被信任与(\d+)\.(\d+)( .*)?正则表达式匹配吗?这个答案似乎表明不是这样,返回的是OpenGL ES GLSL ES 1.0

这些都正确吗?或者还有其他方法?具体来说,我想检查至少支持GLSL 1.20。

3个回答

18

OpenGL版本与支持的GLSL版本之间有特定的映射关系:

GLSL Version      OpenGL Version
1.10              2.0
1.20              2.1
1.30              3.0
1.40              3.1
1.50              3.2
3.30              3.3
4.00              4.0
4.10              4.1
4.20              4.2
4.30              4.3
4.40              4.4
4.50              4.5

有一个明确定义的用于查询OpenGL版本的API。使用上面的表格将其映射到GLSL版本(在OpenGL-3.3之后非常合乎逻辑)。

此外,规范定义了GL_VERSION和GL_SHADING_LANGUAGE_VERSION的格式。

begin with a version number. The version number uses one of these forms:

major_number.minor_number | major_number.minor_number.release_number

关于OpenGL版本和GLSL版本之间的映射,是否真的只有某个OpenGL版本支持相应的GLSL版本,而且某个GLSL版本仅由相应的OpenGL版本支持,从未被先前版本(作为扩展)支持? - Dolda2000
至于GL_SHADING_LANGUAGE_VERSION字符串的格式,这是否意味着我在问题中链接的答案要么报告不准确,要么苹果公司不符合标准;还是GLES不同? - Dolda2000
@Dolda2000:自从OpenGL-3.3核心版本以来,所有关于核心元素(如GLSL)的开发都将产生一个新的OpenGL版本。除了供应商特定的扩展之外,将不再有GLSL扩展。OpenGL-ES是一种与OpenGL不同规则的不同类型。 - datenwolf
如果只是GLES在这方面有所不同,那么我猜解析版本字符串就可以了。谢谢! - Dolda2000
1
@CAMOBAP:理论上,您可以通过查询轮询OpenGL上下文和GLSL编译器支持的版本来获取此信息,但规范的方法是简单地阅读文档。在http://opengl.org/registry上,您可以下载每个OpenGL标准及其关联规范标准(如GLSL)的规范,并且每个标准都定义了它所编写的OpenGL版本。例如,GLSL-4.50规范在**第1页**上声明:“本规范中所有OpenGL图形系统规范引用均为4.5版本”。 - datenwolf
显示剩余2条评论

0

在初始化OpenGL上下文后(我使用SDL2),调用glGetString()查询图形卡、渲染器以及OpenGL和GLSL版本。我在代码下面复制了我获取到的信息。

printf("MESSAGE InceptionGlobals: Creating OpenGL context...\n");
m_contextOpenGL = SDL_GL_CreateContext(m_window);

if (!m_contextOpenGL) {
    printf("ERROR InceptionGlobals: Couldn't create OpenGL context, exiting... %s\n", SDL_GetError());
    SDL_Delay(5000);
    exit(1);
}

printf("Vendor graphic card: %s\n", glGetString(GL_VENDOR));
printf("Renderer: %s\n", glGetString(GL_RENDERER));
printf("Version GL: %s\n", glGetString(GL_VERSION));
printf("Version GLSL: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION));

供应商显卡:NVIDIA公司 渲染器:GeForce GT 635/PCIe/SSE2 GL版本:4.6.0 NVIDIA 388.13 GLSL版本:4.60 NVIDIA

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接