renamed some vars, added a bunch of comments
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 21 Mar 2001 16:44:08 +0000 (16:44 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 21 Mar 2001 16:44:08 +0000 (16:44 +0000)
src/mesa/main/texstore.c
src/mesa/main/texstore.h
src/mesa/main/texutil.c
src/mesa/main/texutil_tmp.h

index 6ae40c9e80f06e13a80323524af04bf02a7aea8e..3c4a08371c4392b0d0cfbc888ab3764912360cbc 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: texstore.c,v 1.17 2001/03/21 01:08:37 brianp Exp $ */
+/* $Id: texstore.c,v 1.18 2001/03/21 16:44:08 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -156,7 +156,7 @@ components_in_intformat( GLint format )
  */
 void
 _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
-                        GLenum texFormat, GLvoid *texDestAddr,
+                        GLenum texDestFormat, GLvoid *texDestAddr,
                         GLint srcWidth, GLint srcHeight, GLint srcDepth,
                         GLint dstXoffset, GLint dstYoffset, GLint dstZoffset,
                         GLint dstRowStride, GLint dstImageStride,
@@ -180,12 +180,12 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
    ASSERT(srcAddr);
    ASSERT(srcPacking);
 
-   texComponents = components_in_intformat(texFormat);
+   texComponents = components_in_intformat(texDestFormat);
 
    /* try common 2D texture cases first */
    if (!ctx->_ImageTransferState && dimensions == 2 && srcType == CHAN_TYPE) {
 
-      if (srcFormat == texFormat) {
+      if (srcFormat == texDestFormat) {
          /* This will cover the common GL_RGB, GL_RGBA, GL_ALPHA,
           * GL_LUMINANCE_ALPHA, etc. texture formats.  Use memcpy().
           */
@@ -210,7 +210,7 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
          }
          return;  /* all done */
       }
-      else if (srcFormat == GL_RGBA && texFormat == GL_RGB) {
+      else if (srcFormat == GL_RGBA && texDestFormat == GL_RGB) {
          /* commonly used by Quake */
          const GLchan *src = (const GLchan *) _mesa_image_address(
                                    srcPacking, srcAddr, srcWidth, srcHeight,
@@ -239,7 +239,7 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
    /*
     * General case solutions
     */
-   if (texFormat == GL_COLOR_INDEX) {
+   if (texDestFormat == GL_COLOR_INDEX) {
       /* color index texture */
       const GLenum texType = CHAN_TYPE;
       GLint img, row;
@@ -259,7 +259,7 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
          dest += dstImageStride;
       }
    }
-   else if (texFormat == GL_DEPTH_COMPONENT) {
+   else if (texDestFormat == GL_DEPTH_COMPONENT) {
       /* Depth texture (shadow maps) */
       GLint img, row;
       GLubyte *dest = (GLubyte *) texDestAddr
@@ -342,7 +342,7 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
             for (row = 0; row < convHeight; row++) {
                _mesa_pack_float_rgba_span(ctx, convWidth,
                                           (const GLfloat (*)[4]) srcf,
-                                          texFormat, CHAN_TYPE,
+                                          texDestFormat, CHAN_TYPE,
                                           dest, &_mesa_native_packing,
                                           ctx->_ImageTransferState
                                           & IMAGE_POST_CONVOLUTION_BITS);
@@ -368,9 +368,9 @@ _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
                const GLvoid *srcRow = _mesa_image_address(srcPacking,
                                               srcAddr, srcWidth, srcHeight,
                                               srcFormat, srcType, img, row, 0);
-               _mesa_unpack_chan_color_span(ctx, srcWidth, texFormat, destRow,
-                                       srcFormat, srcType, srcRow, srcPacking,
-                                       ctx->_ImageTransferState);
+               _mesa_unpack_chan_color_span(ctx, srcWidth, texDestFormat,
+                                       destRow, srcFormat, srcType, srcRow,
+                                       srcPacking, ctx->_ImageTransferState);
                destRow += dstRowStride;
             }
             dest += dstImageStride;
index 585d44efe9fa42ab3a316c25ed836c6c5463c78d..c78a32703c888843c9e0284129aa608910494dc2 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: texstore.h,v 1.4 2001/03/21 01:08:37 brianp Exp $ */
+/* $Id: texstore.h,v 1.5 2001/03/21 16:44:08 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -39,7 +39,7 @@
 
 extern void
 _mesa_transfer_teximage(GLcontext *ctx, GLuint dimensions,
-                        GLenum texFormat, GLvoid *texDestAddr,
+                        GLenum texDestFormat, GLvoid *texDestAddr,
                         GLint srcWidth, GLint srcHeight, GLint srcDepth,
                         GLint dstXoffset, GLint dstYoffset, GLint dstZoffset,
                         GLint dstRowStride, GLint dstImageStride,
index 217f1e2d6b87230b9851f19ed46a39c2105580dc..033b17912bbde51457147ca098b5f613b89e90f0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: texutil.c,v 1.16 2001/03/18 13:40:58 gareth Exp $ */
+/* $Id: texutil.c,v 1.17 2001/03/21 16:44:08 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -48,8 +48,9 @@ struct gl_texture_convert {
    GLint xoffset, yoffset, zoffset;    /* Subimage offset */
    GLint width, height, depth;         /* Subimage region */
 
-   GLint imageWidth, imageHeight;      /* Full image dimensions */
-   GLenum format, type;
+   GLint dstImageWidth, dstImageHeight;        /* Dest image size */
+                                        /* Needed for subimage replacement */
+   GLenum format, type;                 /* Source (user) format and type */
 
    const struct gl_pixelstore_attrib *packing;
 
@@ -701,11 +702,38 @@ _mesa_convert_texsubimage1d( GLint mesaFormat,
    return gl_convert_texsubimage2d_tab[mesaFormat]( &convert );
 }
 
+
+/*
+ * Convert a user's 2D image into a texture image.  This basically repacks
+ * pixel data into the special texture formats used by core Mesa and the DRI
+ * drivers.  This function can do full images or subimages.
+ *
+ * We return a boolean because this function may not accept some kinds of
+ * source image formats and/or types.  For example, if the incoming
+ * format/type = GL_BGR, GL_UNSIGNED_INT this function probably won't
+ * be able to do the conversion.
+ *
+ * In that case, the incoming image should first be simplified to one of
+ * the "canonical" formats (GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA,
+ * GL_INTENSITY, GL_RGB, GL_RGBA) and types (GL_CHAN).  We can do that
+ * with the _mesa_transfer_teximage() function.  That function will also
+ * do image transfer operations such as scale/bias and convolution.
+ *
+ * Input:
+ *   mesaFormat - one of the MESA_FORMAT_* values from texformat.h
+ *   xoffset, yoffset - position in dest image to put data
+ *   width, height - incoming image size, also size of dest region.
+ *   dstImageWidth - width (row stride) of dest image in pixels
+ *   format, type - incoming image format and type
+ *   packing - describes incoming image packing
+ *   srcImage - pointer to source image
+ *   destImage - pointer to dest image
+ */
 GLboolean
 _mesa_convert_texsubimage2d( GLint mesaFormat,
                             GLint xoffset, GLint yoffset,
                             GLint width, GLint height,
-                            GLint imageWidth,
+                            GLint destImageWidth,
                             GLenum format, GLenum type,
                             const struct gl_pixelstore_attrib *packing,
                             const GLvoid *srcImage, GLvoid *dstImage )
@@ -725,7 +753,7 @@ _mesa_convert_texsubimage2d( GLint mesaFormat,
    convert.yoffset = yoffset;
    convert.width = width;
    convert.height = height;
-   convert.imageWidth = imageWidth;
+   convert.dstImageWidth = destImageWidth;
    convert.format = format;
    convert.type = type;
    convert.packing = packing;
@@ -737,7 +765,7 @@ _mesa_convert_texsubimage2d( GLint mesaFormat,
    if ( convert_needs_packing( packing, format, type ) )
       convert.index |= CONVERT_PACKING_BIT;
 
-   if ( width != imageWidth )
+   if ( width != destImageWidth )
       convert.index |= CONVERT_STRIDE_BIT;
 
    return gl_convert_texsubimage2d_tab[mesaFormat]( &convert );
@@ -747,7 +775,7 @@ GLboolean
 _mesa_convert_texsubimage3d( GLint mesaFormat,
                             GLint xoffset, GLint yoffset, GLint zoffset,
                             GLint width, GLint height, GLint depth,
-                            GLint imageWidth, GLint imageHeight,
+                            GLint dstImageWidth, GLint dstImageHeight,
                             GLenum format, GLenum type,
                             const struct gl_pixelstore_attrib *packing,
                             const GLvoid *srcImage, GLvoid *dstImage )
@@ -769,8 +797,8 @@ _mesa_convert_texsubimage3d( GLint mesaFormat,
    convert.width = width;
    convert.height = height;
    convert.depth = depth;
-   convert.imageWidth = imageWidth;
-   convert.imageHeight = imageHeight;
+   convert.dstImageWidth = dstImageWidth;
+   convert.dstImageHeight = dstImageHeight;
    convert.format = format;
    convert.type = type;
    convert.packing = packing;
@@ -782,7 +810,7 @@ _mesa_convert_texsubimage3d( GLint mesaFormat,
    if ( convert_needs_packing( packing, format, type ) )
       convert.index |= CONVERT_PACKING_BIT;
 
-   if ( width != imageWidth || height != imageHeight )
+   if ( width != dstImageWidth || height != dstImageHeight )
       convert.index |= CONVERT_STRIDE_BIT;
 
    return gl_convert_texsubimage3d_tab[mesaFormat]( &convert );
index 6a1f002fc8acb525448fe10703c17ec4c96e0062..4d55e86414fba6c67fbcba5c883db8b6f8a368bb 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: texutil_tmp.h,v 1.4 2001/03/20 10:18:13 joukj Exp $ */
+/* $Id: texutil_tmp.h,v 1.5 2001/03/21 16:44:08 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
 
 #define DST_TEXEL_BYTES                (4 / DST_TEXELS_PER_DWORD)
 #define DST_ROW_WIDTH          (convert->width * DST_TEXEL_BYTES)
-#define DST_ROW_STRIDE         (convert->imageWidth * DST_TEXEL_BYTES)
-#define DST_IMG_STRIDE         (convert->imageWidth *                  \
-                                convert->imageHeight * DST_TEXEL_BYTES)
+#define DST_ROW_STRIDE         (convert->dstImageWidth * DST_TEXEL_BYTES)
+#define DST_IMG_STRIDE         (convert->dstImageWidth *               \
+                                convert->dstImageHeight * DST_TEXEL_BYTES)
 
 
 /* ================================================================
- * PRE: No pixelstore attribs, width == imageWidth.
+ * PRE: No pixelstore attribs, width == dstImageWidth.
  */
 static GLboolean
 TAG(texsubimage2d)( struct gl_texture_convert *convert )
 {
    const GLubyte *src = (const GLubyte *)convert->srcImage;
    GLuint *dst = (GLuint *)((GLubyte *)convert->dstImage +
-                           (convert->yoffset * convert->imageWidth +
+                           (convert->yoffset * convert->dstImageWidth +
                             convert->xoffset) * DST_TEXEL_BYTES);
    GLint dwords, i;
    (void) dwords; (void) i;
@@ -73,7 +73,7 @@ TAG(texsubimage2d)( struct gl_texture_convert *convert )
    return GL_TRUE;
 }
 
-/* PRE: As above, height == imageHeight also.
+/* PRE: As above, height == dstImageHeight also.
  */
 static GLboolean
 TAG(texsubimage3d)( struct gl_texture_convert *convert )
@@ -107,25 +107,25 @@ TAG(texsubimage3d)( struct gl_texture_convert *convert )
 
 
 /* ================================================================
- * PRE: No pixelstore attribs, width != imageWidth.
+ * PRE: No pixelstore attribs, width != dstImageWidth.
  */
 static GLboolean
 TAG(texsubimage2d_stride)( struct gl_texture_convert *convert )
 {
    const GLubyte *src = (const GLubyte *)convert->srcImage;
    DST_TYPE *dst = (DST_TYPE *)((GLubyte *)convert->dstImage +
-                               (convert->yoffset * convert->imageWidth +
+                               (convert->yoffset * convert->dstImageWidth +
                                 convert->xoffset) * DST_TEXEL_BYTES);
    GLint adjust;
    GLint row, col;
 
-   adjust = convert->imageWidth - convert->width;
+   adjust = convert->dstImageWidth - convert->width;
 
    if ( DBG ) {
       fprintf( stderr, __FUNCTION__ ":\n" );
       fprintf( stderr, "   x=%d y=%d w=%d h=%d s=%d\n",
               convert->xoffset, convert->yoffset, convert->width,
-              convert->height, convert->imageWidth );
+              convert->height, convert->dstImageWidth );
       fprintf( stderr, "   adjust=%d\n", adjust );
    }
 
@@ -140,26 +140,26 @@ TAG(texsubimage2d_stride)( struct gl_texture_convert *convert )
    return GL_TRUE;
 }
 
-/* PRE: As above, or height != imageHeight also.
+/* PRE: As above, or height != dstImageHeight also.
  */
 static GLboolean
 TAG(texsubimage3d_stride)( struct gl_texture_convert *convert )
 {
    const GLubyte *src = (const GLubyte *)convert->srcImage;
    DST_TYPE *dst = (DST_TYPE *)((GLubyte *)convert->dstImage +
-                               ((convert->zoffset * convert->imageHeight +
-                                 convert->yoffset) * convert->imageWidth +
+                               ((convert->zoffset * convert->dstImageHeight +
+                                 convert->yoffset) * convert->dstImageWidth +
                                 convert->xoffset) * DST_TEXEL_BYTES);
    GLint adjust;
    GLint row, col, img;
 
-   adjust = convert->imageWidth - convert->width;
+   adjust = convert->dstImageWidth - convert->width;
 
    if ( DBG ) {
       fprintf( stderr, __FUNCTION__ ":\n" );
       fprintf( stderr, "   x=%d y=%d w=%d h=%d s=%d\n",
               convert->xoffset, convert->yoffset, convert->width,
-              convert->height, convert->imageWidth );
+              convert->height, convert->dstImageWidth );
       fprintf( stderr, "   adjust=%d\n", adjust );
    }
 
@@ -180,7 +180,7 @@ TAG(texsubimage3d_stride)( struct gl_texture_convert *convert )
 
 
 /* ================================================================
- * PRE: Require pixelstore attribs, width == imageWidth.
+ * PRE: Require pixelstore attribs, width == dstImageWidth.
  */
 static GLboolean
 TAG(texsubimage2d_pack)( struct gl_texture_convert *convert )
@@ -223,7 +223,7 @@ TAG(texsubimage2d_pack)( struct gl_texture_convert *convert )
    return GL_TRUE;
 }
 
-/* PRE: as above, height == imageHeight also.
+/* PRE: as above, height == dstImageHeight also.
  */
 static GLboolean
 TAG(texsubimage3d_pack)( struct gl_texture_convert *convert )
@@ -272,7 +272,7 @@ TAG(texsubimage3d_pack)( struct gl_texture_convert *convert )
 
 
 /* ================================================================
- * PRE: Require pixelstore attribs, width != imageWidth.
+ * PRE: Require pixelstore attribs, width != dstImageWidth.
  */
 static GLboolean
 TAG(texsubimage2d_stride_pack)( struct gl_texture_convert *convert )
@@ -285,19 +285,19 @@ TAG(texsubimage2d_stride_pack)( struct gl_texture_convert *convert )
       _mesa_image_row_stride( convert->packing, convert->width,
                              convert->format, convert->type );
    DST_TYPE *dst = (DST_TYPE *)((GLubyte *)convert->dstImage +
-                               (convert->yoffset * convert->imageWidth +
+                               (convert->yoffset * convert->dstImageWidth +
                                 convert->xoffset) * DST_TEXEL_BYTES);
    GLint adjust;
    GLint row, col;
    (void) col;
 
-   adjust = convert->imageWidth - convert->width;
+   adjust = convert->dstImageWidth - convert->width;
 
    if ( DBG ) {
       fprintf( stderr, __FUNCTION__ ":\n" );
       fprintf( stderr, "   x=%d y=%d w=%d h=%d s=%d\n",
               convert->xoffset, convert->yoffset, convert->width,
-              convert->height, convert->imageWidth );
+              convert->height, convert->dstImageWidth );
       fprintf( stderr, "   adjust=%d\n", adjust );
    }
 
@@ -305,7 +305,7 @@ TAG(texsubimage2d_stride_pack)( struct gl_texture_convert *convert )
 #ifdef CONVERT_DIRECT
       MEMCPY( dst, src, DST_ROW_WIDTH );
       src += srcRowStride;
-      dst += convert->imageWidth;
+      dst += convert->dstImageWidth;
 #else
       const GLubyte *srcRow = src;
       for ( col = 0 ; col < convert->width ; col++ ) {
@@ -320,7 +320,7 @@ TAG(texsubimage2d_stride_pack)( struct gl_texture_convert *convert )
    return GL_TRUE;
 }
 
-/* PRE: As above, or height != imageHeight also.
+/* PRE: As above, or height != dstImageHeight also.
  */
 static GLboolean
 TAG(texsubimage3d_stride_pack)( struct gl_texture_convert *convert )
@@ -333,20 +333,20 @@ TAG(texsubimage3d_stride_pack)( struct gl_texture_convert *convert )
       _mesa_image_row_stride( convert->packing, convert->width,
                              convert->format, convert->type );
    DST_TYPE *dst = (DST_TYPE *)((GLubyte *)convert->dstImage +
-                               ((convert->zoffset * convert->imageHeight +
-                                 convert->yoffset) * convert->imageWidth +
+                               ((convert->zoffset * convert->dstImageHeight +
+                                 convert->yoffset) * convert->dstImageWidth +
                                 convert->xoffset) * DST_TEXEL_BYTES);
    GLint adjust;
    GLint row, col, img;
    (void) col;
 
-   adjust = convert->imageWidth - convert->width;
+   adjust = convert->dstImageWidth - convert->width;
 
    if ( DBG ) {
       fprintf( stderr, __FUNCTION__ ":\n" );
       fprintf( stderr, "   x=%d y=%d w=%d h=%d s=%d\n",
               convert->xoffset, convert->yoffset, convert->width,
-              convert->height, convert->imageWidth );
+              convert->height, convert->dstImageWidth );
       fprintf( stderr, "   adjust=%d\n", adjust );
    }
 
@@ -355,7 +355,7 @@ TAG(texsubimage3d_stride_pack)( struct gl_texture_convert *convert )
 #ifdef CONVERT_DIRECT
         MEMCPY( dst, src, DST_ROW_WIDTH );
         src += srcRowStride;
-        dst += convert->imageWidth;
+        dst += convert->dstImageWidth;
 #else
         const GLubyte *srcRow = src;
         for ( col = 0 ; col < convert->width ; col++ ) {