diff options
author | Bastien Bouclet | 2016-08-27 06:39:12 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2017-07-03 08:50:10 +0200 |
commit | e9b67081c36653bfae0d842a261f313fc9f32231 (patch) | |
tree | 5f95f4e4f80511c411d4ec0f20de2e76512c8381 /engines/mohawk/riven_graphics.cpp | |
parent | 8fcebc12c6f653dbfbd06af50a03074a33ac8810 (diff) | |
download | scummvm-rg350-e9b67081c36653bfae0d842a261f313fc9f32231.tar.gz scummvm-rg350-e9b67081c36653bfae0d842a261f313fc9f32231.tar.bz2 scummvm-rg350-e9b67081c36653bfae0d842a261f313fc9f32231.zip |
MOHAWK: Introduce the effects intermediary screen
Diffstat (limited to 'engines/mohawk/riven_graphics.cpp')
-rw-r--r-- | engines/mohawk/riven_graphics.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/engines/mohawk/riven_graphics.cpp b/engines/mohawk/riven_graphics.cpp index 6931afbf09..b5fce9ce9e 100644 --- a/engines/mohawk/riven_graphics.cpp +++ b/engines/mohawk/riven_graphics.cpp @@ -47,6 +47,9 @@ RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) : GraphicsManager(), _vm(vm _mainScreen = new Graphics::Surface(); _mainScreen->create(608, 392, _pixelFormat); + _effectScreen = new Graphics::Surface(); + _effectScreen->create(608, 392, _pixelFormat); + _screenUpdateNesting = 0; _screenUpdateRunning = false; _scheduledTransition = -1; // no transition @@ -60,6 +63,8 @@ RivenGraphics::RivenGraphics(MohawkEngine_Riven* vm) : GraphicsManager(), _vm(vm } RivenGraphics::~RivenGraphics() { + _effectScreen->free(); + delete _effectScreen; _mainScreen->free(); delete _mainScreen; delete _bitmapDecoder; @@ -90,10 +95,13 @@ void RivenGraphics::copyImageToScreen(uint16 image, uint32 left, uint32 top, uin void RivenGraphics::updateScreen(Common::Rect updateRect) { if (_dirtyScreen) { // Copy to screen if there's no transition. Otherwise transition. ;) - if (_scheduledTransition < 0) - _vm->_system->copyRectToScreen(_mainScreen->getBasePtr(updateRect.left, updateRect.top), _mainScreen->pitch, updateRect.left, updateRect.top, updateRect.width(), updateRect.height()); - else + if (_scheduledTransition < 0) { + // mainScreen -> effectScreen -> systemScreen + _effectScreen->copyRectToSurface(*_mainScreen, updateRect.left, updateRect.top, updateRect); + _vm->_system->copyRectToScreen(_effectScreen->getBasePtr(updateRect.left, updateRect.top), _effectScreen->pitch, updateRect.left, updateRect.top, updateRect.width(), updateRect.height()); + } else { runScheduledTransition(); + } // Finally, update the screen. _vm->_system->updateScreen(); @@ -230,7 +238,8 @@ void RivenGraphics::runScheduledTransition() { } // For now, just copy the image to screen without doing any transition. - _vm->_system->copyRectToScreen(_mainScreen->getPixels(), _mainScreen->pitch, 0, 0, _mainScreen->w, _mainScreen->h); + _effectScreen->copyRectToSurface(*_mainScreen, 0, 0, Common::Rect(_mainScreen->w, _mainScreen->h)); + _vm->_system->copyRectToScreen(_effectScreen->getBasePtr(0, 0), _effectScreen->pitch, 0, 0, _effectScreen->w, _effectScreen->h); _vm->_system->updateScreen(); _scheduledTransition = -1; // Clear scheduled transition |