diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/neverhood/resourceman.cpp | 10 | ||||
-rw-r--r-- | engines/neverhood/resourceman.h | 1 | ||||
-rw-r--r-- | engines/neverhood/scene.cpp | 3 |
3 files changed, 14 insertions, 0 deletions
diff --git a/engines/neverhood/resourceman.cpp b/engines/neverhood/resourceman.cpp index 7b7d5cf236..9e5f9ae52f 100644 --- a/engines/neverhood/resourceman.cpp +++ b/engines/neverhood/resourceman.cpp @@ -116,4 +116,14 @@ void ResourceMan::unloadResource(ResourceHandle &resourceHandle) { } } +void ResourceMan::purgeResources() { + for (Common::HashMap<uint32, ResourceData*>::iterator it = _data.begin(); it != _data.end(); ++it) { + ResourceData *resourceData = (*it)._value; + if (resourceData->dataRefCount == 0) { + delete resourceData->data; + resourceData->data = NULL; + } + } +} + } // End of namespace Neverhood diff --git a/engines/neverhood/resourceman.h b/engines/neverhood/resourceman.h index e83de240ed..5a3697fe0d 100644 --- a/engines/neverhood/resourceman.h +++ b/engines/neverhood/resourceman.h @@ -80,6 +80,7 @@ public: void queryResource(uint32 fileHash, ResourceHandle &resourceHandle); void loadResource(ResourceHandle &resourceHandle); void unloadResource(ResourceHandle &resourceHandle); + void purgeResources(); protected: typedef Common::HashMap<uint32, ResourceFileEntry> EntriesMap; Common::Array<BlbArchive*> _archives; diff --git a/engines/neverhood/scene.cpp b/engines/neverhood/scene.cpp index 6141ee4487..c899a59408 100644 --- a/engines/neverhood/scene.cpp +++ b/engines/neverhood/scene.cpp @@ -70,6 +70,9 @@ Scene::~Scene() { delete *iter; // Don't delete surfaces since they always belong to an entity + + // Purge the resources after each scene + _vm->_res->purgeResources(); } |