summaryrefslogtreecommitdiff
path: root/src/mesa/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/image.c40
-rw-r--r--src/mesa/main/image.h7
2 files changed, 45 insertions, 2 deletions
diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
index b1f64fb3fd..9869d8cf94 100644
--- a/src/mesa/main/image.c
+++ b/src/mesa/main/image.c
@@ -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.
*/
diff --git a/src/mesa/main/image.h b/src/mesa/main/image.h
index 252363c8da..758213995d 100644
--- a/src/mesa/main/image.h
+++ b/src/mesa/main/image.h
@@ -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 );