summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-06-27 17:42:04 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-07-02 11:45:40 +0300
commitc35814914a784f532166d1bdd2068dc1bad48dcf (patch)
tree59f32340d73ee726e5de779d8745f13cae7e9cfa
parentd63c871bf85917f579fe9c5e0b3732795cb12363 (diff)
downloadqtlocation-mapboxgl-c35814914a784f532166d1bdd2068dc1bad48dcf.tar.gz
[core] RenderSource does re-layout if layer's data-driven properties change.
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index 76b7752ca1..acc50318d6 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -241,11 +241,16 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
}
// Update layers for class and zoom changes.
+ std::unordered_set<std::string> constantsMaskChanged;
for (const auto& entry : renderLayers) {
RenderLayer& layer = *entry.second;
const bool layerAddedOrChanged = layerDiff.added.count(entry.first) || layerDiff.changed.count(entry.first);
if (layerAddedOrChanged || zoomChanged || layer.hasTransition() || layer.hasCrossfade()) {
+ auto previousMask = layer.evaluatedProperties->constantsMask();
layer.evaluate(evaluationParameters);
+ if (previousMask != layer.evaluatedProperties->constantsMask()) {
+ constantsMaskChanged.insert(layer.getID());
+ }
}
}
@@ -298,7 +303,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(const UpdatePar
if (layerInfo->source != LayerTypeInfo::Source::NotRequired) {
if (layerImpl->source == sourceImpl->id) {
- sourceNeedsRelayout = (sourceNeedsRelayout || hasImageDiff || hasLayoutDifference(layerDiff, layerImpl->id));
+ sourceNeedsRelayout = (sourceNeedsRelayout || hasImageDiff || constantsMaskChanged.count(layerImpl->id) || hasLayoutDifference(layerDiff, layerImpl->id));
if (layerNeedsRendering) {
filteredLayersForSource.push_back(layer->evaluatedProperties);
if (zoomFitsLayer) {