diff options
Diffstat (limited to 'src/ResourceCache.cpp')
-rw-r--r-- | src/ResourceCache.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/ResourceCache.cpp b/src/ResourceCache.cpp index 474360c..4bdd75d 100644 --- a/src/ResourceCache.cpp +++ b/src/ResourceCache.cpp @@ -1,12 +1,12 @@ #include "../include/ResourceCache.hpp" #include <unordered_map> -#include <stdexcept> using namespace std; namespace dchat { unordered_map<string, sf::Font*> fonts; + unordered_map<string, sf::Texture*> textures; const sf::Font& ResourceCache::getFont(const string &filepath) { @@ -20,10 +20,31 @@ namespace dchat delete font; string errMsg = "Failed to load font: "; errMsg += filepath; - throw runtime_error(errMsg); + throw FailedToLoadResourceException(errMsg); } fonts[filepath] = font; return *font; } + + const sf::Texture* ResourceCache::getTexture(const string &filepath) + { + auto it = textures.find(filepath); + if(it != textures.end()) + return it->second; + + sf::Texture *texture = new sf::Texture(); + if(!texture->loadFromFile(filepath)) + { + delete texture; + string errMsg = "Failed to load texture: "; + errMsg += filepath; + throw FailedToLoadResourceException(errMsg); + } + + texture->setSmooth(true); + texture->generateMipmap(); + textures[filepath] = texture; + return texture; + } } |