drive map rendering from main thread

This commit is contained in:
Konstantin Käfer
2015-05-22 15:56:05 +02:00
committed by John Firebaugh
parent 740281cc89
commit 84e2ea886d
14 changed files with 71 additions and 35 deletions

View File

@@ -269,7 +269,11 @@ void MapContext::update() {
}
}
view.invalidate([this] { render(); });
if (mayRender) {
render();
} else {
view.invalidate();
}
}
updated = static_cast<UpdateType>(Update::Nothing);
@@ -302,9 +306,16 @@ void MapContext::renderStill(StillImageCallback fn) {
}
callback = fn;
mayRender = true;
triggerUpdate(Update::RenderStill);
}
void MapContext::renderSync() {
mayRender = true;
render();
mayRender = false;
}
void MapContext::render() {
assert(util::ThreadContext::currentlyOn(util::ThreadType::Map));
@@ -326,11 +337,15 @@ void MapContext::render() {
painter->setDebug(data.getDebug());
painter->render(*style, transformState, data.getAnimationTime());
mayRender = false;
if (data.mode == MapMode::Still) {
callback(nullptr, view.readStillImage());
callback = nullptr;
}
view.swap();
// Schedule another rerender when we definitely need a next frame.
if (data.transform.needsTransition() || style->hasTransitions()) {
triggerUpdate();
@@ -351,7 +366,7 @@ void MapContext::setSourceTileCacheSize(size_t size) {
for (const auto &source : style->sources) {
source->setCacheSize(sourceCacheSize);
}
view.invalidate([this] { render(); });
view.invalidate();
}
}
@@ -361,7 +376,7 @@ void MapContext::onLowMemory() {
for (const auto &source : style->sources) {
source->onLowMemory();
}
view.invalidate([this] { render(); });
view.invalidate();
}
void MapContext::onTileDataChanged() {