C OpenGL 着色版本错误 - 不支持 GLSL x \[Ubuntu 16.04\]

新手上路,请多包涵

我目前正在开发一个在 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 core 4.5 已安装,为什么不支持呢?

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

到目前为止,我已经在这个问题上花费了 10 个小时,因此感谢您的帮助!

编辑:有没有办法通过即完全删除 GLSL(这部分)来强制项目/Ubuntu 使用 OpenGL 而不是 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:

原文由 Nicolai Prebensen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

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

原文由 Nicolai Prebensen 发布,翻译遵循 CC BY-SA 3.0 许可协议

似乎您没有明确要求 核心配置文件 上下文。您的 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-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

原文由 datenwolf 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题