diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-08 12:24:02 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-08 16:25:29 +0300 |
commit | 31af5c9b255d2f57046e7dd0e32f1efc030d0bcb (patch) | |
tree | 990846a74f53ce8534d9c2e4b62f5f8882b6db21 | |
parent | 9c8ee53cd8fe22a024627edb8050d1ab8c3da905 (diff) | |
download | qtlocation-mapboxgl-upstream/mikhail_add_only_visible_layers_to_source.tar.gz |
[core] Pass only visible render layers to source in rendererupstream/mikhail_add_only_visible_layers_to_source
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).
-rw-r--r-- | src/mbgl/renderer/renderer_impl.cpp | 8 | ||||
-rw-r--r-- | 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<Immutable<Layer::Impl>>& 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; } |