From 70d0a26f98da50b348433a772cf02b025a70c5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Thu, 2 Jul 2015 17:36:27 +0200 Subject: [PATCH] key sprites in sprite atlas by name and wrap value --- src/mbgl/geometry/sprite_atlas.cpp | 4 ++-- src/mbgl/geometry/sprite_atlas.hpp | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/mbgl/geometry/sprite_atlas.cpp b/src/mbgl/geometry/sprite_atlas.cpp index c54646355..779afe288 100644 --- a/src/mbgl/geometry/sprite_atlas.cpp +++ b/src/mbgl/geometry/sprite_atlas.cpp @@ -51,7 +51,7 @@ Rect SpriteAtlas::allocateImage(const size_t pixel_width SpriteAtlasElement SpriteAtlas::getImage(const std::string& name, const bool wrap) { std::lock_guard lock(mtx); - auto rect_it = images.find(name); + auto rect_it = images.find({ name, wrap }); if (rect_it != images.end()) { return { rect_it->second.pos, rect_it->second.texture }; } @@ -69,7 +69,7 @@ SpriteAtlasElement SpriteAtlas::getImage(const std::string& name, const bool wra return { Rect { 0, 0, 0, 0 }, nullptr }; } - const Holder& holder = images.emplace(name, Holder{ sprite, rect }).first->second; + const Holder& holder = images.emplace(Key{ name, wrap }, Holder{ sprite, rect }).first->second; copy(holder, wrap); return { rect, sprite }; diff --git a/src/mbgl/geometry/sprite_atlas.hpp b/src/mbgl/geometry/sprite_atlas.hpp index 237ff0c7a..c595d2ab7 100644 --- a/src/mbgl/geometry/sprite_atlas.hpp +++ b/src/mbgl/geometry/sprite_atlas.hpp @@ -75,6 +75,8 @@ private: const Rect pos; }; + using Key = std::pair; + void allocate(); Rect allocateImage(size_t width, size_t height); void copy(const Holder& holder, const bool wrap); @@ -83,7 +85,7 @@ private: SpriteStore& store; const float pixelRatio; BinPack bin; - std::map images; + std::map images; std::set uninitialized; std::unique_ptr data; std::atomic dirty;