【发布时间】: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。将其添加为答案,我会接受。