diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-06-27 17:42:04 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-02 16:05:09 +0300 |
commit | 0687460033a12a6538001f0bc36dafd594ec0edf (patch) | |
tree | 339d5e8a40e8d582ab79597240405d05dfeb0ac6 /src/mbgl | |
parent | affb21a61248223c81c18f37fb7e2ae7d0ec76a4 (diff) | |
download | qtlocation-mapboxgl-0687460033a12a6538001f0bc36dafd594ec0edf.tar.gz |
[core] RenderSource does re-layout if layer's data-driven properties change.
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 7 |
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) { |