我正在使用Google Cloud Platform做一些工作,也就是说我使用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)
我按照如何升级台面的说明进行操作,但 glxinfo 没有改变。
我试图从源代码编译Mesa。所以我按照Mesa官方网站编译和安装的说明进行操作。我使用 使用 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年前的绝对基线版本。所以这不是梅萨版本问题。
更有可能的是,您正在尝试在系统配置中创建OpenGL上下文,如果不诉诸软件渲染,则无法比OpenGL-1.4做得更多。现在的一个原因可能是,您使用 X11 转发通过 SSH 进行连接。在这种情况下,所有 OpenGL 命令都将通过 X11 连接 (GLX( 通过隧道传输到本地计算机并在那里执行。然而,GLX在OpenGL版本配置文件功能方面非常有限。从技术上讲,它支持OpenGL-2.1(这是最后一个OpenGL版本,为其所有功能定义了GLX传输操作码(。但给定的配置可能支持较少。
如果远程计算机确实有GPU,则必须使用它。几年前,这意味着在那里运行Xorg服务器。不会了。使用NVidia GPU,您可以使用无头EGL。借助英特尔和AMD GPU,您还可以使用无头EGL,或使用GBM/DRI来创建无头GPU加速OpenGL上下文。当然,这需要在远程端提供GPU。
如果远程站点上没有 GPU,则必须使用某些软件实现。不幸的是,Mesa不适用于转发的X11会话。最好的办法是运行像Xpra或Xvnc(即某种远程帧缓冲器(这样的东西,其中X服务器在远程端运行,以便GLX连接在那里终止,而不是在本地机器上。
或者你以某种方式哄骗你正在构建的程序使用OSMesa(屏幕外Mesa(,但这需要完全不同的OpenGL上下文设置,与GLX完全不同,所以你的VTK应用程序可能无法开箱即用。