diff options
Diffstat (limited to 'src/mbgl/renderer/sources/render_geojson_source.cpp')
-rw-r--r-- | src/mbgl/renderer/sources/render_geojson_source.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/mbgl/renderer/sources/render_geojson_source.cpp b/src/mbgl/renderer/sources/render_geojson_source.cpp index 035244e371..67b4c48d9b 100644 --- a/src/mbgl/renderer/sources/render_geojson_source.cpp +++ b/src/mbgl/renderer/sources/render_geojson_source.cpp @@ -85,26 +85,27 @@ void RenderGeoJSONSource::update(Immutable<style::Source::Impl> baseImpl_, enabled = needsRendering; auto data_ = impl().getData().lock(); + if (!data_) { + // In Continuous mode, keep the existing tiles if the new data_ is not + // yet available, thus providing smart style transitions without flickering. + // In other modes, allow clearing the tile pyramid first, before the early + // return in order to avoid render tests being flaky. + if (parameters.mode != MapMode::Continuous) tilePyramid.clearAll(); + return; + } if (data.lock() != data_) { data = data_; tilePyramid.reduceMemoryUse(); - - if (data_) { - const uint8_t maxZ = impl().getZoomRange().max; - for (const auto& pair : tilePyramid.getTiles()) { - if (pair.first.canonical.z <= maxZ) { - static_cast<GeoJSONTile*>(pair.second.get())->updateData(data_->getTile(pair.first.canonical), needsRelayout); - } + const uint8_t maxZ = impl().getZoomRange().max; + for (const auto& pair : tilePyramid.getTiles()) { + if (pair.first.canonical.z <= maxZ) { + static_cast<GeoJSONTile*>(pair.second.get()) + ->updateData(data_->getTile(pair.first.canonical), needsRelayout); } } } - if (!data_) { - tilePyramid.clearAll(); - return; - } - tilePyramid.update(layers, needsRendering, needsRelayout, |