diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-06-23 16:05:08 -0700 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-07-18 10:45:12 +0200 |
commit | b6d56ad634e2b3048e97bedd9f674aa4ec975453 (patch) | |
tree | efb55047ab705703ab43983b8728837f8ea82e96 /platform/darwin/src | |
parent | b97cc980e079552219e95130b14a9aa906cd0aea (diff) | |
download | qtlocation-mapboxgl-b6d56ad634e2b3048e97bedd9f674aa4ec975453.tar.gz |
[ios][macos] rendering interface changes
Diffstat (limited to 'platform/darwin/src')
-rw-r--r-- | platform/darwin/src/MGLRendererFrontend.h | 67 | ||||
-rw-r--r-- | platform/darwin/src/MGLShapeSource.mm | 3 | ||||
-rw-r--r-- | platform/darwin/src/MGLVectorSource.mm | 3 |
3 files changed, 71 insertions, 2 deletions
diff --git a/platform/darwin/src/MGLRendererFrontend.h b/platform/darwin/src/MGLRendererFrontend.h new file mode 100644 index 0000000000..839d3be773 --- /dev/null +++ b/platform/darwin/src/MGLRendererFrontend.h @@ -0,0 +1,67 @@ +#include <mbgl/renderer/renderer.hpp> +#include <mbgl/renderer/renderer_frontend.hpp> +#include <mbgl/util/async_task.hpp> +#include <mbgl/util/optional.hpp> + + +/** + The RenderFrontend is passed to the Map to facilitate rendering in a platform + dependent way. + */ +class MGLRenderFrontend : public mbgl::RendererFrontend +{ +public: + 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 { + if (renderer) { + renderer.reset(); + } + } + + void update(std::shared_ptr<mbgl::UpdateParameters> updateParameters_) override { + updateParameters = std::move(updateParameters_); + if (asyncInvalidate) { + asyncInvalidate->send(); + } else { + [nativeView setNeedsGLDisplay]; + } + } + + void setObserver(mbgl::RendererObserver& observer) override { + if (!renderer) return; + renderer->setObserver(&observer); + } + + void render() { + if (!renderer || !updateParameters) return; + + renderer->render(*mbglView, *updateParameters); + } + + mbgl::Renderer* getRenderer() { + return renderer.get(); + } + + void onLowMemory() { + if (!renderer) return; + renderer->onLowMemory(); + } + +private: + std::unique_ptr<mbgl::Renderer> renderer; + __weak MGLMapView *nativeView = nullptr; + mbgl::View *mbglView = nullptr; + std::shared_ptr<mbgl::UpdateParameters> updateParameters; + mbgl::optional<mbgl::util::AsyncTask> asyncInvalidate; +}; diff --git a/platform/darwin/src/MGLShapeSource.mm b/platform/darwin/src/MGLShapeSource.mm index 11b1d8eca8..f02fc98ded 100644 --- a/platform/darwin/src/MGLShapeSource.mm +++ b/platform/darwin/src/MGLShapeSource.mm @@ -11,6 +11,7 @@ #include <mbgl/map/map.hpp> #include <mbgl/style/sources/geojson_source.hpp> +#include <mbgl/renderer/renderer.hpp> const MGLShapeSourceOption MGLShapeSourceOptionClustered = @"MGLShapeSourceOptionClustered"; const MGLShapeSourceOption MGLShapeSourceOptionClusterRadius = @"MGLShapeSourceOptionClusterRadius"; @@ -98,7 +99,7 @@ const MGLShapeSourceOption MGLShapeSourceOptionSimplificationTolerance = @"MGLSh std::vector<mbgl::Feature> features; if (self.style) { - features = self.style.mapView.mbglMap->querySourceFeatures(self.rawSource->getID(), { {}, optionalFilter }); + features = self.style.mapView.renderer->querySourceFeatures(self.rawSource->getID(), { {}, optionalFilter }); } return MGLFeaturesFromMBGLFeatures(features); } diff --git a/platform/darwin/src/MGLVectorSource.mm b/platform/darwin/src/MGLVectorSource.mm index 7265690f4d..431e0c250c 100644 --- a/platform/darwin/src/MGLVectorSource.mm +++ b/platform/darwin/src/MGLVectorSource.mm @@ -10,6 +10,7 @@ #include <mbgl/map/map.hpp> #include <mbgl/style/sources/vector_source.hpp> +#include <mbgl/renderer/renderer.hpp> @interface MGLVectorSource () @@ -64,7 +65,7 @@ std::vector<mbgl::Feature> features; if (self.style) { - features = self.style.mapView.mbglMap->querySourceFeatures(self.rawSource->getID(), { optionalSourceLayerIDs, optionalFilter }); + features = self.style.mapView.renderer->querySourceFeatures(self.rawSource->getID(), { optionalSourceLayerIDs, optionalFilter }); } return MGLFeaturesFromMBGLFeatures(features); } |