diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2014-07-21 13:43:59 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2014-07-21 13:43:59 -0700 |
commit | fb151b3fbe2ed25d5255c4b532a041e868086011 (patch) | |
tree | 415ba430665cbf451b69cee57aa9f305ac537bfc /src/map/sprite.cpp | |
parent | 4a110ff17e994a07a36a1d4bedf18f5e6c6dbb6a (diff) | |
download | qtlocation-mapboxgl-fb151b3fbe2ed25d5255c4b532a041e868086011.tar.gz |
Fix sprite->pos data race
Diffstat (limited to 'src/map/sprite.cpp')
-rw-r--r-- | src/map/sprite.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/map/sprite.cpp b/src/map/sprite.cpp index fd8a4ec7b5..60f19ab006 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> sprite = shared_from_this(); @@ -56,17 +59,14 @@ void Sprite::load(const std::string& base_url) { } void Sprite::complete(std::shared_ptr<Sprite> &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) { sprite->raster = std::make_unique<util::Image>(sprite->image); sprite->image.clear(); + sprite->loadedImage = true; } void Sprite::parseJSON(std::shared_ptr<Sprite> &sprite) { @@ -111,6 +112,7 @@ void Sprite::parseJSON(std::shared_ptr<Sprite> &sprite) { } sprite->pos.swap(pos); + sprite->loadedJSON = true; } } |