added _mesa_image_row_stride()
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 21 Mar 2000 00:48:53 +0000 (00:48 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 21 Mar 2000 00:48:53 +0000 (00:48 +0000)
src/mesa/main/image.c
src/mesa/main/image.h

index b1f64fb..9869d8c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: image.c,v 1.20 2000/03/19 01:10:12 brianp Exp $ */
+/* $Id: image.c,v 1.21 2000/03/21 00:48:53 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -490,6 +490,44 @@ GLvoid *gl_pixel_addr_in_image( const struct gl_pixelstore_attrib *packing,
 
 
 /*
+ * Compute the stride between image rows (in bytes) for the given
+ * pixel packing parameters and image width, format and type.
+ */
+GLint
+_mesa_image_row_stride( const struct gl_pixelstore_attrib *packing,
+                        GLint width, GLenum format, GLenum type )
+{
+   ASSERT(packing);
+   if (type == GL_BITMAP) {
+      /* BITMAP data */
+      if (packing->RowLength == 0) {
+         GLint bytes = (width + 7) / 8;
+         return bytes;
+      }
+      else {
+         GLint bytes = (packing->RowLength + 7) / 8;
+         return bytes;
+      }
+   }
+   else {
+      /* Non-BITMAP data */
+      const GLint bytesPerPixel = gl_bytes_per_pixel(format, type);
+      if (bytesPerPixel <= 0)
+         return -1;  /* error */
+      if (packing->RowLength == 0) {
+         GLint bytes = bytesPerPixel * width;
+         return bytes;
+      }
+      else {
+         GLint bytes = bytesPerPixel * packing->RowLength;
+         return bytes;
+      }
+   }
+}
+
+
+
+/*
  * Unpack a 32x32 pixel polygon stipple from user memory using the
  * current pixel unpack settings.
  */
index 252363c..7582139 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: image.h,v 1.4 2000/03/13 18:31:51 brianp Exp $ */
+/* $Id: image.h,v 1.5 2000/03/21 00:48:53 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -61,6 +61,11 @@ gl_pixel_addr_in_image( const struct gl_pixelstore_attrib *packing,
                         GLint img, GLint row, GLint column );
 
 
+extern GLint
+_mesa_image_row_stride( const struct gl_pixelstore_attrib *packing,
+                        GLint width, GLenum format, GLenum type );
+
+
 extern void
 _mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32],
                               const struct gl_pixelstore_attrib *unpacking );