mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 09:23:37 +00:00
DIRECTOR: Render implicit mattes with not* inks
This commit is contained in:
parent
47fba684d9
commit
558156c54f
@ -853,20 +853,16 @@ void inkDrawPixel(int x, int y, int color, void *data) {
|
||||
*dst = *dst | ~(src);
|
||||
break;
|
||||
case kInkTypeNotCopy:
|
||||
if (src != p->numColors - 1)
|
||||
*dst = ~(src);
|
||||
*dst = ~(src);
|
||||
break;
|
||||
case kInkTypeNotTrans:
|
||||
if (src != p->numColors - 1)
|
||||
*dst = *dst & ~(src);
|
||||
*dst = *dst & ~(src);
|
||||
break;
|
||||
case kInkTypeNotReverse:
|
||||
if (src != p->numColors - 1)
|
||||
*dst = *dst ^ src;
|
||||
*dst = *dst ^ src;
|
||||
break;
|
||||
case kInkTypeNotGhost:
|
||||
if (src != p->numColors - 1)
|
||||
*dst = *dst | src;
|
||||
*dst = *dst | src;
|
||||
break;
|
||||
// Arithmetic ink types
|
||||
default: {
|
||||
|
@ -70,7 +70,13 @@ const Graphics::Surface *Channel::getMask(bool forceMatte) {
|
||||
if (!_sprite->_cast)
|
||||
return nullptr;
|
||||
|
||||
if (_sprite->_ink == kInkTypeMatte || forceMatte) {
|
||||
bool needsMatte = _sprite->_ink == kInkTypeMatte ||
|
||||
_sprite->_ink == kInkTypeNotCopy ||
|
||||
_sprite->_ink == kInkTypeNotTrans ||
|
||||
_sprite->_ink == kInkTypeNotReverse ||
|
||||
_sprite->_ink == kInkTypeNotGhost;
|
||||
|
||||
if (needsMatte || forceMatte) {
|
||||
// Mattes are only supported in bitmaps for now. Shapes don't need mattes,
|
||||
// as they already have all non-enclosed white pixels transparent.
|
||||
// Matte on text has a trivial enough effect to not worry about implementing.
|
||||
|
@ -216,7 +216,7 @@ void Stage::inkBlitSurface(DirectorPlotData *pd, Common::Rect &srcRect, const Gr
|
||||
const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
|
||||
|
||||
for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++)
|
||||
if (!mask || (msk && (pd->ink == kInkTypeMatte ? !(*msk++) : *msk++)))
|
||||
if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++))))
|
||||
inkDrawPixel(pd->destRect.left + j, pd->destRect.top + i, 0, pd);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user