OpenGL,如何设置GLSL版本?

时间:2011-11-16 19:37:44

标签: c++ opengl

我的系统使用freeglut的OpenGL和GLSL的默认版本是4.1,也使用glew初始化,着色器编译和链接以及执行没有问题。

当我没有指定glutInitContextVersion,glutInitContextFlags或glutInitContextProfile时,会发生此默认版本,然后我的着色器工作正常。

无论我对这个版本有什么支持,我想提供3.3替代方案。当我使用指定3.3版本的glut context时,应用程序启动时没有错误,glew不会抱怨。我的着色器假设使用GLSL 3.3版本,然后我设置了行

#version 330

但是当编译着色器时,OpenGL会使用无效的枚举消息进行抱怨。我尝试删除此行或将其设置为另一个版本,但我仍然得到相同的错误。完成所有初始化后,我要求OpenGL版本,我得到正确的3.3,但对于GLSL版本,我仍然得到默认的4.1。

glGetString(GL_SHADING_LANGUAGE_VERSION);

如果我是对的,请纠正我,我想这个版本会被着色器代码中的版本行覆盖。我想知道是否有机会初始化指定GLSL版本的上下文?

编辑:我终于解决了。如果我将核心配置文件与兼容模式一起设置

glutInitContextProfile(GLUT_CORE_PROFILE | GLUT_COMPATIBILITY_PROFILE);

无法识别2.1版本的OpenGL命令。这违反了教程中提供的信息。无论如何只使用3.3或更高版本设置GLUT_COMPATIBILITY_PROFILE。

1 个答案:

答案 0 :(得分:0)

我终于解决了。如果我设置核心配置文件以及兼容模式

glutInitContextProfile(GLUT_CORE_PROFILE | GLUT_COMPATIBILITY_PROFILE);

2.1版的OpenGL命令将无法识别。这违反了教程中提供的信息。无论如何,只需使用3.3或更高版本将GLUT_COMPATIBILITY_PROFILE设置为有效即可。