summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/render_orchestrator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/render_orchestrator.cpp')
-rw-r--r--src/mbgl/renderer/render_orchestrator.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp
index 5851da98eb..0b85f893d7 100644
--- a/src/mbgl/renderer/render_orchestrator.cpp
+++ b/src/mbgl/renderer/render_orchestrator.cpp
@@ -142,10 +142,7 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
// Reset zoom history state.
zoomHistory.first = true;
if (!updateParameters->keepRenderData && stillImageRequest != updateParameters->stillImageRequest) {
- sourceImpls = makeMutable<std::vector<Immutable<style::Source::Impl>>>();
- layerImpls = makeMutable<std::vector<Immutable<style::Layer::Impl>>>();
- renderSources.clear();
- renderLayers.clear();
+ clearData();
stillImageRequest = updateParameters->stillImageRequest;
}
}
@@ -433,7 +430,6 @@ std::unique_ptr<RenderTree> RenderOrchestrator::createRenderTree(
placementController.getPlacement()->symbolFadeChange(updateParameters->timePoint);
renderTreeParameters->needsRepaint = hasTransitions(updateParameters->timePoint);
} else {
- crossTileSymbolIndex.reset();
renderTreeParameters->placementChanged = symbolBucketsChanged = !layersNeedPlacement.empty();
if (renderTreeParameters->placementChanged) {
Mutable<Placement> placement = makeMutable<Placement>(updateParameters);
@@ -703,6 +699,19 @@ bool RenderOrchestrator::isLoaded() const {
return true;
}
+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>>>();
+
+ renderSources.clear();
+ renderLayers.clear();
+
+ crossTileSymbolIndex.reset();
+
+ if (!lineAtlas->isEmpty()) lineAtlas = std::make_unique<LineAtlas>();
+ if (!patternAtlas->isEmpty()) patternAtlas = std::make_unique<PatternAtlas>();
+}
+
void RenderOrchestrator::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) {
Log::Error(Event::Style, "Failed to load glyph range %d-%d for font stack %s: %s",
glyphRange.first, glyphRange.second, fontStackToString(fontStack).c_str(), util::toString(error).c_str());