[Scummvm-cvs-logs] SF.net SVN: scummvm:[51520] scummvm/trunk/engines/sci/graphics/view.cpp

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Sat Jul 31 00:44:24 CEST 2010


Revision: 51520
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51520&view=rev
Author:   m_kiewitz
Date:     2010-07-30 22:44:23 +0000 (Fri, 30 Jul 2010)

Log Message:
-----------
SCI: fixing view scaling code

fixes crash in sq5 with elevator on goliath

Modified Paths:
--------------
    scummvm/trunk/engines/sci/graphics/view.cpp

Modified: scummvm/trunk/engines/sci/graphics/view.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/view.cpp	2010-07-30 22:20:13 UTC (rev 51519)
+++ scummvm/trunk/engines/sci/graphics/view.cpp	2010-07-30 22:44:23 UTC (rev 51520)
@@ -637,7 +637,7 @@
 	uint16 scalingX[640];
 	uint16 scalingY[480];
 	int16 scaledWidth, scaledHeight;
-	int16 pixelNo, scaledPixel, scaledPixelNo, prevScaledPixelNo;
+	int pixelNo, scaledPixel, scaledPixelNo, prevScaledPixelNo;
 
 	if (_embeddedPal) {
 		// Merge view palette in...
@@ -650,8 +650,8 @@
 	scaledHeight = CLIP<int16>(scaledHeight, 0, _screen->getHeight());
 
 	// Do we really need to do this?!
-	memset(scalingX, 0, sizeof(scalingX));
-	memset(scalingY, 0, sizeof(scalingY));
+	//memset(scalingX, 0, sizeof(scalingX));
+	//memset(scalingY, 0, sizeof(scalingY));
 
 	// Create height scaling table
 	pixelNo = 0;
@@ -659,16 +659,15 @@
 	while (pixelNo < celHeight) {
 		scaledPixelNo = scaledPixel >> 7;
 		assert(scaledPixelNo < ARRAYSIZE(scalingY));
-		if (prevScaledPixelNo < scaledPixelNo)
-			memset(&scalingY[prevScaledPixelNo], pixelNo, scaledPixelNo - prevScaledPixelNo);
-		scalingY[scaledPixelNo] = pixelNo;
-		prevScaledPixelNo = scaledPixelNo + 1;
+		for (; prevScaledPixelNo <= scaledPixelNo; prevScaledPixelNo++)
+			scalingY[prevScaledPixelNo] = pixelNo;
 		pixelNo++;
 		scaledPixel += scaleY;
 	}
+	pixelNo--;
 	scaledPixelNo++;
-	if (scaledPixelNo < scaledHeight)
-		memset(&scalingY[scaledPixelNo], pixelNo - 1, scaledHeight - scaledPixelNo);
+	for (; scaledPixelNo < scaledWidth; scaledPixelNo++)
+		scalingY[scaledPixelNo] = pixelNo - 1;
 
 	// Create width scaling table
 	pixelNo = 0;
@@ -676,16 +675,15 @@
 	while (pixelNo < celWidth) {
 		scaledPixelNo = scaledPixel >> 7;
 		assert(scaledPixelNo < ARRAYSIZE(scalingX));
-		if (prevScaledPixelNo < scaledPixelNo)
-			memset(&scalingX[prevScaledPixelNo], pixelNo, scaledPixelNo - prevScaledPixelNo);
-		scalingX[scaledPixelNo] = pixelNo;
-		prevScaledPixelNo = scaledPixelNo + 1;
+		for (; prevScaledPixelNo <= scaledPixelNo; prevScaledPixelNo++)
+			scalingX[prevScaledPixelNo] = pixelNo;
 		pixelNo++;
 		scaledPixel += scaleX;
 	}
+	pixelNo--;
 	scaledPixelNo++;
-	if (scaledPixelNo < scaledWidth)
-		memset(&scalingX[scaledPixelNo], pixelNo - 1, scaledWidth - scaledPixelNo);
+	for (; scaledPixelNo < scaledWidth; scaledPixelNo++)
+		scalingX[scaledPixelNo] = pixelNo - 1;
 
 	scaledWidth = MIN(clipRect.width(), scaledWidth);
 	scaledHeight = MIN(clipRect.height(), scaledHeight);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list