summaryrefslogtreecommitdiff
path: root/src/map/sprite.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2014-07-21 13:43:59 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2014-07-21 13:43:59 -0700
commitfb151b3fbe2ed25d5255c4b532a041e868086011 (patch)
tree415ba430665cbf451b69cee57aa9f305ac537bfc /src/map/sprite.cpp
parent4a110ff17e994a07a36a1d4bedf18f5e6c6dbb6a (diff)
downloadqtlocation-mapboxgl-fb151b3fbe2ed25d5255c4b532a041e868086011.tar.gz
Fix sprite->pos data race
Diffstat (limited to 'src/map/sprite.cpp')
-rw-r--r--src/map/sprite.cpp16
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;
}
}