summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/render_orchestrator.cpp
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-03-09 16:34:18 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-03-12 21:51:00 +0200
commit2589fe8d7b9dfbf386190a35e7af9f0e5208b032 (patch)
tree4206f235131e3338b98d94c4436ce660a07dc804 /src/mbgl/renderer/render_orchestrator.cpp
parent924bd6a17d19d031ce7f328fe1baf8f5a99c8fe8 (diff)
downloadqtlocation-mapboxgl-2589fe8d7b9dfbf386190a35e7af9f0e5208b032.tar.gz
[core] Do not squeeze placement period if the view is tilted
If the view is not tilted, we want the new symbols to show up faster, so we squeeze the placement period. On contrary, with the tilted view it's more important to make placement rarely for performance reasons and as the new symbols are normally "far away" and the user is not that interested to see them ASAP.
Diffstat (limited to 'src/mbgl/renderer/render_orchestrator.cpp')
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index f00f9ee9be..7fb6eff29c 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -281,6 +281,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
renderSources.emplace(entry.first, std::move(renderSource));
}
transformState = updateParameters->transformState;
+ const bool tiltedView = transformState.getPitch() != 0.0f;
// Create parameters for the render tree.
auto renderTreeParameters = std::make_unique<RenderTreeParameters>(updateParameters->transformState,
@@ -386,14 +387,20 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
symbolBucketsAdded = symbolBucketsAdded || (result & CrossTileSymbolIndex::AddLayerResult::BucketsAdded);
symbolBucketsChanged = symbolBucketsChanged || (result != CrossTileSymbolIndex::AddLayerResult::NoChanges);
}
- // We want new symbols to show up faster, however simple setting `placementChanged` to `true` would
- // initiate placement too often as new buckets ususally come from several rendered tiles in a row within
- // a short period of time. Instead, we squeeze placement update period to coalesce buckets updates from several
- // tiles.
- optional<Duration> maximumPlacementUpdatePeriod;
- if (symbolBucketsAdded) maximumPlacementUpdatePeriod = optional<Duration>(Milliseconds(30));
+
+ optional<Duration> placementUpdatePeriodOverride;
+ if (symbolBucketsAdded && !tiltedView) {
+ // If the view is not tilted, we want *the new* symbols to show up faster, however simple setting
+ // `placementChanged` to `true` would initiate placement too often as new buckets usually come from several
+ // rendered tiles in a row within a short period of time. Instead, we squeeze placement update period to
+ // coalesce buckets updates from several tiles. On contrary, with the tilted view it's more important to
+ // make placement rarely for performance reasons and as the new symbols are normally "far away" and the user
+ // is not that interested to see them ASAP.
+ placementUpdatePeriodOverride = optional<Duration>(Milliseconds(30));
+ }
+
renderTreeParameters->placementChanged = !placementController.placementIsRecent(
- updateParameters->timePoint, updateParameters->transformState.getZoom(), maximumPlacementUpdatePeriod);
+ updateParameters->timePoint, updateParameters->transformState.getZoom(), placementUpdatePeriodOverride);
symbolBucketsChanged |= renderTreeParameters->placementChanged;
std::set<std::string> usedSymbolLayers;