El programa OpenGL no funciona con el reenvío X

El programa OpenGL no funciona con el reenvío X

Tengo un programa OpenGL en un servidor Linux. Quiero ejecutar el programa de forma remota con reenvío X, pero falla, mientras que programas como xclock y xeyes funcionan bien. (Confirmé que el programa funciona en el entorno de escritorio local). A continuación se muestra información adicional.

Código de prueba:

#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();
}

Correr:

$ 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
$

Respuesta1

Debe configurar la renderización remota o utilizar un cliente ssh que admita la obtención de ventanas prerenderizadas.

$ export LIBGL_ALWAYS_INDIRECT=1   or use any nonzero value

En mi máquina, Cygwin/X me permite ejecutar ambos modos, mientras que Xming solo permite la representación remota (en el cliente). La aplicación que desarrollé también tuvo problemas porque no se le permitía usar el modo de 24 bits, pero funcionó cuando no se especificaba la profundidad del color.

información relacionada