From ae40595b6943d41dfad0e9b500d5db70b2ad8c6e Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 21 Mar 2000 00:48:53 +0000 Subject: added _mesa_image_row_stride() --- src/mesa/main/image.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'src/mesa/main/image.c') 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 @@ -489,6 +489,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. -- cgit v1.2.3