summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-06-27 17:19:53 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-07-02 11:45:40 +0300
commitd63c871bf85917f579fe9c5e0b3732795cb12363 (patch)
treeaffb34ad9e1671b2846d4d0a88429f379dec6a92
parent62bc78e73412bc6dcd24947d2ca28b2efc4c678b (diff)
downloadqtlocation-mapboxgl-d63c871bf85917f579fe9c5e0b3732795cb12363.tar.gz
[core] Geometry tile updates layer render data if its constants mask remains
Thus, we do not have to wait for tile update completion in case the updated properties have the same constants mask, i.e. fit the existing bucket.
-rw-r--r--src/mbgl/renderer/tile_pyramid.cpp7
-rw-r--r--src/mbgl/tile/geometry_tile.cpp5
-rw-r--r--src/mbgl/tile/geometry_tile.hpp2
-rw-r--r--src/mbgl/tile/tile.hpp10
4 files changed, 13 insertions, 11 deletions
diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp
index dee84c4e32..b931b2d279 100644
--- a/src/mbgl/renderer/tile_pyramid.cpp
+++ b/src/mbgl/renderer/tile_pyramid.cpp
@@ -231,12 +231,7 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l
if (holdForFade && typeInfo->fadingTiles == LayerTypeInfo::FadingTiles::NotRequired) {
continue;
}
- // Update layer properties for complete tiles; for incomplete just check the presence.
- bool layerRenderableInTile = tile.isComplete() ? tile.updateLayerProperties(layerProperties)
- : static_cast<bool>(tile.getBucket(*layerProperties->baseImpl));
- if (layerRenderableInTile) {
- tile.usedByRenderedLayers = true;
- }
+ tile.usedByRenderedLayers |= tile.layerPropertiesUpdated(layerProperties);
}
}
}
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index 7a7b7cb770..1bc7646d1e 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -212,13 +212,14 @@ const LayerRenderData* GeometryTile::getLayerRenderData(const style::Layer::Impl
return that->getMutableLayerRenderData(layerImpl);
}
-bool GeometryTile::updateLayerProperties(const Immutable<style::LayerProperties>& layerProperties) {
+bool GeometryTile::layerPropertiesUpdated(const Immutable<style::LayerProperties>& layerProperties) {
LayerRenderData* renderData = getMutableLayerRenderData(*layerProperties->baseImpl);
if (!renderData) {
return false;
}
- if (renderData->layerProperties != layerProperties) {
+ if (renderData->layerProperties != layerProperties &&
+ renderData->layerProperties->constantsMask() == layerProperties->constantsMask()) {
renderData->layerProperties = layerProperties;
}
diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp
index cbc94deed0..c206dd1157 100644
--- a/src/mbgl/tile/geometry_tile.hpp
+++ b/src/mbgl/tile/geometry_tile.hpp
@@ -47,7 +47,7 @@ public:
void upload(gfx::UploadPass&) 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;
+ bool layerPropertiesUpdated(const Immutable<style::LayerProperties>&) override;
void queryRenderedFeatures(
std::unordered_map<std::string, std::vector<Feature>>& result,
diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp
index 95ee0bc37e..17a16b4666 100644
--- a/src/mbgl/tile/tile.hpp
+++ b/src/mbgl/tile/tile.hpp
@@ -58,10 +58,16 @@ public:
assert(false);
return nullptr;
}
- // Updates the contained layer render data with the given properties.
+ // Notifies this tile of the updated layer properties.
+ //
+ // Tile implementation should update 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; }
+ virtual bool layerPropertiesUpdated(const Immutable<style::LayerProperties>& layerProperties) {
+ return bool(getBucket(*layerProperties->baseImpl));
+ }
virtual void setShowCollisionBoxes(const bool) {}
virtual void setLayers(const std::vector<Immutable<style::LayerProperties>>&) {}
virtual void setMask(TileMask&&) {}