lots of little clean-ups, improvements
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 16 Sep 2005 21:07:48 +0000 (21:07 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 16 Sep 2005 21:07:48 +0000 (21:07 +0000)
src/mesa/swrast/s_readpix.c

index 61ad2c252ea51f9fd4921000709defc166f6763f..07e24d6caeb8cfd49614849b425dd246e755ae6a 100644 (file)
@@ -52,10 +52,7 @@ read_index_pixels( GLcontext *ctx,
                    const struct gl_pixelstore_attrib *packing )
 {
    struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
-   /*
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   */
-   GLint i, readWidth;
+   GLint i;
 
    /* error checking */
    if (ctx->Visual.rgbMode) {
@@ -74,20 +71,24 @@ read_index_pixels( GLcontext *ctx,
       return;
    }
 
-   /* XXX: width should never be > MAX_WIDTH since we did clipping earlier */
-   readWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
+   if (!rb) {
+      return;  /* no readbuffer OK */
+   }
+
+   /* width should never be > MAX_WIDTH since we did clipping earlier */
+   ASSERT(width <= MAX_WIDTH);
 
    /* process image row by row */
    for (i = 0; i < height; i++) {
       GLuint index[MAX_WIDTH];
       GLvoid *dest;
       ASSERT(rb->DataType == GL_UNSIGNED_INT);
-      rb->GetRow(ctx, rb, readWidth, x, y + i, index);
+      rb->GetRow(ctx, rb, width, x, y + i, index);
 
       dest = _mesa_image_address2d(packing, pixels, width, height,
                                    GL_COLOR_INDEX, type, i, 0);
 
-      _mesa_pack_index_span(ctx, readWidth, type, dest, index,
+      _mesa_pack_index_span(ctx, width, type, dest, index,
                             &ctx->Pack, ctx->_ImageTransferState);
    }
 }
@@ -106,13 +107,15 @@ read_depth_pixels( GLcontext *ctx,
 {
    struct gl_renderbuffer *rb
       = ctx->ReadBuffer->Attachment[BUFFER_DEPTH].Renderbuffer;
-   GLint readWidth;
    GLboolean bias_or_scale;
 
-   if (!rb) {
-      /* no readbuffer - OK */
-      return;
-   }
+   /* clipping should have been done already */
+   ASSERT(x >= 0);
+   ASSERT(y >= 0);
+   ASSERT(x + width <= rb->Width);
+   ASSERT(y + height <= rb->Height);
+   /* width should never be > MAX_WIDTH since we did clipping earlier */
+   ASSERT(width <= MAX_WIDTH);
 
    /* Error checking */
    if (ctx->Visual.depthBits <= 0) {
@@ -132,48 +135,49 @@ read_depth_pixels( GLcontext *ctx,
       return;
    }
 
-   /* XXX: width should never be > MAX_WIDTH since we did clipping earlier */
-   readWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
+   if (!rb) {
+      return;  /* no readbuffer OK */
+   }
 
-   bias_or_scale = ctx->Pixel.DepthBias!=0.0 || ctx->Pixel.DepthScale!=1.0;
+   bias_or_scale = ctx->Pixel.DepthBias != 0.0 || ctx->Pixel.DepthScale != 1.0;
 
-   if (type==GL_UNSIGNED_SHORT && ctx->Visual.depthBits == 16
+   if (type == GL_UNSIGNED_SHORT && ctx->Visual.depthBits == 16
        && !bias_or_scale && !packing->SwapBytes) {
       /* Special case: directly read 16-bit unsigned depth values. */
       GLint j;
-      for (j=0;j<height;j++,y++) {
-         GLdepth depth[MAX_WIDTH];
-         GLushort *dst = (GLushort*) _mesa_image_address2d(packing, pixels,
-                                width, height, GL_DEPTH_COMPONENT, type, j, 0);
-         GLint i;
-         _swrast_read_depth_span(ctx, rb, width, x, y, depth);
-         for (i = 0; i < width; i++)
-            dst[i] = depth[i];
+      ASSERT(rb->InternalFormat == GL_DEPTH_COMPONENT16);
+      ASSERT(rb->DataType == GL_UNSIGNED_SHORT);
+      for (j = 0; j < height; j++, y++) {
+         void *dest =_mesa_image_address2d(packing, pixels, width, height,
+                                           GL_DEPTH_COMPONENT, type, j, 0);
+         rb->GetRow(ctx, rb, width, x, y, dest);
       }
    }
-   else if (type==GL_UNSIGNED_INT && ctx->Visual.depthBits == 32
+   else if (type == GL_UNSIGNED_INT && ctx->Visual.depthBits == 32
             && !bias_or_scale && !packing->SwapBytes) {
       /* Special case: directly read 32-bit unsigned depth values. */
       GLint j;
-      for (j=0;j<height;j++,y++) {
-         GLdepth *dst = (GLdepth *) _mesa_image_address2d(packing, pixels,
-                                width, height, GL_DEPTH_COMPONENT, type, j, 0);
-         _swrast_read_depth_span(ctx, rb, width, x, y, dst);
+      ASSERT(rb->InternalFormat == GL_DEPTH_COMPONENT32);
+      ASSERT(rb->DataType == GL_UNSIGNED_INT);
+      for (j = 0; j < height; j++, y++) {
+         void *dest = _mesa_image_address2d(packing, pixels, width, height,
+                                            GL_DEPTH_COMPONENT, type, j, 0);
+         rb->GetRow(ctx, rb, width, x, y, dest);
       }
    }
    else {
       /* General case (slower) */
       GLint j;
-      for (j=0;j<height;j++,y++) {
+      for (j = 0; j < height; j++, y++) {
          GLfloat depth[MAX_WIDTH];
          GLvoid *dest;
 
-         _swrast_read_depth_span_float(ctx, rb, readWidth, x, y, depth);
+         _swrast_read_depth_span_float(ctx, rb, width, x, y, depth);
 
          dest = _mesa_image_address2d(packing, pixels, width, height,
                                       GL_DEPTH_COMPONENT, type, j, 0);
 
-         _mesa_pack_depth_span(ctx, readWidth, (GLdepth *) dest, type,
+         _mesa_pack_depth_span(ctx, width, (GLdepth *) dest, type,
                                depth, packing);
       }
    }
@@ -192,7 +196,7 @@ read_stencil_pixels( GLcontext *ctx,
 {
    struct gl_renderbuffer *rb
       = ctx->ReadBuffer->Attachment[BUFFER_STENCIL].Renderbuffer;
-   GLint j, readWidth;
+   GLint j;
 
    if (!rb) {
       /* no readbuffer - OK */
@@ -217,20 +221,20 @@ read_stencil_pixels( GLcontext *ctx,
       return;
    }
 
-   /* XXX: width should never be > MAX_WIDTH since we did clipping earlier */
-   readWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
+   /* width should never be > MAX_WIDTH since we did clipping earlier */
+   ASSERT(width <= MAX_WIDTH);
 
    /* process image row by row */
    for (j=0;j<height;j++,y++) {
       GLvoid *dest;
       GLstencil stencil[MAX_WIDTH];
 
-      _swrast_read_stencil_span(ctx, rb, readWidth, x, y, stencil);
+      _swrast_read_stencil_span(ctx, rb, width, x, y, stencil);
 
       dest = _mesa_image_address2d(packing, pixels, width, height,
                                    GL_STENCIL_INDEX, type, j, 0);
 
-      _mesa_pack_stencil_span(ctx, readWidth, type, dest, stencil, packing);
+      _mesa_pack_stencil_span(ctx, width, type, dest, stencil, packing);
    }
 }
 
@@ -250,6 +254,7 @@ read_fast_rgba_pixels( GLcontext *ctx,
                        const struct gl_pixelstore_attrib *packing )
 {
    struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
+
    /* can't do scale, bias, mapping, etc */
    if (ctx->_ImageTransferState)
        return GL_FALSE;
@@ -324,10 +329,6 @@ read_rgba_pixels( GLcontext *ctx,
                   const struct gl_pixelstore_attrib *packing )
 {
    struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
-   /*
-   SWcontext *swrast = SWRAST_CONTEXT(ctx);
-   */
-   GLint readWidth;
 
    if (!rb) {
       /* No readbuffer is OK with GL_EXT_framebuffer_object */
@@ -380,9 +381,8 @@ read_rgba_pixels( GLcontext *ctx,
       return; /* done! */
    }
 
-   /* XXX: width should never be > MAX_WIDTH since we did clipping earlier */
-   readWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
-
+   /* width should never be > MAX_WIDTH since we did clipping earlier */
+   ASSERT(width <= MAX_WIDTH);
 
    if (ctx->Pixel.Convolution2DEnabled || ctx->Pixel.Separable2DEnabled) {
       const GLuint transferOps = ctx->_ImageTransferState;
@@ -406,18 +406,18 @@ read_rgba_pixels( GLcontext *ctx,
       for (row = 0; row < height; row++, y++) {
          GLchan rgba[MAX_WIDTH][4];
          if (ctx->Visual.rgbMode) {
-            _swrast_read_rgba_span(ctx, rb, readWidth, x, y, rgba);
+            _swrast_read_rgba_span(ctx, rb, width, x, y, rgba);
          }
          else {
             GLuint index[MAX_WIDTH];
             ASSERT(rb->DataType == GL_UNSIGNED_INT);
-            rb->GetRow(ctx, rb, readWidth, x, y, index);
+            rb->GetRow(ctx, rb, width, x, y, index);
             if (ctx->Pixel.IndexShift != 0 || ctx->Pixel.IndexOffset !=0 ) {
-               _mesa_map_ci(ctx, readWidth, index);
+               _mesa_map_ci(ctx, width, index);
             }
-            _mesa_map_ci_to_rgba_chan(ctx, readWidth, index, rgba);
+            _mesa_map_ci_to_rgba_chan(ctx, width, index, rgba);
          }
-         _mesa_pack_rgba_span_chan(ctx, readWidth, (const GLchan (*)[4]) rgba,
+         _mesa_pack_rgba_span_chan(ctx, width, (const GLchan (*)[4]) rgba,
                               GL_RGBA, GL_FLOAT, dest, &ctx->DefaultPacking,
                               transferOps & IMAGE_PRE_CONVOLUTION_BITS);
          dest += width * 4;
@@ -425,11 +425,11 @@ read_rgba_pixels( GLcontext *ctx,
 
       /* do convolution */
       if (ctx->Pixel.Convolution2DEnabled) {
-         _mesa_convolve_2d_image(ctx, &readWidth, &height, tmpImage, convImage);
+         _mesa_convolve_2d_image(ctx, &width, &height, tmpImage, convImage);
       }
       else {
          ASSERT(ctx->Pixel.Separable2DEnabled);
-         _mesa_convolve_sep_image(ctx, &readWidth, &height, tmpImage, convImage);
+         _mesa_convolve_sep_image(ctx, &width, &height, tmpImage, convImage);
       }
       _mesa_free(tmpImage);
 
@@ -437,13 +437,13 @@ read_rgba_pixels( GLcontext *ctx,
       src = convImage;
       for (row = 0; row < height; row++) {
          GLvoid *dest;
-         dest = _mesa_image_address2d(packing, pixels, readWidth, height,
+         dest = _mesa_image_address2d(packing, pixels, width, height,
                                       format, type, row, 0);
-         _mesa_pack_rgba_span_float(ctx, readWidth,
+         _mesa_pack_rgba_span_float(ctx, width,
                                     (const GLfloat (*)[4]) src,
                                     format, type, dest, packing,
                                     transferOps & IMAGE_POST_CONVOLUTION_BITS);
-         src += readWidth * 4;
+         src += width * 4;
       }
    }
    else {
@@ -453,16 +453,16 @@ read_rgba_pixels( GLcontext *ctx,
          GLchan rgba[MAX_WIDTH][4];
          GLvoid *dst;
          if (ctx->Visual.rgbMode) {
-            _swrast_read_rgba_span(ctx, rb, readWidth, x, y, rgba);
+            _swrast_read_rgba_span(ctx, rb, width, x, y, rgba);
          }
          else {
             GLuint index[MAX_WIDTH];
             ASSERT(rb->DataType == GL_UNSIGNED_INT);
-            rb->GetRow(ctx, rb, readWidth, x, y, index);
+            rb->GetRow(ctx, rb, width, x, y, index);
             if (ctx->Pixel.IndexShift != 0 || ctx->Pixel.IndexOffset != 0) {
-               _mesa_map_ci(ctx, readWidth, index);
+               _mesa_map_ci(ctx, width, index);
             }
-            _mesa_map_ci_to_rgba_chan(ctx, readWidth, index, rgba);
+            _mesa_map_ci_to_rgba_chan(ctx, width, index, rgba);
          }
          dst = _mesa_image_address2d(packing, pixels, width, height,
                                      format, type, row, 0);
@@ -474,16 +474,16 @@ read_rgba_pixels( GLcontext *ctx,
              * buffers, for example.
              */
             GLfloat rgbaf[MAX_WIDTH][4];
-            _mesa_chan_to_float_span(ctx, readWidth,
+            _mesa_chan_to_float_span(ctx, width,
                                      (CONST GLchan (*)[4]) rgba, rgbaf);
-            _mesa_pack_rgba_span_float(ctx, readWidth,
+            _mesa_pack_rgba_span_float(ctx, width,
                                        (CONST GLfloat (*)[4]) rgbaf,
                                        format, type, dst, packing,
                                        ctx->_ImageTransferState);
          }
          else {
             /* GLubytes are fine */
-            _mesa_pack_rgba_span_chan(ctx, readWidth, (CONST GLchan (*)[4]) rgba,
+            _mesa_pack_rgba_span_chan(ctx, width, (CONST GLchan (*)[4]) rgba,
                                  format, type, dst, packing,
                                  ctx->_ImageTransferState);
          }
@@ -546,7 +546,7 @@ _swrast_ReadPixels( GLcontext *ctx,
                            &clippedPacking);
         break;
       case GL_STENCIL_INDEX:
-        read_stencil_pixels(ctx, x,y, width,height, type, pixels,
+        read_stencil_pixels(ctx, x, y, width, height, type, pixels,
                              &clippedPacking);
          break;
       case GL_DEPTH_COMPONENT: