OpenGL 프로그램이 X 전달과 함께 작동하지 않습니다.

OpenGL 프로그램이 X 전달과 함께 작동하지 않습니다.

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비트 모드를 사용할 수 없는 문제가 있었는데, 색심도가 지정되지 않은 경우에는 작동했습니다.

관련 정보