summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2017-09-18 13:40:26 +0300
committerIvo van Dongen <info@ivovandongen.nl>2017-09-22 12:52:13 +0300
commitf6c6d456b7848b7d8cc0c12ec6f13faa9e158b39 (patch)
treeb73e6119650f7702e4d2e6e84bfa7fc07b8a2329
parentdb7950dbb2ee46ecc0b6acfe0c8f648eb2fbfdcd (diff)
downloadqtlocation-mapboxgl-f6c6d456b7848b7d8cc0c12ec6f13faa9e158b39.tar.gz
[android] reset renderer on the GL thread when map is destroyed
- ensures cleanup of resources on the right thread
-rw-r--r--platform/android/src/map_renderer.cpp10
-rw-r--r--platform/android/src/map_renderer.hpp3
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&);