为什么尽管有了新的硬件和软件,我的 OpenGL 版本仍然停留在 3.0?

为什么尽管有了新的硬件和软件,我的 OpenGL 版本仍然停留在 3.0?

我需要在笔记本电脑上使用一个需要 OpenGL 3.3 或更高版本的程序。显然我的“有效”OpenGL 版本是 3.0。以下是 glxinfo 的输出。这是 xubuntu 16.10,显卡是 Intel HD 5500。所以我不明白出了什么问题,似乎硬件和软件都应该足够新才能获得至少 3.3。希望有人能帮忙!

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.3 (Core Profile) Mesa 12.0.3
OpenGL core profile shading language version string: 4.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 12.0.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 12.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
OpenGL ES profile extensions:

答案1

简短回答:你的 OpenGL 版本没有停留在 3.0。“OpenGL 核心配置文件版本字符串”行显示您支持的 OpenGL 为“4.3”。

更详细的解释:这个复杂的版本控制与 OpenGL 版本 3.0 中所做的更改有关,在此之前,所有 OpenGL 版本都完全向后兼容。从 OpenGL 版本 3.0 开始,某些功能被标记为已弃用,较新的驱动程序不一定必须支持它们才能与 OpenGL 3.1+ 兼容。

为了使 OpenGL 驱动程序能够支持已弃用的功能,同时完全兼容 3.1+ 版本,OpenGL 引入了“核心”和“兼容”配置文件。

基本上,如果您在“兼容”配置文件的上下文中运行应用程序,则保证可以使用特定版本的所有 OpenGL 功能(包括所有已弃用的功能)。但在“核心”配置文件的上下文中运行应用程序时则并非如此。

我的猜测是,对于不了解上下文的应用程序,OpenGL 版本可能会被故意报告为 3.0,以实现最大兼容性。这就是环境变量派上MESA_GL_VERSION_OVERRIDE=4.3用场的地方。

了解更多信息:OpenGL 上下文

答案2

我认为应用程序可能只是提取版本字符串并报告它。但是,我认为这并不代表可用的最高版本,也可能不是应用程序正在使用的版本。我的“OpenGL 版本字符串”报告与您的完全相同,并且我在此系统上使用 OpenGL 3.2 进行开发。

如果您运行该命令,glxinfo | grep Max您应该会收到一个列表,其中详细说明了核心配置文件、兼容性配置文件等的最高可用版本。我会运行它并查看它报告的内容。我认为它会将您的最高核心配置文件版本报告为 4.3(而不是 3.0)。如果是这样,我认为您没有驱动程序问题。

我简单查看了一下软件应用程序,没有看到任何关于需要 OpenGL 3.3 的提示。但是,他们的网站确实表明不同的 GPU 之间存在很大差异。

他们确实似乎提供了支持,所以如果您仍然遇到问题,最好看看他们是否可以提供进一步的帮助。

希望有所帮助。

已针对 glmark2 进行更新

glmark2 是 OpenGL (ES) 2.0 基准测试。这可能只是拉取版本字符串。我在 Google 上搜索了其他基准测试应用程序,发现 GFXBench 可用这里。如果您下载、安装并运行此程序,然后选择屏幕底部的“信息”,它似乎会提供您的最高 OpenGL 版本。我的版本显示“3.3 (Core)”,这是我的卡支持的正确最高版本。

它还包括需要 V4.x 的测试,但在我的设置上都无法运行,所以值得一试。

更新了 Mesa 环境变量

我刚刚遇到了 Mesa 环境变量MESA_GL_VERSION_OVERRIDE。更多信息这里。它指出这个变量:

changes the value returned by glGetString(GL_VERSION) and possibly the GL API type.

我在我的系统上尝试了以下命令:

MESA_GL_VERSION_OVERRIDE=3.3 glxinfo | grep OpenGL

这给出了 OpenGL 版本字符串和 OpenGL 着色语言版本字符串如下:

OpenGL version string: 3.3 (Core Profile) Mesa 12.0.3
OpenGL shading language version string: 3.30

如果没有环境变量,则不会报告此信息。执行应用程序时,可能值得尝试使用此环境变量,因为它可能会强制使用正确的版本。您可以使用:

MESA_GL_VERSION_OVERRIDE=4.3 command

您只需将命令替换为您用来运行应用程序的任何命令。

相关内容