安装了新台面,但 glxinfo 显示旧台面

New mesa installed but glxinfo show the older one

我正在使用Google云平台做一些工作,也就是说我使用ssh登录。当我 运行 别人的脚本 (mayavi/test_drawline.py) 时,它告诉我:

ERROR: In /work/standalone-x64-build/VTKsource/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 797 vtkXOpenGLRenderWindow (0x3987b00): GL version 2.1 with the gpu_shader4 extension is not supported by your graphics driver but is required for the new OpenGL rendering backend. Please update your OpenGL driver. If you are using Mesa please make sure you have version 10.6.5 or later and make sure your driver in Mesa supports OpenGL 3.2.

所以我想我需要升级我的台面。在此之前,glxinfo 显示:

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL version string: 1.4 (2.1 Mesa 10.5.4)

我按照 How to upgrade mesa 的说明进行操作,但 glxinfo 没有改变。

并且我尝试从源代码编译 Mesa。所以我按照Mesa官网的说明Compiling and Installing。我用 使用 autoconf (Linux/Unix/X11) 构建。一切正常,看来我已经安装了最新的Mesa。

但是,当我 运行glxinfo|再次grep版本,还是这样:

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
OpenGL version string: 1.4 (2.1 Mesa 10.5.4)

我已经试过重启,但是没用。

那么,有谁知道怎么解决的吗?

谢谢!

报告的OpenGL 版本取决于可用的Mesa 版本,仅为二级。您报告的 GLX-1.4 和 OpenGL-1.4 是 15 年前的绝对基准版本。所以这不是Mesa版本问题。

更有可能的是,您正在尝试在系统配置中创建 OpenGL 上下文,如果不求助于软件渲染,它就不能比 OpenGL-1.4 做得更多。原因之一可能是您正在使用 X11 转发通过 SSH 进行连接。在那种情况下,所有 OpenGL 命令都将通过 X11 连接 (GLX) 传输到您的本地计算机并在那里执行。然而,GLX 在其 OpenGL 版本配置文件功能方面非常有限。从技术上讲,它最多支持 OpenGL-2.1(这是最后一个 OpenGL 版本,它为其所有功能定义了 GLX 传输操作码)。但是给定的配置可能支持更少。

如果远程计算机确实有 GPU,则必须使用它。几年前,这意味着 运行 那里有一个 Xorg 服务器。不再。使用 NVidia GPU,您可以使用无头 EGL。对于 Intel 和 AMD GPU,您还可以使用无头 EGL,或使用 GBM/DRI 创建无头 GPU 加速 OpenGL 上下文。当然,这需要远程端有可用的 GPU。

如果远程站点上没有 GPU,则必须使用一些软件实现。不幸的是,Mesa 不适用于转发的 X11 会话。你最好的选择是 运行 Xpra 或 Xvnc(即某种远程帧缓冲区)之类的东西,其中 X 服务器在远程端运行,以便 GLX 连接在那里终止,而不是在你的本地机器上。

或者您以某种方式诱使正在构建的程序使用 OSMesa(屏幕外台面),但这需要完全不同的 OpenGL 上下文设置,与 GLX 所做的完全不同,因此您的 VTK 应用程序可能无法运行那个盒子的。