#include #include #include #include #include namespace mbgl { using namespace style; RenderVectorSource::RenderVectorSource(Immutable impl_) : RenderTileSource(impl_) { } const style::VectorSource::Impl& RenderVectorSource::impl() const { return static_cast(*baseImpl); } void RenderVectorSource::update(Immutable baseImpl_, const std::vector>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { std::swap(baseImpl, baseImpl_); enabled = needsRendering; const optional& 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; } tilePyramid.update(layers, needsRendering, needsRelayout, parameters, SourceType::Vector, util::tileSize, tileset->zoomRange, tileset->bounds, [&] (const OverscaledTileID& tileID) { return std::make_unique(tileID, impl().id, parameters, *tileset); }); } } // namespace mbgl