Linux-Mint

使用 Mesa v18.0.5,但只獲得 OpenGL v3.0

  • August 22, 2018

我正在嘗試使用 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,因為這台機器之前是 Windows 10 機器,在 MS 推送/強制中斷更新之前,我在那段時間使用 OpenGL 4.4 和 GLSL 440 進行開發。

此外,我可以通過 JOGL 在 Java 上執行 OpenGL 4.4 程序,JOGL 將所有必需的 OpenGL 庫打包在一起,似乎根本不依賴系統版本。

那麼基本上,為什麼 Mesa 說核心版本是 4.5,然後給出了 3.0 的版本字元串呢?(相同版本的 glGetString(GL_VERSION) 返回。)我怎樣才能重新獲得對 OpenGL 4.4 的訪問權限?(如果不是 4.5!)

據我了解,重要的值是“最大核心配置文件版本”,而不是“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 實際上不支持的值!

引用自:https://unix.stackexchange.com/questions/463915