Opengl 查找支持的GLSL版本

Opengl 查找支持的GLSL版本,opengl,glsl,Opengl,Glsl,如何找到OpenGL实现支持的GLSL版本,并以可靠的编程方式使用 获取GL\u SHADING\u LANGUAGE\u VERSION字符串并尝试解析它的最佳方法是什么?是否可以依靠它以定义良好的格式返回?我的英特尔驱动程序返回1.20,这很容易解析,但我的nVidia卡通过Cg编译器返回4.20 nVidia。是否可以信任它与(\d+)\(\d+)(.*)匹配?regex?似乎表明情况并非如此,返回OpenGL ES GLSL ES 1.0 这些是否正确,和/或是否有其他方法?具体来说,我

如何找到OpenGL实现支持的GLSL版本,并以可靠的编程方式使用

获取
GL\u SHADING\u LANGUAGE\u VERSION
字符串并尝试解析它的最佳方法是什么?是否可以依靠它以定义良好的格式返回?我的英特尔驱动程序返回
1.20
,这很容易解析,但我的nVidia卡通过Cg编译器返回
4.20 nVidia
。是否可以信任它与
(\d+)\(\d+)(.*)匹配?
regex?似乎表明情况并非如此,返回
OpenGL ES GLSL ES 1.0


这些是否正确,和/或是否有其他方法?具体来说,我想检查是否至少支持GLSL 1.20。

如果您希望从代码中获得它,请尝试使用
glGetString
GL\u SHADING\u LANGUAGE\u VERSION


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_版本和GL_着色语言_版本的格式

以版本号开始。版本号使用以下形式之一:

major_number.minor_number | major_number.minor_number.release_number

初始化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


至于OpenGL版本和GLSL版本之间的映射,是否真的不仅某个OpenGL版本支持相应的GLSL版本,而且某个GLSL版本仅由相应的OpenGL版本支持,而不由以前的版本(作为扩展)支持?至于
GL\u SHADING\u LANGUAGE\u VERSION
字符串的格式,这是否意味着我在问题中链接的答案要么报告不准确,要么苹果不符合要求;还是GLES有所不同?@Dolda2000:自从OpenGL-3.3内核以来,所有关于核心元素(如GLSL)的开发都将产生一个新的OpenGL版本。不再有GLSL扩展(当然,供应商特定扩展除外)。OpenGL ES是一个不同的野兽,它的规则与OpenGL不一样;它们已经包含了我需要和使用的所有功能。我更感兴趣的是以更优化的方式支持较旧或功能较差的OpenGL实现,如OpenGL 2.0/2.1和现有的各种Intel GPU。@CAMOBAP:理论上,通过查询轮询OpenGL上下文和GLSL编译器支持的版本可以获得此信息,但规范的方法是只需阅读文档即可。在,您可以下载每个OpenGL标准和相关规范标准(如GLSL)的规范,并且每个标准定义了它所针对的OpenGL版本。例如,GLSL-4.50规范在第1页上声明:“本规范中所有OpenGL图形系统规范参考版本均为4.5”。