[Scummvm-git-logs] scummvm master -> d7f9e3601e78c49c241daf3cc5ba20207015e913
djsrv
noreply at scummvm.org
Sat Jul 9 23:25:34 UTC 2022
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:
d7f9e3601e DIRECTOR: Simplify redraw logic for kTheRegPoint
Commit: d7f9e3601e78c49c241daf3cc5ba20207015e913
https://github.com/scummvm/scummvm/commit/d7f9e3601e78c49c241daf3cc5ba20207015e913
Author: djsrv (dservilla at gmail.com)
Date: 2022-07-09T18:22:50-05:00
Commit Message:
DIRECTOR: Simplify redraw logic for kTheRegPoint
We only need to add dirty rects for the sprites with this cast member,
not force redraw every sprite.
Changed paths:
engines/director/lingo/lingo-object.cpp
engines/director/score.cpp
engines/director/score.h
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 586a9a87f30..1ef4123113a 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -927,14 +927,10 @@ bool BitmapCastMember::setField(int field, const Datum &d) {
return false;
case kTheRegPoint:
if (d.type == POINT || (d.type == ARRAY && d.u.farr->arr.size() >= 2)) {
- auto temp = _img;
- _modified = true;
Score *score = g_director->getCurrentMovie()->getScore();
- score->renderSprites(score->getCurrentFrame(), kRenderForceUpdate);
- _img = nullptr;
+ score->invalidateRectsForMember(this);
_regX = d.u.farr->arr[0].asInt();
_regY = d.u.farr->arr[1].asInt();
- _img = temp;
_modified = true;
} else {
warning("BitmapCastMember::setField(): Wrong Datum type %d for kTheRegPoint", d.type);
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 8f8ff270092..ddda2db3858 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -645,6 +645,15 @@ void Score::updateWidgets(bool hasVideoPlayback) {
}
}
+void Score::invalidateRectsForMember(CastMember *member) {
+ for (uint16 i = 0; i < _channels.size(); i++) {
+ Channel *channel = _channels[i];
+ if (channel->_sprite->_cast == member) {
+ _window->addDirtyRect(channel->getBbox());
+ }
+ }
+}
+
void Score::screenShot() {
Graphics::Surface rawSurface = _window->getSurface()->rawSurface();
const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 0, 8, 16, 24);
diff --git a/engines/director/score.h b/engines/director/score.h
index 6215ecea520..bfab42e189e 100644
--- a/engines/director/score.h
+++ b/engines/director/score.h
@@ -114,6 +114,8 @@ public:
void renderCursor(Common::Point pos, bool forceUpdate = false);
void updateWidgets(bool hasVideoPlayback);
+ void invalidateRectsForMember(CastMember *member);
+
void playSoundChannel(uint16 frameId);
private:
More information about the Scummvm-git-logs
mailing list