不支持使用Mesa 12.0.3 GLSL 3.30的Linux上的OpenGL

不支持使用Mesa 12.0.3 GLSL 3.30的Linux上的OpenGL,linux,opengl,lwjgl,fedora,mesa,Linux,Opengl,Lwjgl,Fedora,Mesa,我正在用Linux上的OpenGL构建一个3D游戏引擎。更具体地说,我使用的是lwjgl-2.9.3(在撰写本文时,最新版本不适用于Linux)。我已经在Windows10机器上构建了一些项目,它编译和工作都很好。然而,继续使用Windows机器对我来说已经不可行了,我自己的电脑运行Fedora24。我有一个Intel Core i3-4012Y CPU,我正在使用集成图形和mesa 12.0.3驱动程序。这是一台笔记本电脑,没有添加专用GPU的选项。当我尝试在Linux上使用该项目时(完全相同

我正在用Linux上的OpenGL构建一个3D游戏引擎。更具体地说,我使用的是lwjgl-2.9.3(在撰写本文时,最新版本不适用于Linux)。我已经在Windows10机器上构建了一些项目,它编译和工作都很好。然而,继续使用Windows机器对我来说已经不可行了,我自己的电脑运行Fedora24。我有一个Intel Core i3-4012Y CPU,我正在使用集成图形和mesa 12.0.3驱动程序。这是一台笔记本电脑,没有添加专用GPU的选项。当我尝试在Linux上使用该项目时(完全相同的代码,我没有更改从Windows计算机复制的任何内容),Eclipse给了我以下错误:

0:1(10):错误:不支持GLSL 3.30。支持的版本有:1.10、1.20、1.30、1.00 ES和3.00 ES

我使用以下终端命令检查了我的OpenGL/Mesa信息:
glxinfo | grep OpenGL

这是该命令的输出:

OpenGL供应商字符串:英特尔开源技术中心
OpenGL渲染器字符串:Mesa DRI Intel(R)Haswell
OpenGL核心配置文件版本字符串:3.3(核心配置文件)Mesa 12.0.3
OpenGL核心配置文件着色语言版本字符串:3.30
OpenGL核心配置文件上下文标志:(无)
OpenGL核心配置文件掩码:核心配置文件
OpenGL核心配置文件扩展:
OpenGL版本字符串:3.0 Mesa 12.0.3
OpenGL着色语言版本字符串:1.30
OpenGL上下文标志:(无)
OpenGL扩展:
OpenGL ES配置文件版本字符串:OpenGL ES 3.0 Mesa 12.0.3
OpenGL ES轮廓着色语言版本字符串:OpenGL ES GLSL ES 3.00
OpenGL ES配置文件扩展:

我不明白为什么我的程序不能编译。12系列Mesa驱动程序似乎支持OpenGL4.x和最新的GLSL版本,对吗?有什么方法可以让这个程序编译吗?我需要换新司机吗?在写这篇文章的时候,我非常确定我有绝对最新的驱动程序

此外,Mesa驱动程序是Fedora repos中提供的驱动程序,而不是我单独编译的驱动程序


如有任何建议,我将不胜感激,因为我完全不知所措。谢谢。

您必须请求OpenGL核心上下文

对于当前版本的Mesa,如果您不请求核心上下文,则会获得OpenGL 3.0兼容上下文。如果您确实请求了一个核心上下文,那么您将获得一个OpenGL3.3核心上下文(或可能更新的),并且您可以使用GLSL3.30

类似的行为也适用于macOS上的OpenGL,除非您获得3.3或4.1核心上下文,否则您将获得2.1上下文

见:


请忽略wiki建议使用
withForwardCompatible()
,该功能有些过时。

您必须请求OpenGL核心上下文

使用当前版本的Mesa,如果不请求核心上下文,则会得到OpenGL 3.0兼容性上下文。如果您确实请求了一个核心上下文,那么您将获得一个OpenGL3.3核心上下文(或可能更新的),并且您可以使用GLSL3.30

类似的行为也适用于macOS上的OpenGL,除非您获得3.3或4.1核心上下文,否则您将获得2.1上下文

见:

请忽略wiki建议使用
with forwardcompatible()
,该功能有些过时。

我建议看一看我建议看一看
ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
    .withProfileCore(true);