bluecore/engine/ModelManager.h

82 行
1.5 KiB
C++

#ifndef BLUECORE_MODEL_MANAGER_H
#define BLUECORE_MODEL_MANAGER_H
// system includes
#include <map>
#include <string>
// project includes
#include "Utilities/Referenced.h"
#include "Utilities/Named.h"
#include "TextureManager.h"
#include "ShaderManager.h"
#include "MeshManager.h"
#include "RenderQueue.h"
// forward declaration
class TiXmlElement;
namespace BlueCore
{
class Model : public Named, public RenderItem
{
public:
struct TextureUnit
{
std::string mName;
ref_ptr<Texture> mTexture;
};
struct RenderPassDefinition
{
bool Enabled;
std::vector<TextureUnit> Textures;
ShaderProgram Program;
bool Tangents;
float Shininess;
float Specular[4];
};
ref_ptr<Mesh> ModelMesh;
ref_ptr<Mesh> ShadowMesh;
RenderPassDefinition AmbientPass;
RenderPassDefinition LitPass;
RenderPassDefinition DefaultPass;
void render(RenderDevice *) const;
};
class ModelManager : public Referenced
{
private:
typedef std::map< std::string, weak_ptr<Model> > ModelContainer;
ModelContainer _Models;
weak_ptr<TextureManager> _TextureManager;
weak_ptr<ShaderManager> _ShaderManager;
weak_ptr<MeshManager> _MeshManager;
void parseRenderPassDefinition(Model::RenderPassDefinition &Definition,
const TiXmlElement* DefinitionElement);
void unload();
public:
ModelManager(TextureManager *texturemanager, ShaderManager* shadermanager,
MeshManager* meshmanager);
~ModelManager();
Model *loadModel(const std::string &name);
};
} // namespace BlueCore
#endif