Sophie

Sophie

distrib > * > 2008.0 > x86_64 > by-pkgid > 9c23137b8f076d5203b68cafa7824072 > files > 1

compiz-0.5.2-9mdv2008.0.src.rpm

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;