diff --git a/src/screen.c b/src/screen.c index 9c69c79..1450cb6 100644 --- a/src/screen.c +++ b/src/screen.c @@ -1414,7 +1414,7 @@ addScreen (CompDisplay *display, Window *children; unsigned int nchildren; int defaultDepth, nvisinfo, nElements, value, i; - const char *glxExtensions, *glExtensions; + const char *glxExtensions, *glxServerExtensions, *glExtensions; XSetWindowAttributes attrib; GLfloat globalAmbient[] = { 0.1f, 0.1f, 0.1f, 0.1f }; GLfloat ambientLight[] = { 0.0f, 0.0f, 0.0f, 0.0f }; @@ -1663,21 +1663,30 @@ addScreen (CompDisplay *display, return FALSE; } - s->ctx = glXCreateContext (dpy, visinfo, NULL, !indirectRendering); - if (!s->ctx) + glxExtensions = glXQueryExtensionsString (dpy, screenNum); + glxServerExtensions = glXQueryServerString (dpy, screenNum, GLX_EXTENSIONS); + if (!strstr (glxExtensions, "GLX_EXT_texture_from_pixmap")) { - compLogMessage (display, "core", CompLogLevelFatal, - "glXCreateContext failed"); - XFree (visinfo); + if (!strstr (glxServerExtensions, "GLX_EXT_texture_from_pixmap")) + { + compLogMessage (display, "core", CompLogLevelFatal, + "GLX_EXT_texture_from_pixmap is missing"); + XFree (visinfo); - return FALSE; + return FALSE; + } + else + { + indirectRendering = 1; + strictBinding = 1; + } } - glxExtensions = glXQueryExtensionsString (dpy, screenNum); - if (!strstr (glxExtensions, "GLX_EXT_texture_from_pixmap")) + s->ctx = glXCreateContext (dpy, visinfo, NULL, !indirectRendering); + if (!s->ctx) { compLogMessage (display, "core", CompLogLevelFatal, - "GLX_EXT_texture_from_pixmap is missing"); + "glXCreateContext failed"); XFree (visinfo); return FALSE;