diff options
Diffstat (limited to 'src/renderer.cpp')
-rw-r--r-- | src/renderer.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/renderer.cpp b/src/renderer.cpp index 4f5b4ff..0035ce2 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
@@ -228,20 +228,24 @@ void Renderer::render(Game& game) { | |||
228 | SDL_RenderPresent(ren_.get()); | 228 | SDL_RenderPresent(ren_.get()); |
229 | } | 229 | } |
230 | 230 | ||
231 | int Renderer::loadImageFromFile(std::string_view filename) { | 231 | int Renderer::loadImageFromFile(std::string filename) { |
232 | surface_ptr pfs(IMG_Load(filename.data())); | 232 | if (!filenameToTexId_.count(filename)) { |
233 | if (!pfs) | 233 | surface_ptr pfs(IMG_Load(filename.data())); |
234 | { | 234 | if (!pfs) |
235 | throw img_error(); | 235 | { |
236 | } | 236 | throw img_error(); |
237 | } | ||
237 | 238 | ||
238 | texture_ptr tex = texture_ptr(SDL_CreateTextureFromSurface(ren_.get(), pfs.get())); | 239 | texture_ptr tex = texture_ptr(SDL_CreateTextureFromSurface(ren_.get(), pfs.get())); |
239 | //SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND); | 240 | //SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND); |
240 | 241 | ||
241 | int texId = textures_.size(); | 242 | int texId = textures_.size(); |
242 | textures_.push_back(std::move(tex)); | 243 | textures_.push_back(std::move(tex)); |
244 | |||
245 | filenameToTexId_[filename] = texId; | ||
246 | } | ||
243 | 247 | ||
244 | return texId; | 248 | return filenameToTexId_[filename]; |
245 | } | 249 | } |
246 | 250 | ||
247 | void Renderer::renderMessageLine(MessageCache& line, const std::string& text, Game& game) { | 251 | void Renderer::renderMessageLine(MessageCache& line, const std::string& text, Game& game) { |