diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 486f7db..9e81d99 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -622,38 +622,26 @@ BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE * XVisualInfo *X11DRV_setup_opengl_visual( Display *display ) { XVisualInfo *visual = NULL; - /* In order to support OpenGL or D3D, we require a double-buffered visual and stencil buffer support, */ - int dblBuf[] = {GLX_RGBA,GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DOUBLEBUFFER, None}; + int cfgIndex; + int cfgArray[4][9] = { + { GLX_RGBA, GLX_DEPTH_SIZE, 32, GLX_STENCIL_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DOUBLEBUFFER, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DOUBLEBUFFER, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 16, GLX_STENCIL_SIZE, 8, GLX_DOUBLEBUFFER, None }, + { GLX_RGBA, GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, None} + }; if (!has_opengl()) return NULL; - - wine_tsx11_lock(); - visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf); - wine_tsx11_unlock(); - if (visual == NULL) { - /* fallback to 16 bits depth, no alpha */ - int dblBuf2[] = {GLX_RGBA,GLX_DEPTH_SIZE, 16, GLX_STENCIL_SIZE, 8, GLX_DOUBLEBUFFER, None}; - WARN("Failed to get a visual with at least 24 bits depth\n"); - + + for (cfgIndex = 1; cfgIndex < 4; ++cfgIndex) { wine_tsx11_lock(); - visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf2); + visual = pglXChooseVisual(display, DefaultScreen(display), cfgArray[cfgIndex]); wine_tsx11_unlock(); - if (visual == NULL) { - /* fallback to no stencil */ - int dblBuf2[] = {GLX_RGBA,GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, None}; - WARN("Failed to get a visual with at least 8 bits of stencil\n"); - - wine_tsx11_lock(); - visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf2); - wine_tsx11_unlock(); - if (visual == NULL) { - /* This should only happen if we cannot find a match with a depth size 16 */ - FIXME("Failed to find a suitable visual\n"); - return visual; - } + if (visual != NULL) { + TRACE("Found visual at index %d, Visual ID %lx\n", cfgIndex, visual->visualid); + return visual; } } - TRACE("Visual ID %lx Chosen\n",visual->visualid); - return visual; + FIXME("Failed to find a suitable visual\n"); + return NULL; } #else /* no OpenGL includes */