diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp index 262fc0871c2..af8f750535e 100644 --- a/src/mbgl/source/source.cpp +++ b/src/mbgl/source/source.cpp @@ -328,7 +328,7 @@ bool Source::findLoadedChildren(const TileID& tileID, int32_t maxCoveringZoom, s * * @return boolean Whether a parent was found. */ -void Source::findLoadedParent(const TileID& tileID, int32_t minCoveringZoom, std::vector& retain) { +void Source::findLoadedParent(const TileID& tileID, int32_t minCoveringZoom, std::vector& retain, const StyleUpdateParameters& parameters) { for (int32_t z = tileID.z - 1; z >= minCoveringZoom; --z) { const TileID parent_id = tileID.parent(z, info->maxZoom); const TileData::State state = hasTile(parent_id); @@ -338,6 +338,12 @@ void Source::findLoadedParent(const TileID& tileID, int32_t minCoveringZoom, std return; } } + + if (cache.has(parent_id.normalized().to_uint64())) { + addTile(parent_id, parameters); + retain.emplace_back(parent_id); + return; + } } } @@ -400,7 +406,7 @@ bool Source::update(const StyleUpdateParameters& parameters) { // Then, if there are no complete child tiles, try to find existing // parent tiles that completely cover the missing tile. if (!complete) { - findLoadedParent(tileID, minCoveringZoom, retain); + findLoadedParent(tileID, minCoveringZoom, retain, parameters); } } } diff --git a/src/mbgl/source/source.hpp b/src/mbgl/source/source.hpp index c85e2ccd2d1..1aad191a5ca 100644 --- a/src/mbgl/source/source.hpp +++ b/src/mbgl/source/source.hpp @@ -88,7 +88,7 @@ class Source : private util::noncopyable { bool isNewTile); bool handlePartialTile(const TileID&); bool findLoadedChildren(const TileID&, int32_t maxCoveringZoom, std::vector& retain); - void findLoadedParent(const TileID&, int32_t minCoveringZoom, std::vector& retain); + void findLoadedParent(const TileID&, int32_t minCoveringZoom, std::vector& retain, const StyleUpdateParameters&); TileData::State addTile(const TileID&, const StyleUpdateParameters&); TileData::State hasTile(const TileID&);