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 +++++++++++++++++++++++++++++++++++++++- src/mesa/main/image.h | 7 ++++++- 2 files changed, 45 insertions(+), 2 deletions(-) (limited to 'src/mesa/main') 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. 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 ); -- cgit v1.2.3