不支持使用Mesa 12.0.3 GLSL 3.30的Linux上的OpenGL
我正在用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信息:不支持使用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上使用该项目时(完全相同
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);