aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/sprite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/saga/sprite.cpp')
-rw-r--r--engines/saga/sprite.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/engines/saga/sprite.cpp b/engines/saga/sprite.cpp
index 2a4443916e..2723ce7d7f 100644
--- a/engines/saga/sprite.cpp
+++ b/engines/saga/sprite.cpp
@@ -211,15 +211,16 @@ void Sprite::getScaledSpriteBuffer(SpriteList &spriteList, int spriteNumber, int
}
}
-void Sprite::drawClip(Surface *ds, const Rect &clipRect, const Point &spritePointer, int width, int height, const byte *spriteBuffer) {
+void Sprite::drawClip(const Rect &clipRect, const Point &spritePointer, int width, int height, const byte *spriteBuffer) {
int clipWidth;
int clipHeight;
int i, j, jo, io;
byte *bufRowPointer;
const byte *srcRowPointer;
+ Surface *backBuffer = _vm->_gfx->getBackBuffer();
- bufRowPointer = (byte *)ds->pixels + ds->pitch * spritePointer.y;
+ bufRowPointer = (byte *)backBuffer->pixels + backBuffer->pitch * spritePointer.y;
srcRowPointer = spriteBuffer;
clipWidth = CLIP(width, 0, clipRect.right - spritePointer.x);
@@ -232,14 +233,14 @@ void Sprite::drawClip(Surface *ds, const Rect &clipRect, const Point &spritePoin
}
if (spritePointer.y < clipRect.top) {
io = clipRect.top - spritePointer.y;
- bufRowPointer += ds->pitch * io;
+ bufRowPointer += backBuffer->pitch * io;
srcRowPointer += width * io;
}
for (i = io; i < clipHeight; i++) {
for (j = jo; j < clipWidth; j++) {
- assert((byte *)ds->pixels <= (byte *)(bufRowPointer + j + spritePointer.x));
- assert(((byte *)ds->pixels + (_vm->getDisplayWidth() *
+ assert((byte *)backBuffer->pixels <= (byte *)(bufRowPointer + j + spritePointer.x));
+ assert(((byte *)backBuffer->pixels + (_vm->getDisplayWidth() *
_vm->getDisplayHeight())) > (byte *)(bufRowPointer + j + spritePointer.x));
assert((const byte *)spriteBuffer <= (const byte *)(srcRowPointer + j));
assert(((const byte *)spriteBuffer + (width * height)) > (const byte *)(srcRowPointer + j));
@@ -248,12 +249,12 @@ void Sprite::drawClip(Surface *ds, const Rect &clipRect, const Point &spritePoin
*(bufRowPointer + j + spritePointer.x) = *(srcRowPointer + j);
}
}
- bufRowPointer += ds->pitch;
+ bufRowPointer += backBuffer->pitch;
srcRowPointer += width;
}
}
-void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) {
+void Sprite::draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) {
const byte *spriteBuffer = NULL;
int width = 0;
int height = 0;
@@ -266,10 +267,10 @@ void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int
spritePointer.x = screenCoord.x + xAlign;
spritePointer.y = screenCoord.y + yAlign;
- drawClip(ds, clipRect, spritePointer, width, height, spriteBuffer);
+ drawClip(clipRect, spritePointer, width, height, spriteBuffer);
}
-void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale) {
+void Sprite::draw(const Rect &clipRect, SpriteList &spriteList, int32 spriteNumber, const Rect &screenRect, int scale) {
const byte *spriteBuffer = NULL;
int width = 0;
int height = 0;
@@ -290,7 +291,7 @@ void Sprite::draw(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int
}
spritePointer.x = screenRect.left + xAlign + spw;
spritePointer.y = screenRect.top + yAlign + sph;
- drawClip(ds, clipRect, spritePointer, width, height, spriteBuffer);
+ drawClip(clipRect, spritePointer, width, height, spriteBuffer);
}
bool Sprite::hitTest(SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, const Point &testPoint) {
@@ -320,7 +321,7 @@ bool Sprite::hitTest(SpriteList &spriteList, int spriteNumber, const Point &scre
return *srcRowPointer != 0;
}
-void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth) {
+void Sprite::drawOccluded(const Rect &clipRect, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth) {
const byte *spriteBuffer = NULL;
int x, y;
byte *destRowPointer;
@@ -332,6 +333,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL
int height = 0;
int xAlign = 0;
int yAlign = 0;
+ Surface *backBuffer = _vm->_gfx->getBackBuffer();
ClipData clipData;
@@ -344,7 +346,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL
int maskZ;
if (!_vm->_scene->isBGMaskPresent()) {
- draw(ds, clipRect, spriteList, spriteNumber, screenCoord, scale);
+ draw(clipRect, spriteList, spriteNumber, screenCoord, scale);
return;
}
@@ -369,7 +371,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL
// Finally, draw the occluded sprite
sourceRowPointer = spriteBuffer + clipData.drawSource.x + (clipData.drawSource.y * width);
- destRowPointer = (byte *)ds->pixels + clipData.drawDest.x + (clipData.drawDest.y * ds->pitch);
+ destRowPointer = (byte *)backBuffer->pixels + clipData.drawDest.x + (clipData.drawDest.y * backBuffer->pitch);
maskRowPointer = maskBuffer + clipData.drawDest.x + (clipData.drawDest.y * maskWidth);
for (y = 0; y < clipData.drawHeight; y++) {
@@ -387,7 +389,7 @@ void Sprite::drawOccluded(Surface *ds, const Rect &clipRect, SpriteList &spriteL
destPointer++;
maskPointer++;
}
- destRowPointer += ds->pitch;
+ destRowPointer += backBuffer->pitch;
maskRowPointer += maskWidth;
sourceRowPointer += width;
}