#include #include #include #include #include #include namespace mbgl { using namespace style; RenderVectorSource::RenderVectorSource(Immutable impl_) : RenderSource(impl_) { tilePyramid.setObserver(this); } const style::VectorSource::Impl& RenderVectorSource::impl() const { return static_cast(*baseImpl); } bool RenderVectorSource::isLoaded() const { return tilePyramid.isLoaded(); } void RenderVectorSource::update(Immutable baseImpl_, const std::vector>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { std::swap(baseImpl, baseImpl_); enabled = needsRendering; optional _tileset = impl().getTileset(); 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, needsRelayout, parameters, SourceType::Vector, util::tileSize, tileset->zoomRange, tileset->bounds, [&] (const OverscaledTileID& tileID) { return std::make_unique(tileID, impl().id, parameters, *tileset); }); } void RenderVectorSource::startRender(PaintParameters& parameters) { parameters.clipIDGenerator.update(tilePyramid.getRenderTiles()); tilePyramid.startRender(parameters); } void RenderVectorSource::finishRender(PaintParameters& parameters) { tilePyramid.finishRender(parameters); } std::vector> RenderVectorSource::getRenderTiles() { return tilePyramid.getRenderTiles(); } std::unordered_map> RenderVectorSource::queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, const std::vector& layers, const RenderedQueryOptions& options, const mat4& projMatrix) const { return tilePyramid.queryRenderedFeatures(geometry, transformState, layers, options, projMatrix); } std::vector RenderVectorSource::querySourceFeatures(const SourceQueryOptions& options) const { return tilePyramid.querySourceFeatures(options); } void RenderVectorSource::reduceMemoryUse() { tilePyramid.reduceMemoryUse(); } void RenderVectorSource::dumpDebugLogs() const { tilePyramid.dumpDebugLogs(); } } // namespace mbgl