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

为什么我的#版本330着色器在较旧的opengl上运行?,opengl,glsl,Opengl,Glsl,大约4周来,我已经能够成功运行顶部标记为以下内容的顶点/片段着色器: #version 330 core 然而,我刚刚意识到,当我打电话时: cout << "OpenGL version: " << glGetString(GL_VERSION) << endl; cout << "GLSL version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << endl;

大约4周来,我已经能够成功运行顶部标记为以下内容的顶点/片段着色器:

#version 330 core
然而,我刚刚意识到,当我打电话时:

cout << "OpenGL version: " << glGetString(GL_VERSION) << endl;
cout << "GLSL version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << endl;
为什么/如何使用较旧的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;
}
//编译顶点着色器
glCompileShader(VS);
glGetShaderiv(VS、GLU编译状态和rc);
如果(!rc){
if(isVerbose()){
GLSL::printShaderInfoLog(VS);

cout这是可能的(并由您的评论证实),如果您请求的OpenGL上下文比您的驱动程序支持的旧,则具有高于
GL#SHADING#LANGUAGE#version
所公布标记的
GL#SHADING#LANGUAGE#version
的GLSL着色器仍将编译。该规范没有直接将
GL#SHADING#LANGUAGE#version
与支持
标记联系起来。它只是说“表示编译器不支持的语言版本的任何数字都将导致生成错误。”(第3.3节)。

当您的驱动程序可能支持更高版本时,您是否特别请求GL 3.2上下文?谢谢,就是这样。我正在调用
glfwWindowHint(GLFW_context_version_MAJOR,3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,2);
删除导致我的版本在OpenGL和GLSL中显示4.30的内容。将其添加为答案,我将接受它。
// 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;
}