summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuha Alanen <juha.alanen@mapbox.com>2019-10-30 11:08:54 +0200
committerJuha Alanen <juha.alanen@mapbox.com>2019-11-20 15:25:53 +0200
commit63005548e0d8e74076e01344772d6df2884452a1 (patch)
treee25c80a803fb3c7cff51eb1412e7d634ecb2b463
parent2b5ffce17208a36248b6fcf13eac8bbf1058f41c (diff)
downloadqtlocation-mapboxgl-63005548e0d8e74076e01344772d6df2884452a1.tar.gz
[core] Add getMissingImages API to GeometryTile
-rw-r--r--src/mbgl/tile/geometry_tile.cpp26
-rw-r--r--src/mbgl/tile/geometry_tile.hpp2
2 files changed, 27 insertions, 1 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index 2a9729d284..f98bd639ab 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -257,13 +257,37 @@ void GeometryTile::getGlyphs(GlyphDependencies glyphDependencies) {
}
void GeometryTile::onImagesAvailable(ImageMap images, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) {
- worker.self().invoke(&GeometryTileWorker::onImagesAvailable, std::move(images), std::move(patterns), std::move(versionMap), imageCorrelationID);
+ if (!missingImagesRequested) {
+ worker.self().invoke(&GeometryTileWorker::onImagesAvailable,
+ std::move(images),
+ std::move(patterns),
+ std::move(versionMap),
+ imageCorrelationID);
+ } else {
+ layoutResult->iconAtlas = makeImageAtlas(images, patterns, versionMap);
+ missingImagesRequested = false;
+ }
}
void GeometryTile::getImages(ImageRequestPair pair) {
imageManager.getImages(*this, std::move(pair));
}
+void GeometryTile::getMissingImages(ImageDependencies& dependencies) {
+ if (dependencies.empty()) {
+ return;
+ }
+ missingImagesRequested = true;
+ for (const auto& pos : layoutResult->iconAtlas.patternPositions) {
+ dependencies.emplace(pos.first, ImageType::Pattern);
+ }
+ for (const auto& pos : layoutResult->iconAtlas.iconPositions) {
+ dependencies.emplace(pos.first, ImageType::Icon);
+ }
+ ImageRequestPair request = std::make_pair(dependencies, correlationID);
+ imageManager.getImages(*this, std::move(request));
+}
+
const std::shared_ptr<FeatureIndex> GeometryTile::getFeatureIndex() const {
return layoutResult ? layoutResult->featureIndex : nullptr;
}
diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp
index 566b359547..7901495cb6 100644
--- a/src/mbgl/tile/geometry_tile.hpp
+++ b/src/mbgl/tile/geometry_tile.hpp
@@ -45,6 +45,7 @@ public:
void getGlyphs(GlyphDependencies);
void getImages(ImageRequestPair);
+ void getMissingImages(ImageDependencies&);
bool layerPropertiesUpdated(const Immutable<style::LayerProperties>&) override;
@@ -128,6 +129,7 @@ private:
};
FadeState fadeState = FadeState::Loaded;
+ bool missingImagesRequested = false;
};
} // namespace mbgl