diff options
author | Juha Alanen <juha.alanen@mapbox.com> | 2019-10-30 11:08:54 +0200 |
---|---|---|
committer | Juha Alanen <juha.alanen@mapbox.com> | 2019-11-20 15:25:53 +0200 |
commit | 63005548e0d8e74076e01344772d6df2884452a1 (patch) | |
tree | e25c80a803fb3c7cff51eb1412e7d634ecb2b463 | |
parent | 2b5ffce17208a36248b6fcf13eac8bbf1058f41c (diff) | |
download | qtlocation-mapboxgl-63005548e0d8e74076e01344772d6df2884452a1.tar.gz |
[core] Add getMissingImages API to GeometryTile
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 26 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 2 |
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 |