From 8b984259c0d7d7af5394defc89a3b64d7b479425 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 30 Sep 2012 15:47:51 +0300 Subject: Some fixes in atlases deletion. --- src/resources/resourcemanager.cpp | 47 ++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'src/resources/resourcemanager.cpp') diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index 2bc269503..e479a9609 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -289,6 +289,11 @@ void ResourceManager::clearDeleted() while (resDelIter != mDeletedResources.end()) { logResource(*resDelIter); + + // for debug only +// delete *resDelIter; + // for debug only + ++ resDelIter; } } @@ -446,6 +451,18 @@ bool ResourceManager::isInCache(const std::string &idPath) const return (resIter != mResources.end() && resIter->second); } +Resource *ResourceManager::getTempResource(const std::string &idPath) +{ + const ResourceCIterator &resIter = mResources.find(idPath); + if (resIter != mResources.end()) + { + Resource *const res = resIter->second; + if (resIter->second) + return res; + } + return nullptr; +} + Resource *ResourceManager::getFromCache(const std::string &idPath) { // Check if the id exists, and return the value if it does. @@ -714,7 +731,7 @@ struct AtlasLoader const AtlasLoader *const rl = static_cast(v); AtlasResource *const resource = AtlasManager::loadTextureAtlas( rl->name, *rl->files); - AtlasManager::injectToResources(resource); +// AtlasManager::injectToResources(resource); return resource; } }; @@ -788,17 +805,35 @@ void ResourceManager::release(Resource *const res) void ResourceManager::moveToDeleted(Resource *const res) { + if (!res) + return; + + bool found(false); + const int count = res->getRefCount(); + if (count == 1) + logResource(res); + res->decRef(); ResourceIterator resIter = mResources.find(res->mIdPath); if (resIter != mResources.end() && resIter->second == res) { - mDeletedResources.insert(res); mResources.erase(resIter); + found = true; } - resIter = mOrphanedResources.find(res->mIdPath); - if (resIter != mOrphanedResources.end() && resIter->second == res) + else { - mDeletedResources.insert(res); - mOrphanedResources.erase(resIter); + resIter = mOrphanedResources.find(res->mIdPath); + if (resIter != mOrphanedResources.end() && resIter->second == res) + { + mOrphanedResources.erase(resIter); + found = true; + } + } + if (found) + { + if (count > 1) + mDeletedResources.insert(res); + else + delete res; } } -- cgit v1.2.3-60-g2f50