diff --git a/clutter/glx/clutter-backend-glx.c b/clutter/glx/clutter-backend-glx.c index 072e4d8..2ce4302 100644 --- a/clutter/glx/clutter-backend-glx.c +++ b/clutter/glx/clutter-backend-glx.c @@ -470,10 +470,34 @@ clutter_backend_glx_get_visual_info (ClutterBackendX11 *backend_x11) ClutterBackendGLX *backend_glx = CLUTTER_BACKEND_GLX (backend_x11); GLXFBConfig config; - if (!_clutter_backend_glx_get_fbconfig (backend_glx, &config)) - return NULL; - - return glXGetVisualFromFBConfig (backend_x11->xdpy, config); + if (_clutter_backend_glx_get_fbconfig (backend_glx, &config)) + { + return glXGetVisualFromFBConfig (backend_x11->xdpy, config); + } + else + { + XVisualInfo *xvisinfo; + int onscreen_gl_attributes[] = { + GLX_RGBA, + GLX_DOUBLEBUFFER, + GLX_RED_SIZE, 1, + GLX_GREEN_SIZE, 1, + GLX_BLUE_SIZE, 1, + GLX_ALPHA_SIZE, 1, + GLX_STENCIL_SIZE, 1, + GLX_DEPTH_SIZE, 1, + 0 + }; + + if (backend_x11->xdpy == None || backend_x11->xscreen == None) + return NULL; + + xvisinfo = glXChooseVisual (backend_x11->xdpy, + backend_x11->xscreen_num, + onscreen_gl_attributes); + + return xvisinfo; + } } static gboolean @@ -498,21 +522,26 @@ clutter_backend_glx_create_context (ClutterBackend *backend, xdisplay = clutter_x11_get_default_display (); root_xwin = clutter_x11_get_root_window (); - if (!_clutter_backend_glx_get_fbconfig (backend_glx, &config)) + if (_clutter_backend_glx_get_fbconfig (backend_glx, &config)) { - g_set_error (error, CLUTTER_INIT_ERROR, - CLUTTER_INIT_ERROR_BACKEND, - "Unable to find suitable fbconfig for the GLX context"); - return FALSE; - } - - CLUTTER_NOTE (BACKEND, "Creating GLX Context (display: %p)", xdisplay); + CLUTTER_NOTE (BACKEND, "Creating GLX Context (display: %p)", xdisplay); - backend_glx->gl_context = glXCreateNewContext (xdisplay, + backend_glx->gl_context = glXCreateNewContext (xdisplay, config, GLX_RGBA_TYPE, NULL, True); + } + else + { + XVisualInfo *xv = clutter_backend_glx_get_visual_info(backend_x11); + + backend_glx->gl_context = glXCreateContext (xdisplay, + xv, + 0, + True); + } + if (backend_glx->gl_context == None) { g_set_error (error, CLUTTER_INIT_ERROR, @@ -541,6 +570,8 @@ clutter_backend_glx_create_context (ClutterBackend *backend, */ xvisinfo = glXGetVisualFromFBConfig (xdisplay, config); if (xvisinfo == None) + xvisinfo = clutter_backend_glx_get_visual_info(backend_x11); + if (xvisinfo == None) { g_set_error (error, CLUTTER_INIT_ERROR, CLUTTER_INIT_ERROR_BACKEND,