diff options
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 24 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/tile/tile.hpp | 4 |
3 files changed, 28 insertions, 3 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 109b6377e1..792586e73d 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -206,16 +206,34 @@ Bucket* GeometryTile::getBucket(const Layer::Impl& layer) const { } const LayerRenderData* GeometryTile::getLayerRenderData(const style::Layer::Impl& layerImpl) const { - const auto it = layerIdToLayerRenderData.find(layerImpl.id); + auto* that = const_cast<GeometryTile*>(this); + return that->getMutableLayerRenderData(layerImpl); +} + +bool GeometryTile::updateLayerProperties(const Immutable<style::LayerProperties>& layerProperties) { + LayerRenderData* renderData = getMutableLayerRenderData(*layerProperties->baseImpl); + if (!renderData) { + return false; + } + + if (renderData->layerProperties != layerProperties) { + renderData->layerProperties = layerProperties; + } + + return true; +} + +LayerRenderData* GeometryTile::getMutableLayerRenderData(const style::Layer::Impl& layerImpl) { + auto it = layerIdToLayerRenderData.find(layerImpl.id); if (it == layerIdToLayerRenderData.end()) { return nullptr; } - const LayerRenderData& result = it->second; + LayerRenderData& result = it->second; if (result.layerProperties->baseImpl->getTypeInfo() != layerImpl.getTypeInfo()) { // Layer data might be outdated, see issue #12432. return nullptr; } - return &result; + return &result; } float GeometryTile::getQueryPadding(const std::vector<const RenderLayer*>& layers) { diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 231e71190b..18f94b9a1f 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -45,6 +45,7 @@ public: void upload(gfx::Context&) override; Bucket* getBucket(const style::Layer::Impl&) const override; const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const override; + bool updateLayerProperties(const Immutable<style::LayerProperties>&) override; void queryRenderedFeatures( std::unordered_map<std::string, std::vector<Feature>>& result, @@ -96,6 +97,8 @@ protected: return latestFeatureIndex ? latestFeatureIndex->getData() : nullptr; } + LayerRenderData* getMutableLayerRenderData(const style::Layer::Impl&); + private: void markObsolete(); diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp index 50fd67bedd..651bafe277 100644 --- a/src/mbgl/tile/tile.hpp +++ b/src/mbgl/tile/tile.hpp @@ -60,6 +60,10 @@ public: virtual const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const { return nullptr; } + // Updates the contained layer render data with the given properties. + // Returns `true` if the corresponding render layer data is present in this tile (and i.e. it + // was succesfully updated); returns `false` otherwise. + virtual bool updateLayerProperties(const Immutable<style::LayerProperties>&) { return true; } template <class T> T* getBucket(const style::Layer::Impl& layer) const { |