#include "precompiled.h" #include "graphics/MeshManager.h" #include "CLogger.h" CMeshManager::CMeshManager() { } CMeshManager::~CMeshManager() { } CModelDef *CMeshManager::GetMesh(const char *filename) { mesh_map::iterator iter; CStr fn(filename); if((iter = m_MeshMap.find(fn)) == m_MeshMap.end()) { try { CModelDef *model = CModelDef::Load(filename); if(!model) return NULL; LOG(MESSAGE, "mesh", "Loading mesh '%s'...\n", filename); model->m_Filename = fn; model->m_RefCount = 1; m_MeshMap[fn] = model; return model; } catch(...) { LOG(ERROR, "mesh", "Could not load mesh '%s'\n!", filename); return NULL; } } else { LOG(MESSAGE, "mesh", "Loading mesh '%s%' (cached)...\n", filename); CModelDef *model = (CModelDef *)(*iter).second; model->m_RefCount++; return model; } } int CMeshManager::ReleaseMesh(CModelDef* mesh) { if(!mesh) return 0; // FIXME: Someone sort this out. I'm tired. // Looks like it might be a multiple delete; not sure best way // to resolve it. MT. mesh_map::iterator iter; try { iter = m_MeshMap.find(mesh->m_Filename); } catch( ... ) { debug_out( "FIXME: Do something with %s(%d)", __FILE__, __LINE__ ); return( 0 ); } if(iter == m_MeshMap.end()) return 0; mesh->m_RefCount--; if(mesh->m_RefCount <= 0) { m_MeshMap.erase(iter); delete mesh; mesh = NULL; return 0; } return mesh->m_RefCount; }