changed xmesa_visual and xmesa_buffer structs to directly include GLvisual and GLfram...
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 27 Apr 2001 21:18:25 +0000 (21:18 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 27 Apr 2001 21:18:25 +0000 (21:18 +0000)
src/mesa/drivers/x11/fakeglx.c
src/mesa/drivers/x11/xm_api.c
src/mesa/drivers/x11/xm_dd.c
src/mesa/drivers/x11/xm_line.c
src/mesa/drivers/x11/xmesaP.h

index 828896c..abbd528 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fakeglx.c,v 1.48 2001/03/23 21:37:05 brianp Exp $ */
+/* $Id: fakeglx.c,v 1.49 2001/04/27 21:18:25 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -269,16 +269,16 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
       if (v->display == dpy
           && v->level == level
           && v->ximage_flag == ximageFlag
-          && v->gl_visual->rgbMode == rgbFlag
-          && v->gl_visual->doubleBufferMode == dbFlag
-          && v->gl_visual->stereoMode == stereoFlag
-          && (v->gl_visual->alphaBits > 0) == alphaFlag
-          && (v->gl_visual->depthBits >= depth_size || depth_size == 0)
-          && (v->gl_visual->stencilBits >= stencil_size || stencil_size == 0)
-          && (v->gl_visual->accumRedBits >= accumRedSize || accumRedSize == 0)
-          && (v->gl_visual->accumGreenBits >= accumGreenSize || accumGreenSize == 0)
-          && (v->gl_visual->accumBlueBits >= accumBlueSize || accumBlueSize == 0)
-          && (v->gl_visual->accumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) {
+          && v->mesa_visual.rgbMode == rgbFlag
+          && v->mesa_visual.doubleBufferMode == dbFlag
+          && v->mesa_visual.stereoMode == stereoFlag
+          && (v->mesa_visual.alphaBits > 0) == alphaFlag
+          && (v->mesa_visual.depthBits >= depth_size || depth_size == 0)
+          && (v->mesa_visual.stencilBits >= stencil_size || stencil_size == 0)
+          && (v->mesa_visual.accumRedBits >= accumRedSize || accumRedSize == 0)
+          && (v->mesa_visual.accumGreenBits >= accumGreenSize || accumGreenSize == 0)
+          && (v->mesa_visual.accumBlueBits >= accumBlueSize || accumBlueSize == 0)
+          && (v->mesa_visual.accumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) {
          /* now either compare XVisualInfo pointers or visual IDs */
          if ((!comparePointers && v->visinfo->visualid == vinfo->visualid)
              || (comparePointers && v->vishandle == vinfo)) {
@@ -1418,7 +1418,7 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
         *value = glxvis->level;
         return 0;
       case GLX_RGBA:
-        if (glxvis->gl_visual->rgbMode) {
+        if (glxvis->mesa_visual.rgbMode) {
            *value = True;
         }
         else {
@@ -1426,43 +1426,43 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
         }
         return 0;
       case GLX_DOUBLEBUFFER:
-        *value = (int) glxvis->gl_visual->doubleBufferMode;
+        *value = (int) glxvis->mesa_visual.doubleBufferMode;
         return 0;
       case GLX_STEREO:
-        *value = (int) glxvis->gl_visual->stereoMode;
+        *value = (int) glxvis->mesa_visual.stereoMode;
         return 0;
       case GLX_AUX_BUFFERS:
         *value = (int) False;
         return 0;
       case GLX_RED_SIZE:
-         *value = glxvis->gl_visual->redBits;
+         *value = glxvis->mesa_visual.redBits;
         return 0;
       case GLX_GREEN_SIZE:
-         *value = glxvis->gl_visual->greenBits;
+         *value = glxvis->mesa_visual.greenBits;
         return 0;
       case GLX_BLUE_SIZE:
-         *value = glxvis->gl_visual->blueBits;
+         *value = glxvis->mesa_visual.blueBits;
         return 0;
       case GLX_ALPHA_SIZE:
-         *value = glxvis->gl_visual->alphaBits;
+         *value = glxvis->mesa_visual.alphaBits;
         return 0;
       case GLX_DEPTH_SIZE:
-         *value = glxvis->gl_visual->depthBits;
+         *value = glxvis->mesa_visual.depthBits;
         return 0;
       case GLX_STENCIL_SIZE:
-        *value = glxvis->gl_visual->stencilBits;
+        *value = glxvis->mesa_visual.stencilBits;
         return 0;
       case GLX_ACCUM_RED_SIZE:
-        *value = glxvis->gl_visual->accumRedBits;
+        *value = glxvis->mesa_visual.accumRedBits;
         return 0;
       case GLX_ACCUM_GREEN_SIZE:
-        *value = glxvis->gl_visual->accumGreenBits;
+        *value = glxvis->mesa_visual.accumGreenBits;
         return 0;
       case GLX_ACCUM_BLUE_SIZE:
-        *value = glxvis->gl_visual->accumBlueBits;
+        *value = glxvis->mesa_visual.accumBlueBits;
         return 0;
       case GLX_ACCUM_ALPHA_SIZE:
-         *value = glxvis->gl_visual->accumAlphaBits;
+         *value = glxvis->mesa_visual.accumAlphaBits;
         return 0;
 
       /*
@@ -1485,7 +1485,7 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
          }
          else if (glxvis->level>0) {
             /* overlay */
-            if (glxvis->gl_visual->rgbMode) {
+            if (glxvis->mesa_visual.rgbMode) {
                *value = GLX_TRANSPARENT_RGB_EXT;
             }
             else {
index b115c92..5bb7b05 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_api.c,v 1.20 2001/04/10 15:25:45 brianp Exp $ */
+/* $Id: xm_api.c,v 1.21 2001/04/27 21:18:25 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -425,7 +425,10 @@ static void free_xmesa_buffer(int client, XMesaBuffer buffer)
 #endif
             }
          }
+
+         _mesa_free_framebuffer_data(&buffer->mesa_buffer);
          FREE(buffer);
+
          return;
       }
       /* continue search */
@@ -823,8 +826,8 @@ static GLboolean setup_grayscale( int client, XMesaVisual v,
 
       prevBuffer = find_xmesa_buffer(v->display, cmap, buffer);
       if (prevBuffer &&
-          (buffer->xm_visual->gl_visual->rgbMode ==
-           prevBuffer->xm_visual->gl_visual->rgbMode)) {
+          (buffer->xm_visual->mesa_visual.rgbMode ==
+           prevBuffer->xm_visual->mesa_visual.rgbMode)) {
          /* Copy colormap stuff from previous XMesaBuffer which uses same
           * X colormap.  Do this to avoid time spent in noFaultXAllocColor.
           */
@@ -911,8 +914,8 @@ static GLboolean setup_dithered_color( int client, XMesaVisual v,
 
       prevBuffer = find_xmesa_buffer(v->display, cmap, buffer);
       if (prevBuffer &&
-          (buffer->xm_visual->gl_visual->rgbMode ==
-           prevBuffer->xm_visual->gl_visual->rgbMode)) {
+          (buffer->xm_visual->mesa_visual.rgbMode ==
+           prevBuffer->xm_visual->mesa_visual.rgbMode)) {
          /* Copy colormap stuff from previous, matching XMesaBuffer.
           * Do this to avoid time spent in noFaultXAllocColor.
           */
@@ -1275,10 +1278,8 @@ static GLboolean initialize_visual_and_buffer( int client,
 
       b->frontbuffer = window;
 
-      assert( v->gl_visual );
-
       /* Setup for single/double buffering */
-      if (v->gl_visual->doubleBufferMode) {
+      if (v->mesa_visual.doubleBufferMode) {
          /* Double buffered */
 #ifndef XFree86Server
          b->shm = check_for_xshm( v->display );
@@ -1569,23 +1570,16 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
    if (alpha_flag && alpha_bits == 0)
       alpha_bits = 8;
 
-   v->gl_visual = _mesa_create_visual( rgb_flag, db_flag, stereo_flag,
-                                       red_bits, green_bits,
-                                       blue_bits, alpha_bits,
-                                       v->index_bits,
-                                       depth_size,
-                                       stencil_size,
-                                       accum_red_size, accum_green_size,
-                                       accum_blue_size, accum_alpha_size,
-                                       0 );
-   if (!v->gl_visual) {
-#ifndef XFree86Server
-      FREE(v->visinfo);
-#endif
-      FREE(v);
-      return NULL;
-   }
-
+   _mesa_initialize_visual( &v->mesa_visual,
+                            rgb_flag, db_flag, stereo_flag,
+                            red_bits, green_bits,
+                            blue_bits, alpha_bits,
+                            v->index_bits,
+                            depth_size,
+                            stencil_size,
+                            accum_red_size, accum_green_size,
+                            accum_blue_size, accum_alpha_size,
+                            0 );
    return v;
 }
 
@@ -1598,7 +1592,6 @@ void XMesaSetVisualDisplay( XMesaDisplay *dpy, XMesaVisual v )
 
 void XMesaDestroyVisual( XMesaVisual v )
 {
-   _mesa_destroy_visual( v->gl_visual );
 #ifndef XFree86Server
    FREE(v->visinfo);
 #endif
@@ -1632,7 +1625,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
       return NULL;
    }
 
-   ctx = c->gl_ctx = _mesa_create_context( v->gl_visual,
+   ctx = c->gl_ctx = _mesa_create_context( &v->mesa_visual,
                       share_list ? share_list->gl_ctx : (GLcontext *) NULL,
                       (void *) c, direct );
    if (!c->gl_ctx) {
@@ -1797,7 +1790,7 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
 #endif
 
    /* determine back buffer implementation */
-   if (v->gl_visual->doubleBufferMode) {
+   if (v->mesa_visual.doubleBufferMode) {
       if (v->ximage_flag) {
         b->db_state = BACK_XIMAGE;
       }
@@ -1809,19 +1802,15 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
       b->db_state = 0;
    }
 
-   b->gl_buffer = _mesa_create_framebuffer( v->gl_visual,
-                                            v->gl_visual->depthBits > 0,
-                                            v->gl_visual->stencilBits > 0,
-                                            v->gl_visual->accumRedBits > 0,
-                                            v->gl_visual->alphaBits > 0 );
-   if (!b->gl_buffer) {
-      free_xmesa_buffer(client, b);
-      return NULL;
-   }
+   _mesa_initialize_framebuffer(&b->mesa_buffer,
+                                &v->mesa_visual,
+                                v->mesa_visual.depthBits > 0,
+                                v->mesa_visual.stencilBits > 0,
+                                v->mesa_visual.accumRedBits > 0,
+                                v->mesa_visual.alphaBits > 0 );
 
-   if (!initialize_visual_and_buffer( client, v, b, v->gl_visual->rgbMode,
+   if (!initialize_visual_and_buffer( client, v, b, v->mesa_visual.rgbMode,
                                       (XMesaDrawable)w, b->cmap )) {
-      _mesa_destroy_framebuffer( b->gl_buffer );
       free_xmesa_buffer(client, b);
       return NULL;
    }
@@ -1833,22 +1822,22 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
        int attribs[100];
        int numAttribs = 0;
        int hw;
-       if (v->gl_visual->depthBits > 0) {
+       if (v->mesa_visual.depthBits > 0) {
         attribs[numAttribs++] = FXMESA_DEPTH_SIZE;
         attribs[numAttribs++] = 1;
        }
-       if (v->gl_visual->doubleBufferMode) {
+       if (v->mesa_visual.doubleBufferMode) {
         attribs[numAttribs++] = FXMESA_DOUBLEBUFFER;
        }
-       if (v->gl_visual->accumRedBits > 0) {
+       if (v->mesa_visual.accumRedBits > 0) {
         attribs[numAttribs++] = FXMESA_ACCUM_SIZE;
-        attribs[numAttribs++] = v->gl_visual->accumRedBits;
+        attribs[numAttribs++] = v->mesa_visual.accumRedBits;
        }
-       if (v->gl_visual->stencilBits > 0) {
+       if (v->mesa_visual.stencilBits > 0) {
          attribs[numAttribs++] = FXMESA_STENCIL_SIZE;
-         attribs[numAttribs++] = v->gl_visual->stencilBits;
+         attribs[numAttribs++] = v->mesa_visual.stencilBits;
        }
-       if (v->gl_visual->alphaBits > 0) {
+       if (v->mesa_visual.alphaBits > 0) {
          attribs[numAttribs++] = FXMESA_ALPHA_SIZE;
          attribs[numAttribs++] = 1;
        }
@@ -1939,7 +1928,7 @@ XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
    b->cmap = cmap;
 
    /* determine back buffer implementation */
-   if (v->gl_visual->doubleBufferMode) {
+   if (v->mesa_visual.doubleBufferMode) {
       if (v->ximage_flag) {
         b->db_state = BACK_XIMAGE;
       }
@@ -1951,21 +1940,17 @@ XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
       b->db_state = 0;
    }
 
-   b->gl_buffer = _mesa_create_framebuffer( v->gl_visual,
-                                            v->gl_visual->depthBits > 0,
-                                            v->gl_visual->stencilBits > 0,
-                                            v->gl_visual->accumRedBits +
-                                            v->gl_visual->accumGreenBits +
-                                            v->gl_visual->accumBlueBits > 0,
-                                            v->gl_visual->alphaBits > 0 );
-   if (!b->gl_buffer) {
-      free_xmesa_buffer(client, b);
-      return NULL;
-   }
+   _mesa_initialize_framebuffer(&b->mesa_buffer,
+                                &v->mesa_visual,
+                                v->mesa_visual.depthBits > 0,
+                                v->mesa_visual.stencilBits > 0,
+                                v->mesa_visual.accumRedBits +
+                                v->mesa_visual.accumGreenBits +
+                                v->mesa_visual.accumBlueBits > 0,
+                                v->mesa_visual.alphaBits > 0 );
 
-   if (!initialize_visual_and_buffer(client, v, b, v->gl_visual->rgbMode,
+   if (!initialize_visual_and_buffer(client, v, b, v->mesa_visual.rgbMode,
                                     (XMesaDrawable)p, cmap)) {
-      _mesa_destroy_framebuffer( b->gl_buffer );
       free_xmesa_buffer(client, b);
       return NULL;
    }
@@ -2022,7 +2007,6 @@ void XMesaDestroyBuffer( XMesaBuffer b )
    if (b->xm_context)
        b->xm_context->xm_buffer = NULL;
 
-   _mesa_destroy_framebuffer( b->gl_buffer );
    free_xmesa_buffer(client, b);
 }
 
@@ -2082,7 +2066,9 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
       c->xm_read_buffer = readBuffer;
       c->use_read_buffer = (drawBuffer != readBuffer);
 
-      _mesa_make_current2(c->gl_ctx, drawBuffer->gl_buffer, readBuffer->gl_buffer);
+      _mesa_make_current2(c->gl_ctx,
+                          &drawBuffer->mesa_buffer,
+                          &readBuffer->mesa_buffer);
 
       if (c->gl_ctx->Viewport.Width == 0) {
         /* initialize viewport to window size */
@@ -2091,7 +2077,7 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
         c->gl_ctx->Scissor.Height = drawBuffer->height;
       }
 
-      if (c->xm_visual->gl_visual->rgbMode) {
+      if (c->xm_visual->mesa_visual.rgbMode) {
          /*
           * Must recompute and set these pixel values because colormap
           * can be different for different windows.
@@ -2170,7 +2156,7 @@ GLboolean XMesaForceCurrent(XMesaContext c)
 {
    if (c) {
       if (c->gl_ctx != _mesa_get_current_context()) {
-        _mesa_make_current(c->gl_ctx, c->xm_buffer->gl_buffer);
+        _mesa_make_current(c->gl_ctx, &c->xm_buffer->mesa_buffer);
       }
    }
    else {
@@ -2493,7 +2479,7 @@ GLboolean XMesaGetBackBuffer( XMesaBuffer b,
 GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
                                GLint *bytesPerValue, void **buffer )
 {
-   if ((!b->gl_buffer) || (!b->gl_buffer->DepthBuffer)) {
+   if (!b->mesa_buffer.DepthBuffer) {
       *width = 0;
       *height = 0;
       *bytesPerValue = 0;
@@ -2501,10 +2487,10 @@ GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
       return GL_FALSE;
    }
    else {
-      *width = b->gl_buffer->Width;
-      *height = b->gl_buffer->Height;
+      *width = b->mesa_buffer.Width;
+      *height = b->mesa_buffer.Height;
       *bytesPerValue = sizeof(GLdepth);
-      *buffer = b->gl_buffer->DepthBuffer;
+      *buffer = b->mesa_buffer.DepthBuffer;
       return GL_TRUE;
    }
 }
index e2c9e80..548ebb0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_dd.c,v 1.22 2001/04/04 21:54:21 brianp Exp $ */
+/* $Id: xm_dd.c,v 1.23 2001/04/27 21:18:25 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -751,7 +751,7 @@ clear_buffers( GLcontext *ctx, GLbitfield mask,
    const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask;
 
    if ((mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) &&
-       xmesa->xm_buffer->gl_buffer->UseSoftwareAlphaBuffers &&
+       xmesa->xm_buffer->mesa_buffer.UseSoftwareAlphaBuffers &&
        ctx->Color.ColorMask[ACOMP]) {
       _mesa_clear_alpha_buffers(ctx);
    }
index b997f63..80fa987 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xm_line.c,v 1.16 2001/01/23 23:39:37 brianp Exp $ */
+/* $Id: xm_line.c,v 1.17 2001/04/27 21:18:25 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -64,7 +64,7 @@ static void draw_points_ANY_pixmap( GLcontext *ctx, const SWvertex *vert )
    XMesaDrawable buffer = xmesa->xm_buffer->buffer;
    XMesaGC gc = xmesa->xm_buffer->gc;
 
-   if (xmesa->xm_visual->gl_visual->RGBAflag) {
+   if (xmesa->xm_visual->mesa_visual.RGBAflag) {
       register int x, y;
       const GLubyte *color = vert->color;
       unsigned long pixel = xmesa_color_to_pixel( xmesa,
index 34d07c9..aa014d1 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xmesaP.h,v 1.20 2001/03/19 02:25:36 keithw Exp $ */
+/* $Id: xmesaP.h,v 1.21 2001/04/27 21:18:25 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -75,10 +75,10 @@ typedef void (*clear_func)( GLcontext *ctx,
 
 
 /*
- * "Derived" from gl_visual.  Basically corresponds to an XVisualInfo.
+ * "Derived" from GLvisual.  Basically corresponds to an XVisualInfo.
  */
 struct xmesa_visual {
-   GLvisual *gl_visual;                /* Device independent visual parameters */
+   GLvisual mesa_visual;       /* Device independent visual parameters */
    XMesaDisplay *display;      /* The X11 display */
 #ifdef XFree86Server
    GLint screen_depth;         /* The depth of the screen */
@@ -156,11 +156,11 @@ struct xmesa_context {
 
 
 /*
- * "Derived" from gl_buffer.  Basically corresponds to a GLXDrawable.
+ * "Derived" from GLframebuffer.  Basically corresponds to a GLXDrawable.
  */
 struct xmesa_buffer {
+   GLframebuffer mesa_buffer;  /* depth, stencil, accum, etc buffers */
    GLboolean wasCurrent;       /* was ever the current buffer? */
-   GLframebuffer *gl_buffer;   /* depth, stencil, accum, etc buffers */
    XMesaVisual xm_visual;      /* the X/Mesa visual */
 
    XMesaContext xm_context;     /* the context associated with this buffer */