summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-07-17 20:34:03 +0200
committerIvo van Dongen <info@ivovandongen.nl>2017-07-17 20:36:05 +0200
commitce3538d30016de4c6d3839eee1e368b1c27b38f6 (patch)
tree07cf7952860fde7e77ed81105ed568feb1f9e4e2
parentf290c6ddfb5ad0358a6c7ba38ab12420f4441ad8 (diff)
downloadqtlocation-mapboxgl-upstream/render-interface.tar.gz
[macos] fix animationsupstream/render-interface
-rw-r--r--platform/darwin/src/MGLRendererFrontend.h17
-rw-r--r--platform/macos/src/MGLMapView.mm2
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 <mbgl/renderer/renderer.hpp>
#include <mbgl/renderer/renderer_frontend.hpp>
+#include <mbgl/util/async_task.hpp>
+#include <mbgl/util/optional.hpp>
/**
@@ -9,10 +11,16 @@
class MGLRenderFrontend : public mbgl::RendererFrontend
{
public:
- MGLRenderFrontend(std::unique_ptr<mbgl::Renderer> renderer_, MGLMapView* nativeView_, mbgl::View* mbglView_)
+ MGLRenderFrontend(std::unique_ptr<mbgl::Renderer> 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<mbgl::UpdateParameters> 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<mbgl::UpdateParameters> updateParameters;
+ mbgl::optional<mbgl::util::AsyncTask> 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<mbgl::Renderer>(*_mbglView, [NSScreen mainScreen].backingScaleFactor, *mbglFileSource, *_mbglThreadPool, mbgl::GLContextMode::Unique);
- _rendererFrontend = std::make_unique<MGLRenderFrontend>(std::move(renderer), self, _mbglView);
+ _rendererFrontend = std::make_unique<MGLRenderFrontend>(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