我正致力于在Linux上使用OpenGL构建3D游戏引擎。更具体地说,我使用的是lwjgl-2.9.3(在撰写本文时,最新版本还不能用于Linux)。我在一台Windows 10机器上构建了一些项目,它的编译和工作都很好。但是,继续使用Windows机器对我来说已经不可行了,我自己的计算机运行的是Fedora 24。我有一个英特尔酷睿i3-4012Y CPU,使用带有mesa 12.0.3驱动程序的集成图形。这是一台笔记本电脑,没有添加专用GPU的选项。当我尝试在Linux上使用该项目时(完全相同的代码,我没有更改从Windows计算机复制的任何内容),Eclipse给了我这个错误:
0:1(10): error: GLSL 3.30 is not supported。支持的版本有:1.10、1.20、1.30、1.00 ES和3.00 ES
我用这个终端命令检查了我的OpenGL/Mesa信息:glxinfo | grep OpenGL
.
这是该命令的输出:
OpenGL供应商字符串:Intel Open Source Technology Center
OpenGL渲染字符串:Mesa DRI Intel(R) Haswell
OpenGL核心配置文件版本字符串:3.3(核心配置文件)Mesa 12.0.3
OpenGL核心配置文件着色语言版本字符串:3.30
OpenGL核心配置文件上下文标志:(none)
OpenGL core profile profile掩码:core profile
OpenGL核心配置文件扩展:
OpenGL版本字符串:3.0 Mesa 12.0.3
OpenGL着色语言版本字符串:1.30
OpenGL上下文标志:(none)
OpenGL扩展:
OpenGL ES配置文件版本字符串:OpenGL ES 3.0 Mesa 12.0.3
OpenGL ES profile shading语言版本字符串:OpenGL ES GLSL ES 3.00
OpenGL ES配置文件扩展:
我不明白为什么我的程序不能编译。12系列的Mesa驱动程序似乎支持OpenGL 4。x和最近的GLSL版本,对吗?有什么方法可以使这个程序编译吗?我需要换新司机吗?在写这篇文章的时候,我很确定我有绝对最新的驱动程序。
此外,Mesa驱动程序是Fedora repos中提供的,而不是我单独编译的。
如果有任何建议,我将不胜感激,因为我完全不知所措。谢谢你。你必须请求一个OpenGL核心上下文。
对于当前版本的Mesa,如果你不请求一个核心上下文,你会得到一个OpenGL 3.0兼容性上下文。如果你请求一个核心上下文,你会得到一个OpenGL 3.3核心上下文(或可能更新),你可以使用GLSL 3.30。
类似的行为适用于macOS上的OpenGL,除非你得到3.3或4.1核心上下文,否则你得到2.1上下文。
参见LWJGL版本选择:
ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
.withProfileCore(true);
请忽略wiki关于使用withForwardCompatible()
的建议,该功能有些过时。