SCI: restore: clear screen when restoring

primarily to clear kPortrait graphics in kq6
when restoring during portrait animation
This commit is contained in:
Martin Kiewitz 2015-04-26 15:50:12 +02:00
parent 5f53b9255e
commit 031b9b8ced
3 changed files with 19 additions and 1 deletions

View File

@ -41,6 +41,7 @@
#include "sci/graphics/helpers.h"
#include "sci/graphics/palette.h"
#include "sci/graphics/ports.h"
#include "sci/graphics/screen.h"
#include "sci/parser/vocabulary.h"
#include "sci/sound/audio.h"
#include "sci/sound/music.h"
@ -923,11 +924,15 @@ void gamestate_restore(EngineState *s, Common::SeekableReadStream *fh) {
// We don't need the thumbnail here, so just read it and discard it
Graphics::skipThumbnail(*fh);
// reset ports as one of the first things we do, because that may free() some hunk memory
// reset ports is one of the first things we do, because that may free() some hunk memory
// and we don't want to do that after we read in the saved game hunk memory
if (ser.isLoading()) {
// reset ports
if (g_sci->_gfxPorts)
g_sci->_gfxPorts->reset();
// clear screen
if (g_sci->_gfxScreen)
g_sci->_gfxScreen->clear();
}
s->reset(true);

View File

@ -251,6 +251,18 @@ GfxScreen::~GfxScreen() {
free(_displayScreen);
}
// should not used regulary, only meant for restore game
void GfxScreen::clear() {
// reset all screen data
memset(_visualScreen, 0, _pixels);
memset(_priorityScreen, 0, _pixels);
memset(_controlScreen, 0, _pixels);
memset(_displayScreen, 0, _displayPixels);
memset(&_ditheredPicColors, 0, sizeof(_ditheredPicColors));
_fontIsUpscaled = false;
copyToScreen();
}
void GfxScreen::copyToScreen() {
g_system->copyRectToScreen(_activeScreen, _displayWidth, 0, 0, _displayWidth, _displayHeight);
}

View File

@ -76,6 +76,7 @@ public:
byte getColorWhite() { return _colorWhite; }
byte getColorDefaultVectorData() { return _colorDefaultVectorData; }
void clear();
void copyToScreen();
void copyFromScreen(byte *buffer);
void kernelSyncWithFramebuffer();