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-09 13:04:21 +0300 |
commit | 8faf47ab5edcbdf6a72e10c57320f72fdec8fbf8 (patch) | |
tree | 64bb1a270eca2aa820bdae05f94c8bd315e2a9f0 /src | |
parent | f22c014b91b0b1f0774247ae38ec31dc5ecf0f9d (diff) | |
download | qtlocation-mapboxgl-8faf47ab5edcbdf6a72e10c57320f72fdec8fbf8.tar.gz |
[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).
Diffstat (limited to 'src')
-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; } |