diff options
author | Filippos Karapetis | 2009-10-04 09:31:37 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-10-04 09:31:37 +0000 |
commit | decdc5771a6c4733ab4a1276fc60c2454c8340a6 (patch) | |
tree | e07fb4c33053c840447cac524fb8e45cb0d77fda /engines/made/resource.cpp | |
parent | 1ed6a2668be5462694c81369cc5abb89e199e2dc (diff) | |
download | scummvm-rg350-decdc5771a6c4733ab4a1276fc60c2454c8340a6.tar.gz scummvm-rg350-decdc5771a6c4733ab4a1276fc60c2454c8340a6.tar.bz2 scummvm-rg350-decdc5771a6c4733ab4a1276fc60c2454c8340a6.zip |
Applied patch #2872409 "MADE engine fixes" by agent-q, with one small modification (initialized _soundStarted in the ScriptFunctions constructor)
svn-id: r44589
Diffstat (limited to 'engines/made/resource.cpp')
-rw-r--r-- | engines/made/resource.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/engines/made/resource.cpp b/engines/made/resource.cpp index cfa4f43f65..a2e057f65d 100644 --- a/engines/made/resource.cpp +++ b/engines/made/resource.cpp @@ -45,6 +45,7 @@ PictureResource::PictureResource() : _picture(NULL), _picturePalette(NULL) { PictureResource::~PictureResource() { if (_picture) { + _picture->free(); delete _picture; _picture = 0; } @@ -183,8 +184,10 @@ AnimationResource::AnimationResource() { } AnimationResource::~AnimationResource() { - for (uint i = 0; i < _frames.size(); i++) + for (uint i = 0; i < _frames.size(); i++) { + _frames[i]->free(); delete _frames[i]; + } } void AnimationResource::load(byte *source, int size) { @@ -373,6 +376,7 @@ void GenericResource::load(byte *source, int size) { ResourceReader::ResourceReader() { _isV1 = false; + _cacheDataSize = 0; } ResourceReader::~ResourceReader() { @@ -543,8 +547,12 @@ Resource *ResourceReader::getResourceFromCache(ResourceSlot *slot) { } void ResourceReader::addResourceToCache(ResourceSlot *slot, Resource *res) { - if (_cacheCount >= kMaxResourceCacheCount) + _cacheDataSize += slot->size; + + if (_cacheDataSize >= kMaxResourceCacheSize) { purgeCache(); + } + slot->res = res; slot->refCount = 1; _cacheCount++; @@ -562,11 +570,12 @@ void ResourceReader::purgeCache() { for (ResourceSlots::iterator slotIter = slots->begin(); slotIter != slots->end(); ++slotIter) { ResourceSlot *slot = &(*slotIter); if (slot->refCount <= 0 && slot->res) { + _cacheDataSize -= slot->size; delete slot->res; slot->res = NULL; slot->refCount = 0; _cacheCount--; - } + } } } } |