diff --git a/include/mbgl/map/sprite.hpp b/include/mbgl/map/sprite.hpp index 22126eb6a..c4f27a3ee 100644 --- a/include/mbgl/map/sprite.hpp +++ b/include/mbgl/map/sprite.hpp @@ -55,7 +55,8 @@ private: std::string url; std::string body; std::string image; - std::atomic loaded; + std::atomic loadedImage; + std::atomic loadedJSON; std::unordered_map pos; const SpritePosition empty; }; diff --git a/src/map/sprite.cpp b/src/map/sprite.cpp index fd8a4ec7b..60f19ab00 100644 --- a/src/map/sprite.cpp +++ b/src/map/sprite.cpp @@ -24,11 +24,14 @@ Sprite::Sprite(Map &map, float pixelRatio) : pixelRatio(pixelRatio), raster(), map(map), - loaded(false) { + loadedImage(false), + loadedJSON(false) { } void Sprite::load(const std::string& base_url) { - loaded = false; + loadedImage = false; + loadedJSON = false; + url = base_url; std::shared_ptr sprite = shared_from_this(); @@ -56,17 +59,14 @@ void Sprite::load(const std::string& base_url) { } void Sprite::complete(std::shared_ptr &sprite) { - const bool raster = bool(sprite->raster); - const bool json = bool(sprite->pos.size()); - if (raster && json && !sprite->loaded) { - sprite->loaded = true; + if (sprite->loadedImage && sprite->loadedJSON) { sprite->map.update(); Log::Info(Event::Sprite, "loaded %s", sprite->url.c_str()); } } bool Sprite::isLoaded() const { - return loaded; + return loadedImage && loadedJSON; } void Sprite::asyncParseImage() { @@ -80,6 +80,7 @@ void Sprite::asyncParseJSON() { void Sprite::parseImage(std::shared_ptr &sprite) { sprite->raster = std::make_unique(sprite->image); sprite->image.clear(); + sprite->loadedImage = true; } void Sprite::parseJSON(std::shared_ptr &sprite) { @@ -111,6 +112,7 @@ void Sprite::parseJSON(std::shared_ptr &sprite) { } sprite->pos.swap(pos); + sprite->loadedJSON = true; } }