From 0687460033a12a6538001f0bc36dafd594ec0edf Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Thu, 27 Jun 2019 17:42:04 +0300 Subject: [core] RenderSource does re-layout if layer's data-driven properties change. --- src/mbgl/renderer/render_orchestrator.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 RenderOrchestrator::createRenderTree(const UpdatePar } // Update layers for class and zoom changes. + std::unordered_set 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 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) { -- cgit v1.2.1