[Mesa-dev] [PATCH 1/3] mesa: added _mesa_pack_ubyte_rgba_rect() function
Brian Paul
brian.e.paul at gmail.com
Sun Jan 29 19:32:16 PST 2012
From: Brian Paul <brianp at vmware.com>
---
src/mesa/main/format_pack.c | 42 ++++++++++++++++++++++++++++++++++++++++++
src/mesa/main/format_pack.h | 4 ++++
2 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/src/mesa/main/format_pack.c b/src/mesa/main/format_pack.c
index 85b2c69..ea1d95e 100644
--- a/src/mesa/main/format_pack.c
+++ b/src/mesa/main/format_pack.c
@@ -2050,6 +2050,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
**/
diff --git a/src/mesa/main/format_pack.h b/src/mesa/main/format_pack.h
index f1b4805..20b2ad8 100644
--- a/src/mesa/main/format_pack.h
+++ b/src/mesa/main/format_pack.h
@@ -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,
--
1.7.1
More information about the mesa-dev
mailing list