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 16:05:09 +0300
commit0687460033a12a6538001f0bc36dafd594ec0edf (patch)
tree339d5e8a40e8d582ab79597240405d05dfeb0ac6
parentaffb21a61248223c81c18f37fb7e2ae7d0ec76a4 (diff)
downloadqtlocation-mapboxgl-0687460033a12a6538001f0bc36dafd594ec0edf.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) {