diff options
Diffstat (limited to 'src/ResourceCache.cpp')
-rw-r--r-- | src/ResourceCache.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/ResourceCache.cpp b/src/ResourceCache.cpp index 3f73189..4664bf0 100644 --- a/src/ResourceCache.cpp +++ b/src/ResourceCache.cpp @@ -7,6 +7,7 @@ namespace dchat { unordered_map<string, sf::Font*> fonts; unordered_map<string, sf::Texture*> textures; + unordered_map<string, sf::Shader*> shaders; const sf::Font* ResourceCache::getFont(const string &filepath) { @@ -47,4 +48,23 @@ namespace dchat textures[filepath] = texture; return texture; } + + sf::Shader* ResourceCache::getShader(const std::string &filepath, sf::Shader::Type shaderType) + { + auto it = shaders.find(filepath); + if(it != shaders.end()) + return it->second; + + sf::Shader *shader = new sf::Shader(); + if(!shader->loadFromFile(filepath, shaderType)) + { + delete shader; + string errMsg = "Failed to load shader: "; + errMsg += filepath; + throw FailedToLoadResourceException(errMsg); + } + + shaders[filepath] = shader; + return shader; + } } |