(svn r13502) -Fix (r11212): drawing of zoomed out partial sprites could cause deadlocks or crashes
authorsmatz
Fri, 13 Jun 2008 00:00:04 +0000
changeset 9511 b6465bcb7e9b
parent 9510 5ca327a7ce93
child 9512 bc878acad6ab
(svn r13502) -Fix (r11212): drawing of zoomed out partial sprites could cause deadlocks or crashes
src/gfx.cpp
--- a/src/gfx.cpp	Thu Jun 12 22:29:42 2008 +0000
+++ b/src/gfx.cpp	Fri Jun 13 00:00:04 2008 +0000
@@ -689,7 +689,7 @@
 	}
 }
 
-static inline void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub)
+static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub)
 {
 	const DrawPixelInfo *dpi = _cur_dpi;
 	Blitter::BlitterParams bp;
@@ -715,8 +715,8 @@
 	bp.height = UnScaleByZoom(sprite->height - clip_top - clip_bottom, dpi->zoom);
 	bp.top = 0;
 	bp.left = 0;
-	bp.skip_left = UnScaleByZoom(clip_left, dpi->zoom);
-	bp.skip_top = UnScaleByZoom(clip_top, dpi->zoom);
+	bp.skip_left = UnScaleByZoomLower(clip_left, dpi->zoom);
+	bp.skip_top = UnScaleByZoomLower(clip_top, dpi->zoom);
 
 	x += ScaleByZoom(bp.skip_left, dpi->zoom);
 	y += ScaleByZoom(bp.skip_top, dpi->zoom);
@@ -767,6 +767,9 @@
 		if (bp.width <= 0) return;
 	}
 
+	assert(bp.skip_left + bp.width <= UnScaleByZoom(sprite->width, dpi->zoom));
+	assert(bp.skip_top + bp.height <= UnScaleByZoom(sprite->height, dpi->zoom));
+
 	BlitterFactoryBase::GetCurrentBlitter()->Draw(&bp, mode, dpi->zoom);
 }