mesa: added _mesa_pack_ubyte_rgba_rect()

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Brian Paul
2012-01-29 19:47:37 -07:00
parent ff2497dca3
commit 66940ad2d7
2 changed files with 46 additions and 0 deletions
+42
View File
@@ -2049,6 +2049,48 @@ _mesa_pack_ubyte_rgba_row(gl_format format, GLuint n,
}
/**
* Pack a 2D image of ubyte RGBA pixels in the given format.
* \param srcRowStride source image row stride in bytes
* \param dstRowStride destination image row stride in bytes
*/
void
_mesa_pack_ubyte_rgba_rect(gl_format format, GLuint width, GLuint height,
const GLubyte *src, GLint srcRowStride,
void *dst, GLint dstRowStride)
{
pack_ubyte_rgba_row_func packrow = get_pack_ubyte_rgba_row_function(format);
GLubyte *dstUB = (GLubyte *) dst;
GLuint i;
if (packrow) {
if (srcRowStride == width * 4 * sizeof(GLubyte) &&
dstRowStride == _mesa_format_row_stride(format, width)) {
/* do whole image at once */
packrow(width * height, (const GLubyte (*)[4]) src, dst);
}
else {
/* row by row */
for (i = 0; i < height; i++) {
packrow(width, (const GLubyte (*)[4]) src, dstUB);
src += srcRowStride;
dstUB += dstRowStride;
}
}
}
else {
/* slower fallback */
for (i = 0; i < height; i++) {
_mesa_pack_ubyte_rgba_row(format, width,
(const GLubyte (*)[4]) src, dstUB);
src += srcRowStride;
dstUB += dstRowStride;
}
}
}
/**
** Pack float Z pixels
**/
+4
View File
@@ -77,6 +77,10 @@ _mesa_pack_ubyte_rgba_row(gl_format format, GLuint n,
const GLubyte src[][4], void *dst);
extern void
_mesa_pack_ubyte_rgba_rect(gl_format format, GLuint width, GLuint height,
const GLubyte *src, GLint srcRowStride,
void *dst, GLint dstRowStride);
extern void
_mesa_pack_float_z_row(gl_format format, GLuint n,