为什么我的#version 330着色器在较旧的opengl上运行?

时间:2016-02-12 03:48:22

标签: opengl glsl

大约4周后,我能够成功运行顶部标记的顶点/片段着色器:

#version 330 core

然而,当我打电话时,我才意识到:

cout << "OpenGL version: " << glGetString(GL_VERSION) << endl;
cout << "GLSL version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << endl;

我明白了:

OpenGL version: 3.2.0
GLSL version: 1.50 NVIDIA via Cg compiler

为什么/如何使用较旧的GLSL和OpenGL版本运行这些着色器?我应该使用较旧的着色器版本吗?为什么运行此着色器时没有出现任何错误?我试图抓住它们如下:

// Compile vertex shader
glCompileShader(VS);
glGetShaderiv(VS, GL_COMPILE_STATUS, &rc);
if(!rc) {
    if(isVerbose()) {
        GLSL::printShaderInfoLog(VS);
        cout << "Error compiling vertex shader " << vShaderName << endl;
    }
    return false;
}

当我在着色器中出错时,我得到其他编译错误。我是否应该收到一些错误或警告,因为我的着色器语言太新了?如果它可以处理比它报告的版本更新的东西,我该怎么知道我的硬件支持什么?

1 个答案:

答案 0 :(得分:1)

有可能(并通过您的评论确认),如果您请求的OpenGL上下文早于您的驱动程序支持,那么#version标记高于GL_SHADING_LANGUAGE_VERSION广告的GLSL着色器仍将进行编译。该规范并未直接将GL_SHADING_LANGUAGE_VERSION#version标记的支持相关联。它只是说“任何代表编译器不支持的语言版本的数字都会导致产生错误。” (第3.3节)。