split renderSync and transition nudging to allow client view syncing

This commit is contained in:
Justin R. Miller
2015-07-01 10:42:38 -04:00
parent fb230dda51
commit b8388168dd
3 changed files with 12 additions and 4 deletions

View File

@@ -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);

View File

@@ -687,7 +687,8 @@ std::chrono::steady_clock::duration secondsAsDuration(float duration)
_mbglMap->setSourceTileCacheSize(cacheSize);
_mbglMap->renderSync();
bool needsRerender = _mbglMap->renderSync();
_mbglMap->nudgeTransitions(needsRerender);
}
}

View File

@@ -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();
}
}