【问题标题】:Why does my #version 330 shader run on older opengl?为什么我的#version 330 着色器可以在较旧的 opengl 上运行?
【发布时间】:2016-02-15 20:10:38
【问题描述】:

在大约 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;
}

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

【问题讨论】:

  • 您是否特别请求 GL 3.2 上下文,而您的驱动程序可能支持更高版本的上下文?
  • 谢谢,就是这样。我正在调用 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); 删除导致我的版本显示 OpenGL 和 GLSL 的 4.30。将其添加为答案,我会接受。

标签: opengl glsl


【解决方案1】:

有可能(并由您的评论确认),如果您请求的 OpenGL 上下文比您的驱动程序支持的旧,带有高于 GL_SHADING_LANGUAGE_VERSION 广告的 #version 标签的 GLSL 着色器仍将编译。该规范没有直接将GL_SHADING_LANGUAGE_VERSION 与对#version 标记的支持联系起来。它只说“任何代表编译器不支持的语言版本的数字都会导致生成错误。” (第 3.3 节)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多