Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
Reset tileset-based render sources when any tileset properties change…
Browse files Browse the repository at this point in the history
…d. (#11042)
  • Loading branch information
Asheem Mamoowala committed Feb 7, 2018
1 parent fae7a14 commit 88c0914
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 16 deletions.
15 changes: 8 additions & 7 deletions src/mbgl/renderer/sources/render_raster_source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,22 @@ 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.
tilePyramid.tiles.clear();
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,
Expand Down
2 changes: 1 addition & 1 deletion src/mbgl/renderer/sources/render_raster_source.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class RenderRasterSource : public RenderSource {
const style::RasterSource::Impl& impl() const;

TilePyramid tilePyramid;
optional<std::vector<std::string>> tileURLTemplates;
optional<Tileset> tileset;
};

template <>
Expand Down
15 changes: 8 additions & 7 deletions src/mbgl/renderer/sources/render_vector_source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,22 @@ 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.
tilePyramid.tiles.clear();
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,
Expand Down
2 changes: 1 addition & 1 deletion src/mbgl/renderer/sources/render_vector_source.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class RenderVectorSource : public RenderSource {
const style::VectorSource::Impl& impl() const;

TilePyramid tilePyramid;
optional<std::vector<std::string>> tileURLTemplates;
optional<Tileset> tileset;
};

template <>
Expand Down

0 comments on commit 88c0914

Please sign in to comment.