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-09 13:04:21 +0300
commit8faf47ab5edcbdf6a72e10c57320f72fdec8fbf8 (patch)
tree64bb1a270eca2aa820bdae05f94c8bd315e2a9f0
parentf22c014b91b0b1f0774247ae38ec31dc5ecf0f9d (diff)
downloadqtlocation-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).
-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;
}