大约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;
}
当我在着色器中出错时,我得到其他编译错误。我是否应该收到一些错误或警告,因为我的着色器语言太新了?如果它可以处理比它报告的版本更新的东西,我该怎么知道我的硬件支持什么?
答案 0 :(得分:1)
有可能(并通过您的评论确认),如果您请求的OpenGL上下文早于您的驱动程序支持,那么#version
标记高于GL_SHADING_LANGUAGE_VERSION
广告的GLSL着色器仍将进行编译。该规范并未直接将GL_SHADING_LANGUAGE_VERSION
与#version
标记的支持相关联。它只是说“任何代表编译器不支持的语言版本的数字都会导致产生错误。” (第3.3节)。