aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph-Eugene Winzer2017-07-04 00:58:27 +0200
committerThierry Crozat2018-01-22 23:42:08 +0000
commit4a68aef1d6d1a25f4084b1cd3dcdfb36ea36114c (patch)
tree68c97ab941e62247d616ca6e81568c5724555cd8
parent84eb970bb9af322ce3f054206a92603cd23f29cc (diff)
downloadscummvm-rg350-4a68aef1d6d1a25f4084b1cd3dcdfb36ea36114c.tar.gz
scummvm-rg350-4a68aef1d6d1a25f4084b1cd3dcdfb36ea36114c.tar.bz2
scummvm-rg350-4a68aef1d6d1a25f4084b1cd3dcdfb36ea36114c.zip
SUPERNOVA: Fixes ScreenBufferStack
-rw-r--r--engines/supernova/supernova.cpp13
-rw-r--r--engines/supernova/supernova.h2
2 files changed, 9 insertions, 6 deletions
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index e0adc7f548..4a4ede6ff5 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -595,11 +595,13 @@ void ScreenBufferStack::push(int x, int y, int width, int height, int pitch) {
if (_last == ARRAYEND(_buffer))
return;
- byte *pixels = new byte[width * height];
- const byte *screen = static_cast<byte *>(g_system->lockScreen()->getBasePtr(x, y));
+ _last->_pixels = new byte[width * height];
+ byte *pixels = _last->_pixels;
+ const byte *screen = static_cast<const byte *>(g_system->lockScreen()->getBasePtr(x, y));
for (int i = 0; i < height; ++i) {
Common::copy(screen, screen + width, pixels);
- screen += pitch * i;
+ screen += pitch;
+ pixels += width;
}
g_system->unlockScreen();
@@ -608,7 +610,6 @@ void ScreenBufferStack::push(int x, int y, int width, int height, int pitch) {
_last->_width = width;
_last->_height = height;
_last->_pitch = pitch;
- _last->_pixels = pixels;
++_last;
}
@@ -617,11 +618,13 @@ void ScreenBufferStack::restore() {
if (_last == _buffer)
return;
+ --_last;
g_system->lockScreen()->copyRectToSurface(
_last->_pixels, _last->_width, _last->_x, _last->_y,
_last->_width, _last->_height);
g_system->unlockScreen();
- --_last;
+
+ delete[] _last->_pixels;
}
diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h
index 7362438a69..78e9f72142 100644
--- a/engines/supernova/supernova.h
+++ b/engines/supernova/supernova.h
@@ -49,7 +49,7 @@ struct ScreenBuffer {
, _width(0)
, _height(0)
, _pitch(0)
- , _pixels(0)
+ , _pixels(NULL)
{}
byte *_pixels;