aboutsummaryrefslogtreecommitdiff
path: root/src/ResourceCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ResourceCache.cpp')
-rw-r--r--src/ResourceCache.cpp20
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;
+ }
}