我目前正在开发一个在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"
的输出:
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,为什么不支持这个?
我还试图找到项目中使用的当前版本的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:
答案 0 :(得分:7)
对于遇到同样问题的其他人来说,这是对我有用的解决方案:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
答案 1 :(得分:3)
好像您没有明确要求核心配置文件上下文。您的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
...这确实告诉您,未明确标记 core 的最高版本将是OpenGL-3.0:
OpenGL version string: 3.0 Mesa 13.1.0-devel
OpenGL shading language version string: 1.30
因此请求核心个人资料或接受您坚持使用GL-3.0及以下版本。
仅作比较,以下是它如何寻找支持OpenGL-4.x的OpenGL实现(NVidia),甚至在核心配置文件之外:
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
答案 2 :(得分:0)
如果您打算使用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
...
答案 3 :(得分:-1)
在着色器中尝试下一个代码:
“#version 320 es
精准媒体浮动;
......你的代码“
答案 4 :(得分:-2)
GLSL是OpenGL使用的着色器语言,尽管两个版本号始终不匹配。从您的输出,看起来您正在使用片上Intel GPU。这个芯片的驱动程序是通过Mesa进行的,据我所知,它还不支持OpenGL 4。
如果你有Nvidia卡,你可以安装支持最新版OpenGL的专有NVidia驱动程序。否则,您需要修改着色器以使用该语言的旧版本。