如何以可编程方式可靠地使用的方式找到OpenGL实现支持的GLSL版本?
获取GL_SHADING_LANGUAGE_VERSION
字符串并尝试解析它的最佳方法是什么?可以依赖于以明确定义的格式返回吗?我的英特尔驱动程序返回1.20
,这很简单,可以解析,但我的nVidia卡返回4.20 NVIDIA via Cg compiler
。是否可以信任(\d+)\.(\d+)( .*)?
正则表达式匹配? This answer似乎另有说明,返回OpenGL ES GLSL ES 1.0
。
这是否正确,和/或还有其他方法吗?具体来说,我想检查一下,至少支持GLSL 1.20。
答案 0 :(得分:15)
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
有一个定义良好的API用于查询OpenGL版本。使用上面的表格映射到GLSL版本(在OpenGL-3.3之后它非常合乎逻辑)。
此外,规范将GL_VERSION和GL_SHADING_LANGUAGE_VERSION的格式定义为
以版本号开头。版本号使用以下形式之一:
major_number.minor_number | major_number.minor_number.release_number
答案 1 :(得分:-1)
如果您希望从代码中获取代码,请尝试将glGetString
与GL_SHADING_LANGUAGE_VERSION
答案 2 :(得分:-2)
初始化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 Corporation
渲染器:GeForce GT 635 / PCIe / SSE2
GL版本:4.6.0 NVIDIA 388.13
GLSL版本:4.60 NVIDIA