summaryrefslogtreecommitdiff
path: root/src/mbgl/tile
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r--src/mbgl/tile/geometry_tile.cpp24
-rw-r--r--src/mbgl/tile/geometry_tile.hpp3
-rw-r--r--src/mbgl/tile/tile.hpp4
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 {