我正在使用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存储库中提供的驱动程序,而不是我单独编译的驱动程序。
任何建议都会受到赞赏,因为我完全失去了。谢谢。
答案 0 :(得分:4)
您必须请求OpenGL核心上下文。
使用当前版本的Mesa,如果您不请求核心上下文,则会获得OpenGL 3.0兼容性上下文。如果您确实请求核心上下文,您将获得OpenGL 3.3核心上下文(或可能更新),您可以使用GLSL 3.30。
类似的行为适用于macOS上的OpenGL,除了你获得3.3或4.1核心上下文,否则你得到2.1上下文。
ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
.withProfileCore(true);
请忽略维基的使用withForwardCompatible()
的建议,该功能有点过时。