2004-11-08 23:02:01 +01:00
|
|
|
#include "precompiled.h"
|
|
|
|
#include "graphics/MeshManager.h"
|
|
|
|
#include "CLogger.h"
|
2004-12-12 19:40:00 +01:00
|
|
|
#include "FileUnpacker.h" // to get access to its CError
|
2004-12-12 20:43:55 +01:00
|
|
|
#include "ModelDef.h"
|
2004-11-08 23:02:01 +01:00
|
|
|
|
|
|
|
CMeshManager::CMeshManager()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
CMeshManager::~CMeshManager()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2004-12-12 19:40:00 +01:00
|
|
|
CModelDefPtr CMeshManager::GetMesh(const char *filename)
|
2004-11-08 23:02:01 +01:00
|
|
|
{
|
2005-01-11 17:58:16 +01:00
|
|
|
CStr fn(filename);
|
2004-12-12 19:40:00 +01:00
|
|
|
mesh_map::iterator iter = m_MeshMap.find(fn);
|
2005-01-11 17:58:16 +01:00
|
|
|
if (iter != m_MeshMap.end())
|
|
|
|
{
|
2004-12-12 19:40:00 +01:00
|
|
|
try
|
|
|
|
{
|
|
|
|
CModelDefPtr model (iter->second);
|
2005-01-13 01:17:31 +01:00
|
|
|
//LOG(MESSAGE, "mesh", "Loading mesh '%s%' (cached)...", filename);
|
2004-12-12 19:40:00 +01:00
|
|
|
return model;
|
|
|
|
}
|
|
|
|
// If the mesh has already been deleted, the weak_ptr -> shared_ptr
|
|
|
|
// conversion will throw bad_weak_ptr (and we need to reload the mesh)
|
|
|
|
catch (boost::bad_weak_ptr)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
2004-11-11 08:09:32 +01:00
|
|
|
|
|
|
|
try
|
|
|
|
{
|
2004-12-12 19:40:00 +01:00
|
|
|
CModelDefPtr model (CModelDef::Load(filename));
|
|
|
|
if (!model)
|
|
|
|
return CModelDefPtr();
|
|
|
|
|
2005-01-13 01:17:31 +01:00
|
|
|
//LOG(MESSAGE, "mesh", "Loading mesh '%s'...", filename);
|
2004-12-12 19:40:00 +01:00
|
|
|
m_MeshMap[fn] = model;
|
|
|
|
return model;
|
2004-11-11 08:09:32 +01:00
|
|
|
}
|
2004-12-12 19:40:00 +01:00
|
|
|
catch (CFileUnpacker::CError)
|
2004-11-11 08:09:32 +01:00
|
|
|
{
|
2005-01-11 17:58:16 +01:00
|
|
|
LOG(ERROR, "mesh", "Could not load mesh '%s'!", filename);
|
2004-12-12 19:40:00 +01:00
|
|
|
return CModelDefPtr();
|
2004-11-11 08:09:32 +01:00
|
|
|
}
|
2004-11-08 23:02:01 +01:00
|
|
|
}
|