From 31af5c9b255d2f57046e7dd0e32f1efc030d0bcb Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Mon, 8 Apr 2019 12:24:02 +0300 Subject: [core] Pass only visible render layers to source in renderer This simplifies the code and make it slightly more performant. Also, this change enables initialization the `RenderTile.used` field from inside the source (currently done in render layers). --- src/mbgl/renderer/renderer_impl.cpp | 8 +++----- src/mbgl/tile/geometry_tile.cpp | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index f1fb31f693..62594372a0 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -248,17 +248,15 @@ void Renderer::Impl::render(const UpdateParameters& updateParameters) { for (const auto& layerImpl : *layerImpls) { RenderLayer* layer = getRenderLayer(layerImpl->id); const auto* layerInfo = layerImpl->getTypeInfo(); - bool layerNeedsRendering = layer->needsRendering(zoomHistory.lastZoom); - + const bool layerNeedsRendering = layer->needsRendering(zoomHistory.lastZoom); staticData->has3D = (staticData->has3D || layerInfo->pass3d == LayerTypeInfo::Pass3D::Required); if (layerInfo->source != LayerTypeInfo::Source::NotRequired) { if (layerImpl->source == sourceImpl->id) { - sourceNeedsRendering |= layerNeedsRendering; sourceNeedsRelayout = (sourceNeedsRelayout || hasImageDiff || hasLayoutDifference(layerDiff, layerImpl->id)); - filteredLayersForSource.push_back(layerImpl); - if (layerNeedsRendering) { + sourceNeedsRendering = true; + filteredLayersForSource.push_back(layerImpl); renderItems.emplace_back(*layer, source); } } diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index a3ae4217c9..3a50d957f6 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -99,9 +99,9 @@ void GeometryTile::setLayers(const std::vector>& layers) // Skip irrelevant layers. assert(layer->getTypeInfo()->source != LayerTypeInfo::Source::NotRequired); assert(layer->source == sourceID); + assert(layer->visibility != VisibilityType::None); if (id.overscaledZ < std::floor(layer->minZoom) || - id.overscaledZ >= std::ceil(layer->maxZoom) || - layer->visibility == VisibilityType::None) { + id.overscaledZ >= std::ceil(layer->maxZoom)) { continue; } -- cgit v1.2.1