On Wed, Oct 26, 2016 at 07:04:35PM +1100, Erik de Castro Lopo wrote:
> Anthony Towns wrote:
> > Maybe
> >  /usr/lib/x86_64-linux-gnu/qt5/examples/widgets/desktop/systray/systray
> > might reproduce the crash?
> Indeed it does! Gdb backtrace follows.

Okay, that makes it a Qt/GL bug afaics then. Might be worth trying the
attached. I get:

 $ g++ -o test test.cpp -lX11 -lGL -Wall -W
 $ ./test
 config 0 alphaSize 0
 config 1 alphaSize 0
 config 2 alphaSize 0
...
 config 36 alphaSize 0
 config 37 alphaSize 0
 config 38 alphaSize 8
 config 39 alphaSize 8

I'm guessing you'll get some visual==NULL!! warnings as well at which
point you might be able to work out what's going on?

Cheers,
aj

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <GL/gl.h>
#include <GL/glx.h>
#include <GL/glxext.h>

int main(void) {
    Display *display = XOpenDisplay(NULL);
    int screen = DefaultScreen( display );

    // should be:
    //   int drawableBit = 1;
    //   QSurfaceFormat format = window()->requestedFormat();
    //   QVector<int> spec = qglx_buildSpec(format, drawableBit);
    //   visual_attribs = spec.constData()
    // but we'll try allowing anything... :-/
    static int visual_attribs[] = { None };

    int confcount = 0;
    GLXFBConfig *configs;
    configs = glXChooseFBConfig(display, screen, visual_attribs, &confcount);

    if (configs == NULL) {
        printf("configs was null, confcount is %d\n", confcount);
        return 0;
    }

    for (int i = 0; i < confcount; i++) {
        int alphaSize;
        glXGetFBConfigAttrib(display,configs[i],GLX_ALPHA_SIZE,&alphaSize);
        printf("config %d alphaSize %d\n", i, alphaSize);
        XVisualInfo *visual = glXGetVisualFromFBConfig(display, configs[i]);
        if (visual == NULL) {
            printf("config %d visual==NULL!!\n", i);
        }
    }
    return 0;
}

Reply via email to