glx: Fix error messages and debug notes

Instead of using g_critical() inside the create_context() implementation
of the ClutterBackendGLX we should use the passed GError, so that the
error message can bubble up to the caller.
This commit is contained in:
Emmanuele Bassi 2009-12-06 18:56:14 +00:00
parent ede2cbfab0
commit 479fdffc7d

View File

@ -350,7 +350,7 @@ clutter_backend_glx_get_features (ClutterBackend *backend)
if (!(flags & CLUTTER_FEATURE_SYNC_TO_VBLANK)) if (!(flags & CLUTTER_FEATURE_SYNC_TO_VBLANK))
CLUTTER_NOTE (BACKEND, "DRI vblank setup failed"); CLUTTER_NOTE (BACKEND, "DRI vblank setup failed");
} }
#endif #endif /* __linux__ */
if (!(flags & CLUTTER_FEATURE_SYNC_TO_VBLANK)) if (!(flags & CLUTTER_FEATURE_SYNC_TO_VBLANK))
CLUTTER_NOTE (BACKEND, "no use-able vblank mechanism found"); CLUTTER_NOTE (BACKEND, "no use-able vblank mechanism found");
@ -489,11 +489,11 @@ clutter_backend_glx_create_context (ClutterBackend *backend,
{ {
g_set_error (error, CLUTTER_INIT_ERROR, g_set_error (error, CLUTTER_INIT_ERROR,
CLUTTER_INIT_ERROR_BACKEND, CLUTTER_INIT_ERROR_BACKEND,
"Unable to find suitable fbconfig for GL context"); "Unable to find suitable fbconfig for the GLX context");
return FALSE; return FALSE;
} }
CLUTTER_NOTE (GL, "Creating GL 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, config,
@ -515,15 +515,17 @@ clutter_backend_glx_create_context (ClutterBackend *backend,
: "indirect"); : "indirect");
_cogl_set_indirect_context (!is_direct); _cogl_set_indirect_context (!is_direct);
/* in order to query the GL and GLX implementation we /* COGL assumes that there is always a GL context selected; in order
* need to bind the GLX context to a Drawable; we create * to make sure that a GLX context exists and is made current, we use
* a simple, off-screen override-redirect window that we * a dummy, offscreen override-redirect window to which we can always
* then destroy at the end of this function * fall back if no stage is available
*/ */
xvisinfo = glXGetVisualFromFBConfig (xdisplay, config); xvisinfo = glXGetVisualFromFBConfig (xdisplay, config);
if (xvisinfo == None) if (xvisinfo == None)
{ {
g_critical ("Unable to retrieve the X11 visual"); g_set_error (error, CLUTTER_INIT_ERROR,
CLUTTER_INIT_ERROR_BACKEND,
"Unable to retrieve the X11 visual");
return FALSE; return FALSE;
} }
@ -539,6 +541,9 @@ clutter_backend_glx_create_context (ClutterBackend *backend,
CWOverrideRedirect, CWOverrideRedirect,
&attrs); &attrs);
CLUTTER_NOTE (BACKEND, "Selecting dummy 0x%x for the GLX context",
(unsigned int) backend_glx->dummy_xwin);
glXMakeContextCurrent (xdisplay, glXMakeContextCurrent (xdisplay,
backend_glx->dummy_xwin, backend_glx->dummy_xwin,
backend_glx->dummy_xwin, backend_glx->dummy_xwin,
@ -546,7 +551,9 @@ clutter_backend_glx_create_context (ClutterBackend *backend,
if (clutter_x11_untrap_x_errors ()) if (clutter_x11_untrap_x_errors ())
{ {
g_critical ("Unable to retrieve the GLX features"); g_set_error (error, CLUTTER_INIT_ERROR,
CLUTTER_INIT_ERROR_BACKEND,
"Unable to select the newly created GLX context");
return FALSE; return FALSE;
} }
@ -590,7 +597,7 @@ clutter_backend_glx_ensure_context (ClutterBackend *backend,
CLUTTER_NOTE (BACKEND, CLUTTER_NOTE (BACKEND,
"Setting context for stage of type %s, window: 0x%x", "Setting context for stage of type %s, window: 0x%x",
G_OBJECT_TYPE_NAME (impl), G_OBJECT_TYPE_NAME (impl),
(int) stage_x11->xwin); (unsigned int) stage_x11->xwin);
/* no GL context to set */ /* no GL context to set */
if (backend_glx->gl_context == None) if (backend_glx->gl_context == None)
@ -621,7 +628,7 @@ clutter_backend_glx_ensure_context (ClutterBackend *backend,
CLUTTER_NOTE (BACKEND, CLUTTER_NOTE (BACKEND,
"MakeContextCurrent dpy: %p, window: 0x%x (%s), context: %p", "MakeContextCurrent dpy: %p, window: 0x%x (%s), context: %p",
backend_x11->xdpy, backend_x11->xdpy,
(int) stage_x11->xwin, (unsigned int) stage_x11->xwin,
stage_x11->is_foreign_xwin ? "foreign" : "native", stage_x11->is_foreign_xwin ? "foreign" : "native",
backend_glx->gl_context); backend_glx->gl_context);
@ -634,7 +641,7 @@ clutter_backend_glx_ensure_context (ClutterBackend *backend,
if (clutter_x11_untrap_x_errors ()) if (clutter_x11_untrap_x_errors ())
g_critical ("Unable to make the stage window 0x%x the current " g_critical ("Unable to make the stage window 0x%x the current "
"GLX drawable", "GLX drawable",
(int) stage_x11->xwin); (unsigned int) stage_x11->xwin);
} }
} }