OSDN Git Service

Added XMesaDrawable to xmesa_renderbuffer. Use it in a few places instead
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 26 Sep 2005 00:38:00 +0000 (00:38 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 26 Sep 2005 00:38:00 +0000 (00:38 +0000)
of the XMesaPixmap field to avoid some X server-side issues with casting.

src/mesa/drivers/x11/xm_api.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/drivers/x11/xm_span.c
src/mesa/drivers/x11/xmesaP.h

index a402d60..aa0f891 100644 (file)
@@ -560,8 +560,8 @@ alloc_shm_back_buffer(XMesaBuffer b, GLuint width, GLuint height)
    shmctl( b->shminfo.shmid, IPC_RMID, 0 ); /* nobody else needs it */
 
    /* Finally, try an XShmPutImage to be really sure the extension works */
-   gc = XCreateGC( b->xm_visual->display, b->frontxrb->pixmap, 0, NULL );
-   XShmPutImage( b->xm_visual->display, b->frontxrb->pixmap, gc,
+   gc = XCreateGC( b->xm_visual->display, b->frontxrb->drawable, 0, NULL );
+   XShmPutImage( b->xm_visual->display, b->frontxrb->drawable, gc,
                 b->backxrb->ximage, 0, 0, 0, 0, 1, 1 /*one pixel*/, False );
    XSync( b->xm_visual->display, False );
    XFreeGC( b->xm_visual->display, gc );
@@ -587,6 +587,7 @@ alloc_shm_back_buffer(XMesaBuffer b, GLuint width, GLuint height)
 
 
 
+
 /*
  * Setup an off-screen pixmap or Ximage to use as the back buffer.
  * Input:  b - the X/Mesa buffer
@@ -640,6 +641,11 @@ xmesa_alloc_back_buffer( XMesaBuffer b, GLuint width, GLuint height )
             XMesaDestroyImage( b->backxrb->ximage );
             b->backxrb->ximage = NULL;
          }
+         /* this call just updates the width/origin fields in the xrb */
+         b->backxrb->Base.AllocStorage(NULL, &b->backxrb->Base, 
+                                       b->backxrb->Base.InternalFormat,
+                                       b->backxrb->ximage->width,
+                                       b->backxrb->ximage->height);
       }
       b->backxrb->pixmap = None;
    }
@@ -655,7 +661,7 @@ xmesa_alloc_back_buffer( XMesaBuffer b, GLuint width, GLuint height )
       }
       /* Allocate new back pixmap */
       b->backxrb->pixmap = XMesaCreatePixmap( b->xm_visual->display,
-                                              b->frontxrb->pixmap,
+                                              b->frontxrb->drawable,
                                               width, height,
                                               GET_VISUAL_DEPTH(b->xm_visual) );
       b->backxrb->ximage = NULL;
