diff options
Diffstat (limited to 'src/mbgl/renderer/buckets')
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 24 |
2 files changed, 25 insertions, 12 deletions
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<std::reference_wrapper<const SymbolInstance>> SymbolBucket::getSortedSymbols(const float angle) const { - std::vector<std::reference_wrapper<const SymbolInstance>> 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<std::reference_wrapper<const SymbolInstance>> SymbolBucket::getSorte return result; } +SymbolInstanceReferences SymbolBucket::getSymbols(const optional<SortKeyRange>& 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<TextField>()); 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 <mbgl/renderer/bucket.hpp> -#include <mbgl/map/mode.hpp> -#include <mbgl/gfx/vertex_buffer.hpp> #include <mbgl/gfx/index_buffer.hpp> +#include <mbgl/gfx/vertex_buffer.hpp> +#include <mbgl/layout/symbol_feature.hpp> +#include <mbgl/layout/symbol_instance.hpp> +#include <mbgl/map/mode.hpp> +#include <mbgl/programs/collision_box_program.hpp> #include <mbgl/programs/segment.hpp> #include <mbgl/programs/symbol_program.hpp> -#include <mbgl/programs/collision_box_program.hpp> -#include <mbgl/text/glyph_range.hpp> +#include <mbgl/renderer/bucket.hpp> #include <mbgl/style/layers/symbol_layer_properties.hpp> -#include <mbgl/layout/symbol_feature.hpp> -#include <mbgl/layout/symbol_instance.hpp> +#include <mbgl/text/glyph_range.hpp> +#include <mbgl/text/placement.hpp> #include <vector> @@ -97,8 +98,11 @@ public: void sortFeatures(const float angle); - // The result contains references to the `symbolInstances` items, sorted by viewport Y. - std::vector<std::reference_wrapper<const SymbolInstance>> 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>& sortKeyRange = nullopt) const; Immutable<style::SymbolLayoutProperties::PossiblyEvaluated> layout; const std::string bucketLeaderID; @@ -118,7 +122,7 @@ public: bool hasUninitializedSymbols : 1; std::vector<SymbolInstance> symbolInstances; - std::vector<SortKeyRange> sortKeyRanges; + const std::vector<SortKeyRange> sortKeyRanges; struct PaintProperties { SymbolIconProgram::Binders iconBinders; |