summaryrefslogtreecommitdiff
path: root/platform/android/src/android_renderer_frontend.hpp
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-07-21 16:15:30 +0300
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-09-22 23:33:56 +0300
commit347d7c19c0a70f91252163b14e37583eea83fdd5 (patch)
treec46968ba9fb947be6b6387ab18b10a0fede35f59 /platform/android/src/android_renderer_frontend.hpp
parente780cdc29ee82459a75db5aba2e72c5536a2d1b0 (diff)
downloadqtlocation-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.hpp41
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