From 60c1d351cfc0a6b1f231cb68e82024d71f549753 Mon Sep 17 00:00:00 2001 From: Tim Sylvester Date: Fri, 9 Aug 2024 14:54:54 -0700 Subject: [PATCH] Fix accidental regression conditional layer evaluation (#2705) --- src/mbgl/renderer/render_orchestrator.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index e412ed86d..c6708de84 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -309,7 +309,14 @@ std::unique_ptr RenderOrchestrator::createRenderTree( const bool layerAddedOrChanged = layerDiff.added.count(id) || layerDiff.changed.count(id); evaluationParameters.layerChanged = layerAddedOrChanged; evaluationParameters.hasCrossfade = layer.hasCrossfade(); - if (layerAddedOrChanged || zoomChanged || evaluationParameters.hasCrossfade || layer.hasTransition()) { + + // Only re-evaluate on change of zoom if the style has some reference to it + using Dependency = expression::Dependency; + const bool zoomChangedAndMatters = zoomChanged && !layerAddedOrChanged && + (layer.getStyleDependencies() & Dependency::Zoom); + + if (layerAddedOrChanged || zoomChangedAndMatters || evaluationParameters.hasCrossfade || + layer.hasTransition()) { const auto previousMask = layer.evaluatedProperties->constantsMask(); layer.evaluate(evaluationParameters); if (previousMask != layer.evaluatedProperties->constantsMask()) {