summaryrefslogtreecommitdiff
path: root/platform/android/src/android_renderer_frontend.cpp
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-09-13 14:34:05 +0300
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-09-22 23:33:56 +0300
commit67285f3a95f74966324fc59f271ba8b6b763b2b5 (patch)
tree444065837cebe710f54429cbfc61180c1e6f8ae8 /platform/android/src/android_renderer_frontend.cpp
parent6211db69680e08a1f463ec098ed843ca49a859b2 (diff)
downloadqtlocation-mapboxgl-67285f3a95f74966324fc59f271ba8b6b763b2b5.tar.gz
[android] Re-initialise renderer, backend and context when the android system destroyed the underlying gl resources
Diffstat (limited to 'platform/android/src/android_renderer_frontend.cpp')
-rw-r--r--platform/android/src/android_renderer_frontend.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/platform/android/src/android_renderer_frontend.cpp b/platform/android/src/android_renderer_frontend.cpp
index 38b1ff252b..ac29639bd4 100644
--- a/platform/android/src/android_renderer_frontend.cpp
+++ b/platform/android/src/android_renderer_frontend.cpp
@@ -1,6 +1,7 @@
#include "android_renderer_frontend.hpp"
#include <mbgl/actor/scheduler.hpp>
+#include <mbgl/renderer/renderer.hpp>
#include <mbgl/renderer/renderer_observer.hpp>
#include <mbgl/storage/file_source.hpp>
#include <mbgl/util/thread.hpp>
@@ -63,13 +64,13 @@ AndroidRendererFrontend::~AndroidRendererFrontend() = default;
void AndroidRendererFrontend::reset() {
mapRenderer.reset();
- rendererObserver.reset();
}
void AndroidRendererFrontend::setObserver(RendererObserver& observer) {
assert (util::RunLoop::Get());
- rendererObserver = std::make_unique<ForwardingRendererObserver>(*mapRunLoop, observer);
- mapRenderer.actor().invoke(&Renderer::setObserver, rendererObserver.get());
+ // Don't call the Renderer directly, but use MapRenderer#setObserver to make sure
+ // the Renderer may be re-initialised without losing the RendererObserver reference.
+ mapRenderer.setObserver(std::make_unique<ForwardingRendererObserver>(*mapRunLoop, observer));
}
void AndroidRendererFrontend::update(std::shared_ptr<UpdateParameters> params) {