diff --git a/platform/android/src/map_renderer.cpp b/platform/android/src/map_renderer.cpp index 3cf39ad3f..765545521 100644 --- a/platform/android/src/map_renderer.cpp +++ b/platform/android/src/map_renderer.cpp @@ -27,8 +27,9 @@ MapRenderer::MapRenderer(jni::JNIEnv& _env, jni::Object obj, MapRenderer::~MapRenderer() = default; void MapRenderer::reset() { - assert (renderer); - renderer.reset(); + // Make sure to destroy the renderer on the GL Thread + auto self = ActorRef(*this, mailbox); + self.ask(&MapRenderer::resetRenderer).wait(); // Lock to make sure there is no concurrent initialisation on the gl thread std::lock_guard lock(initialisationMutex); @@ -91,6 +92,11 @@ void MapRenderer::requestSnapshot(SnapshotCallback callback) { // Called on OpenGL thread // +void MapRenderer::resetRenderer() { + assert (renderer); + renderer.reset(); +} + void MapRenderer::scheduleSnapshot(std::unique_ptr callback) { snapshotCallback = std::move(callback); requestRender(); diff --git a/platform/android/src/map_renderer.hpp b/platform/android/src/map_renderer.hpp index 203944445..0d614912a 100644 --- a/platform/android/src/map_renderer.hpp +++ b/platform/android/src/map_renderer.hpp @@ -87,6 +87,9 @@ protected: private: // Called from the GL Thread // + // Resets the renderer + void resetRenderer(); + // Renders a frame. void render(JNIEnv&);