diff --git a/src/mbgl/renderer/image_manager.cpp b/src/mbgl/renderer/image_manager.cpp index 4927ade8e..d862f5874 100644 --- a/src/mbgl/renderer/image_manager.cpp +++ b/src/mbgl/renderer/image_manager.cpp @@ -175,6 +175,17 @@ const std::set& ImageManager::getAvailableImages() const { return availableImages; } +void ImageManager::clear() { + assert(requestors.empty()); + assert(missingImageRequestors.empty()); + + images.clear(); + availableImages.clear(); + updatedImageVersions.clear(); + requestedImages.clear(); + loaded = false; +} + void ImageManager::checkMissingAndNotify(ImageRequestor& requestor, const ImageRequestPair& pair) { ImageDependencies missingDependencies; diff --git a/src/mbgl/renderer/image_manager.hpp b/src/mbgl/renderer/image_manager.hpp index 7d5884edc..fec19981f 100644 --- a/src/mbgl/renderer/image_manager.hpp +++ b/src/mbgl/renderer/image_manager.hpp @@ -51,6 +51,8 @@ public: ImageVersionMap updatedImageVersions; + void clear(); + private: void checkMissingAndNotify(ImageRequestor&, const ImageRequestPair&); void notify(ImageRequestor&, const ImageRequestPair&) const; diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index 0b85f893d..985aac98b 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -702,6 +702,7 @@ bool RenderOrchestrator::isLoaded() const { void RenderOrchestrator::clearData() { if (!sourceImpls->empty()) sourceImpls = makeMutable>>(); if (!layerImpls->empty()) layerImpls = makeMutable>>(); + if (!imageImpls->empty()) imageImpls = makeMutable>>(); renderSources.clear(); renderLayers.clear(); @@ -710,6 +711,8 @@ void RenderOrchestrator::clearData() { if (!lineAtlas->isEmpty()) lineAtlas = std::make_unique(); if (!patternAtlas->isEmpty()) patternAtlas = std::make_unique(); + + imageManager->clear(); } void RenderOrchestrator::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) {