diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-09-18 13:40:26 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-09-22 23:33:56 +0300 |
commit | 18bb6da10968872e585b6e0b787f45cb3a806b76 (patch) | |
tree | 7c55f14d89f8568f10eff93ae7239dca94fefa76 /platform | |
parent | 8b9794b1a7276d8ea2957d5aed7169fc0b40e25d (diff) | |
download | qtlocation-mapboxgl-18bb6da10968872e585b6e0b787f45cb3a806b76.tar.gz |
[android] reset renderer on the GL thread when map is destroyed
- ensures cleanup of resources on the right thread
Diffstat (limited to 'platform')
-rw-r--r-- | platform/android/src/map_renderer.cpp | 10 | ||||
-rw-r--r-- | platform/android/src/map_renderer.hpp | 3 |
2 files changed, 11 insertions, 2 deletions
diff --git a/platform/android/src/map_renderer.cpp b/platform/android/src/map_renderer.cpp index 3cf39ad3ff..7655455210 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<MapRenderer> obj, MapRenderer::~MapRenderer() = default; void MapRenderer::reset() { - assert (renderer); - renderer.reset(); + // 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); @@ -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<SnapshotCallback> callback) { snapshotCallback = std::move(callback); requestRender(); diff --git a/platform/android/src/map_renderer.hpp b/platform/android/src/map_renderer.hpp index 2039444457..0d614912a9 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&); |