diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index e492dbf2a..af1229ec2 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -868,10 +868,11 @@ void Renderer::Impl::render(const RenderTree& renderTree, int32_t i = static_cast(layerRenderItems.size()) - 1; for (auto it = layerRenderItems.begin(); it != layerRenderItems.end() && i >= 0; ++it, --i) { parameters.currentLayer = i; - const RenderItem& item = *it; + const LayerRenderItem& layerItem = *it; + const RenderItem& item = layerItem; const bool itemInLiveRange = !useRetainedRanges || !retainedMode || - (static_cast(item.index) >= ranges.continuousBegin && - static_cast(item.index) < ranges.continuousEndExclusive); + (static_cast(layerItem.index) >= ranges.continuousBegin && + static_cast(layerItem.index) < ranges.continuousEndExclusive); if (itemInLiveRange && item.hasRenderPass(parameters.pass)) { item.render(parameters); } diff --git a/src/mbgl/renderer/retained_underlay_cache.cpp b/src/mbgl/renderer/retained_underlay_cache.cpp index c2a48c456..dd52419ad 100644 --- a/src/mbgl/renderer/retained_underlay_cache.cpp +++ b/src/mbgl/renderer/retained_underlay_cache.cpp @@ -125,7 +125,17 @@ void RetainedUnderlayCache::synchronizeRuntimeState( observedControlRevision = revision; // GPU resources are owned and released on the renderer thread. The public setter changes // the shared enabled bit first and schedules this synchronization through Map::onUpdate(). - if (valid || key) invalidate(runtimeState->isEnabled() ? "camera-or-boundary" : "runtime-disabled"); + if (valid || key) { + if (runtimeState->isEnabled()) { + invalidate("camera-or-boundary"); + } else { + // setEnabled(false) already records the aggregate runtime-disabled invalidation once. + // Preserve that legacy aggregate semantic while still exposing the actual range cache invalidation. + valid = false; + lastInvalidationReason = "runtime-disabled"; + runtimeState->recordRangeInvalidation(role == RetainedRangeRole::Top); + } + } releaseResources(); if (!runtimeState->isEnabled()) { lastInvalidationReason = "runtime-disabled";