diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-07-21 16:15:30 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-09-22 23:33:56 +0300 |
commit | 347d7c19c0a70f91252163b14e37583eea83fdd5 (patch) | |
tree | c46968ba9fb947be6b6387ab18b10a0fede35f59 /platform/android/src/android_renderer_frontend.hpp | |
parent | e780cdc29ee82459a75db5aba2e72c5536a2d1b0 (diff) | |
download | qtlocation-mapboxgl-347d7c19c0a70f91252163b14e37583eea83fdd5.tar.gz |
[android] async rendering
- introduces GLSurfaceView
- introduces Orchestration thread
- renders on the gl thread
Diffstat (limited to 'platform/android/src/android_renderer_frontend.hpp')
-rw-r--r-- | platform/android/src/android_renderer_frontend.hpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/platform/android/src/android_renderer_frontend.hpp b/platform/android/src/android_renderer_frontend.hpp index 107bbbe0b6..f2e951bd05 100644 --- a/platform/android/src/android_renderer_frontend.hpp +++ b/platform/android/src/android_renderer_frontend.hpp @@ -1,34 +1,50 @@ #pragma once +#include "android_gl_thread.hpp" + +#include <mbgl/actor/actor.hpp> #include <mbgl/annotation/annotation.hpp> #include <mbgl/renderer/renderer_backend.hpp> #include <mbgl/renderer/renderer_frontend.hpp> #include <mbgl/util/async_task.hpp> #include <mbgl/util/geo.hpp> +#include <mbgl/util/image.hpp> +#include <mbgl/util/run_loop.hpp> #include <functional> #include <memory> #include <vector> +#include <string> namespace mbgl { -class Renderer; +class FileSource; +class Scheduler; class RenderedQueryOptions; class SourceQueryOptions; namespace android { +class AndroidRendererBackend; + class AndroidRendererFrontend : public RendererFrontend { public: using InvalidateCallback = std::function<void ()>; - AndroidRendererFrontend(std::unique_ptr<Renderer>, RendererBackend&, InvalidateCallback); + + AndroidRendererFrontend(float pixelRatio, + mbgl::FileSource&, + mbgl::Scheduler&, + std::string programCacheDir, + InvalidateCallback); ~AndroidRendererFrontend() override; void reset() override; void setObserver(RendererObserver&) override; void update(std::shared_ptr<UpdateParameters>) override; + + // Called from OpenGL Thread void render(); // Feature querying @@ -37,14 +53,31 @@ public: std::vector<Feature> querySourceFeatures(const std::string& sourceID, const SourceQueryOptions&) const; AnnotationIDs queryPointAnnotations(const ScreenBox& box) const; + // RenderBackend proxy - Called from OpenGL Thread + void resizeFramebuffer(int width, int height); + // Memory void onLowMemory(); + // Snapshot - Callback will be called on calling thread through RunLoop + using SnapshotCallback = std::function<void (PremultipliedImage)>; + void requestSnapshot(SnapshotCallback); + private: - std::unique_ptr<Renderer> renderer; - RendererBackend& backend; + std::unique_ptr<AndroidRendererBackend> backend; + std::unique_ptr<AndroidGLThread> glThread; + std::unique_ptr<RendererObserver> rendererObserver; + + std::mutex updateMutex; std::shared_ptr<UpdateParameters> updateParameters; + + util::AsyncTask asyncInvalidate; + + util::RunLoop* mapRunLoop; + + bool framebufferSizeChanged = true; + std::unique_ptr<SnapshotCallback> snapshotCallback; }; } // namespace android |