[Scummvm-git-logs] scummvm master -> 92b0f34db9bb99cf4b46c491ac1a8c0f5d401f9f

npjg nathanael.gentrydb8 at gmail.com
Tue Jun 23 19:17:33 UTC 2020


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

Summary:
5e1556b89d DIRECTOR: Implement Mask ink
92b0f34db9 DIRECTOR: Clean up blit loops


Commit: 5e1556b89dbe6b91cb298452230e83e5d47d4cdb
    https://github.com/scummvm/scummvm/commit/5e1556b89dbe6b91cb298452230e83e5d47d4cdb
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-23T15:17:25-04:00

Commit Message:
DIRECTOR: Implement Mask ink

Changed paths:
    engines/director/ink.cpp


diff --git a/engines/director/ink.cpp b/engines/director/ink.cpp
index 8f8584d508..d58f9a9290 100644
--- a/engines/director/ink.cpp
+++ b/engines/director/ink.cpp
@@ -39,17 +39,29 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 	Common::Point maskOrigin(MAX(0, -drawRect.left), MAX(0, -drawRect.top));
 	drawRect.clip(Common::Rect(_maskSurface->w, _maskSurface->h));
 
+	Graphics::ManagedSurface *castMask = nullptr;
+	if (ink == kInkTypeMask) {
+		Cast *member = g_director->getCastMember(_channels[spriteId]->_sprite->_castId + 1);
+
+		if (!member->_widget)
+			member->createWidget();
+
+		if (member->_initialRect == _channels[spriteId]->_sprite->_cast->_initialRect)
+			castMask = member->_widget->getSurface();
+	}
+
 	// HACK: A custom blitter is needed for the logical AND necessary here;
 	// surface class doesn't provide it.
 	for (int ii = 0; ii < drawRect.height(); ii++) {
-		const byte *src = (const byte *)maskSurface->getBasePtr(maskOrigin.x, ii + maskOrigin.y);
+		const byte *msk = castMask ? (const byte *)castMask->getBasePtr(maskOrigin.x, maskOrigin.y + ii) : nullptr;
+		const byte *src = (const byte *)maskSurface->getBasePtr(maskOrigin.x, maskOrigin.y + ii);
 		byte *dst = (byte *)_maskSurface->getBasePtr(t.left + maskOrigin.x, t.top + maskOrigin.y + ii);
 
-		for (int j = 0; j < drawRect.width(); j++) {
+		for (int j = 0; j < drawRect.width(); j++, src++, dst++) {
 			*dst &= *src;
 
-			src++;
-			dst++;
+			if (msk)
+				*dst = (*(msk++) ? 0 : *dst);
 		}
 	}
 
@@ -61,9 +73,6 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 	} else if (ink == kInkTypeReverse) {
 		drawReverseSprite(spriteSurface, t, spriteId);
 		return;
-	} else if (ink == kInkTypeMask) {
-		// TODO: Implement masked drawing
-		warning("Score::inkBasedBlit(): Masked drawing not yet implemented");
 	}
 
 	for (int ii = 0; ii < drawRect.height(); ii++) {
@@ -82,6 +91,7 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 						break;
 					// fall through
 				case kInkTypeCopy:
+				case kInkTypeMask:
 					*dst = *src;
 					break;
 				case kInkTypeTransparent:
@@ -115,9 +125,6 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 					break;
 				case kInkTypeMatte:
 					break;
-				case kInkTypeMask:
-					*dst = *src;
-					break;
 					// Arithmetic ink types
 				case kInkTypeBlend:
 					if (*src != numColors - 1)


Commit: 92b0f34db9bb99cf4b46c491ac1a8c0f5d401f9f
    https://github.com/scummvm/scummvm/commit/92b0f34db9bb99cf4b46c491ac1a8c0f5d401f9f
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-06-23T15:17:25-04:00

Commit Message:
DIRECTOR: Clean up blit loops

Changed paths:
    engines/director/ink.cpp


diff --git a/engines/director/ink.cpp b/engines/director/ink.cpp
index d58f9a9290..83c396d464 100644
--- a/engines/director/ink.cpp
+++ b/engines/director/ink.cpp
@@ -76,12 +76,12 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 	}
 
 	for (int ii = 0; ii < drawRect.height(); ii++) {
-		const byte *msk = (const byte *)maskSurface->getBasePtr(maskOrigin.x, maskOrigin.y + ii);
-		const byte *src = (const byte *)spriteSurface.getBasePtr(0 + maskOrigin.x, ii + maskOrigin.y);
+		const byte *msk = (const byte *)_maskSurface->getBasePtr(t.left + maskOrigin.x, t.top + maskOrigin.y + ii);
+		const byte *src = (const byte *)spriteSurface.getBasePtr(maskOrigin.x, ii + maskOrigin.y);
 		byte *dst = (byte *)_surface->getBasePtr(t.left + maskOrigin.x, t.top + maskOrigin.y + ii);
 
-		for (int j = 0; j < drawRect.width(); j++) {
-			if (*msk != 0) {
+		for (int j = 0; j < drawRect.width(); j++, msk++, src++, dst++) {
+			if (*msk) {
 				_vm->_wm->decomposeColor(*src, rSrc, gSrc, bSrc);
 				_vm->_wm->decomposeColor(*dst, rDst, gDst, bDst);
 
@@ -156,10 +156,6 @@ void Score::inkBasedBlit(Graphics::ManagedSurface *maskSurface, const Graphics::
 					break;
 				}
 			}
-
-			src++;
-			dst++;
-			msk++;
 		}
 	}
 }
@@ -177,7 +173,7 @@ void Score::drawReverseSprite(const Graphics::Surface &sprite, Common::Rect &dra
 		byte *dst = (byte *)_surface->getBasePtr(drawRect.left, drawRect.top + ii);
 		byte srcColor = *src;
 
-		for (int j = 0; j < drawRect.width(); j++) {
+		for (int j = 0; j < drawRect.width(); j++, msk++, src++, dst++) {
 			if (*msk != 0) {
 				if (!_channels[spriteId]->_sprite->_cast || _channels[spriteId]->_sprite->_cast->_type == kCastShape)
 					srcColor = 0x0;
@@ -210,9 +206,6 @@ void Score::drawReverseSprite(const Graphics::Surface &sprite, Common::Rect &dra
 					*dst = _vm->transformColor(srcColor);
 				}
 			}
-			msk++;
-			src++;
-			dst++;
 		}
 	}
 }




More information about the Scummvm-git-logs mailing list