[Xquartz-changes] [297] AppleSGLX/trunk/glxext.c

source_changes at macosforge.org source_changes at macosforge.org
Sun Mar 8 14:04:32 PDT 2009


Revision: 297
          http://trac.macosforge.org/projects/xquartz/changeset/297
Author:   gstaplin at apple.com
Date:     2009-03-08 14:04:31 -0700 (Sun, 08 Mar 2009)
Log Message:
-----------
The glxext.c client code wasn't handling some tags properly.  

The X server will need some changes to fully fix the problem with
invalid tags.

Modified Paths:
--------------
    AppleSGLX/trunk/glxext.c

Modified: AppleSGLX/trunk/glxext.c
===================================================================
--- AppleSGLX/trunk/glxext.c	2009-03-08 20:48:53 UTC (rev 296)
+++ AppleSGLX/trunk/glxext.c	2009-03-08 21:04:31 UTC (rev 297)
@@ -254,15 +254,33 @@
 }
 
 
+/* 
+ * We don't want to enable this GLX_OML_swap_method in glxext.h, 
+ * because we can't support it.  The X server writes it out though,
+ * so we should handle it somehow, to avoid false warnings.
+ */
+enum {
+    IGNORE_GLX_SWAP_METHOD_OML = 0x8060
+};
+
+
+/*
+ * getVisualConfigs uses the !tagged_only path.
+ * getFBConfigs uses the tagged_only path.
+ */
 _X_HIDDEN void 
 __glXInitializeVisualConfigFromTags( __GLcontextModes *config, int count, 
 				     const INT32 *bp, Bool tagged_only,
 				     Bool fbconfig_style_tags )
 {
     int i;
-
+    long int tag, tagvalue;
+    
     if (!tagged_only) {
-	/* Copy in the first set of properties */
+	/*
+	 * Copy in the first set of properties.
+	 * There should only be 18 initial properties.
+	 */
 	config->visualID = *bp++;
 
 	config->visualType = _gl_convert_from_x_visual_type( *bp++ );
@@ -289,8 +307,8 @@
 
 	/* AppleSGLX supports pixmap and pbuffers with all config. */
 	config->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT;
-
-	count -= __GLX_MIN_CONFIG_PROPS;
+	/* Unfortunately this can create an ABI compatibility problem. */
+	count -= 18;
     }
 
     /*
@@ -303,7 +321,9 @@
     config-> tag = ( fbconfig_style_tags ) ? *bp++ : 1
 
     for (i = 0; i < count; i += 2 ) {
-	switch(*bp++) {
+	tag = *bp++;
+
+	switch(tag) {
 	  case GLX_RGBA:
 	    FETCH_OR_SET( rgbMode );
 	    break;
@@ -450,14 +470,20 @@
 	    config->yInverted = *bp++;
 	    break;
 #endif
+	case IGNORE_GLX_SWAP_METHOD_OML:
+	    /* We ignore this tag.  See the comment above this function. */
+	    ++bp;
+	    break;
+		
 	  case None:
 	    i = count;
 	    break;
 	  default:
 	    if(getenv("LIBGL_DIAGNOSTIC")) {
-		long int tag = *bp;
-		fprintf(stderr, "WARNING: unknown GLX tag from server: %ld\n",
-			tag);
+		tagvalue = *bp++;
+		fprintf(stderr, "WARNING: unknown GLX tag from server: "
+			"tag 0x%lx value 0x%lx\n",
+			tag, tagvalue);
 	    }
 	    break;
 	}
@@ -485,8 +511,6 @@
     if (nprops == 0)
 	return NULL;
 
-    /* FIXME: Is the __GLX_MIN_CONFIG_PROPS test correct for FBconfigs? */
-
     /* Check number of properties */
     if (nprops < __GLX_MIN_CONFIG_PROPS || nprops > __GLX_MAX_CONFIG_PROPS)
 	return NULL;
@@ -511,8 +535,6 @@
 	 * The XQuartz 2.3.2.1 X server doesn't set this properly, so
 	 * set the proper bits here.
 	 * AppleSGLX supports windows, pixmaps, and pbuffers with all config.
-	 * The xorg-server-1.6-apple branch supports pixmaps, but we those
-	 * will fail at runtime with XQuartz 2.3.2.1.
 	 */
 	m->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT | GLX_PBUFFER_BIT;
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/xquartz-changes/attachments/20090308/3e65d59f/attachment-0001.html>


More information about the Xquartz-changes mailing list