From dea10633197fbcf949e48ffc0a46fd75bbcb057d Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Fri, 28 Feb 2020 14:11:15 +0200 Subject: [core] Encapsulate placement code handling symbols sort ranges --- src/mbgl/renderer/buckets/symbol_bucket.cpp | 13 +++++++++++-- src/mbgl/renderer/buckets/symbol_bucket.hpp | 24 ++++++++++++++---------- 2 files changed, 25 insertions(+), 12 deletions(-) (limited to 'src/mbgl/renderer/buckets') diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index 7b8eec4471..af2a479c26 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -275,8 +275,8 @@ void SymbolBucket::sortFeatures(const float angle) { featureSortOrder = std::move(symbolsSortOrder); } -std::vector> SymbolBucket::getSortedSymbols(const float angle) const { - std::vector> result(symbolInstances.begin(), symbolInstances.end()); +SymbolInstanceReferences SymbolBucket::getSortedSymbols(const float angle) const { + SymbolInstanceReferences result(symbolInstances.begin(), symbolInstances.end()); const float sin = std::sin(angle); const float cos = std::cos(angle); @@ -292,6 +292,15 @@ std::vector> SymbolBucket::getSorte return result; } +SymbolInstanceReferences SymbolBucket::getSymbols(const optional& range) const { + if (!range) return SymbolInstanceReferences(symbolInstances.begin(), symbolInstances.end()); + assert(range->start < range->end); + assert(range->end <= symbolInstances.size()); + auto begin = symbolInstances.begin() + range->start; + auto end = symbolInstances.begin() + range->end; + return SymbolInstanceReferences(begin, end); +} + bool SymbolBucket::hasFormatSectionOverrides() const { if (!hasFormatSectionOverrides_) { hasFormatSectionOverrides_= SymbolLayerPaintPropertyOverrides::hasOverrides(layout->get()); diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 2b41ac9295..3cdea1310c 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -1,16 +1,17 @@ #pragma once -#include -#include -#include #include +#include +#include +#include +#include +#include #include #include -#include -#include +#include #include -#include -#include +#include +#include #include @@ -97,8 +98,11 @@ public: void sortFeatures(const float angle); - // The result contains references to the `symbolInstances` items, sorted by viewport Y. - std::vector> getSortedSymbols(const float angle) const; + // Returns references to the `symbolInstances` items, sorted by viewport Y. + SymbolInstanceReferences getSortedSymbols(const float angle) const; + // Returns references to the `symbolInstances` items, which belong to the `sortKeyRange` range; + // returns references to all the symbols if |sortKeyRange| is `nullopt`. + SymbolInstanceReferences getSymbols(const optional& sortKeyRange = nullopt) const; Immutable layout; const std::string bucketLeaderID; @@ -118,7 +122,7 @@ public: bool hasUninitializedSymbols : 1; std::vector symbolInstances; - std::vector sortKeyRanges; + const std::vector sortKeyRanges; struct PaintProperties { SymbolIconProgram::Binders iconBinders; -- cgit v1.2.1