From 8e19be9d9c7f66bff16f97066570e990fe09fd4e Mon Sep 17 00:00:00 2001 From: Juha Alanen Date: Wed, 21 Aug 2019 14:39:36 +0300 Subject: [core] Add support for set/getFeatureState APIs --- include/mbgl/renderer/renderer.hpp | 12 ++++++++++++ src/mbgl/renderer/render_orchestrator.cpp | 18 ++++++++++++++++++ src/mbgl/renderer/render_orchestrator.hpp | 10 ++++++++++ src/mbgl/renderer/render_source.hpp | 8 ++++++++ src/mbgl/renderer/renderer.cpp | 14 ++++++++++++++ src/mbgl/renderer/sources/render_tile_source.cpp | 13 +++++++++++++ src/mbgl/renderer/sources/render_tile_source.hpp | 10 ++++++++++ 7 files changed, 85 insertions(+) diff --git a/include/mbgl/renderer/renderer.hpp b/include/mbgl/renderer/renderer.hpp index f1800dbfb8..32cf4a91c4 100644 --- a/include/mbgl/renderer/renderer.hpp +++ b/include/mbgl/renderer/renderer.hpp @@ -49,6 +49,18 @@ public: const std::string& extensionField, const optional>& args = {}) const; + void setFeatureState(const std::string& sourceID, + const optional& sourceLayerID, + const std::string& featureID, + const FeatureState& state); + + void getFeatureState(FeatureState& state, + const std::string& sourceID, + const optional& sourceLayerID, + const std::string& featureID) const; + + + // Debug void dumpDebugLogs(); diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index a62ccb0a0a..fbf98500b4 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -562,6 +562,24 @@ FeatureExtensionValue RenderOrchestrator::queryFeatureExtensions(const std::stri return {}; } +void RenderOrchestrator::setFeatureState(const std::string& sourceID, + const optional& sourceLayerID, + const std::string& featureID, + const FeatureState& state) { + if (RenderSource* renderSource = getRenderSource(sourceID)) { + renderSource->setFeatureState(sourceLayerID, featureID, state); + } +} + +void RenderOrchestrator::getFeatureState(FeatureState& state, + const std::string& sourceID, + const optional& sourceLayerID, + const std::string& featureID) const { + if (RenderSource* renderSource = getRenderSource(sourceID)) { + renderSource->getFeatureState(state, sourceLayerID, featureID); + } +} + void RenderOrchestrator::reduceMemoryUse() { filteredLayersForSource.shrink_to_fit(); for (const auto& entry : renderSources) { diff --git a/src/mbgl/renderer/render_orchestrator.hpp b/src/mbgl/renderer/render_orchestrator.hpp index 884bd21b7b..7467e0c7dd 100644 --- a/src/mbgl/renderer/render_orchestrator.hpp +++ b/src/mbgl/renderer/render_orchestrator.hpp @@ -64,6 +64,16 @@ public: const std::string& extensionField, const optional>& args) const; + void setFeatureState(const std::string& sourceID, + const optional& layerID, + const std::string& featureID, + const FeatureState& state); + + void getFeatureState(FeatureState& state, + const std::string& sourceID, + const optional& layerID, + const std::string& featureID) const; + void reduceMemoryUse(); void dumpDebugLogs(); diff --git a/src/mbgl/renderer/render_source.hpp b/src/mbgl/renderer/render_source.hpp index cd471223a8..c803c82c95 100644 --- a/src/mbgl/renderer/render_source.hpp +++ b/src/mbgl/renderer/render_source.hpp @@ -93,6 +93,14 @@ public: return {}; } + virtual void setFeatureState(const optional&, + const std::string&, + const FeatureState&) {} + + virtual void getFeatureState(FeatureState&, + const optional&, + const std::string&) const {} + virtual void reduceMemoryUse() = 0; virtual void dumpDebugLogs() const = 0; diff --git a/src/mbgl/renderer/renderer.cpp b/src/mbgl/renderer/renderer.cpp index 52cd7a4351..40b342b1d4 100644 --- a/src/mbgl/renderer/renderer.cpp +++ b/src/mbgl/renderer/renderer.cpp @@ -109,6 +109,20 @@ FeatureExtensionValue Renderer::queryFeatureExtensions(const std::string& source return impl->orchestrator.queryFeatureExtensions(sourceID, feature, extension, extensionField, args); } +void Renderer::setFeatureState(const std::string& sourceID, + const optional& sourceLayerID, + const std::string& featureID, + const FeatureState& state) { + impl->orchestrator.setFeatureState(sourceID, sourceLayerID, featureID, state); +} + +void Renderer::getFeatureState(FeatureState& state, + const std::string& sourceID, + const optional& sourceLayerID, + const std::string& featureID) const { + impl->orchestrator.getFeatureState(state, sourceID, sourceLayerID, featureID); +} + void Renderer::dumpDebugLogs() { impl->orchestrator.dumpDebugLogs(); } diff --git a/src/mbgl/renderer/sources/render_tile_source.cpp b/src/mbgl/renderer/sources/render_tile_source.cpp index c5afb38435..6859c454f3 100644 --- a/src/mbgl/renderer/sources/render_tile_source.cpp +++ b/src/mbgl/renderer/sources/render_tile_source.cpp @@ -68,6 +68,7 @@ void RenderTileSource::prepare(const SourcePrepareParameters& parameters) { tiles->emplace_back(entry.first, entry.second); tiles->back().prepare(parameters); } + featureState.coalesceChanges(*tiles); renderTiles = std::move(tiles); } @@ -133,6 +134,18 @@ std::vector RenderTileSource::querySourceFeatures(const SourceQueryOpti return tilePyramid.querySourceFeatures(options); } +void RenderTileSource::setFeatureState(const optional& sourceLayerID, + const std::string& featureID, + const FeatureState& state) { + featureState.updateState(sourceLayerID, featureID, state); +} + +void RenderTileSource::getFeatureState(FeatureState& state, + const optional& sourceLayerID, + const std::string& featureID) const { + featureState.getState(state, sourceLayerID, featureID); +} + void RenderTileSource::reduceMemoryUse() { tilePyramid.reduceMemoryUse(); } diff --git a/src/mbgl/renderer/sources/render_tile_source.hpp b/src/mbgl/renderer/sources/render_tile_source.hpp index 7edff726d5..822b2cac16 100644 --- a/src/mbgl/renderer/sources/render_tile_source.hpp +++ b/src/mbgl/renderer/sources/render_tile_source.hpp @@ -3,6 +3,7 @@ #include #include #include +#include namespace mbgl { @@ -34,6 +35,14 @@ public: std::vector querySourceFeatures(const SourceQueryOptions&) const override; + virtual void setFeatureState(const optional&, + const std::string&, + const FeatureState&) override; + + virtual void getFeatureState(FeatureState& state, + const optional&, + const std::string&) const override; + void reduceMemoryUse() override; void dumpDebugLogs() const override; @@ -44,6 +53,7 @@ protected: mutable RenderTiles filteredRenderTiles; mutable RenderTiles renderTilesSortedByY; float bearing = 0.0f; + SourceFeatureState featureState; }; /** -- cgit v1.2.1