diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2019-02-14 11:12:02 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2019-02-14 13:58:03 +0200 |
commit | 3802f7e922e16a18c75d66aa615094f4c62fd0b1 (patch) | |
tree | 1c3e74fcaf47ff42a023503a28503051aef11aa0 /platform/android/src/map_renderer.cpp | |
parent | ceea900578d8f31497810ef19aa7c17669e40722 (diff) | |
download | qtlocation-mapboxgl-3802f7e922e16a18c75d66aa615094f4c62fd0b1.tar.gz |
[android] hook into surface holder to cleanup renderer on the right thread before the surface is destroyed
Diffstat (limited to 'platform/android/src/map_renderer.cpp')
-rw-r--r-- | platform/android/src/map_renderer.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/platform/android/src/map_renderer.cpp b/platform/android/src/map_renderer.cpp index e9eb82864d..cff021afd2 100644 --- a/platform/android/src/map_renderer.cpp +++ b/platform/android/src/map_renderer.cpp @@ -33,9 +33,12 @@ MapRenderer::~MapRenderer() = default; void MapRenderer::reset() { destroyed = true; - // Make sure to destroy the renderer on the GL Thread - auto self = ActorRef<MapRenderer>(*this, mailbox); - self.ask(&MapRenderer::resetRenderer).wait(); + + if (renderer) { + // Make sure to destroy the renderer on the GL Thread + auto self = ActorRef<MapRenderer>(*this, mailbox); + self.ask(&MapRenderer::resetRenderer).wait(); + } // Lock to make sure there is no concurrent initialisation on the gl thread std::lock_guard<std::mutex> lock(initialisationMutex); @@ -113,7 +116,6 @@ void MapRenderer::requestSnapshot(SnapshotCallback callback) { // Called on OpenGL thread // void MapRenderer::resetRenderer() { - assert (renderer); renderer.reset(); } @@ -188,6 +190,12 @@ void MapRenderer::onSurfaceChanged(JNIEnv&, jint width, jint height) { requestRender(); } +void MapRenderer::onSurfaceDestroyed(JNIEnv&) { + // Make sure to destroy the renderer on the GL Thread + auto self = ActorRef<MapRenderer>(*this, mailbox); + self.ask(&MapRenderer::resetRenderer).wait(); +} + // Static methods // void MapRenderer::registerNative(jni::JNIEnv& env) { @@ -204,7 +212,9 @@ void MapRenderer::registerNative(jni::JNIEnv& env) { METHOD(&MapRenderer::onSurfaceCreated, "nativeOnSurfaceCreated"), METHOD(&MapRenderer::onSurfaceChanged, - "nativeOnSurfaceChanged")); + "nativeOnSurfaceChanged"), + METHOD(&MapRenderer::onSurfaceDestroyed, + "nativeOnSurfaceDestroyed")); } MapRenderer& MapRenderer::getNativePeer(JNIEnv& env, const jni::Object<MapRenderer>& jObject) { |