diff options
-rw-r--r-- | engines/lab/anim.cpp | 18 | ||||
-rw-r--r-- | engines/lab/anim.h | 5 | ||||
-rw-r--r-- | engines/lab/dispman.cpp | 8 | ||||
-rw-r--r-- | engines/lab/dispman.h | 2 |
4 files changed, 19 insertions, 14 deletions
diff --git a/engines/lab/anim.cpp b/engines/lab/anim.cpp index 7f7e488e9e..6e9b04f7f1 100644 --- a/engines/lab/anim.cpp +++ b/engines/lab/anim.cpp @@ -67,6 +67,10 @@ Anim::Anim(LabEngine *vm) : _vm(vm) { for (int i = 0; i < 3 * 256; i++) _diffPalette[i] = 0; + + _dispBitMap._bytesPerRow = _vm->_graphics->_screenWidth; + _dispBitMap._drawOnScreen = true; + _dispBitMap._buffer = nullptr; } Anim::~Anim() { @@ -74,15 +78,21 @@ Anim::~Anim() { _vm->_anim->_scrollScreenBuffer = nullptr; } +void Anim::setOutputBuffer(byte *memoryBuffer) { + _dispBitMap._bytesPerRow = _vm->_graphics->_screenWidth; + _dispBitMap._drawOnScreen = (memoryBuffer == nullptr); + _dispBitMap._buffer = memoryBuffer; +} + + void Anim::diffNextFrame(bool onlyDiffData) { if (_lastBlockHeader == 65535) // Already done. return; - BitMap *disp = _vm->_graphics->_dispBitMap; - bool drawOnScreen = disp->_drawOnScreen; - byte *startOfBuf = disp->_buffer; - int bufPitch = disp->_bytesPerRow; + bool drawOnScreen = _dispBitMap._drawOnScreen; + byte *startOfBuf = _dispBitMap._buffer; + int bufPitch = _dispBitMap._bytesPerRow; if (drawOnScreen) { startOfBuf = _vm->_graphics->getCurrentDrawingBuffer(); diff --git a/engines/lab/anim.h b/engines/lab/anim.h index de14035838..f9f72bbd20 100644 --- a/engines/lab/anim.h +++ b/engines/lab/anim.h @@ -71,6 +71,8 @@ private: uint32 _diffWidth; uint32 _diffHeight; + BitMap _dispBitMap; + public: Anim(LabEngine *vm); virtual ~Anim(); @@ -85,7 +87,8 @@ public: /** * Reads in a DIFF file. */ - void readDiff(Common::File *diffFile, bool playOnce, bool onlyDiffData = false); + void setOutputBuffer(byte *memoryBuffer); // nullptr for output to screen + void readDiff(Common::File *diffFile, bool playOnce, bool onlyDiffData); void diffNextFrame(bool onlyDiffData = false); /** diff --git a/engines/lab/dispman.cpp b/engines/lab/dispman.cpp index 7f581e720b..5a9d525b72 100644 --- a/engines/lab/dispman.cpp +++ b/engines/lab/dispman.cpp @@ -58,13 +58,10 @@ DisplayMan::DisplayMan(LabEngine *vm) : _vm(vm) { for (int i = 0; i < 256 * 3; i++) _curvgapal[i] = 0; - - _dispBitMap = new BitMap; } DisplayMan::~DisplayMan() { freePict(); - delete _dispBitMap; delete[] _displayBuffer; } @@ -95,10 +92,7 @@ void DisplayMan::readPict(const Common::String filename, bool playOnce, bool onl if (!_vm->_music->_loopSoundEffect) _vm->_music->stopSoundEffect(); - _dispBitMap->_bytesPerRow = _screenWidth; - _dispBitMap->_drawOnScreen = (memoryBuffer == nullptr); - _dispBitMap->_buffer = memoryBuffer; - + _vm->_anim->setOutputBuffer(memoryBuffer); _vm->_anim->readDiff(_curBitmap, playOnce, onlyDiffData); } diff --git a/engines/lab/dispman.h b/engines/lab/dispman.h index 3b41505e2f..5778952668 100644 --- a/engines/lab/dispman.h +++ b/engines/lab/dispman.h @@ -33,7 +33,6 @@ namespace Lab { -struct BitMap; class LabEngine; class Image; @@ -272,7 +271,6 @@ public: byte *_displayBuffer; byte *_currentDisplayBuffer; uint16 *_fadePalette; - BitMap *_dispBitMap; }; } // End of namespace Lab |