Linux サーバーに OpenGL プログラムがあります。X 転送を使用してプログラムをリモートで実行したいのですが、xclock や xeyes などのプログラムは正常に動作しますが、失敗します。(プログラムはローカル デスクトップ環境で動作することを確認しました。) 以下に追加情報を示します。
テストコード:
#include <GL/glut.h>
#define WIDTH 300
#define HEIGHT 300
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3d(1, 0, 0);
glBegin(GL_POLYGON);
glVertex2i(10, 10);
glVertex2i(WIDTH / 2, HEIGHT - 10);
glVertex2i(WIDTH - 10, 10);
glEnd();
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(0, 0);
glutInitWindowSize(WIDTH, HEIGHT);
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
glutCreateWindow("Test");
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0, WIDTH, 0, HEIGHT);
glutDisplayFunc(display);
glutMainLoop();
}
ランニング:
$ gcc test.c -lGLU -lglut
$ ./a.out
Xlib: extension "Generic Event Extension" missing on display "localhost:10.0".
freeglut (./a.out): ERROR: Internal error <Visual with necessary capabilities not found> in function fgOpenWindow
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 4 (X_DestroyWindow)
Resource id in failed request: 0x0
Serial number of failed request: 17
Current serial number in output stream: 20
$ glxgears
Xlib: extension "Generic Event Extension" missing on display "localhost:10.0".
Error: couldn't get an RGB, Double-buffered visual
$
答え1
リモート レンダリングを設定するか、事前レンダリングされたウィンドウの取得をサポートする SSH クライアントを使用する必要があります。
$ export LIBGL_ALWAYS_INDIRECT=1 or use any nonzero value
私のマシンでは、Cygwin/X では両方のモードを実行できますが、Xming ではリモート レンダリング (クライアント上) のみ実行できます。私が開発したアプリケーションも 24 ビット モードを使用できないという問題がありましたが、色深度が指定されていない場合は動作しました。