diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-05-22 15:56:05 +0200 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-06-26 10:32:06 -0700 |
commit | 84e2ea886dc55917a1d6b665337fff6d3862984a (patch) | |
tree | 75d7411f09f48aa8b35be9348bc3687cb4efb1f8 /src | |
parent | 740281cc89e99fbbedf07fcf62253ada84f60776 (diff) | |
download | qtlocation-mapboxgl-84e2ea886dc55917a1d6b665337fff6d3862984a.tar.gz |
drive map rendering from main thread
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/map.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/map/map_context.cpp | 21 | ||||
-rw-r--r-- | src/mbgl/map/map_context.hpp | 4 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 1b8cd2b0e7..5360e294c0 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -43,7 +43,7 @@ void Map::renderStill(StillImageCallback callback) { } void Map::renderSync() { - context->invokeSync(&MapContext::render); + context->invokeSync(&MapContext::renderSync); } void Map::update(Update update_) { diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index bc4dc8c723..3ac05c8e4c 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -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() { diff --git a/src/mbgl/map/map_context.hpp b/src/mbgl/map/map_context.hpp index 6185db4a55..89b1b28a95 100644 --- a/src/mbgl/map/map_context.hpp +++ b/src/mbgl/map/map_context.hpp @@ -34,12 +34,12 @@ public: ~MapContext(); void pause(); - void render(); void resize(uint16_t width, uint16_t height, float ratio); using StillImageCallback = std::function<void(std::exception_ptr, std::unique_ptr<const StillImage>)>; void renderStill(StillImageCallback callback); + void renderSync(); void triggerUpdate(Update = Update::Nothing); @@ -62,6 +62,7 @@ public: private: void updateTiles(); + void render(); // Style-related updates. void cascadeClasses(); @@ -88,6 +89,7 @@ private: std::string styleURL; std::string styleJSON; + bool mayRender = false; StillImageCallback callback; size_t sourceCacheSize; TransformState transformState; |