summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/map/map.hpp5
-rw-r--r--platform/ios/MGLMapView.mm3
-rw-r--r--src/mbgl/map/map.cpp8
3 files changed, 12 insertions, 4 deletions
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp
index 8178fab49c..72800a9c1d 100644
--- a/include/mbgl/map/map.hpp
+++ b/include/mbgl/map/map.hpp
@@ -64,7 +64,10 @@ public:
void renderStill(StillImageCallback callback);
// Triggers a synchronous or asynchronous render.
- void renderSync();
+ bool renderSync();
+
+ // Nudges transitions one step, possibly notifying of the need for a rerender.
+ void nudgeTransitions(bool forceRerender);
// Notifies the Map thread that the state has changed and an update might be necessary.
void update(Update update = Update::Nothing);
diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm
index 6f6a6d9ae1..01a716ad96 100644
--- a/platform/ios/MGLMapView.mm
+++ b/platform/ios/MGLMapView.mm
@@ -687,7 +687,8 @@ std::chrono::steady_clock::duration secondsAsDuration(float duration)
_mbglMap->setSourceTileCacheSize(cacheSize);
- _mbglMap->renderSync();
+ bool needsRerender = _mbglMap->renderSync();
+ _mbglMap->nudgeTransitions(needsRerender);
}
}
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 37cd3be335..449d77fbe1 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -48,7 +48,7 @@ void Map::renderStill(StillImageCallback callback) {
FrameData{ view.getFramebufferSize() }, callback);
}
-void Map::renderSync() {
+bool Map::renderSync() {
if (renderState == RenderState::never) {
view.notifyMapChange(MapChangeWillStartRenderingMap);
}
@@ -69,9 +69,13 @@ void Map::renderSync() {
view.notifyMapChange(MapChangeDidFinishRenderingMapFullyRendered);
}
+ return result.needsRerender;
+}
+
+void Map::nudgeTransitions(bool forceRerender) {
if (transform->needsTransition()) {
update(Update(transform->updateTransitions(Clock::now())));
- } else if (result.needsRerender) {
+ } else if (forceRerender) {
update();
}
}