2013-06-08 2 views
0

Я развиваюсь на машине Linux с помощью TeleUSE. Я ПУТИ на машине, чтобы выполнить свою работу. У меня включен X11 и Xming. Кажется, я не вижу OpenGL-часть окна, если я бегу удаленно, ОДНАКО отличная демонстрация «glxgears» отлично работает &. Единственное, что я могу подумать: я пытаюсь запустить OpenGL через glwMDrawingAreaWidgetClass, тогда как glxgears - это новое окно?glwMDrawingAreaWidgetClass отображается через пересылку X11?

Вот некоторые код (OpenGL часть)

#include <teleuse/tu_runtime.h> 
#include <stdbool.h> 
#include <GL/GLwMDrawA.h> 

void expose_callback(Widget w, XtPointer clientData, XtPointer callData) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glColor3f(1.0, 0.0, 0.0); 
    glRectf(-0.5, -0.5, 0.5, 0.5); 
    glColor3f(0.0, 1.0, 0.0); 
    glRectf(-0.4, -0.4, 0.4, 0.4); 
    glColor3f(0.0, 0.0, 1.0); 
    glRectf(-0.3, -0.3, 0.3, 0.3); 

    glXSwapBuffers(XtDisplay(w), XtWindow(w)); 
} 

void resize_callback(Widget w, XtPointer clientData, XtPointer callData) 
{ 
    GLwDrawingAreaCallbackStruct *cbs = (GLwDrawingAreaCallbackStruct *) callData; 

    glViewport(0, 0, cbs->width, cbs->height); 
} 

void make_my_widget(Widget w) { 
    XVisualInfo *visinfo; 
    Display *dpy; 
    int attrib[] = {GLX_RGBA, GLX_DOUBLEBUFFER, GLX_RED_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_DEPTH_SIZE, 1, None}; 
    Widget glw; 
    GLXContext ctx; 

    dpy = XtDisplay(w); 
    visinfo = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); 
    if (visinfo == NULL) { 
     printf("glXChooseVisual failed\n"); 
     return; 
    } 

    int n; 
    Arg args[20]; 
    n = 0; 
    XtSetArg(args[n], GLwNvisualInfo, visinfo); 
    n++; 
    XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); 
    n++; 
    XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); 
    n++; 
    XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); 
    n++; 
    XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); 
    n++; 
    XtSetArg(args[n], XmNleftOffset, 10); 
    n++; 
    XtSetArg(args[n], XmNrightOffset, 10); 
    n++; 
    XtSetArg(args[n], XmNtopOffset, 10); 
    n++; 
    XtSetArg(args[n], XmNbottomOffset, 10); 
    n++; 

    glw = XtCreateWidget("glw", glwMDrawingAreaWidgetClass, w, args, n); 
    XtAddCallback(glw, GLwNresizeCallback, resize_callback, 0); 
    XtAddCallback(glw, GLwNexposeCallback, expose_callback, 0); 
    XtManageChild(glw); 

    ctx = glXCreateContext(XtDisplay(glw), visinfo, NULL, True); 
    if (ctx == NULL) { 
     printf("glXCreateContext failed\n"); 
     return; 
    } 
    XFree(visinfo); 

    if (glXMakeCurrent(XtDisplay(glw), XtWindow(glw), ctx) == false) { 
     printf("glXMakeCurrent failed\n"); 
     return; 
    } 
} 

make_my_widget вызывается в XmFrame виджете как только он был создан

+0

Нет вывод до сих пор, кроме веры, что GLwDrawingArea не работает с непрямой визуализации – Darrell

+0

Найдено несколько хороших примеров здесь: http://www.sv.vt.edu/classes/opengl/demos/glxmotif.c http://afni.nimh.nih.gov/pub/dist/src/SUMA/SUMA_paperplane.c Все они не работают над PuTTY с Xming, хотя – Darrell

ответ

0

Ха-ха! О, я так хромаю. Хорошо, теперь это работает. Мне просто пришлось использовать «Xming-mesa» вместо Xming. Doh!

Смежные вопросы