summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-02-05 19:31:03 -0500
committerGitHub <noreply@github.com>2018-02-05 19:31:03 -0500
commit671dfefc1e3fff5038a6d9cedc78daabffa5597f (patch)
tree07bf56591c794155b434c6b2567a0a2da48ceda9
parent90f29a91729b536da9f090d389549db1ec4b8e9f (diff)
downloadqtlocation-mapboxgl-671dfefc1e3fff5038a6d9cedc78daabffa5597f.tar.gz
Reset tileset-based render sources when any tileset properties changed. (#11042)
-rw-r--r--src/mbgl/renderer/sources/render_raster_dem_source.cpp15
-rw-r--r--src/mbgl/renderer/sources/render_raster_dem_source.hpp2
-rw-r--r--src/mbgl/renderer/sources/render_raster_source.cpp15
-rw-r--r--src/mbgl/renderer/sources/render_raster_source.hpp2
-rw-r--r--src/mbgl/renderer/sources/render_vector_source.cpp15
-rw-r--r--src/mbgl/renderer/sources/render_vector_source.hpp2
6 files changed, 27 insertions, 24 deletions
diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.cpp b/src/mbgl/renderer/sources/render_raster_dem_source.cpp
index 76716518d7..4de949c9f2 100644
--- a/src/mbgl/renderer/sources/render_raster_dem_source.cpp
+++ b/src/mbgl/renderer/sources/render_raster_dem_source.cpp
@@ -32,14 +32,10 @@ void RenderRasterDEMSource::update(Immutable<style::Source::Impl> baseImpl_,
enabled = needsRendering;
- optional<Tileset> tileset = impl().getTileset();
+ optional<Tileset> _tileset = impl().getTileset();
- if (!tileset) {
- return;
- }
-
- if (tileURLTemplates != tileset->tiles) {
- tileURLTemplates = tileset->tiles;
+ if (tileset != _tileset) {
+ tileset = _tileset;
// TODO: this removes existing buckets, and will cause flickering.
// Should instead refresh tile data in place.
@@ -47,6 +43,11 @@ void RenderRasterDEMSource::update(Immutable<style::Source::Impl> baseImpl_,
tilePyramid.renderTiles.clear();
tilePyramid.cache.clear();
}
+ // 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;
+ }
tilePyramid.update(layers,
needsRendering,
diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.hpp b/src/mbgl/renderer/sources/render_raster_dem_source.hpp
index b6b8bf977c..87f9bcb563 100644
--- a/src/mbgl/renderer/sources/render_raster_dem_source.hpp
+++ b/src/mbgl/renderer/sources/render_raster_dem_source.hpp
@@ -40,7 +40,7 @@ private:
const style::RasterSource::Impl& impl() const;
TilePyramid tilePyramid;
- optional<std::vector<std::string>> tileURLTemplates;
+ optional<Tileset> tileset;
protected:
void onTileChanged(Tile&) final;
diff --git a/src/mbgl/renderer/sources/render_raster_source.cpp b/src/mbgl/renderer/sources/render_raster_source.cpp
index e99cd040e9..5d32818663 100644
--- a/src/mbgl/renderer/sources/render_raster_source.cpp
+++ b/src/mbgl/renderer/sources/render_raster_source.cpp
@@ -29,14 +29,10 @@ void RenderRasterSource::update(Immutable<style::Source::Impl> baseImpl_,
enabled = needsRendering;
- optional<Tileset> tileset = impl().getTileset();
+ optional<Tileset> _tileset = impl().getTileset();
- if (!tileset) {
- return;
- }
-
- if (tileURLTemplates != tileset->tiles) {
- tileURLTemplates = tileset->tiles;
+ if (tileset != _tileset) {
+ tileset = _tileset;
// TODO: this removes existing buckets, and will cause flickering.
// Should instead refresh tile data in place.
@@ -44,6 +40,11 @@ void RenderRasterSource::update(Immutable<style::Source::Impl> baseImpl_,
tilePyramid.renderTiles.clear();
tilePyramid.cache.clear();
}
+ // 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;
+ }
tilePyramid.update(layers,
needsRendering,
diff --git a/src/mbgl/renderer/sources/render_raster_source.hpp b/src/mbgl/renderer/sources/render_raster_source.hpp
index 25041fde43..bc6ac1bd9f 100644
--- a/src/mbgl/renderer/sources/render_raster_source.hpp
+++ b/src/mbgl/renderer/sources/render_raster_source.hpp
@@ -40,7 +40,7 @@ private:
const style::RasterSource::Impl& impl() const;
TilePyramid tilePyramid;
- optional<std::vector<std::string>> tileURLTemplates;
+ optional<Tileset> tileset;
};
template <>
diff --git a/src/mbgl/renderer/sources/render_vector_source.cpp b/src/mbgl/renderer/sources/render_vector_source.cpp
index d53023e4d0..c01257aea9 100644
--- a/src/mbgl/renderer/sources/render_vector_source.cpp
+++ b/src/mbgl/renderer/sources/render_vector_source.cpp
@@ -32,14 +32,10 @@ void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_,
enabled = needsRendering;
- optional<Tileset> tileset = impl().getTileset();
+ optional<Tileset> _tileset = impl().getTileset();
- if (!tileset) {
- return;
- }
-
- if (tileURLTemplates != tileset->tiles) {
- tileURLTemplates = tileset->tiles;
+ if (tileset != _tileset) {
+ tileset = _tileset;
// TODO: this removes existing buckets, and will cause flickering.
// Should instead refresh tile data in place.
@@ -47,6 +43,11 @@ void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_,
tilePyramid.renderTiles.clear();
tilePyramid.cache.clear();
}
+ // 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;
+ }
tilePyramid.update(layers,
needsRendering,
diff --git a/src/mbgl/renderer/sources/render_vector_source.hpp b/src/mbgl/renderer/sources/render_vector_source.hpp
index 4a992e854f..57fe6dbb6c 100644
--- a/src/mbgl/renderer/sources/render_vector_source.hpp
+++ b/src/mbgl/renderer/sources/render_vector_source.hpp
@@ -40,7 +40,7 @@ private:
const style::VectorSource::Impl& impl() const;
TilePyramid tilePyramid;
- optional<std::vector<std::string>> tileURLTemplates;
+ optional<Tileset> tileset;
};
template <>