Pattern layout performance improvement (#3495)
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
#pragma once
|
||||
#include <list>
|
||||
#include <mbgl/geometry/feature_index.hpp>
|
||||
#include <mbgl/layout/layout.hpp>
|
||||
#include <mbgl/renderer/bucket_parameters.hpp>
|
||||
@@ -18,25 +17,33 @@ public:
|
||||
std::string max;
|
||||
};
|
||||
|
||||
using PatternLayerMap = std::map<std::string, PatternDependency>;
|
||||
using PatternLayerMap = mbgl::unordered_map<std::string, PatternDependency>;
|
||||
|
||||
class PatternFeature {
|
||||
public:
|
||||
PatternFeature(std::size_t i_,
|
||||
std::unique_ptr<GeometryTileFeature> feature_,
|
||||
PatternLayerMap patterns_,
|
||||
std::unique_ptr<GeometryTileFeature>&& feature_,
|
||||
PatternLayerMap&& patterns_,
|
||||
float sortKey_ = 0.0f)
|
||||
: i(i_),
|
||||
feature(std::move(feature_)),
|
||||
patterns(std::move(patterns_)),
|
||||
sortKey(sortKey_) {}
|
||||
sortKey(sortKey_),
|
||||
patterns(std::make_unique<PatternLayerMap>(std::move(patterns_))) {}
|
||||
PatternFeature(const PatternFeature&) = delete;
|
||||
PatternFeature(PatternFeature&&) = default;
|
||||
PatternFeature& operator=(const PatternFeature&) = delete;
|
||||
PatternFeature& operator=(PatternFeature&&) = default;
|
||||
|
||||
const PatternLayerMap& getPatterns() const { return *patterns; }
|
||||
|
||||
friend bool operator<(const PatternFeature& lhs, const PatternFeature& rhs) { return lhs.sortKey < rhs.sortKey; }
|
||||
|
||||
std::size_t i;
|
||||
std::unique_ptr<GeometryTileFeature> feature;
|
||||
PatternLayerMap patterns;
|
||||
float sortKey;
|
||||
|
||||
protected:
|
||||
std::unique_ptr<PatternLayerMap> patterns;
|
||||
};
|
||||
|
||||
template <typename SortKeyPropertyType>
|
||||
@@ -182,7 +189,7 @@ public:
|
||||
for (auto& patternFeature : features) {
|
||||
const auto i = patternFeature.i;
|
||||
std::unique_ptr<GeometryTileFeature> feature = std::move(patternFeature.feature);
|
||||
const PatternLayerMap& patterns = patternFeature.patterns;
|
||||
const PatternLayerMap& patterns = patternFeature.getPatterns();
|
||||
const GeometryCollection& geometries = feature->getGeometries();
|
||||
|
||||
bucket->addFeature(*feature, geometries, patternPositions, patterns, i, canonical);
|
||||
|
||||
@@ -19,7 +19,7 @@ class RenderLayer;
|
||||
class CrossTileSymbolLayerIndex;
|
||||
class OverscaledTileID;
|
||||
class PatternDependency;
|
||||
using PatternLayerMap = std::map<std::string, PatternDependency>;
|
||||
using PatternLayerMap = mbgl::unordered_map<std::string, PatternDependency>;
|
||||
class Placement;
|
||||
class TransformState;
|
||||
class BucketPlacementData;
|
||||
|
||||
Reference in New Issue
Block a user