From 66e1429460b0aad6b295773db6e6fe965831ff3c Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Tue, 25 Jul 2017 10:56:00 +0300 Subject: [ios][macos] manage backendscope in renderer frontend --- platform/darwin/src/MGLRendererFrontend.h | 12 +++++++++--- platform/ios/src/MGLMapView.mm | 6 +----- platform/macos/src/MGLMapView.mm | 6 +----- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/platform/darwin/src/MGLRendererFrontend.h b/platform/darwin/src/MGLRendererFrontend.h index 839d3be773..3611577f2e 100644 --- a/platform/darwin/src/MGLRendererFrontend.h +++ b/platform/darwin/src/MGLRendererFrontend.h @@ -1,4 +1,6 @@ +#include #include +#include #include #include #include @@ -11,9 +13,10 @@ class MGLRenderFrontend : public mbgl::RendererFrontend { public: - MGLRenderFrontend(std::unique_ptr renderer_, MGLMapView* nativeView_, mbgl::View* mbglView_, bool async = false) + MGLRenderFrontend(std::unique_ptr renderer_, MGLMapView* nativeView_, mbgl::RendererBackend& mbglBackend_, mbgl::View& mbglView_, bool async = false) : renderer(std::move(renderer_)) , nativeView(nativeView_) + , mbglBackend(mbglBackend_) , mbglView(mbglView_) { if (async) { @@ -46,7 +49,9 @@ public: void render() { if (!renderer || !updateParameters) return; - renderer->render(*mbglView, *updateParameters); + mbgl::BackendScope guard { mbglBackend, mbgl::BackendScope::ScopeType::Implicit }; + + renderer->render(mbglView, *updateParameters); } mbgl::Renderer* getRenderer() { @@ -61,7 +66,8 @@ public: private: std::unique_ptr renderer; __weak MGLMapView *nativeView = nullptr; - mbgl::View *mbglView = nullptr; + mbgl::RendererBackend& mbglBackend; + mbgl::View& mbglView; std::shared_ptr updateParameters; mbgl::optional asyncInvalidate; }; diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index 1800332e42..83ea4a8d8f 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -455,7 +455,7 @@ public: _mbglThreadPool = mbgl::sharedThreadPool(); auto renderer = std::make_unique(*_mbglView, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique); - _rendererFrontend = std::make_unique(std::move(renderer), self, _mbglView); + _rendererFrontend = std::make_unique(std::move(renderer), self, *_mbglView, *_mbglView); _mbglMap = new mbgl::Map(*_rendererFrontend, *_mbglView, self.size, scaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::MapMode::Continuous, mbgl::ConstrainMode::None, mbgl::ViewportMode::Default); // start paused if in IB @@ -5528,10 +5528,6 @@ public: return reinterpret_cast(symbol); } - - mbgl::BackendScope::ScopeType getScopeType() const override { - return mbgl::BackendScope::ScopeType::Implicit; - } void activate() override { diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm index 10afdc6e5f..6707f59628 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, true); + _rendererFrontend = std::make_unique(std::move(renderer), self, *_mbglView, *_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 @@ -2878,10 +2878,6 @@ public: assumeFramebufferBinding(fbo); assumeViewport(0, 0, nativeView.framebufferSize); } - - mbgl::BackendScope::ScopeType getScopeType() const override { - return mbgl::BackendScope::ScopeType::Implicit; - } void bind() override { setFramebufferBinding(fbo); -- cgit v1.2.1