diff options
| author | Keith Whitwell <keith@tungstengraphics.com> | 2001-01-29 20:56:32 +0000 | 
|---|---|---|
| committer | Keith Whitwell <keith@tungstengraphics.com> | 2001-01-29 20:56:32 +0000 | 
| commit | d98fdad3bfc7018740cf781e00fa53ad9a4479cd (patch) | |
| tree | b2ba763ef95ced1bbcdeb064ba28b51e84623c31 /src/mesa/drivers | |
| parent | 5c1e7fa6ee72f4403d9ec9d12830dd689b966e71 (diff) | |
Update implementations of Driver.Clear().
Diffstat (limited to 'src/mesa/drivers')
| -rw-r--r-- | src/mesa/drivers/osmesa/osmesa.c | 287 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xm_dd.c | 28 | 
2 files changed, 156 insertions, 159 deletions
| diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c index 69fba7f3c7..ac155a8e2a 100644 --- a/src/mesa/drivers/osmesa/osmesa.c +++ b/src/mesa/drivers/osmesa/osmesa.c @@ -1,4 +1,4 @@ -/* $Id: osmesa.c,v 1.42 2001/01/29 20:47:39 keithw Exp $ */ +/* $Id: osmesa.c,v 1.43 2001/01/29 20:56:32 keithw Exp $ */  /*   * Mesa 3-D graphics library @@ -644,164 +644,163 @@ static void set_read_buffer( GLcontext *ctx, GLframebuffer *buffer, GLenum mode  } -static GLbitfield clear( GLcontext *ctx, GLbitfield mask, GLboolean all, -                         GLint x, GLint y, GLint width, GLint height ) +static void clear( GLcontext *ctx, GLbitfield mask, GLboolean all, +		   GLint x, GLint y, GLint width, GLint height )  {     OSMesaContext osmesa = OSMESA_CONTEXT(ctx);     const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask; -   /* we can't handle color or index masking */ -   if (*colorMask != 0xffffffff || ctx->Color.IndexMask != 0xffffffff) -      return mask; -     /* sanity check - we only have a front-left buffer */     ASSERT((mask & (DD_FRONT_RIGHT_BIT | DD_BACK_LEFT_BIT | DD_BACK_RIGHT_BIT)) == 0); - -   if (mask & DD_FRONT_LEFT_BIT) { -      if (osmesa->format == OSMESA_COLOR_INDEX) { -         if (all) { -            /* Clear whole CI buffer */ +   if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) { +      if (mask & DD_FRONT_LEFT_BIT) { +	 if (osmesa->format == OSMESA_COLOR_INDEX) { +	    if (all) { +	       /* Clear whole CI buffer */  #if CHAN_TYPE == GL_UNSIGNED_BYTE -            MEMSET(osmesa->buffer, ctx->Color.ClearIndex, -                   osmesa->rowlength * osmesa->height); +	       MEMSET(osmesa->buffer, ctx->Color.ClearIndex, +		      osmesa->rowlength * osmesa->height);  #else -            const GLint n = osmesa->rowlength * osmesa->height; -            GLchan *buffer = (GLchan *) osmesa->buffer; -            GLint i; -            for (i = 0; i < n; i ++) { -               buffer[i] = ctx->Color.ClearIndex; -            } +	       const GLint n = osmesa->rowlength * osmesa->height; +	       GLchan *buffer = (GLchan *) osmesa->buffer; +	       GLint i; +	       for (i = 0; i < n; i ++) { +		  buffer[i] = ctx->Color.ClearIndex; +	       }  #endif -         } -         else { -            /* Clear part of CI buffer */ -            const GLchan clearIndex = (GLchan) ctx->Color.ClearIndex; -            GLint i, j; -            for (i = 0; i < height; i++) { -               GLchan *ptr1 = PIXELADDR1(x, (y + i)); -               for (j = 0; j < width; j++) { -                  *ptr1++ = clearIndex; -               } -            } -         } -      } -      else if (osmesa->format == OSMESA_RGB) { -         const GLchan r = ctx->Color.ClearColor[0]; -         const GLchan g = ctx->Color.ClearColor[1]; -         const GLchan b = ctx->Color.ClearColor[2]; -         if (all) { -            /* Clear whole RGB buffer */ -            GLuint n = osmesa->rowlength * osmesa->height; -            GLchan *ptr3 = (GLchan *) osmesa->buffer; -            GLuint i; -            for (i = 0; i < n; i++) { -               PACK_RGB(ptr3, r, g, b); -               ptr3 += 3; -            } -         } -         else { -            /* Clear part of RGB buffer */ -            GLint i, j; -            for (i = 0; i < height; i++) { -               GLchan *ptr3 = PIXELADDR3(x, (y + i)); -               for (j = 0; j < width; j++) { -                  PACK_RGB(ptr3, r, g, b); -                  ptr3 += 3; -               } -            } -         } -      } -      else if (osmesa->format == OSMESA_BGR) { -         const GLchan r = ctx->Color.ClearColor[0]; -         const GLchan g = ctx->Color.ClearColor[1]; -         const GLchan b = ctx->Color.ClearColor[2]; -         if (all) { -            /* Clear whole RGB buffer */ -            const GLint n = osmesa->rowlength * osmesa->height; -            GLchan *ptr3 = (GLchan *) osmesa->buffer; -            GLint i; -            for (i = 0; i < n; i++) { -               PACK_BGR(ptr3, r, g, b); -               ptr3 += 3; -            } -         } -         else { -            /* Clear part of RGB buffer */ -            GLint i, j; -            for (i = 0; i < height; i++) { -               GLchan *ptr3 = PIXELADDR3(x, (y + i)); -               for (j = 0; j < width; j++) { -                  PACK_BGR(ptr3, r, g, b); -                  ptr3 += 3; -               } -            } -         } -      } -      else { +	    } +	    else { +	       /* Clear part of CI buffer */ +	       const GLchan clearIndex = (GLchan) ctx->Color.ClearIndex; +	       GLint i, j; +	       for (i = 0; i < height; i++) { +		  GLchan *ptr1 = PIXELADDR1(x, (y + i)); +		  for (j = 0; j < width; j++) { +		     *ptr1++ = clearIndex; +		  } +	       } +	    } +	 } +	 else if (osmesa->format == OSMESA_RGB) { +	    const GLchan r = ctx->Color.ClearColor[0]; +	    const GLchan g = ctx->Color.ClearColor[1]; +	    const GLchan b = ctx->Color.ClearColor[2]; +	    if (all) { +	       /* Clear whole RGB buffer */ +	       GLuint n = osmesa->rowlength * osmesa->height; +	       GLchan *ptr3 = (GLchan *) osmesa->buffer; +	       GLuint i; +	       for (i = 0; i < n; i++) { +		  PACK_RGB(ptr3, r, g, b); +		  ptr3 += 3; +	       } +	    } +	    else { +	       /* Clear part of RGB buffer */ +	       GLint i, j; +	       for (i = 0; i < height; i++) { +		  GLchan *ptr3 = PIXELADDR3(x, (y + i)); +		  for (j = 0; j < width; j++) { +		     PACK_RGB(ptr3, r, g, b); +		     ptr3 += 3; +		  } +	       } +	    } +	 } +	 else if (osmesa->format == OSMESA_BGR) { +	    const GLchan r = ctx->Color.ClearColor[0]; +	    const GLchan g = ctx->Color.ClearColor[1]; +	    const GLchan b = ctx->Color.ClearColor[2]; +	    if (all) { +	       /* Clear whole RGB buffer */ +	       const GLint n = osmesa->rowlength * osmesa->height; +	       GLchan *ptr3 = (GLchan *) osmesa->buffer; +	       GLint i; +	       for (i = 0; i < n; i++) { +		  PACK_BGR(ptr3, r, g, b); +		  ptr3 += 3; +	       } +	    } +	    else { +	       /* Clear part of RGB buffer */ +	       GLint i, j; +	       for (i = 0; i < height; i++) { +		  GLchan *ptr3 = PIXELADDR3(x, (y + i)); +		  for (j = 0; j < width; j++) { +		     PACK_BGR(ptr3, r, g, b); +		     ptr3 += 3; +		  } +	       } +	    } +	 } +	 else {  #if CHAN_TYPE == GL_UNSIGNED_BYTE -         /* 4-byte pixel value */ -         GLuint clearPixel; -         GLchan *clr = (GLchan *) &clearPixel; -         clr[osmesa->rInd] = ctx->Color.ClearColor[0]; -         clr[osmesa->gInd] = ctx->Color.ClearColor[1]; -         clr[osmesa->bInd] = ctx->Color.ClearColor[2]; -         clr[osmesa->aInd] = ctx->Color.ClearColor[3]; -         if (all) { -            /* Clear whole RGBA buffer */ -            const GLuint n = osmesa->rowlength * osmesa->height; -            GLuint *ptr4 = (GLuint *) osmesa->buffer; -            GLuint i; -            if (clearPixel) { -               for (i = 0; i < n; i++) { -                  *ptr4++ = clearPixel; -               } -            } -            else { -               BZERO(ptr4, n * sizeof(GLuint)); -            } -         } -         else { -            /* Clear part of RGBA buffer */ -            GLint i, j; -            for (i = 0; i < height; i++) { -               GLuint *ptr4 = (GLuint *) PIXELADDR4(x, (y + i)); -               for (j = 0; j < width; j++) { -                  *ptr4++ = clearPixel; -               } -            } -         } +	    /* 4-byte pixel value */ +	    GLuint clearPixel; +	    GLchan *clr = (GLchan *) &clearPixel; +	    clr[osmesa->rInd] = ctx->Color.ClearColor[0]; +	    clr[osmesa->gInd] = ctx->Color.ClearColor[1]; +	    clr[osmesa->bInd] = ctx->Color.ClearColor[2]; +	    clr[osmesa->aInd] = ctx->Color.ClearColor[3]; +	    if (all) { +	       /* Clear whole RGBA buffer */ +	       const GLuint n = osmesa->rowlength * osmesa->height; +	       GLuint *ptr4 = (GLuint *) osmesa->buffer; +	       GLuint i; +	       if (clearPixel) { +		  for (i = 0; i < n; i++) { +		     *ptr4++ = clearPixel; +		  } +	       } +	       else { +		  BZERO(ptr4, n * sizeof(GLuint)); +	       } +	    } +	    else { +	       /* Clear part of RGBA buffer */ +	       GLint i, j; +	       for (i = 0; i < height; i++) { +		  GLuint *ptr4 = (GLuint *) PIXELADDR4(x, (y + i)); +		  for (j = 0; j < width; j++) { +		     *ptr4++ = clearPixel; +		  } +	       } +	    }  #else -         const GLchan r = ctx->Color.ClearColor[0]; -         const GLchan g = ctx->Color.ClearColor[1]; -         const GLchan b = ctx->Color.ClearColor[2]; -         const GLchan a = ctx->Color.ClearColor[3]; -         if (all) { -            /* Clear whole RGBA buffer */ -            const GLuint n = osmesa->rowlength * osmesa->height; -            GLchan *p = (GLchan *) osmesa->buffer; -            GLuint i; -            for (i = 0; i < n; i++) { -               PACK_RGBA(p, r, g, b, a); -               p += 4; -            } -         } -         else { -            /* Clear part of RGBA buffer */ -            GLint i, j; -            for (i = 0; i < height; i++) { -               GLchan *p = PIXELADDR4(x, (y + i)); -               for (j = 0; j < width; j++) { -                  PACK_RGBA(p, r, g, b, a); -                  p += 4; -               } -            } -         } +	    const GLchan r = ctx->Color.ClearColor[0]; +	    const GLchan g = ctx->Color.ClearColor[1]; +	    const GLchan b = ctx->Color.ClearColor[2]; +	    const GLchan a = ctx->Color.ClearColor[3]; +	    if (all) { +	       /* Clear whole RGBA buffer */ +	       const GLuint n = osmesa->rowlength * osmesa->height; +	       GLchan *p = (GLchan *) osmesa->buffer; +	       GLuint i; +	       for (i = 0; i < n; i++) { +		  PACK_RGBA(p, r, g, b, a); +		  p += 4; +	       } +	    } +	    else { +	       /* Clear part of RGBA buffer */ +	       GLint i, j; +	       for (i = 0; i < height; i++) { +		  GLchan *p = PIXELADDR4(x, (y + i)); +		  for (j = 0; j < width; j++) { +		     PACK_RGBA(p, r, g, b, a); +		     p += 4; +		  } +	       } +	    }  #endif +	 } +	 mask &= ~DD_FRONT_LEFT_BIT;        }     } -   /* have Mesa clear all other buffers */ -   return mask & (~DD_FRONT_LEFT_BIT); +    +   if (mask) +      _swrast_Clear( ctx, mask, all, x, y, width, height );  } diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c index 7b1fecdd13..f7530d947b 100644 --- a/src/mesa/drivers/x11/xm_dd.c +++ b/src/mesa/drivers/x11/xm_dd.c @@ -1,4 +1,4 @@ -/* $Id: xm_dd.c,v 1.12 2001/01/29 20:47:39 keithw Exp $ */ +/* $Id: xm_dd.c,v 1.13 2001/01/29 20:56:32 keithw Exp $ */  /*   * Mesa 3-D graphics library @@ -739,7 +739,7 @@ clear_nbit_ximage( GLcontext *ctx, GLboolean all, -static GLbitfield +static void  clear_buffers( GLcontext *ctx, GLbitfield mask,                 GLboolean all, GLint x, GLint y, GLint width, GLint height )  { @@ -747,21 +747,19 @@ clear_buffers( GLcontext *ctx, GLbitfield mask,     const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask;     /* we can't handle color or index masking */ -   if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) { -      if (*colorMask != 0xffffffff || ctx->Color.IndexMask != 0xffffffff) -         return mask; +   if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) { +      if (mask & DD_FRONT_LEFT_BIT) { +	 ASSERT(xmesa->xm_buffer->front_clear_func); +	 (*xmesa->xm_buffer->front_clear_func)( ctx, all, x, y, width, height ); +	 mask &= ~DD_FRONT_LEFT_BIT; +      } +      if (mask & DD_BACK_LEFT_BIT) { +	 ASSERT(xmesa->xm_buffer->back_clear_func); +	 (*xmesa->xm_buffer->back_clear_func)( ctx, all, x, y, width, height ); +	 mask &= ~DD_BACK_LEFT_BIT; +      }     } -   if (mask & DD_FRONT_LEFT_BIT) { -      ASSERT(xmesa->xm_buffer->front_clear_func); -      (*xmesa->xm_buffer->front_clear_func)( ctx, all, x, y, width, height ); -      mask &= ~DD_FRONT_LEFT_BIT; -   } -   if (mask & DD_BACK_LEFT_BIT) { -      ASSERT(xmesa->xm_buffer->back_clear_func); -      (*xmesa->xm_buffer->back_clear_func)( ctx, all, x, y, width, height ); -      mask &= ~DD_BACK_LEFT_BIT; -   }     if (mask)        _swrast_Clear( ctx, mask, all, x, y, width, height );  } | 
