[Xquartz-changes] [228] AppleSGLX/trunk

source_changes at macosforge.org source_changes at macosforge.org
Sat Feb 21 22:55:33 PST 2009


Revision: 228
          http://trac.macosforge.org/projects/xquartz/changeset/228
Author:   gstaplin at apple.com
Date:     2009-02-21 22:55:32 -0800 (Sat, 21 Feb 2009)
Log Message:
-----------
Improve error messages for the GLXPixmap code.

It seems we will need to redo some of the _XError
calls to call __glXSendError (a new thing I wrote)
which properly works with XGetErrorDatabaseText.

There is a difference in XError handling when using
_XError, because most of the _XError calls I added
didn't account for the extension error base.

Some will be ok that are common X11 error codes
like BadDrawable.  Others will need some modifications.

Modified Paths:
--------------
    AppleSGLX/trunk/Makefile
    AppleSGLX/trunk/apple_glx_pixmap.c
    AppleSGLX/trunk/apple_glx_pixmap.h
    AppleSGLX/trunk/glx_pbuffer.c
    AppleSGLX/trunk/glxext.c

Modified: AppleSGLX/trunk/Makefile
===================================================================
--- AppleSGLX/trunk/Makefile	2009-02-22 05:19:26 UTC (rev 227)
+++ AppleSGLX/trunk/Makefile	2009-02-22 06:55:32 UTC (rev 228)
@@ -30,7 +30,7 @@
     appledri.o apple_glx_context.o apple_glx.o pixel.o \
     compsize.o apple_visual.o apple_cgl.o glxreply.o glcontextmodes.o \
     apple_xgl_api.o apple_glx_drawable.o xfont.o apple_glx_pbuffer.o \
-    apple_glx_pixmap.o apple_xgl_api_read.o glx_empty.o
+    apple_glx_pixmap.o apple_xgl_api_read.o glx_empty.o glx_error.o
 
 #This is used for building the tests.
 #The tests don't require installation.
@@ -53,6 +53,7 @@
 glxreply.o: glxreply.c
 glxcmds.o: glxcmds.c apple_glx_context.h
 glx_pbuffer.o: glx_pbuffer.c
+glx_error.o: glx_error.c
 glx_query.o: glx_query.c
 glxcurrent.o: glxcurrent.c
 glxextensions.o: glxextensions.h glxextensions.c

Modified: AppleSGLX/trunk/apple_glx_pixmap.c
===================================================================
--- AppleSGLX/trunk/apple_glx_pixmap.c	2009-02-22 05:19:26 UTC (rev 227)
+++ AppleSGLX/trunk/apple_glx_pixmap.c	2009-02-22 06:55:32 UTC (rev 228)
@@ -171,9 +171,10 @@
     return false;
 }
 
-void apple_glx_pixmap_destroy(Display *dpy, GLXPixmap pixmap) {
+bool apple_glx_pixmap_destroy(Display *dpy, GLXPixmap pixmap) {
     struct apple_glx_pixmap *p;
-    
+    bool result = false;
+
     lock_pixmap_list();
 
     if(find_pixmap(pixmap, &p)) {
@@ -206,9 +207,13 @@
 	    p->next->previous = p->previous;
 
 	free(p);
+
+	result = true;
     }
 
     unlock_pixmap_list();
+
+    return result;
 }
 
 bool apple_glx_is_pixmap(Display *dpy, GLXDrawable drawable) {

Modified: AppleSGLX/trunk/apple_glx_pixmap.h
===================================================================
--- AppleSGLX/trunk/apple_glx_pixmap.h	2009-02-22 05:19:26 UTC (rev 227)
+++ AppleSGLX/trunk/apple_glx_pixmap.h	2009-02-22 06:55:32 UTC (rev 228)
@@ -38,7 +38,8 @@
 bool apple_glx_pixmap_create(Display *dpy, int screen, Pixmap pixmap,
 			     const void *mode);
 
-void apple_glx_pixmap_destroy(Display *dpy, Pixmap pixmap);
+/* Returns true if the pixmap was successfully destroyed. */
+bool apple_glx_pixmap_destroy(Display *dpy, Pixmap pixmap);
 
 bool apple_glx_is_pixmap(Display *dpy, GLXDrawable drawable);
 

Modified: AppleSGLX/trunk/glx_pbuffer.c
===================================================================
--- AppleSGLX/trunk/glx_pbuffer.c	2009-02-22 05:19:26 UTC (rev 227)
+++ AppleSGLX/trunk/glx_pbuffer.c	2009-02-22 06:55:32 UTC (rev 228)
@@ -43,6 +43,7 @@
 
 #include "apple_glx_pbuffer.h"
 #include "apple_glx_pixmap.h"
+#include "glx_error.h"
 
 /**
  * Create a new pbuffer.
@@ -309,7 +310,14 @@
 PUBLIC void
 glXDestroyPixmap(Display *dpy, GLXPixmap pixmap)
 {
-    apple_glx_pixmap_destroy(dpy, pixmap);
+    
+    xError error;
+    GLXContext gc = __glXGetCurrentContext();
+
+    if(apple_glx_pixmap_destroy(dpy, pixmap))
+	return; /* The pixmap existed and we successfully destroyed it. */
+
+    __glXSendError(dpy, GLXBadPixmap, pixmap, X_GLXDestroyPixmap);
 }
 
 

Modified: AppleSGLX/trunk/glxext.c
===================================================================
--- AppleSGLX/trunk/glxext.c	2009-02-22 05:19:26 UTC (rev 227)
+++ AppleSGLX/trunk/glxext.c	2009-02-22 06:55:32 UTC (rev 228)
@@ -83,8 +83,10 @@
 /* Extension required boiler plate */
 
 static char *__glXExtensionName = GLX_EXTENSION_NAME;
-XExtensionInfo *__glXExtensionInfo = NULL;
 
+static XExtensionInfo glxext_info_data;
+static XExtensionInfo *glXExtensionInfo = &glxext_info_data;
+
 static /* const */ char *error_list[] = {
     "GLXBadContext",
     "GLXBadContextState",
@@ -111,13 +113,12 @@
     __glXFreeContext(gc);
   }
 
-  return XextRemoveDisplay(__glXExtensionInfo, dpy);
+  return XextRemoveDisplay(glXExtensionInfo, dpy);
 }
 
+static char *__glXErrorString(Display *dpy, int code, XExtCodes *codes, 
+			  char *buf, int n);
 
-static XEXT_GENERATE_ERROR_STRING(__glXErrorString, __glXExtensionName,
-				  __GLX_NUMBER_ERRORS, error_list)
-
 static /* const */ XExtensionHooks __glXExtensionHooks = {
     NULL,				/* create_gc */
     NULL,				/* copy_gc */
@@ -132,11 +133,17 @@
     __glXErrorString,			/* error_string */
 };
 
-static
-XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, __glXExtensionInfo,
+
+XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, glXExtensionInfo,
 			   __glXExtensionName, &__glXExtensionHooks,
 			   __GLX_NUMBER_EVENTS, NULL)
 
+static XEXT_GENERATE_ERROR_STRING(__glXErrorString, __glXExtensionName,
+				  __GLX_NUMBER_ERRORS, error_list)
+
+
+
+
 /************************************************************************/
 
 /*
@@ -634,7 +641,8 @@
 #ifdef GLX_DIRECT_RENDERING
     Bool glx_direct, glx_accel;
 #endif
-
+ 
+    
 #if defined(USE_XTHREADS)
     {
         static int firstCall = 1;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/xquartz-changes/attachments/20090221/44943c1c/attachment-0001.html>


More information about the Xquartz-changes mailing list