查找支持的GLSL版本

时间:2013-09-26 07:06:24

标签: opengl glsl

如何以可编程方式可靠地使用的方式找到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。

3 个答案:

答案 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)

如果您希望从代码中获取代码,请尝试将glGetStringGL_SHADING_LANGUAGE_VERSION

一起使用

http://www.opengl.org/sdk/docs/man/xhtml/glGetString.xml

答案 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