diff options
-rw-r--r-- | src/mbgl/renderer/image_manager.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/renderer/image_manager.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/render_orchestrator.cpp | 3 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/mbgl/renderer/image_manager.cpp b/src/mbgl/renderer/image_manager.cpp index 4927ade8e9..d862f58742 100644 --- a/src/mbgl/renderer/image_manager.cpp +++ b/src/mbgl/renderer/image_manager.cpp @@ -175,6 +175,17 @@ const std::set<std::string>& 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 7d5884edc1..fec19981f5 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 0b85f893d7..985aac98b4 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<std::vector<Immutable<style::Source::Impl>>>(); if (!layerImpls->empty()) layerImpls = makeMutable<std::vector<Immutable<style::Layer::Impl>>>(); + if (!imageImpls->empty()) imageImpls = makeMutable<std::vector<Immutable<style::Image::Impl>>>(); renderSources.clear(); renderLayers.clear(); @@ -710,6 +711,8 @@ void RenderOrchestrator::clearData() { if (!lineAtlas->isEmpty()) lineAtlas = std::make_unique<LineAtlas>(); if (!patternAtlas->isEmpty()) patternAtlas = std::make_unique<PatternAtlas>(); + + imageManager->clear(); } void RenderOrchestrator::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) { |