[Scummvm-cvs-logs] scummvm master -> 3028d9202d4751c5b49ca6ec8a2f63b24fad3df4

sev- sev at scummvm.org
Tue Jun 14 19:43:26 CEST 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3028d9202d SCUMM HE: Simplify Moonbase distortion code


Commit: 3028d9202d4751c5b49ca6ec8a2f63b24fad3df4
    https://github.com/scummvm/scummvm/commit/3028d9202d4751c5b49ca6ec8a2f63b24fad3df4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-06-14T19:43:08+02:00

Commit Message:
SCUMM HE: Simplify Moonbase distortion code

Changed paths:
    engines/scumm/he/moonbase/distortion.cpp



diff --git a/engines/scumm/he/moonbase/distortion.cpp b/engines/scumm/he/moonbase/distortion.cpp
index 121a194..7e0a30b 100644
--- a/engines/scumm/he/moonbase/distortion.cpp
+++ b/engines/scumm/he/moonbase/distortion.cpp
@@ -26,7 +26,6 @@
 namespace Scumm {
 
 enum {
-	kHalfRange = (0x1f / 2),
 	kBptHeaderSize = 8,
 
 	kReflectionClipped = 0,
@@ -34,14 +33,13 @@ enum {
 	kSpecializedNotClipped = 2
 };
 
-void blitCore(
+static void blitDistortionCore(
 	Graphics::Surface *dstBitmap,
 	const int x, const int y,
 	const Graphics::Surface *distortionBitmap,
 	const Common::Rect *optionalclipRectPtr,
 	int transferOp,
 	const Graphics::Surface *srcBitmap,
-	int offset_x, int offset_y,
 	Common::Rect *srcClipRect
 ) {
 	Common::Rect clipRect(dstBitmap->w, dstBitmap->h);
@@ -76,8 +74,8 @@ void blitCore(
 	switch (transferOp) {
 	case kReflectionClipped:
 	case kNotClipped:
-		baseX = offset_x - kHalfRange;
-		baseY = offset_y - kHalfRange;
+		baseX = -(0x1f / 2); // Half range
+		baseY = -(0x1f / 2);
 		break;
 
 	case kSpecializedNotClipped:
@@ -128,39 +126,6 @@ void blitCore(
 	}
 }
 
-void distortionBlit(
-	Graphics::Surface *dstBitmap,
-	Graphics::Surface *srcBitmap,
-	Graphics::Surface *distortionBitmap,
-	const int dst_x, const int dst_y,
-	const int src_x, const int src_y,
-	const int l_reach, const int r_reach, const int t_reach, const int b_reach,
-	const Common::Rect &srcClipRect, const Common::Rect &dstClipRect
-) {
-	Common::Rect srcReach((src_x - l_reach), (src_y - t_reach), (src_x + r_reach), (src_y + b_reach));
-	Common::Rect srcLimits(srcBitmap->w, srcBitmap->h);
-
-	if (!srcLimits.intersects(srcClipRect))
-		return;
-
-	srcLimits.clip(srcClipRect);
-
-	if (!srcReach.intersects(srcLimits))
-		return;
-
-	srcReach.clip(srcLimits);
-
-	if (srcLimits.contains(srcReach)) {
-		if (srcBitmap->pitch == 1280) {
-			blitCore(dstBitmap, dst_x, dst_y, distortionBitmap, &dstClipRect, kSpecializedNotClipped, srcBitmap, (dst_x - src_x), (dst_y - src_y), 0);
-		} else {
-			blitCore(dstBitmap, dst_x, dst_y, distortionBitmap, &dstClipRect, kNotClipped, srcBitmap, (dst_x - src_x), (dst_y - src_y), 0);
-		}
-	} else {
-		blitCore(dstBitmap, dst_x, dst_y, distortionBitmap, &dstClipRect, kReflectionClipped, srcBitmap, (dst_x - src_x), (dst_y - src_y), &srcLimits);
-	}
-}
-
 void Moonbase::blitDistortion(byte *bufferData, const int bufferWidth, const int bufferHeight, const int bufferPitch,
 		const Common::Rect *optionalClippingRect, byte *dataStream, const int x, const int y, byte *altSourceBuffer) {
 	byte *sourcePixels = (altSourceBuffer) ? altSourceBuffer : bufferData;
@@ -201,35 +166,52 @@ void Moonbase::blitDistortion(byte *bufferData, const int bufferWidth, const int
 		int yOffset = READ_LE_UINT16(blockData); blockData += 2;
 		int width = READ_LE_UINT16(blockData); blockData += 2;
 		int height = READ_LE_UINT16(blockData); blockData += 2;
-		int l_Reach = READ_LE_UINT16(blockData); blockData += 2;
-		int r_Reach = READ_LE_UINT16(blockData); blockData += 2;
-		int t_Reach = READ_LE_UINT16(blockData); blockData += 2;
-		int b_Reach = READ_LE_UINT16(blockData); blockData += 2;
+		int l_reach = READ_LE_UINT16(blockData); blockData += 2;
+		int r_reach = READ_LE_UINT16(blockData); blockData += 2;
+		int t_reach = READ_LE_UINT16(blockData); blockData += 2;
+		int b_reach = READ_LE_UINT16(blockData); blockData += 2;
 		int distortionPitch = ((width * 2 + 7) / 8); // 2 for 555
 
 		if (width == 0 && height == 0)
 			continue;
 
-		Graphics::Surface mappedDstBitmap;
-		mappedDstBitmap.init(bufferWidth, bufferHeight, bufferPitch, bufferData, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
+		Graphics::Surface dstBitmap;
+		dstBitmap.init(bufferWidth, bufferHeight, bufferPitch, bufferData, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
 
-		Graphics::Surface mappedSrcBitmap;
-		mappedSrcBitmap.init(bufferWidth, bufferHeight, bufferPitch, sourcePixels, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
+		Graphics::Surface srcBitmap;
+		srcBitmap.init(bufferWidth, bufferHeight, bufferPitch, sourcePixels, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
 
-		Graphics::Surface mappedDistortionBitmap;
-		mappedDistortionBitmap.init(width, height, distortionPitch, blockData, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
+		Graphics::Surface distortionBitmap;
+		distortionBitmap.init(width, height, distortionPitch, blockData, Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0));
 
 		Common::Rect srcClipRect(cx1, cy1, cx2, cy2);
 		Common::Rect dstClipRect(cx1, cy1, cx2, cy2);
 
-		distortionBlit(
-			&mappedDstBitmap,
-			&mappedSrcBitmap,
-			&mappedDistortionBitmap,
-			(x + xOffset), (y + yOffset),
-			(x + xOffset), (y + yOffset),
-			l_Reach, r_Reach, t_Reach, b_Reach,
-			srcClipRect, dstClipRect);
+		int src_x = (x + xOffset);
+		int src_y = (y + yOffset);
+
+		Common::Rect srcReach((src_x - l_reach), (src_y - t_reach), (src_x + r_reach), (src_y + b_reach));
+		Common::Rect srcLimits(srcBitmap.w, srcBitmap.h);
+
+		if (!srcLimits.intersects(srcClipRect))
+			return;
+
+		srcLimits.clip(srcClipRect);
+
+		if (!srcReach.intersects(srcLimits))
+			return;
+
+		srcReach.clip(srcLimits);
+
+		if (srcLimits.contains(srcReach)) {
+			if (srcBitmap.pitch == 1280) {
+				blitDistortionCore(&dstBitmap, src_x, src_y, &distortionBitmap, &dstClipRect, kSpecializedNotClipped, &srcBitmap, 0);
+			} else {
+				blitDistortionCore(&dstBitmap, src_x, src_y, &distortionBitmap, &dstClipRect, kNotClipped, &srcBitmap, 0);
+			}
+		} else {
+			blitDistortionCore(&dstBitmap, src_x, src_y, &distortionBitmap, &dstClipRect, kReflectionClipped, &srcBitmap, &srcLimits);
+		}
 	}
 }
 






More information about the Scummvm-git-logs mailing list