为什么我的#版本330着色器在较旧的opengl上运行?
大约4周来,我已经能够成功运行顶部标记为以下内容的顶点/片段着色器:为什么我的#版本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;
#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;
}