aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/saga/isomap.cpp2
-rw-r--r--engines/saga/render.cpp11
-rw-r--r--engines/saga/scene.cpp4
-rw-r--r--engines/saga/sprite.cpp5
4 files changed, 12 insertions, 10 deletions
diff --git a/engines/saga/isomap.cpp b/engines/saga/isomap.cpp
index 682ad83e89..45202cc0ed 100644
--- a/engines/saga/isomap.cpp
+++ b/engines/saga/isomap.cpp
@@ -882,7 +882,7 @@ void IsoMap::drawTile(uint16 tileIndex, const Point &point, const Location *loca
int rectX = MAX<int>(drawPoint.x, 0);
int rectY = MAX<int>(drawPoint.y, 0);
int rectX2 = MIN<int>(drawPoint.x + SAGA_ISOTILE_WIDTH, _tileClip.right);
- int rectY2 = MIN<int>(drawPoint.y + height, _tileClip.bottom);
+ int rectY2 = lowBound;
_vm->_render->addDirtyRect(Common::Rect(rectX, rectY, rectX2, rectY2));
}
diff --git a/engines/saga/render.cpp b/engines/saga/render.cpp
index f3e3279bfe..063cc4c757 100644
--- a/engines/saga/render.cpp
+++ b/engines/saga/render.cpp
@@ -207,8 +207,8 @@ void Render::addDirtyRect(Common::Rect rect) {
// Clip rectangle
int x1 = MAX<int>(rect.left, 0);
int y1 = MAX<int>(rect.top, 0);
- int x2 = MIN<int>(rect.width(), _backGroundSurface.w);
- int y2 = MIN<int>(rect.height(), _backGroundSurface.h);
+ int x2 = MIN<int>(rect.right, _backGroundSurface.w);
+ int y2 = MIN<int>(rect.bottom, _backGroundSurface.h);
if (x2 > x1 && y2 > y1) {
Common::Rect rectClipped(x1, y1, x2, y2);
// Check if the new rectangle is contained within another in the list
@@ -216,8 +216,11 @@ void Render::addDirtyRect(Common::Rect rect) {
for (it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
if (it->contains(rectClipped))
return;
+ if (rectClipped.contains(*it)) {
+ _dirtyRects.erase(it);
+ break; // we need to break now, as the list is changed
+ }
}
-
_dirtyRects.push_back(rectClipped);
}
}
@@ -226,6 +229,7 @@ void Render::restoreChangedRects() {
if (!_fullRefresh) {
Common::List<Common::Rect>::const_iterator it;
for (it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
+ //_backGroundSurface.frameRect(*it, 1); // DEBUG
g_system->copyRectToScreen((byte *)_backGroundSurface.pixels, _backGroundSurface.w, it->left, it->top, it->width(), it->height());
}
}
@@ -236,6 +240,7 @@ void Render::drawDirtyRects() {
if (!_fullRefresh) {
Common::List<Common::Rect>::const_iterator it;
for (it = _dirtyRects.begin(); it != _dirtyRects.end(); ++it) {
+ //_backGroundSurface.frameRect(*it, 2); // DEBUG
g_system->copyRectToScreen(_vm->_gfx->getBackBufferPixels(), _backGroundSurface.w, it->left, it->top, it->width(), it->height());
}
} else {
diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp
index f53e6321c7..c2c3a7d350 100644
--- a/engines/saga/scene.cpp
+++ b/engines/saga/scene.cpp
@@ -589,9 +589,6 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) {
Event *q_event;
static PalEntry current_pal[PAL_ENTRIES];
- // Since we are loading a new scene, do a full refresh
- _vm->_render->setFullRefresh(true);
-
if (loadSceneParams->transitionType == kTransitionFade)
_vm->_interface->setFadeMode(kFadeOut);
@@ -1185,6 +1182,7 @@ void Scene::endScene() {
_vm->_scene->getBGInfo(bgInfo);
_vm->_render->getBackGroundSurface()->blit(bgInfo.bounds, bgInfo.buffer);
+ _vm->_render->addDirtyRect(bgInfo.bounds);
} else {
_vm->_gfx->getBackBufferRect(rect);
_vm->_render->getBackGroundSurface()->blit(rect, (const byte *)_vm->_gfx->getBackBufferPixels());
diff --git a/engines/saga/sprite.cpp b/engines/saga/sprite.cpp
index 6507b6ebb3..7c5f13ef27 100644
--- a/engines/saga/sprite.cpp
+++ b/engines/saga/sprite.cpp
@@ -253,7 +253,7 @@ void Sprite::drawClip(const Rect &clipRect, const Point &spritePointer, int widt
srcRowPointer += width;
}
- _vm->_render->addDirtyRect(Common::Rect(spritePointer.x, spritePointer.y, spritePointer.x + clipWidth, spritePointer.y + clipHeight));
+ _vm->_render->addDirtyRect(clipRect);
}
void Sprite::draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) {
@@ -395,8 +395,7 @@ void Sprite::drawOccluded(const Rect &clipRect, SpriteList &spriteList, int spri
sourceRowPointer += width;
}
- _vm->_render->addDirtyRect(Common::Rect(clipData.destPoint.x, clipData.destPoint.y,
- clipData.destPoint.x + clipData.drawWidth, clipData.destPoint.y + clipData.drawHeight));
+ _vm->_render->addDirtyRect(clipRect);
}
void Sprite::decodeRLEBuffer(const byte *inputBuffer, size_t inLength, size_t outLength) {