[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).
This commit is contained in:
Mikhail Pozdnyakov
2019-04-08 12:24:02 +03:00
parent f22c014b91
commit 8faf47ab5e
2 changed files with 5 additions and 7 deletions

View File

@@ -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);
}
}

View File

@@ -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;
}