#pragma once #include "rbx/Boost.hpp" #include #include namespace RBX { namespace Graphics { class VertexShader; class FragmentShader; class ShaderProgram; class VisualEngine; class ShaderManager { public: ShaderManager(VisualEngine* visualEngine); ~ShaderManager(); void loadShaders(const std::string& folder, const std::string& language, bool consoleOutput); shared_ptr getProgram(const std::string& vsName, const std::string& fsName); shared_ptr getProgramOrFFP(const std::string& vsName, const std::string& fsName); shared_ptr getProgramFFP(); private: VisualEngine* visualEngine; typedef boost::unordered_map > VertexShaders; VertexShaders vertexShaders; typedef boost::unordered_map > FragmentShaders; FragmentShaders fragmentShaders; typedef boost::unordered_map > ShaderPrograms; ShaderPrograms shaderPrograms; shared_ptr shaderProgramFFP; shared_ptr createProgram(const std::string& name, const std::string& vsName, const std::string& fsName); }; } }