50 lines
1.0 KiB
C++
Executable File
50 lines
1.0 KiB
C++
Executable File
#include "precompiled.h"
|
|
#include "graphics/MeshManager.h"
|
|
#include "CLogger.h"
|
|
#include "FileUnpacker.h" // to get access to its CError
|
|
#include "ModelDef.h"
|
|
|
|
CMeshManager::CMeshManager()
|
|
{
|
|
}
|
|
|
|
CMeshManager::~CMeshManager()
|
|
{
|
|
}
|
|
|
|
CModelDefPtr CMeshManager::GetMesh(const char *filename)
|
|
{
|
|
CStr fn(filename);
|
|
mesh_map::iterator iter = m_MeshMap.find(fn);
|
|
if (iter != m_MeshMap.end())
|
|
{
|
|
try
|
|
{
|
|
CModelDefPtr model (iter->second);
|
|
//LOG(MESSAGE, "mesh", "Loading mesh '%s%' (cached)...", filename);
|
|
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)
|
|
{
|
|
}
|
|
}
|
|
|
|
try
|
|
{
|
|
CModelDefPtr model (CModelDef::Load(filename));
|
|
if (!model)
|
|
return CModelDefPtr();
|
|
|
|
//LOG(MESSAGE, "mesh", "Loading mesh '%s'...", filename);
|
|
m_MeshMap[fn] = model;
|
|
return model;
|
|
}
|
|
catch (CFileUnpacker::CError)
|
|
{
|
|
LOG(ERROR, "mesh", "Could not load mesh '%s'!", filename);
|
|
return CModelDefPtr();
|
|
}
|
|
}
|