polyvox/include/MaterialMap.h
2007-08-29 22:54:52 +00:00

75 lines
2.1 KiB
C++

#ifndef __MATERIALMAP_H__
#define __MATERIALMAP_H__
#include <OgreResourceManager.h>
namespace Ogre
{
class MaterialMap : public Ogre::Resource
{
String mMaterials[256];
protected:
// must implement these from the Ogre::Resource interface
void loadImpl ();
void unloadImpl ();
size_t calculateSize () const;
public:
MaterialMap (Ogre::ResourceManager *creator, const Ogre::String &name,
Ogre::ResourceHandle handle, const Ogre::String &group, bool isManual = false,
Ogre::ManualResourceLoader *loader = 0);
virtual ~MaterialMap ();
void clearMaterials();
String getMaterialAtIndex(uchar uIndex);
void setMaterialAtIndex(uchar uIndex, const String& materialName);
/*void setString (const Ogre::String &str);
const Ogre::String &getString () const;*/
};
class MaterialMapPtr : public Ogre::SharedPtr<MaterialMap>
{
public:
MaterialMapPtr () : Ogre::SharedPtr<MaterialMap> () {}
explicit MaterialMapPtr (MaterialMap *rep) : Ogre::SharedPtr<MaterialMap> (rep) {}
MaterialMapPtr (const MaterialMapPtr &r) : Ogre::SharedPtr<MaterialMap> (r) {}
MaterialMapPtr (const Ogre::ResourcePtr &r) : Ogre::SharedPtr<MaterialMap> ()
{
// lock & copy other mutex pointer
OGRE_LOCK_MUTEX (*r.OGRE_AUTO_MUTEX_NAME)
OGRE_COPY_AUTO_SHARED_MUTEX (r.OGRE_AUTO_MUTEX_NAME)
pRep = static_cast<MaterialMap*> (r.getPointer ());
pUseCount = r.useCountPointer ();
if (pUseCount)
{
++ (*pUseCount);
}
}
/// Operator used to convert a ResourcePtr to a TextFilePtr
MaterialMapPtr& operator=(const Ogre::ResourcePtr& r)
{
if (pRep == static_cast<MaterialMap*> (r.getPointer ()))
return *this;
release ();
// lock & copy other mutex pointer
OGRE_LOCK_MUTEX (*r.OGRE_AUTO_MUTEX_NAME)
OGRE_COPY_AUTO_SHARED_MUTEX(r.OGRE_AUTO_MUTEX_NAME)
pRep = static_cast<MaterialMap*> (r.getPointer());
pUseCount = r.useCountPointer ();
if (pUseCount)
{
++ (*pUseCount);
}
return *this;
}
};
}
#endif