summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2002-03-13 04:34:32 +0000
committerBrian Paul <[email protected]>2002-03-13 04:34:32 +0000
commitd488af5b34e390a9b81dac96053bd45f34ffffff (patch)
tree760f31b9c03c4671b8a2179344cfb4420de4f29f /src
parent9a888bdc2a40fd329cbc68de1c465228a5c3887c (diff)
added _mesa_image_image_stride()
Diffstat (limited to 'src')
-rw-r--r--src/mesa/main/image.c46
-rw-r--r--src/mesa/main/image.h11
2 files changed, 51 insertions, 6 deletions
diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
index d99d908509f..1d779ea82bd 100644
--- a/src/mesa/main/image.c
+++ b/src/mesa/main/image.c
@@ -1,10 +1,10 @@
-/* $Id: image.c,v 1.63 2001/07/14 17:53:04 brianp Exp $ */
+/* $Id: image.c,v 1.64 2002/03/13 04:34:32 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.5
+ * Version: 4.1
*
- * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -545,6 +545,46 @@ _mesa_image_row_stride( const struct gl_pixelstore_attrib *packing,
/*
+ * Compute the stride between images in a 3D texture (in bytes) for the given
+ * pixel packing parameters and image width, format and type.
+ */
+GLint
+_mesa_image_image_stride( const struct gl_pixelstore_attrib *packing,
+ GLint width, GLint height,
+ GLenum format, GLenum type )
+{
+ ASSERT(packing);
+ ASSERT(type != GL_BITMAP);
+
+ {
+ const GLint bytesPerPixel = _mesa_bytes_per_pixel(format, type);
+ GLint bytesPerRow, bytesPerImage, remainder;
+
+ if (bytesPerPixel <= 0)
+ return -1; /* error */
+ if (packing->RowLength == 0) {
+ bytesPerRow = bytesPerPixel * width;
+ }
+ else {
+ bytesPerRow = bytesPerPixel * packing->RowLength;
+ }
+ remainder = bytesPerRow % packing->Alignment;
+ if (remainder > 0)
+ bytesPerRow += (packing->Alignment - remainder);
+
+ if (packing->ImageHeight == 0)
+ bytesPerImage = bytesPerRow * height;
+ else
+ bytesPerImage = bytesPerRow * packing->ImageHeight;
+
+ return bytesPerImage;
+ }
+}
+
+
+
+
+/*
* 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 12376f1d2f0..4b5d7caba02 100644
--- a/src/mesa/main/image.h
+++ b/src/mesa/main/image.h
@@ -1,10 +1,10 @@
-/* $Id: image.h,v 1.17 2001/03/07 05:06:12 brianp Exp $ */
+/* $Id: image.h,v 1.18 2002/03/13 04:34:32 brianp Exp $ */
/*
* Mesa 3-D graphics library
- * Version: 3.5
+ * Version: 4.1
*
- * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -69,6 +69,11 @@ _mesa_image_row_stride( const struct gl_pixelstore_attrib *packing,
GLint width, GLenum format, GLenum type );
+extern GLint
+_mesa_image_image_stride( const struct gl_pixelstore_attrib *packing,
+ GLint width, GLint height,
+ GLenum format, GLenum type );
+
extern void
_mesa_unpack_polygon_stipple( const GLubyte *pattern, GLuint dest[32],
const struct gl_pixelstore_attrib *unpacking );