#pragma once #include #include #include #include "Shader.h" #include "LevelMap.h" class ResourceManager { public: // resource storage static std::map shaders; static std::map levelMaps; // loads (and generates) a shader program from file loading vertex, fragment (and geometry) shader's source code. If gShaderFile is not nullptr, it also loads a geometry shader static Shader LoadShader(const char* vShaderFile, const char* fShaderFile, const char* gShaderFile, std::string name); // retrieves a stored sader static Shader GetShader(std::string name); // properly de-allocates all loaded resources static void Clear(); static LevelMap LoadLevelMap(const char* filePath, std::string name); private: // private constructor, that is we do not want any actual resource manager objects. Its members and functions should be publicly available (static). ResourceManager() { } // loads and generates a shader from file static Shader LoadShaderFromFile(const char* vShaderFile, const char* fShaderFile, const char* gShaderFile = nullptr); static LevelMap LoadLevelMapFromFile(const char* filePath); };