aboutsummaryrefslogtreecommitdiff
path: root/engines/made/resource.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2009-10-04 09:31:37 +0000
committerFilippos Karapetis2009-10-04 09:31:37 +0000
commitdecdc5771a6c4733ab4a1276fc60c2454c8340a6 (patch)
treee07fb4c33053c840447cac524fb8e45cb0d77fda /engines/made/resource.cpp
parent1ed6a2668be5462694c81369cc5abb89e199e2dc (diff)
downloadscummvm-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.cpp15
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--;
- }
+ }
}
}
}