diff options
Diffstat (limited to 'src/mbgl/renderer/layers/render_symbol_layer.cpp')
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 2a94c452c7..416704f167 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -587,20 +587,16 @@ void RenderSymbolLayer::prepare(const LayerPrepareParameters& params) { auto featureIndex = static_cast<const GeometryTile*>(tile)->getFeatureIndex(); if (bucket->sortKeyRanges.empty()) { - placementData.push_back( - {*bucket, renderTile, featureIndex, firstInBucket, 0.0f, 0, bucket->symbolInstances.size()}); + placementData.push_back({*bucket, renderTile, featureIndex, firstInBucket, nullopt}); } else { - for (const SortKeyRange& sortKeyRange : bucket->sortKeyRanges) { - LayerPlacementData layerData{*bucket, - renderTile, - featureIndex, - firstInBucket, - sortKeyRange.sortKey, - sortKeyRange.symbolInstanceStart, - sortKeyRange.symbolInstanceEnd}; - auto sortPosition = std::upper_bound(placementData.cbegin(), placementData.cend(), layerData); + for (const auto& sortKeyRange : bucket->sortKeyRanges) { + LayerPlacementData layerData{*bucket, renderTile, featureIndex, firstInBucket, sortKeyRange}; + auto sortPosition = std::upper_bound( + placementData.cbegin(), placementData.cend(), layerData, [](const auto& lhs, const auto& rhs) { + assert(lhs.sortKeyRange && rhs.sortKeyRange); + return lhs.sortKeyRange->sortKey < rhs.sortKeyRange->sortKey; + }); placementData.insert(sortPosition, std::move(layerData)); - firstInBucket = false; } } |