From ce3538d30016de4c6d3839eee1e368b1c27b38f6 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Mon, 17 Jul 2017 20:34:03 +0200 Subject: [macos] fix animations --- platform/darwin/src/MGLRendererFrontend.h | 17 +++++++++++++++-- platform/macos/src/MGLMapView.mm | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/platform/darwin/src/MGLRendererFrontend.h b/platform/darwin/src/MGLRendererFrontend.h index 5d0c784a4f..839d3be773 100644 --- a/platform/darwin/src/MGLRendererFrontend.h +++ b/platform/darwin/src/MGLRendererFrontend.h @@ -1,5 +1,7 @@ #include #include +#include +#include /** @@ -9,10 +11,16 @@ class MGLRenderFrontend : public mbgl::RendererFrontend { public: - MGLRenderFrontend(std::unique_ptr renderer_, MGLMapView* nativeView_, mbgl::View* mbglView_) + MGLRenderFrontend(std::unique_ptr renderer_, MGLMapView* nativeView_, mbgl::View* mbglView_, bool async = false) : renderer(std::move(renderer_)) , nativeView(nativeView_) , mbglView(mbglView_) { + + if (async) { + asyncInvalidate.emplace([&]() { + [nativeView setNeedsGLDisplay]; + }); + } } void reset() override { @@ -23,7 +31,11 @@ public: void update(std::shared_ptr updateParameters_) override { updateParameters = std::move(updateParameters_); - [nativeView setNeedsGLDisplay]; + if (asyncInvalidate) { + asyncInvalidate->send(); + } else { + [nativeView setNeedsGLDisplay]; + } } void setObserver(mbgl::RendererObserver& observer) override { @@ -51,4 +63,5 @@ private: __weak MGLMapView *nativeView = nullptr; mbgl::View *mbglView = nullptr; std::shared_ptr updateParameters; + mbgl::optional asyncInvalidate; }; diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm index 65a0864861..10afdc6e5f 100644 --- a/platform/macos/src/MGLMapView.mm +++ b/platform/macos/src/MGLMapView.mm @@ -275,7 +275,7 @@ public: _mbglThreadPool = mbgl::sharedThreadPool(); auto renderer = std::make_unique(*_mbglView, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique); - _rendererFrontend = std::make_unique(std::move(renderer), self, _mbglView); + _rendererFrontend = std::make_unique(std::move(renderer), self, _mbglView, true); _mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, self.size, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default); // Install the OpenGL layer. Interface Builder’s synchronous drawing means -- cgit v1.2.1