Files
itgmania212121/stepmania/src/ModelManager.cpp
T
Chris Danford 4106625ad3 split Model into ModelGeometry and materials+animations
single-instance Model geometry
2004-02-08 09:04:23 +00:00

83 lines
1.9 KiB
C++

#include "global.h"
/*
-----------------------------------------------------------------------------
Class: ModelManager
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ModelManager.h"
#include "RageBitmapTexture.h"
#include "arch/MovieTexture/MovieTexture.h"
#include "RageUtil.h"
#include "RageLog.h"
#include "RageException.h"
#include "RageDisplay.h"
ModelManager* MODELMAN = NULL;
ModelManager::ModelManager()
{
}
ModelManager::~ModelManager()
{
for( std::map<CString, RageModelGeometry*>::iterator i = m_mapFileToModel.begin();
i != m_mapFileToModel.end();
++i )
{
RageModelGeometry* pModel = i->second;
if( pModel->m_iRefCount )
LOG->Trace( "TEXTUREMAN LEAK: '%s', RefCount = %d.", i->first.c_str(), pModel->m_iRefCount );
SAFE_DELETE( pModel );
}
}
RageModelGeometry* ModelManager::LoadMilkshapeAscii( CString sFile )
{
std::map<CString, RageModelGeometry*>::iterator p = m_mapFileToModel.find(sFile);
if(p != m_mapFileToModel.end())
{
/* Found the texture. Just increase the refcount and return it. */
RageModelGeometry* pModel = p->second;
pModel->m_iRefCount++;
return pModel;
}
RageModelGeometry* pModel = new RageModelGeometry;
pModel->LoadMilkshapeAscii( sFile );
m_mapFileToModel[sFile] = pModel;
return pModel;
}
void ModelManager::UnloadModel( RageModelGeometry *m )
{
m->m_iRefCount--;
ASSERT( m->m_iRefCount >= 0 );
if( m->m_iRefCount )
return; /* Can't unload textures that are still referenced. */
for( std::map<CString, RageModelGeometry*>::iterator i = m_mapFileToModel.begin();
i != m_mapFileToModel.end();
i++ )
{
if( i->second == m )
{
m_mapFileToModel.erase( i ); // remove map entry
SAFE_DELETE( m ); // free the texture
return;
}
}
ASSERT(0); // we tried to delete a texture that wasn't loaded.
}