From 4908244d2db2e7016a7fd28e51fa272afdb25916 Mon Sep 17 00:00:00 2001 From: tei Date: Thu, 24 Sep 2026 12:14:17 +0900 Subject: [PATCH] fix: close STEP-092 native validation issues --- src/mbgl/renderer/renderer_impl.cpp | 7 ++++--- src/mbgl/renderer/retained_underlay_cache.cpp | 12 +++++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) 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";