summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-04-08 12:24:02 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-04-08 16:25:29 +0300
commit31af5c9b255d2f57046e7dd0e32f1efc030d0bcb (patch)
tree990846a74f53ce8534d9c2e4b62f5f8882b6db21
parent9c8ee53cd8fe22a024627edb8050d1ab8c3da905 (diff)
downloadqtlocation-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.cpp8
-rw-r--r--src/mbgl/tile/geometry_tile.cpp4
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;
}