From daf1ff39e590945490a4cb22ade17b15a2d8a4d6 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Wed, 26 Jun 2024 22:49:44 -0500 Subject: [PATCH] Destroy layer after deinitialize call is complete MapLibre seems to relatively consistently not destroy layers the first time layers are removed and re-added --- scwx-qt/source/scwx/qt/map/layer_wrapper.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/scwx-qt/source/scwx/qt/map/layer_wrapper.cpp b/scwx-qt/source/scwx/qt/map/layer_wrapper.cpp index 2e66f8d7..88fc7df9 100644 --- a/scwx-qt/source/scwx/qt/map/layer_wrapper.cpp +++ b/scwx-qt/source/scwx/qt/map/layer_wrapper.cpp @@ -31,17 +31,31 @@ LayerWrapper& LayerWrapper::operator=(LayerWrapper&&) noexcept = default; void LayerWrapper::initialize() { - p->layer_->Initialize(); + auto& layer = p->layer_; + if (layer != nullptr) + { + layer->Initialize(); + } } void LayerWrapper::render(const QMapLibre::CustomLayerRenderParameters& params) { - p->layer_->Render(params); + auto& layer = p->layer_; + if (layer != nullptr) + { + layer->Render(params); + } } void LayerWrapper::deinitialize() { - p->layer_->Deinitialize(); + // Ensure layers are not retained after call to deinitialize + auto& layer = p->layer_; + if (layer != nullptr) + { + layer->Deinitialize(); + layer = nullptr; + } } } // namespace map