Linux上的OpenGL与Mesa 12.0.3 GLSL 3.30不支持

时间:2016-10-14 20:17:06

标签: linux opengl lwjgl fedora mesa

我正在使用Linux上的OpenGL构建3D游戏引擎。更具体地说,我正在使用lwjgl-2.9.3(在撰写本文时,最新版本不适用于Linux)。我已经在Windows 10机器上构建了一些项目,它编译并且工作得很好。但是,我不再可以继续使用Windows机器,而我自己的计算机运行Fedora 24.我有一个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驱动程序似乎支持OpenGL 4.x和最近的GLSL版本,对吗?有没有办法让这个程序编译?我需要获得新的司机吗?在撰写本文时,我非常确定我拥有绝对最新的驱动程序。

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

任何建议都会受到赞赏,因为我完全失去了。谢谢。

1 个答案:

答案 0 :(得分:4)

您必须请求OpenGL核心上下文。

使用当前版本的Mesa,如果您不请求核心上下文,则会获得OpenGL 3.0兼容性上下文。如果您确实请求核心上下文,您将获得OpenGL 3.3核心上下文(或可能更新),您可以使用GLSL 3.30。

类似的行为适用于macOS上的OpenGL,除了你获得3.3或4.1核心上下文,否则你得到2.1上下文。

请参阅LWJGL Version Selection

ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
    .withProfileCore(true);

请忽略维基的使用withForwardCompatible()的建议,该功能有点过时。