为什么我的#version 330 着色器 运行 在较旧的 opengl 上?
Why does my #version 330 shader run on older opengl?
在大约 4 周的时间里,我已经能够成功 运行 vertex/fragment 着色器在顶部标记为:
#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
Why/how 我可以 运行 这些着色器使用较旧的 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;
}
当我在我的着色器中出错时,我得到了其他编译错误。我应该因为我的着色器语言太新而收到一些错误或警告吗?如果我的硬件可以处理比它报告的版本更新的东西,我怎么知道我的硬件支持什么?
如果您请求的 OpenGL 上下文早于您的驱动程序支持的版本,则有可能(并通过您的评论确认),带有 #version
标签的 GLSL 着色器仍将高于 GL_SHADING_LANGUAGE_VERSION
所宣传的编译。该规范没有直接将 GL_SHADING_LANGUAGE_VERSION
与对 #version
标签的支持联系起来。它只说 "Any number representing a version of the language a compiler does not support will cause an error to be generated."(第 3.3 节)。
在大约 4 周的时间里,我已经能够成功 运行 vertex/fragment 着色器在顶部标记为:
#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
Why/how 我可以 运行 这些着色器使用较旧的 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;
}
当我在我的着色器中出错时,我得到了其他编译错误。我应该因为我的着色器语言太新而收到一些错误或警告吗?如果我的硬件可以处理比它报告的版本更新的东西,我怎么知道我的硬件支持什么?
如果您请求的 OpenGL 上下文早于您的驱动程序支持的版本,则有可能(并通过您的评论确认),带有 #version
标签的 GLSL 着色器仍将高于 GL_SHADING_LANGUAGE_VERSION
所宣传的编译。该规范没有直接将 GL_SHADING_LANGUAGE_VERSION
与对 #version
标签的支持联系起来。它只说 "Any number representing a version of the language a compiler does not support will cause an error to be generated."(第 3.3 节)。