diff options
author | Joseph-Eugene Winzer | 2018-03-24 17:12:54 +0100 |
---|---|---|
committer | Thierry Crozat | 2018-04-15 18:23:12 +0100 |
commit | ab208d107758837fbad1f75dd0de6edce05cd0bb (patch) | |
tree | 8d19f7ef997b4f87eb215df7417be179702029df | |
parent | 88a2026830186762898d0a47db3cf1c1047cd6d1 (diff) | |
download | scummvm-rg350-ab208d107758837fbad1f75dd0de6edce05cd0bb.tar.gz scummvm-rg350-ab208d107758837fbad1f75dd0de6edce05cd0bb.tar.bz2 scummvm-rg350-ab208d107758837fbad1f75dd0de6edce05cd0bb.zip |
SUPERNOVA: Implements image buffering
-rw-r--r-- | engines/supernova/resman.cpp | 55 | ||||
-rw-r--r-- | engines/supernova/resman.h | 12 | ||||
-rw-r--r-- | engines/supernova/supernova.cpp | 14 |
3 files changed, 48 insertions, 33 deletions
diff --git a/engines/supernova/resman.cpp b/engines/supernova/resman.cpp index 69f99b0907..acc2dcb147 100644 --- a/engines/supernova/resman.cpp +++ b/engines/supernova/resman.cpp @@ -29,6 +29,7 @@ #include "graphics/cursorman.h" #include "graphics/palette.h" +#include "supernova/graphics.h" #include "supernova/resman.h" #include "supernova/supernova.h" @@ -77,24 +78,8 @@ ResourceManager::~ResourceManager() { delete _musicOutro; for (int i = 0; i < kAudioNumSamples; ++i) delete _soundSamples[i]; -} - -Audio::SeekableAudioStream *ResourceManager::getSoundStream(AudioIndex index) { - Audio::SeekableAudioStream *stream = _soundSamples[index]; - stream->rewind(); - - return stream; -} - -Audio::AudioStream *ResourceManager::getSoundStream(MusicIndex index) { - switch (index) { - case kMusicIntro: - return _musicIntro; - case kMusicOutro: - return _musicOutro; - default: - error("Invalid music constant in playAudio()"); - } + for (int i = 0; i < kNumImageFiles; ++i) + delete _images[i]; } void ResourceManager::initSoundFiles() { @@ -143,6 +128,7 @@ void ResourceManager::initSoundFiles() { void ResourceManager::initGraphics() { _vm->_system->getPaletteManager()->setPalette(initVGAPalette, 0, 256); initCursorGraphics(); + initImages(); } void ResourceManager::initCursorGraphics() { @@ -170,6 +156,39 @@ void ResourceManager::initCursorGraphics() { CursorMan.showMouse(true); } +void ResourceManager::initImages() { + for (int i = 0; i < kNumImageFiles; ++i) { + _images[i] = new MSNImage(); + if (!_images[i]->init(i)) + error("Failed reading image file msn_data.%03d", i); + } +} + +Audio::SeekableAudioStream *ResourceManager::getSoundStream(AudioIndex index) { + Audio::SeekableAudioStream *stream = _soundSamples[index]; + stream->rewind(); + + return stream; +} + +Audio::AudioStream *ResourceManager::getSoundStream(MusicIndex index) const { + switch (index) { + case kMusicIntro: + return _musicIntro; + case kMusicOutro: + return _musicOutro; + default: + error("Invalid music constant in playAudio()"); + } +} + +MSNImage *ResourceManager::getImage(int filenumber) const { + assert(filenumber < kNumImageFiles); + + return _images[filenumber]; +} + + static Common::MemoryReadStream *convertToMod(const char *filename, int version) { // MSN format struct { diff --git a/engines/supernova/resman.h b/engines/supernova/resman.h index 075b1e671f..d1304bfe4c 100644 --- a/engines/supernova/resman.h +++ b/engines/supernova/resman.h @@ -23,8 +23,6 @@ #ifndef SUPERNOVA_RESOURCES_H #define SUPERNOVA_RESOURCES_H -#include "common/ptr.h" - #include "supernova/sound.h" namespace Audio { @@ -33,18 +31,25 @@ class SeekableAudioStream; namespace Supernova { +class MSNImage; + class ResourceManager { public: + static const int kNumImageFiles = 44; + +public: ResourceManager(SupernovaEngine *vm); ~ResourceManager(); Audio::SeekableAudioStream *getSoundStream(AudioIndex index); - Audio::AudioStream *getSoundStream(MusicIndex index); + Audio::AudioStream *getSoundStream(MusicIndex index) const; + MSNImage *getImage(int filenumber) const; private: void initSoundFiles(); void initGraphics(); void initCursorGraphics(); + void initImages(); private: SupernovaEngine *_vm; @@ -52,6 +57,7 @@ private: Audio::AudioStream *_musicIntro; Audio::AudioStream *_musicOutro; int _audioRate; + MSNImage *_images[kNumImageFiles]; byte _cursorNormal[256]; byte _cursorWait[256]; }; diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp index ce2ec1d1ef..d1e1311a5a 100644 --- a/engines/supernova/supernova.cpp +++ b/engines/supernova/supernova.cpp @@ -104,7 +104,6 @@ SupernovaEngine::SupernovaEngine(OSystem *syst) SupernovaEngine::~SupernovaEngine() { DebugMan.clearAllDebugChannels(); - delete _currentImage; delete _console; delete _gm; delete _sound; @@ -308,19 +307,10 @@ void SupernovaEngine::renderImage(int section) { } bool SupernovaEngine::setCurrentImage(int filenumber) { - if (_currentImage && _currentImage->_filenumber == filenumber) - return true; - - delete _currentImage; - _currentImage = new MSNImage(); - if (!_currentImage->init(filenumber)) { - delete _currentImage; - _currentImage = nullptr; - return false; - } - + _currentImage = _resMan->getImage(filenumber); _system->getPaletteManager()->setPalette(_currentImage->getPalette(), 16, 239); paletteBrightness(); + return true; } |