使用 Mesa v18.0.5,但仅获取 OpenGL v3.0

使用 Mesa v18.0.5,但仅获取 OpenGL v3.0

我正在尝试使用 OpenGL 开发 C/C++ 应用程序。不幸的是,我无法访问 OpenGL 3.0 之后的任何功能。我有 Mesa 版本 18.0.5、Linux Mint 18 64 位、4.18.1 内核和英特尔集成显卡。

终端输出:

 ~ $ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Broadwell-U 
Integrated Graphics (rev 09)
 ~ $ glxinfo | grep OpenGL
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 5500 (Broadwell 
GT2) 
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.0.5
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 18.0.5
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 18.0.5
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 
3.10
OpenGL ES profile extensions:

我确信我的硬件最高支持 OpenGL 4.4,因为在 MS 推送/强制进行损坏更新之前,这台机器以前是 Windows 10 机器,而我在那段时间使用 OpenGL 4.4 和 GLSL 440 进行开发。

此外,我可以通过 JOGL 在 Java 上运行 OpenGL 4.4 程序,它将所有必需的 OpenGL 库打包在一起,并且似乎完全不依赖于系统版本。

那么基本上,为什么 Mesa 说核心版本是 4.5,但随后给出的版本字符串是 3.0? (相同版本的 glGetString(GL_VERSION) 返回。)我怎样才能重新获得对 OpenGL 4.4 的访问? (如果不是 4.5!)

答案1

据我了解,重要的值是“最大核心配置文件版本”,而不是“OpenGL版本字符串”。如果您在创建上下文时未指定核心配置文件,或者您编写了类似的内容

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, 0);

Mesa 将为您提供 OpenGL 3.0 上下文(这是有道理的,因为配置文件是在 OpenGL 3.0 中引入的,因此这是应用程序不知道它们的最后一个版本)。如果您想要较新版本的OpenGL,则需要指定相应的配置文件:

glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

或者

glutInitContextProfile(GLUT_CORE_PROFILE);

以及使用的版本glutInitContext()

请注意,以这种方式强加 OpenGL 版本会产生很强的约束;我想你知道你在做什么;-)。一些开发人员尝试以合理的低版本为目标(例如 OpenGL 3.2),然后询问他们需要的任何扩展 - 这通常效果更好,因为流行的扩展往往会在相应的 OpenGL 版本完全支持之前就可用一段时间。司机们。

MESA_GL_VERSION_OVERRIDE只是一个调试或Mesa开发工具;它强制覆盖报告的 OpenGL 版本,并且可以设置为 Mesa 实际上不支持的值!

相关内容