Mesa (master): swrast: use malloc instead of MAX_WIDTH arrays in glCopyPixels, zoom code
Brian Paul
brianp at kemper.freedesktop.org
Thu Dec 8 17:51:45 UTC 2011
Module: Mesa
Branch: master
Commit: 24e648490921a386fc3f65d1b1ed330067a4bb25
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=24e648490921a386fc3f65d1b1ed330067a4bb25
Author: Brian Paul <brianp at vmware.com>
Date: Mon Dec 5 20:40:48 2011 -0700
swrast: use malloc instead of MAX_WIDTH arrays in glCopyPixels, zoom code
Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
---
src/mesa/swrast/s_copypix.c | 10 +++++++++-
src/mesa/swrast/s_zoom.c | 10 +++++++++-
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/mesa/swrast/s_copypix.c b/src/mesa/swrast/s_copypix.c
index 3ba31f2..3bdf48b 100644
--- a/src/mesa/swrast/s_copypix.c
+++ b/src/mesa/swrast/s_copypix.c
@@ -610,6 +610,7 @@ fast_copy_pixels(struct gl_context *ctx,
struct gl_framebuffer *dstFb = ctx->DrawBuffer;
struct gl_renderbuffer *srcRb, *dstRb;
GLint row, yStep;
+ void *temp;
if (SWRAST_CONTEXT(ctx)->_RasterMask != 0x0 ||
ctx->Pixel.ZoomX != 1.0F ||
@@ -667,14 +668,21 @@ fast_copy_pixels(struct gl_context *ctx,
yStep = 1;
}
+ temp = malloc(width * MAX_PIXEL_BYTES);
+ if (!temp) {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCopyPixels");
+ return GL_FALSE;
+ }
+
for (row = 0; row < height; row++) {
- GLuint temp[MAX_WIDTH][4];
srcRb->GetRow(ctx, srcRb, width, srcX, srcY, temp);
dstRb->PutRow(ctx, dstRb, width, dstX, dstY, temp, NULL);
srcY += yStep;
dstY += yStep;
}
+ free(temp);
+
return GL_TRUE;
}
diff --git a/src/mesa/swrast/s_zoom.c b/src/mesa/swrast/s_zoom.c
index 16bb997..f407fdc 100644
--- a/src/mesa/swrast/s_zoom.c
+++ b/src/mesa/swrast/s_zoom.c
@@ -299,11 +299,17 @@ zoom_span( struct gl_context *ctx, GLint imgX, GLint imgY, const SWspan *span,
* Also, clipping may change the span end value, so store it as well.
*/
const GLint end = zoomed.end; /* save */
- GLuint rgbaSave[MAX_WIDTH][4];
+ void *rgbaSave;
const GLint pixelSize =
(zoomed.array->ChanType == GL_UNSIGNED_BYTE) ? 4 * sizeof(GLubyte) :
((zoomed.array->ChanType == GL_UNSIGNED_SHORT) ? 4 * sizeof(GLushort)
: 4 * sizeof(GLfloat));
+
+ rgbaSave = malloc(zoomed.end * pixelSize);
+ if (!rgbaSave) {
+ return;
+ }
+
if (y1 - y0 > 1) {
memcpy(rgbaSave, zoomed.array->rgba, zoomed.end * pixelSize);
}
@@ -315,6 +321,8 @@ zoom_span( struct gl_context *ctx, GLint imgX, GLint imgY, const SWspan *span,
memcpy(zoomed.array->rgba, rgbaSave, zoomed.end * pixelSize);
}
}
+
+ free(rgbaSave);
}
}
More information about the mesa-commit
mailing list