diff options
Diffstat (limited to 'src/mbgl/renderer/sources/render_vector_source.cpp')
-rw-r--r-- | src/mbgl/renderer/sources/render_vector_source.cpp | 44 |
1 files changed, 11 insertions, 33 deletions
diff --git a/src/mbgl/renderer/sources/render_vector_source.cpp b/src/mbgl/renderer/sources/render_vector_source.cpp index 7035be9cf2..6e4fdede10 100644 --- a/src/mbgl/renderer/sources/render_vector_source.cpp +++ b/src/mbgl/renderer/sources/render_vector_source.cpp @@ -9,50 +9,28 @@ namespace mbgl { using namespace style; RenderVectorSource::RenderVectorSource(Immutable<style::VectorSource::Impl> impl_) - : RenderTileSource(impl_) { + : RenderTileSetSource(std::move(impl_)) { } -const style::VectorSource::Impl& RenderVectorSource::impl() const { - return static_cast<const style::VectorSource::Impl&>(*baseImpl); +const optional<Tileset>& RenderVectorSource::getTileset() const { + return static_cast<const style::VectorSource::Impl&>(*baseImpl).tileset; } -void RenderVectorSource::update(Immutable<style::Source::Impl> baseImpl_, - const std::vector<Immutable<style::LayerProperties>>& layers, - const bool needsRendering, - const bool needsRelayout, - const TileParameters& parameters) { - std::swap(baseImpl, baseImpl_); - - enabled = needsRendering; - - const optional<Tileset>& implTileset = impl().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 = implTileset || parameters.mode != MapMode::Continuous; - if (canUpdateTileset && tileset != implTileset) { - tileset = implTileset; - - // TODO: this removes existing buckets, and will cause flickering. - // Should instead refresh tile data in place. - tilePyramid.clearAll(); - } - - if (!implTileset) { - return; - } - +void RenderVectorSource::updateInternal(const Tileset& tileset, + const std::vector<Immutable<style::LayerProperties>>& layers, + const bool needsRendering, + const bool needsRelayout, + const TileParameters& parameters) { tilePyramid.update(layers, needsRendering, needsRelayout, parameters, SourceType::Vector, util::tileSize, - tileset->zoomRange, - tileset->bounds, + tileset.zoomRange, + tileset.bounds, [&] (const OverscaledTileID& tileID) { - return std::make_unique<VectorTile>(tileID, impl().id, parameters, *tileset); + return std::make_unique<VectorTile>(tileID, baseImpl->id, parameters, tileset); }); } |