C ++ OpenGL着色版本错误 – 不支持GLSL x

我目前正在使用Ubuntu 16.04上的OpenGL开发一个项目,并且遇到了一个主要问题。 在这一点上,我不知道该怎么做,因为它觉得我已经尝试了一切,以解决这个问题。

出于某种原因,我的着色器不会编译并返回以下错误:

Failed to compile vertex shader! 0:1(10): error: GLSL 4.50 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, 3.00 ES, 3.10 ES, and 3.20 ES` 

我调整了着色器文件中的版本没有任何运气。 #version 450 core等,但我一直得到相同的结果。

作为参考,这里是sudo glxinfo | grep "OpenGL"的输出 sudo glxinfo | grep "OpenGL"

 OpenGL vendor string: Intel Open Source Technology Center OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel OpenGL core profile shading language version string: 4.50 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 13.1.0-devel OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 OpenGL ES profile extensions: 

glxinfo的输出显示安装了OpenGL核心4.5,为什么不支持?

我也试图find项目中使用的OpenGL的当前版本: std::cout << "OpenGL version: " << glGetString(GL_VERSION) << std::endl; 导致空白返回。

我已经花了10个小时在这个单一的问题,直到现在,所以任何帮助表示赞赏!

编辑:有没有办法迫使项目/ Ubuntu的使用OpenGL而不是GLSL通过即完全删除GLSL(这部分)?

 OpenGL ES profile version string: OpenGL ES 3.2 Mesa 13.1.0-devel OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 OpenGL ES profile extensions: 

对于遇到同样问题的任何人,这是对我有用的解决方案:

 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

好像你没有明确要求核心配置文件的上下文。 您的glxinfo输出显示,不支持兼容性配置文件上下文(在OpenGL-3.0之前没有“兼容性”配置文件,但这是一个有争议的问题):

这是告诉你,在核心配置文件高达v4.5支持:

 OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel OpenGL core profile shading language version string: 4.50 OpenGL core profile profile mask: core profile 

…这也告诉你,没有明确标记的最高版本将会是OpenGL-3.0:

 OpenGL version string: 3.0 Mesa 13.1.0-devel OpenGL shading language version string: 1.30 

所以要么申请核心配置文件,要么接受你坚持使用GL-3.0及以下版本。


只是为了比较,下面是它如何寻找OpenGL实现(NVidia),即使在核心配置文件之外也支持OpenGL-4.x:

 OpenGL core profile version string: 4.4.0 NVIDIA 367.27 OpenGL core profile shading language version string: 4.40 NVIDIA via Cg compiler OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL version string: 4.5.0 NVIDIA 367.27 OpenGL shading language version string: 4.50 NVIDIA 

如果您打算使用4.5功能,则需要一个核心配置文件,并根据此输出线路在系统上受支持

 OpenGL core profile version string: 4.5 (Core Profile) Mesa 13.1.0-devel 

另一条输出线

 OpenGL version string: 3.0 Mesa 13.1.0-devel 

并不意味着你有两个不同的OpenGL驱动程序,但你可以买得起没有核心配置文件的OpenGL 3.0的顶端。

为了使用核心配置文件功能,请确保启用它,并使用正确的预处理器指令编译着色器

 // Example using glut for context initialization glutInitContextVersion(4, 5); glutInitContextProfile(GLUT_CORE_PROFILE); glutInit(&argc, argv); // Shaders #version 450 ... 

尝试着色器中的下一个代码:

“#version 320 es

精度中等浮点;

…你的代码“

GLSL是OpenGL使用的着色器语言,尽管两个版本号并不总是匹配。 从你的使用上来看,你看起来像是在使用片上Intel GPU。 这个芯片的驱动程序通过Mesa,据我所知不支持OpenGL 4。

如果你有一个Nvidia卡,你可以安装支持最新版本的OpenGL的专有NVidia驱动程序。 否则,您将需要修改着色器以使用旧版本的语言。