(svn r11079) -Fix: dirty fix to allow big-screenshots with 32bpp-anim
authortruelight
Sun, 09 Sep 2007 23:47:55 +0000
changeset 8050 8c907fdd9d37
parent 8049 00faaf0c0b52
child 8051 ec4e97b7b70c
(svn r11079) -Fix: dirty fix to allow big-screenshots with 32bpp-anim
src/blitter/32bpp_anim.cpp
--- a/src/blitter/32bpp_anim.cpp	Sun Sep 09 23:16:01 2007 +0000
+++ b/src/blitter/32bpp_anim.cpp	Sun Sep 09 23:47:55 2007 +0000
@@ -12,7 +12,7 @@
 {
 	const SpriteLoader::CommonPixel *src, *src_line;
 	uint32 *dst, *dst_line;
-	uint8 *anim, *anim_line;
+	uint8 *anim, *anim_line, *anim_end;
 
 	if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) {
 		/* The size of the screen changed; we can assume we can wipe all data from our buffer */
@@ -21,6 +21,7 @@
 		this->anim_buf_width = _screen.width;
 		this->anim_buf_height = _screen.height;
 	}
+	anim_end = this->anim_buf + this->anim_buf_width + this->anim_buf_height * this->anim_buf_width;
 
 	/* Find where to start reading in the source sprite */
 	src_line = (const SpriteLoader::CommonPixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
@@ -44,7 +45,7 @@
 
 				dst  += skip;
 				/* Make sure the anim-buffer is cleared */
-				memset(anim, 0, skip);
+				if (anim < anim_end) memset(anim, 0, skip);
 				anim += skip;
 				x    += skip - 1;
 				src  += ScaleByZoom(1, zoom) * skip;
@@ -56,11 +57,11 @@
 					/* In case the m-channel is zero, do not remap this pixel in any way */
 					if (src->m == 0) {
 						*dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
-						*anim = 0;
+						if (anim < anim_end) *anim = 0;
 					} else {
 						if (bp->remap[src->m] != 0) {
 							*dst = ComposeColourPA(this->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
-							*anim = bp->remap[src->m];
+							if (anim < anim_end) *anim = bp->remap[src->m];
 						}
 					}
 					break;
@@ -72,14 +73,14 @@
 
 					/* Make the current color a bit more black, so it looks like this image is transparent */
 					*dst = MakeTransparent(*dst, 192);
-					*anim = bp->remap[*anim];
+					if (anim < anim_end) *anim = bp->remap[*anim];
 					break;
 
 				default:
 					/* Above 217 is palette animation */
 					if (src->m >= 217) *dst = ComposeColourPA(this->LookupColourInPalette(src->m), src->a, *dst);
 					else               *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
-					*anim = src->m;
+					if (anim < anim_end) *anim = src->m;
 					break;
 			}
 			dst++;