使用 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,因為這台機器之前是 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 實際上不支持的值!