这个问题已经有了答案:
Core profile vs version string? Only getting GLSL 1.3/OGL 3.0 in mesa 10.0.1
1个答案
我正在linux上用opengl构建一个3d游戏引擎。更具体地说,我使用的是lwjgl-2.9.3(在编写本文时,linux没有最新版本)。我已经在windows 10机器上构建了一些项目,它编译和运行都很好。然而,我不再能够继续使用windows机器,我自己的计算机运行fedora 24。我有一个英特尔酷睿i3-4012y处理器,正在使用与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 profile版本字符串:opengl es 3.0 mesa 12.0.3
opengl es profile shading language版本字符串: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核心上下文(或者可能更新的),并且可以使用glsl3.30。
类似的行为也适用于MacOS上的OpenGL,除非您得到3.3或4.1核心上下文,否则您得到2.1上下文。
见LWJGL Version Selection:
ContextAttribs contextAtrributes = new ContextAttribs(3, 2)
.withProfileCore(true);
请忽略wiki使用
withForwardCompatible()
的建议,该功能有些过时。关于linux - 不支持带Mesa 12.0.3 GLSL 3.30的Linux上的OpenGL ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40051347/