#include #include #include #include #include #include #include namespace mbgl { using namespace style; RenderGeoJSONSource::RenderGeoJSONSource(Immutable impl_) : RenderSource(impl_) { tilePyramid.setObserver(this); } const style::GeoJSONSource::Impl& RenderGeoJSONSource::impl() const { return static_cast(*baseImpl); } bool RenderGeoJSONSource::isLoaded() const { return tilePyramid.isLoaded(); } void RenderGeoJSONSource::update(Immutable baseImpl_, const std::vector>& layers, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { std::swap(baseImpl, baseImpl_); enabled = needsRendering; GeoJSONData* data_ = impl().getData(); if (data_ != data) { data = data_; tilePyramid.cache.clear(); if (data) { const uint8_t maxZ = impl().getZoomRange().max; for (const auto& pair : tilePyramid.tiles) { if (pair.first.canonical.z <= maxZ) { static_cast(pair.second.get())->updateData(data->getTile(pair.first.canonical)); } } } } if (!data) { tilePyramid.tiles.clear(); tilePyramid.renderTiles.clear(); return; } tilePyramid.update(layers, needsRendering, needsRelayout, parameters, SourceType::GeoJSON, util::tileSize, impl().getZoomRange(), [&] (const OverscaledTileID& tileID) { return std::make_unique(tileID, impl().id, parameters, data->getTile(tileID.canonical)); }); } void RenderGeoJSONSource::startRender(PaintParameters& parameters) { parameters.clipIDGenerator.update(tilePyramid.getRenderTiles()); tilePyramid.startRender(parameters); } void RenderGeoJSONSource::finishRender(PaintParameters& parameters) { tilePyramid.finishRender(parameters); } std::vector> RenderGeoJSONSource::getRenderTiles() { return tilePyramid.getRenderTiles(); } std::unordered_map> RenderGeoJSONSource::queryRenderedFeatures(const ScreenLineString& geometry, const TransformState& transformState, const std::vector& layers, const RenderedQueryOptions& options) const { return tilePyramid.queryRenderedFeatures(geometry, transformState, layers, options); } std::vector RenderGeoJSONSource::querySourceFeatures(const SourceQueryOptions& options) const { return tilePyramid.querySourceFeatures(options); } void RenderGeoJSONSource::onLowMemory() { tilePyramid.onLowMemory(); } void RenderGeoJSONSource::dumpDebugLogs() const { tilePyramid.dumpDebugLogs(); } } // namespace mbgl