diff --git a/metrics/integration/render-tests/feature-state/vector-source/style.json b/metrics/integration/render-tests/feature-state/vector-source/style.json index 1fcd61ce1..e7cff042d 100644 --- a/metrics/integration/render-tests/feature-state/vector-source/style.json +++ b/metrics/integration/render-tests/feature-state/vector-source/style.json @@ -44,7 +44,7 @@ } }, { - "id": "poi_label", + "id": "poi_layer", "type": "circle", "source": "maplibre", "source-layer": "poi_label", diff --git a/src/mbgl/renderer/source_state.cpp b/src/mbgl/renderer/source_state.cpp index f36d49c5c..5eab581b5 100644 --- a/src/mbgl/renderer/source_state.cpp +++ b/src/mbgl/renderer/source_state.cpp @@ -97,6 +97,8 @@ void SourceFeatureState::coalesceChanges(std::vector& tiles) { stateChanges.clear(); deletedStates.clear(); + changes.insert(currentStates.begin(), currentStates.end()); + if (changes.empty()) { return; } diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 535b958ab..1d71c8b99 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -542,18 +542,16 @@ void GeometryTile::performedFadePlacement() { void GeometryTile::setFeatureState(const LayerFeatureStates& states) { MLN_TRACE_FUNC(); - auto layers = getData(); + const auto layers = getData(); if ((layers == nullptr) || states.empty() || !layoutResult) { return; } - auto& layerIdToLayerRenderData = layoutResult->layerRenderData; - for (auto& layer : layerIdToLayerRenderData) { - const auto& layerID = layer.first; - const auto sourceLayer = layers->getLayer(layerID); - if (sourceLayer) { - const auto& sourceLayerID = sourceLayer->getName(); - auto entry = states.find(sourceLayerID); + for (auto& layerIdToLayerRenderData = layoutResult->layerRenderData; + auto& [layerID, renderData] : layerIdToLayerRenderData) { + std::string sourceLayerId = renderData.layerProperties->baseImpl->sourceLayer; + if (const auto sourceLayer = layers->getLayer(sourceLayerId)) { + auto entry = states.find(sourceLayerId); if (entry == states.end()) { continue; } @@ -561,9 +559,7 @@ void GeometryTile::setFeatureState(const LayerFeatureStates& states) { if (featureStates.empty()) { continue; } - - auto bucket = layer.second.bucket; - if (bucket && bucket->hasData()) { + if (const auto bucket = renderData.bucket; bucket && bucket->hasData()) { bucket->update(featureStates, *sourceLayer, layerID, layoutResult->imageAtlas.patternPositions); } }