#ifndef __SHADERMANAGER_H__ #define __SHADERMANAGER_H__ #include #include #include #include #include "common.h" namespace CHCDemoEngine { class Matrix4x4; class Transform3; class ShaderProgram; typedef std::map ShaderMap; /** Loads a scene and also handles the cleanup */ class ShaderManager { public: /** Returns the resource manager as a singleton. */ inline static ShaderManager *GetSingleton(); /** We also want full control over the delete. */ static void DelSingleton(); /** Creates a new shader program. */ ShaderProgram *CreateFragmentProgram(const std::string &filename, const std::string &funcName, const std::string &name); ShaderProgram *CreateVertexProgram(const std::string &filename, const std::string &funcName, const std::string &name); void EnableFragmentProfile(); void EnableVertexProfile(); void DisableFragmentProfile(); void DisableVertexProfile(); ShaderProgram *GetShaderProgram(const std::string &name); protected: /** Default constructor. The constructor is protected to have control over instantiation using the singleton pattern. */ ShaderManager(); ~ShaderManager(); ShaderProgram *CreateShaderProgram(const std::string &filename, const std::string &funcName, const std::string &name, bool isFragment); //////////////////////// ShaderContainer mShaders; ShaderMap mShaderMap; private: static ShaderManager *sShaderManager; }; ShaderManager *ShaderManager::GetSingleton() { if (!sShaderManager) { sShaderManager = new ShaderManager(); } return sShaderManager; } } #endif