[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