diff options
Diffstat (limited to 'src/mbgl/renderer/sources/render_raster_dem_source.cpp')
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_dem_source.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.cpp b/src/mbgl/renderer/sources/render_raster_dem_source.cpp index 841124fa4a..06ddf3e7e0 100644 --- a/src/mbgl/renderer/sources/render_raster_dem_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_dem_source.cpp @@ -4,6 +4,7 @@ #include <mbgl/algorithm/update_tile_masks.hpp> #include <mbgl/geometry/dem_data.hpp> #include <mbgl/renderer/buckets/hillshade_bucket.hpp> +#include <mbgl/renderer/tile_parameters.hpp> namespace mbgl { @@ -27,16 +28,19 @@ void RenderRasterDEMSource::update(Immutable<style::Source::Impl> baseImpl_, enabled = needsRendering; optional<Tileset> _tileset = impl().getTileset(); - - if (tileset != _tileset) { + // In Continuous mode, keep the existing tiles if the new tileset 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. + bool canUpdateTileset = _tileset || parameters.mode != MapMode::Continuous; + if (canUpdateTileset && tileset != _tileset) { tileset = _tileset; maxzoom = tileset->zoomRange.max; // TODO: this removes existing buckets, and will cause flickering. // Should instead refresh tile data in place. tilePyramid.clearAll(); } - // Allow clearing the tile pyramid first, before the early return in case - // the new tileset is not yet available or has an error in loading + if (!_tileset) { return; } |