通过 SSH 的 OpenGL (GLX)

OpenGL over SSH (GLX)

我 运行 在装有 OpenGL 4.4 的 Windows 7 机器上有一个 X 服务器。从那里我 ssh -Y 到我启动 OpenGL 应用程序的远程机器。 (重要的是,网络连接非常快,我已经关闭压缩并使用 arcfour,blowfish-cbc 密码来提高速度)

glxgears运行s,但不是很顺利。报告它虽然正在做 6000+ FPS。

但是,matlab无法使用硬件 OpenGL 渲染。我阅读了文档,他们提到它需要 OpenGL 2.1 版。当我在 ssh 终端中 运行 glxinfo 时,它告诉我:

GLX version: 1.4

OpenGL version string: 1.4 (4.4.0 - Build 10.18.15.4279)

我不知道 GLX 的技术细节,但这是否意味着通过 SSH 支持的 OpenGL 版本仅限于 1.4?据我所知,与 OpenGL 的进步相比,最新版本的 GLX 已经很老了。

I run a X server on a Windows 7 machine with OpenGL 4.4

第一个问题由此开始。 Windows 上的 X11 服务器只是那里的另一个程序 运行,最终会将 X11 命令转换为 Win32 GDI 调用。 X11 本身没有 "know" OpenGL,这就是为什么有 GLX 扩展。 GLX 是一个有趣的野兽,windows 的 X11 服务器都只实现了一个非常基本的 OpenGL 命令基线来支持基本要素。

但这只是你问题的一半……

From there I ssh -Y to a remote machine where I start an OpenGL application.

做这种事情总是调用间接渲染,其中所有命令都必须作为 GLX 操作码命令流发送。不幸的是(对您而言)GLX 操作码仅在 OpenGL-2.1 之前被指定,但是完整的 GLX 支持仅在 OpenGL-1.4 之前是强制性的。 OpenGL-1.5 引入了顶点缓冲对象,这为间接渲染上下文增加了很多复杂性,因此 GLX 的实现可能选择不支持它进行间接渲染。

对于 Linux 至少专有的 NVidia 驱动程序和客户端库具有完全间接的 OpenGL-2.1 支持。但是您在 Windows 上 运行 的 X11 服务器很可能不是客户端库。