[android] manage backendscope in renderer frontend

This commit is contained in:
Ivo van Dongen
2017-07-25 11:04:18 +03:00
committed by Ivo van Dongen
parent e75fdf1075
commit 8fef2b6531
3 changed files with 9 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
#include "android_renderer_frontend.hpp"
#include <mbgl/map/view.hpp>
#include <mbgl/renderer/backend_scope.hpp>
#include <mbgl/renderer/renderer.hpp>
namespace mbgl {
@@ -8,8 +9,10 @@ namespace android {
AndroidRendererFrontend::AndroidRendererFrontend(
std::unique_ptr<Renderer> renderer_,
RendererBackend& backend_,
InvalidateCallback invalidate)
: renderer(std::move(renderer_))
, backend(backend_)
, asyncInvalidate([=, invalidate=std::move(invalidate)]() {
invalidate();
}) {
@@ -38,6 +41,8 @@ void AndroidRendererFrontend::render(View& view) {
assert (renderer);
if (!updateParameters) return;
BackendScope guard { backend };
renderer->render(view, *updateParameters);
}

View File

@@ -2,6 +2,7 @@
#pragma once
#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>
@@ -23,7 +24,7 @@ namespace android {
class AndroidRendererFrontend : public RendererFrontend {
public:
using InvalidateCallback = std::function<void ()>;
AndroidRendererFrontend(std::unique_ptr<Renderer>, InvalidateCallback);
AndroidRendererFrontend(std::unique_ptr<Renderer>, RendererBackend&, InvalidateCallback);
~AndroidRendererFrontend() override;
void reset() override;
@@ -43,6 +44,7 @@ public:
private:
std::unique_ptr<Renderer> renderer;
RendererBackend& backend;
std::shared_ptr<UpdateParameters> updateParameters;
util::AsyncTask asyncInvalidate;
};

View File

@@ -78,6 +78,7 @@ NativeMapView::NativeMapView(jni::JNIEnv& _env,
// Create a renderer frontend
rendererFrontend = std::make_unique<AndroidRendererFrontend>(std::move(renderer),
*this,
[this] { this->invalidate(); });
// Create the core map