drive map rendering from main thread
This commit is contained in:
committed by
John Firebaugh
parent
740281cc89
commit
84e2ea886d
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user