@@ -1274,7 +1280,8 @@ static GLboolean initialize_visual_and_buffer( int client,
    if (b && window) {
       /* Do window-specific initializations */
 
-      b->frontxrb->pixmap = window;
+      b->frontxrb->drawable = window;
+      b->frontxrb->pixmap = (XMesaPixmap) window;
 
       /* Setup for single/double buffering */
       if (v->mesa_visual.doubleBufferMode) {
@@ -1329,7 +1336,7 @@ static GLboolean initialize_visual_and_buffer( int client,
           XMesaPutPixel(v->hpcr_clear_ximage, i, 0, 0);
           XMesaPutPixel(v->hpcr_clear_ximage, i, 1, 0);
         }
-        XMesaPutImage(b->display, (XMesaDrawable)v->hpcr_clear_pixmap,
+        XMesaPutImage(b->display, (XMesaDrawable) v->hpcr_clear_pixmap,
                      b->cleargc, v->hpcr_clear_ximage, 0, 0, 0, 0, 16, 2);
        XMesaSetFillStyle( v->display, b->cleargc, FillTiled);
        XMesaSetTile( v->display, b->cleargc, v->hpcr_clear_pixmap );
@@ -1804,7 +1811,7 @@ XMesaCreateWindowBuffer2(XMesaVisual v, XMesaWindow w, XMesaContext c)
    }
 
    if (!initialize_visual_and_buffer( client, v, b, v->mesa_visual.rgbMode,
-                                      (XMesaDrawable)w, cmap )) {
+                                      (XMesaDrawable) w, cmap )) {
       free_xmesa_buffer(client, b);
       return NULL;
    }
@@ -1926,7 +1933,7 @@ XMesaCreatePixmapBuffer(XMesaVisual v, XMesaPixmap p, XMesaColormap cmap)
 #endif
 
    if (!initialize_visual_and_buffer(client, v, b, v->mesa_visual.rgbMode,
-                                    (XMesaDrawable)p, cmap)) {
+                                    (XMesaDrawable) p, cmap)) {
       free_xmesa_buffer(client, b);
       return NULL;
    }
@@ -1977,8 +1984,8 @@ void XMesaDestroyBuffer( XMesaBuffer b )
    int client = 0;
 
 #ifdef XFree86Server
-   if (b->frontxrb->pixmap)
-       client = CLIENT_ID(b->frontxrb->pixmap->id);
+   if (b->frontxrb->drawable)
+       client = CLIENT_ID(b->frontxrb->drawable->id);
 #endif
 
    if (b->gc)  XMesaFreeGC( b->xm_visual->display, b->gc );
@@ -1987,25 +1994,25 @@ void XMesaDestroyBuffer( XMesaBuffer b )
 
    if (b->xm_visual->mesa_visual.doubleBufferMode)
    {
-       if (b->backxrb->ximage) {
+      if (b->backxrb->ximage) {
 #if defined(USE_XSHM) && !defined(XFree86Server)
-          if (b->shm) {
-              XShmDetach( b->xm_visual->display, &b->shminfo );
-              XDestroyImage( b->backxrb->ximage );
-              shmdt( b->shminfo.shmaddr );
-          }
-          else
+         if (b->shm) {
+            XShmDetach( b->xm_visual->display, &b->shminfo );
+            XDestroyImage( b->backxrb->ximage );
+            shmdt( b->shminfo.shmaddr );
+         }
+         else
 #endif
-              XMesaDestroyImage( b->backxrb->ximage );
-       }
-       if (b->backxrb->pixmap) {
-          XMesaFreePixmap( b->xm_visual->display, b->backxrb->pixmap );
-          if (b->xm_visual->hpcr_clear_flag) {
-              XMesaFreePixmap( b->xm_visual->display,
-                               b->xm_visual->hpcr_clear_pixmap );
-              XMesaDestroyImage( b->xm_visual->hpcr_clear_ximage );
-          }
-       }
+            XMesaDestroyImage( b->backxrb->ximage );
+      }
+      if (b->backxrb->pixmap) {
+         XMesaFreePixmap( b->xm_visual->display, b->backxrb->pixmap );
+         if (b->xm_visual->hpcr_clear_flag) {
+            XMesaFreePixmap( b->xm_visual->display,
+                             b->xm_visual->hpcr_clear_pixmap );
+            XMesaDestroyImage( b->xm_visual->hpcr_clear_ximage );
+         }
+      }
    }
    if (b->rowimage) {
       _mesa_free( b->rowimage->data );
@@ -2334,7 +2341,7 @@ void XMesaSwapBuffers( XMesaBuffer b )
 #if defined(USE_XSHM) && !defined(XFree86Server)
         if (b->shm) {
             /*_glthread_LOCK_MUTEX(_xmesa_lock);*/
-           XShmPutImage( b->xm_visual->display, b->frontxrb->pixmap,
+           XShmPutImage( b->xm_visual->display, b->frontxrb->drawable,
                          b->swapgc,
                          b->backxrb->ximage, 0, 0,
                          0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height,
@@ -2345,7 +2352,7 @@ void XMesaSwapBuffers( XMesaBuffer b )
 #endif
          {
             /*_glthread_LOCK_MUTEX(_xmesa_lock);*/
-            XMesaPutImage( b->xm_visual->display, b->frontxrb->pixmap,
+            XMesaPutImage( b->xm_visual->display, b->frontxrb->drawable,
                           b->swapgc,
                           b->backxrb->ximage, 0, 0,
                           0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height );
@@ -2357,7 +2364,7 @@ void XMesaSwapBuffers( XMesaBuffer b )
          /*_glthread_LOCK_MUTEX(_xmesa_lock);*/
         XMesaCopyArea( b->xm_visual->display,
                        b->backxrb->pixmap,   /* source drawable */
-                       b->frontxrb->pixmap,  /* dest. drawable */
+                       b->frontxrb->drawable,  /* dest. drawable */
                        b->swapgc,
                        0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height,
                        0, 0                 /* dest region */
@@ -2406,7 +2413,7 @@ void XMesaCopySubBuffer( XMesaBuffer b, int x, int y, int width, int height )
 #if defined(USE_XSHM) && !defined(XFree86Server)
          if (b->shm) {
             /* XXX assuming width and height aren't too large! */
-            XShmPutImage( b->xm_visual->display, b->frontxrb->pixmap,
+            XShmPutImage( b->xm_visual->display, b->frontxrb->drawable,
                           b->swapgc,
                           b->backxrb->ximage, x, yTop,
                           x, yTop, width, height, False );
@@ -2416,7 +2423,7 @@ void XMesaCopySubBuffer( XMesaBuffer b, int x, int y, int width, int height )
 #endif
          {
             /* XXX assuming width and height aren't too large! */
-            XMesaPutImage( b->xm_visual->display, b->frontxrb->pixmap,
+            XMesaPutImage( b->xm_visual->display, b->frontxrb->drawable,
                           b->swapgc,
                           b->backxrb->ximage, x, yTop,
                           x, yTop, width, height );
@@ -2426,7 +2433,7 @@ void XMesaCopySubBuffer( XMesaBuffer b, int x, int y, int width, int height )
          /* Copy pixmap to window on server */
          XMesaCopyArea( b->xm_visual->display,
                        b->backxrb->pixmap,           /* source drawable */
-                       b->frontxrb->pixmap,          /* dest. drawable */
+                       b->frontxrb->drawable,        /* dest. drawable */
                        b->swapgc,
                        x, yTop, width, height,  /* source region */
                        x, yTop                  /* dest region */
@@ -2445,6 +2452,7 @@ void XMesaCopySubBuffer( XMesaBuffer b, int x, int y, int width, int height )
  * Return:  GL_TRUE = context is double buffered
  *          GL_FALSE = context is single buffered
  */
+#ifndef XFree86Server
 GLboolean XMesaGetBackBuffer( XMesaBuffer b,
                               XMesaPixmap *pixmap,
                               XMesaImage **ximage )
@@ -2462,6 +2470,7 @@ GLboolean XMesaGetBackBuffer( XMesaBuffer b,
       return GL_FALSE;
    }
 }
+#endif /* XFree86Server */
 
 
 /*
@@ -2528,7 +2537,7 @@ XMesaBuffer XMesaFindBuffer( XMesaDisplay *dpy, XMesaDrawable d )
 {
    XMesaBuffer b;
    for (b=XMesaBufferList; b; b=b->Next) {
-      if (b->frontxrb->pixmap==d && b->display==dpy) {
+      if (b->frontxrb->drawable == d && b->display == dpy) {
          return b;
       }
    }
@@ -2546,12 +2555,12 @@ void XMesaGarbageCollect( void )
    XMesaBuffer b, next;
    for (b=XMesaBufferList; b; b=next) {
       next = b->Next;
-      if (b->display && b->frontxrb->pixmap && b->type == WINDOW) {
+      if (b->display && b->frontxrb->drawable && b->type == WINDOW) {
 #ifdef XFree86Server
         /* NOT_NEEDED */
 #else
          XSync(b->display, False);
-         if (!window_exists( b->display, b->frontxrb->pixmap )) {
+         if (!window_exists( b->display, b->frontxrb->drawable )) {
             /* found a dead window, free the ancillary info */
             XMesaDestroyBuffer( b );
          }
@@ -2636,8 +2645,13 @@ unsigned long XMesaDitherColor( XMesaContext xmesa, GLint x, GLint y,
 void XMesaResizeBuffers( XMesaBuffer b )
 {
 #ifdef XFree86Server
+   GLuint winwidth, winheight;
    GET_CURRENT_CONTEXT(ctx);
-   xmesa_resize_buffers(ctx, &(b->mesa_buffer), 0, 0);
+
+   winwidth = MIN2(b->frontxrb->drawable->width, MAX_WIDTH);
+   winheight = MIN2(b->frontxrb->drawable->height, MAX_HEIGHT);
+
+   xmesa_resize_buffers(ctx, &(b->mesa_buffer), winwidth, winheight);
 #else
    Window root;
    int xpos, ypos;
index 3e7174a..e26b54f 100644 (file)
@@ -105,8 +105,8 @@ get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
    unsigned int winwidth, winheight;
 #ifdef XFree86Server
    /* XFree86 GLX renderer */
-   winwidth = MIN2(xmBuffer->frontxrb->pixmap->width, MAX_WIDTH);
-   winheight = MIN2(xmBuffer->frontxrb->pixmap->height, MAX_HEIGHT);
+   winwidth = MIN2(xmBuffer->frontxrb->drawable->width, MAX_WIDTH);
+   winheight = MIN2(xmBuffer->frontxrb->drawable->height, MAX_HEIGHT);
 #else
    Window root;
    int winx, winy;
index 768472f..64fa34a 100644 (file)
@@ -188,7 +188,7 @@ static void put_row_TRUECOLOR_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = XMESA_BUFFER(ctx->DrawBuffer)->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
 
@@ -225,7 +225,7 @@ static void put_row_rgb_TRUECOLOR_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -260,7 +260,7 @@ static void put_row_TRUEDITHER_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -295,7 +295,7 @@ static void put_row_rgb_TRUEDITHER_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -330,7 +330,7 @@ static void put_row_8A8B8G8R_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -364,7 +364,7 @@ static void put_row_rgb_8A8B8G8R_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -397,7 +397,7 @@ static void put_row_8A8R8G8B_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -431,7 +431,7 @@ static void put_row_rgb_8A8R8G8B_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -464,7 +464,7 @@ static void put_row_8R8G8B_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -497,7 +497,7 @@ static void put_row_8R8G8B24_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    y = YFLIP(xrb, y);
    if (mask) {
@@ -593,7 +593,7 @@ static void put_row_rgb_8R8G8B_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -625,7 +625,7 @@ static void put_row_rgb_8R8G8B24_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    y = YFLIP(xrb, y);
    if (mask) {
@@ -726,7 +726,7 @@ static void put_row_5R6G5B_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -759,7 +759,7 @@ static void put_row_DITHER_5R6G5B_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -794,7 +794,7 @@ static void put_row_rgb_5R6G5B_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -827,7 +827,7 @@ static void put_row_rgb_DITHER_5R6G5B_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -862,7 +862,7 @@ static void put_row_DITHER_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    XDITHER_SETUP(y);
@@ -895,7 +895,7 @@ static void put_row_rgb_DITHER_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    XDITHER_SETUP(y);
@@ -928,7 +928,7 @@ static void put_row_1BIT_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    SETUP_1BIT;
@@ -963,7 +963,7 @@ static void put_row_rgb_1BIT_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    SETUP_1BIT;
@@ -998,7 +998,7 @@ static void put_row_HPCR_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -1031,7 +1031,7 @@ static void put_row_rgb_HPCR_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -1063,7 +1063,7 @@ static void put_row_LOOKUP_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    LOOKUP_SETUP;
@@ -1095,7 +1095,7 @@ static void put_row_rgb_LOOKUP_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    LOOKUP_SETUP;
@@ -1127,7 +1127,7 @@ static void put_row_GRAYSCALE_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -1158,7 +1158,7 @@ static void put_row_rgb_GRAYSCALE_pixmap( RGB_SPAN_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -2237,7 +2237,7 @@ static void put_values_TRUECOLOR_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2260,7 +2260,7 @@ static void put_values_TRUEDITHER_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2283,7 +2283,7 @@ static void put_values_8A8B8G8R_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2304,7 +2304,7 @@ static void put_values_8A8R8G8B_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2325,7 +2325,7 @@ static void put_values_8R8G8B_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2346,7 +2346,7 @@ static void put_values_8R8G8B24_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2367,7 +2367,7 @@ static void put_values_5R6G5B_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2388,7 +2388,7 @@ static void put_values_DITHER_5R6G5B_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2411,7 +2411,7 @@ static void put_values_DITHER_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    DITHER_SETUP;
@@ -2434,7 +2434,7 @@ static void put_values_1BIT_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    SETUP_1BIT;
@@ -2457,7 +2457,7 @@ static void put_values_HPCR_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2479,7 +2479,7 @@ static void put_values_LOOKUP_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    LOOKUP_SETUP;
@@ -2501,7 +2501,7 @@ static void put_values_GRAYSCALE_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -2825,7 +2825,7 @@ static void put_mono_row_pixmap( PUT_MONO_ROW_ARGS )
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
                color[GCOMP], color[BCOMP], color[ACOMP], xmesa->pixelformat);
@@ -2865,7 +2865,7 @@ put_mono_row_ci_pixmap( PUT_MONO_ROW_ARGS )
    XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    XMesaSetForeground( xmesa->display, gc, colorIndex );
@@ -2902,7 +2902,7 @@ static void put_mono_row_TRUEDITHER_pixmap( PUT_MONO_ROW_ARGS )
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLuint i;
@@ -2927,7 +2927,7 @@ static void put_mono_row_DITHER_pixmap( PUT_MONO_ROW_ARGS )
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLuint i;
@@ -2951,7 +2951,7 @@ static void put_mono_row_1BIT_pixmap( PUT_MONO_ROW_ARGS )
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaContext xmesa = XMESA_CONTEXT(ctx);
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
    register GLuint i;
@@ -3263,7 +3263,7 @@ static void put_mono_values_pixmap( PUT_MONO_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    const unsigned long pixel = xmesa_color_to_pixel(ctx, color[RCOMP],
@@ -3285,7 +3285,7 @@ put_mono_values_ci_pixmap( PUT_MONO_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    XMesaSetForeground( xmesa->display, gc, colorIndex );
@@ -3307,7 +3307,7 @@ static void put_mono_values_TRUEDITHER_pixmap( PUT_MONO_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
@@ -3332,7 +3332,7 @@ static void put_mono_values_DITHER_pixmap( PUT_MONO_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
@@ -3355,7 +3355,7 @@ static void put_mono_values_1BIT_pixmap( PUT_MONO_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    const GLubyte r = color[RCOMP], g = color[GCOMP], b = color[BCOMP];
@@ -3650,7 +3650,7 @@ static void put_row_ci_pixmap( PUT_ROW_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    y = YFLIP(xrb, y);
@@ -3709,7 +3709,7 @@ static void put_values_ci_pixmap( PUT_VALUES_ARGS )
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    struct xmesa_renderbuffer *xrb = (struct xmesa_renderbuffer *) rb;
    XMesaDisplay *dpy = xmesa->xm_visual->display;
-   XMesaDrawable buffer = xrb->pixmap;
+   XMesaDrawable buffer = xrb->drawable;
    XMesaGC gc = XMESA_BUFFER(ctx->DrawBuffer)->gc;
    register GLuint i;
    for (i=0;i<n;i++) {
@@ -3832,7 +3832,7 @@ get_row_ci(GLcontext *ctx, struct gl_renderbuffer *rb,
         XMesaDestroyImage( span );
       }
 #else
-      (*xmesa->display->GetImage)(xrb->pixmap,
+      (*xmesa->display->GetImage)(xrb->drawable,
                                  x, y, n, 1, ZPixmap,
                                  ~0L, (pointer)index);
 #endif
@@ -3867,7 +3867,7 @@ get_row_rgba(GLcontext *ctx, struct gl_renderbuffer *rb,
       span = XMesaCreateImage(xmesa->xm_visual->BitsPerPixel, n, 1, NULL);
       span->data = (char *)MALLOC(span->height * span->bytes_per_line);
       error = (!span->data);
-      (*xmesa->display->GetImage)(xrb->pixmap,
+      (*xmesa->display->GetImage)(xrb->drawable,
                                  x, YFLIP(xrb, y), n, 1, ZPixmap,
                                  ~0L, (pointer)span->data);
 #else
@@ -4262,7 +4262,7 @@ get_values_ci(GLcontext *ctx, struct gl_renderbuffer *rb,
    GLuint i;
    if (xrb->pixmap) {
       for (i=0;i<n;i++) {
-         indx[i] = (GLuint) read_pixel( xmesa->display, xrb->pixmap,
+         indx[i] = (GLuint) read_pixel( xmesa->display, xrb->drawable,
                                         x[i], YFLIP(xrb, y[i]) );
       }
    }
@@ -4288,7 +4288,7 @@ get_values_rgba(GLcontext *ctx, struct gl_renderbuffer *rb,
    register GLuint i;
 
    if (xrb->pixmap) {
-      XMesaDrawable buffer = xrb->pixmap;
+      XMesaDrawable buffer = xrb->drawable;
       switch (xmesa->pixelformat) {
         case PF_Truecolor:
          case PF_Dither_True:
index 5f4e3d4..efe88a0 100644 (file)
@@ -161,13 +161,23 @@ typedef enum {
 #define BACK_XIMAGE    2
 
 
+/**
+ * An xmesa_renderbuffer represents the back or front color buffer.
+ * For the front color buffer:
+ *    <drawable> is the X window
+ * For the back color buffer:
+ *    Either <ximage> or <pixmap> will be used, never both.
+ * In any case, <drawable> always equals <pixmap>.
+ * For stand-alone Mesa, we could merge <drawable> and <pixmap> into one
+ * field.  We don't do that for the server-side GLcore module because
+ * pixmaps and drawables are different and we'd need a bunch of casts.
+ */
 struct xmesa_renderbuffer
 {
    struct gl_renderbuffer Base;  /* Base class */
 
-   XMesaDrawable pixmap;       /* Either an X Window ID (front color buf) */
-                                /* or X Pixmap ID (back color buf) */
-
+   XMesaDrawable drawable;     /* Usually the X window ID */
+   XMesaPixmap pixmap; /* Back color buffer */
    XMesaImage *ximage; /* The back buffer, if not using a Pixmap */
 
    GLubyte *origin1;   /* used for PIXEL_ADDR1 macro */