diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-12-23 15:33:38 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-12-23 17:25:03 +0100 |
commit | 2596534b901089ba5a59617015a65ebd0deb6bfd (patch) | |
tree | 9193825f8840236a18fd9ea29667d5ff861b4f68 | |
parent | 083cee8956e6aa89eefe93df6e5c286a1b6728b8 (diff) | |
download | qtlocation-mapboxgl-2596534b901089ba5a59617015a65ebd0deb6bfd.tar.gz |
[build] move transition updates away from render call
-rw-r--r-- | src/mbgl/map/map.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index d76044cd47..e6282ae107 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -200,8 +200,6 @@ void Map::render(View& view) { impl->backend.notifyMapChange(MapChangeWillStartRenderingFrame); - const Update flags = impl->transform.updateTransitions(Clock::now()); - impl->render(view); impl->backend.notifyMapChange(isFullyLoaded() ? @@ -218,12 +216,6 @@ void Map::render(View& view) { impl->backend.notifyMapChange(MapChangeDidFinishLoadingMap); } } - - // Triggers an asynchronous update, that eventually triggers a view - // invalidation, causing renderSync to be called again if in transition. - if (flags != Update::Nothing) { - impl->onUpdate(flags); - } } void Map::triggerRepaint() { @@ -235,15 +227,18 @@ void Map::Impl::update() { updateFlags = Update::Nothing; } - if (updateFlags == Update::Nothing || (mode == MapMode::Still && !stillImageRequest)) { - return; - } - // This time point is used to: // - Calculate style property transitions; // - Hint style sources to notify when all its tiles are loaded; timePoint = Clock::now(); + const auto newFlags = transform.updateTransitions(timePoint); + updateFlags |= newFlags; + + if (updateFlags == Update::Nothing || (mode == MapMode::Still && !stillImageRequest)) { + return; + } + if (style->loaded && updateFlags & Update::AnnotationStyle) { annotationManager->updateStyle(*style); updateFlags |= Update::Classes; @@ -285,6 +280,14 @@ void Map::Impl::update() { } updateFlags = Update::Nothing; + + // When no transition is in progress, updateTransitions returns Nothing, which means we don't + // have to trigger a subsequent update. When a current transition is in progress, it'll return + // UpdateStyle (when zoom levels change) or Repaint (when only lat/lon changes). In both cases, + // we'll have to render a new frame immediately. + if (newFlags != Update::Nothing) { + onUpdate(newFlags); + } } void Map::Impl::render(View& view) { |