#pragma once #include #include #include #include namespace frostbite2D { class Renderer; class ShaderManager { public: static ShaderManager& get(); bool init(const std::string& shadersDir); void shutdown(); Shader* getShader(const std::string& name); bool hasShader(const std::string& name) const; const std::unordered_map>& getLoadedShaders() const { return shaders_; } ~ShaderManager() = default; ShaderManager() = default; private: std::unordered_map> shaders_; std::string shadersDir_; bool loadShadersFromConfig(const std::string& configPath); bool loadShader(const std::string& name, const std::string& vertPath, const std::string& fragPath); ShaderManager(const ShaderManager&) = delete; ShaderManager& operator=(const ShaderManager&) = delete; }; }