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()) {