diff options
Diffstat (limited to 'src/mbgl/renderer/renderer_impl.cpp')
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 61fe7e91c6..059bf6bf8d 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -297,6 +297,7 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { }; std::vector<RenderItem> order; + std::vector<const RenderLayerSymbolInterface*> renderItemsWithSymbols; for (auto& layerImpl : *layerImpls) { RenderLayer* layer = getRenderLayer(layerImpl->id); @@ -331,6 +332,10 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { layer->setRenderTiles(source->getRenderTiles(), parameters.state); order.emplace_back(*layer, source); + + if (const RenderLayerSymbolInterface* symbolLayer = layer->getSymbolInterface()) { + renderItemsWithSymbols.push_back(symbolLayer); + } } { @@ -339,10 +344,6 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { crossTileSymbolIndex.reset(); } - std::vector<RenderItem> renderItemsWithSymbols; - std::copy_if(order.rbegin(), order.rend(), std::back_inserter(renderItemsWithSymbols), - [](const auto& item) { return item.layer.getSymbolInterface() != nullptr; }); - bool symbolBucketsChanged = false; const bool placementChanged = !placement->stillRecent(parameters.timePoint); std::set<std::string> usedSymbolLayers; @@ -351,12 +352,13 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { placement = std::make_unique<Placement>(parameters.state, parameters.mapMode, updateParameters.transitionOptions, updateParameters.crossSourceCollisions, std::move(placement)); } - for (const auto& item : renderItemsWithSymbols) { - if (crossTileSymbolIndex.addLayer(*item.layer.getSymbolInterface(), parameters.state.getLatLng().longitude())) symbolBucketsChanged = true; + for (auto it = renderItemsWithSymbols.rbegin(); it != renderItemsWithSymbols.rend(); ++it) { + const RenderLayerSymbolInterface *symbolLayer = *it; + if (crossTileSymbolIndex.addLayer(*symbolLayer, parameters.state.getLatLng().longitude())) symbolBucketsChanged = true; if (placementChanged) { - usedSymbolLayers.insert(item.layer.getID()); - placement->placeLayer(*item.layer.getSymbolInterface(), parameters.projMatrix, parameters.debugOptions & MapDebugOptions::Collision); + usedSymbolLayers.insert(symbolLayer->layerID()); + placement->placeLayer(*symbolLayer, parameters.projMatrix, parameters.debugOptions & MapDebugOptions::Collision); } } @@ -372,8 +374,9 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { parameters.symbolFadeChange = placement->symbolFadeChange(parameters.timePoint); if (placementChanged || symbolBucketsChanged) { - for (const auto& item : renderItemsWithSymbols) { - placement->updateLayerOpacities(*item.layer.getSymbolInterface()); + for (auto it = renderItemsWithSymbols.rbegin(); it != renderItemsWithSymbols.rend(); ++it) { + const RenderLayerSymbolInterface *symbolLayer = *it; + placement->updateLayerOpacities(*symbolLayer); } } } |