diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-09-13 14:34:05 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-09-22 23:33:56 +0300 |
commit | 67285f3a95f74966324fc59f271ba8b6b763b2b5 (patch) | |
tree | 444065837cebe710f54429cbfc61180c1e6f8ae8 /platform/android/src/android_renderer_frontend.cpp | |
parent | 6211db69680e08a1f463ec098ed843ca49a859b2 (diff) | |
download | qtlocation-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.cpp | 7 |
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) { |