summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r--src/mbgl/renderer/bucket.hpp8
-rw-r--r--src/mbgl/renderer/buckets/circle_bucket.cpp10
-rw-r--r--src/mbgl/renderer/buckets/circle_bucket.hpp8
-rw-r--r--src/mbgl/renderer/buckets/fill_bucket.cpp14
-rw-r--r--src/mbgl/renderer/buckets/fill_bucket.hpp8
-rw-r--r--src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp14
-rw-r--r--src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp8
-rw-r--r--src/mbgl/renderer/buckets/heatmap_bucket.cpp10
-rw-r--r--src/mbgl/renderer/buckets/heatmap_bucket.hpp8
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.cpp14
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.hpp8
-rw-r--r--src/mbgl/renderer/paint_property_binder.hpp70
12 files changed, 130 insertions, 50 deletions
diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp
index fc34f55e75..4e28107f07 100644
--- a/src/mbgl/renderer/bucket.hpp
+++ b/src/mbgl/renderer/bucket.hpp
@@ -32,8 +32,12 @@ public:
// Feature geometries are also used to populate the feature index.
// Obtaining these is a costly operation, so we do it only once, and
// pass-by-const-ref the geometries as a second parameter.
- virtual void addFeature(const GeometryTileFeature&, const GeometryCollection&, const ImagePositions&,
- const PatternLayerMap&, std::size_t){};
+ virtual void addFeature(const GeometryTileFeature&,
+ const GeometryCollection&,
+ const ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t,
+ const CanonicalTileID&){};
virtual void update(const FeatureStates&, const GeometryTileLayer&, const std::string&, const ImagePositions&) {}
diff --git a/src/mbgl/renderer/buckets/circle_bucket.cpp b/src/mbgl/renderer/buckets/circle_bucket.cpp
index 560a74781a..744b559c42 100644
--- a/src/mbgl/renderer/buckets/circle_bucket.cpp
+++ b/src/mbgl/renderer/buckets/circle_bucket.cpp
@@ -41,8 +41,12 @@ bool CircleBucket::hasData() const {
return !segments.empty();
}
-void CircleBucket::addFeature(const GeometryTileFeature& feature, const GeometryCollection& geometry,
- const ImagePositions&, const PatternLayerMap&, std::size_t featureIndex) {
+void CircleBucket::addFeature(const GeometryTileFeature& feature,
+ const GeometryCollection& geometry,
+ const ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t featureIndex,
+ const CanonicalTileID& canonical) {
constexpr const uint16_t vertexLength = 4;
for (auto& circle : geometry) {
@@ -90,7 +94,7 @@ void CircleBucket::addFeature(const GeometryTileFeature& feature, const Geometry
}
for (auto& pair : paintPropertyBinders) {
- pair.second.populateVertexVectors(feature, vertices.elements(), featureIndex, {}, {});
+ pair.second.populateVertexVectors(feature, vertices.elements(), featureIndex, {}, {}, canonical);
}
}
diff --git a/src/mbgl/renderer/buckets/circle_bucket.hpp b/src/mbgl/renderer/buckets/circle_bucket.hpp
index e514f8a5f2..17ddd9dc10 100644
--- a/src/mbgl/renderer/buckets/circle_bucket.hpp
+++ b/src/mbgl/renderer/buckets/circle_bucket.hpp
@@ -18,8 +18,12 @@ public:
CircleBucket(const BucketParameters&, const std::vector<Immutable<style::LayerProperties>>&);
~CircleBucket() override;
- void addFeature(const GeometryTileFeature&, const GeometryCollection&, const ImagePositions&,
- const PatternLayerMap&, std::size_t) override;
+ void addFeature(const GeometryTileFeature&,
+ const GeometryCollection&,
+ const ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t,
+ const CanonicalTileID&) override;
bool hasData() const override;
diff --git a/src/mbgl/renderer/buckets/fill_bucket.cpp b/src/mbgl/renderer/buckets/fill_bucket.cpp
index 6660934f8d..73c2530241 100644
--- a/src/mbgl/renderer/buckets/fill_bucket.cpp
+++ b/src/mbgl/renderer/buckets/fill_bucket.cpp
@@ -44,9 +44,12 @@ FillBucket::FillBucket(const FillBucket::PossiblyEvaluatedLayoutProperties,
FillBucket::~FillBucket() = default;
-void FillBucket::addFeature(const GeometryTileFeature& feature, const GeometryCollection& geometry,
- const ImagePositions& patternPositions, const PatternLayerMap& patternDependencies,
- std::size_t index) {
+void FillBucket::addFeature(const GeometryTileFeature& feature,
+ const GeometryCollection& geometry,
+ const ImagePositions& patternPositions,
+ const PatternLayerMap& patternDependencies,
+ std::size_t index,
+ const CanonicalTileID& canonical) {
for (auto& polygon : classifyRings(geometry)) {
// Optimize polygons with many interior rings for earcut tesselation.
limitHoles(polygon, 500);
@@ -113,9 +116,10 @@ void FillBucket::addFeature(const GeometryTileFeature& feature, const GeometryCo
for (auto& pair : paintPropertyBinders) {
const auto it = patternDependencies.find(pair.first);
if (it != patternDependencies.end()){
- pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, it->second);
+ pair.second.populateVertexVectors(
+ feature, vertices.elements(), index, patternPositions, it->second, canonical);
} else {
- pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, {});
+ pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, {}, canonical);
}
}
}
diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp
index 7a3f681121..4de97141a7 100644
--- a/src/mbgl/renderer/buckets/fill_bucket.hpp
+++ b/src/mbgl/renderer/buckets/fill_bucket.hpp
@@ -25,8 +25,12 @@ public:
const float zoom,
const uint32_t overscaling);
- void addFeature(const GeometryTileFeature&, const GeometryCollection&, const mbgl::ImagePositions&,
- const PatternLayerMap&, std::size_t) override;
+ void addFeature(const GeometryTileFeature&,
+ const GeometryCollection&,
+ const mbgl::ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t,
+ const CanonicalTileID&) override;
bool hasData() const override;
diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp
index 698895fdcf..39c9f9af1e 100644
--- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp
+++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp
@@ -50,9 +50,12 @@ FillExtrusionBucket::FillExtrusionBucket(const FillExtrusionBucket::PossiblyEval
FillExtrusionBucket::~FillExtrusionBucket() = default;
-void FillExtrusionBucket::addFeature(const GeometryTileFeature& feature, const GeometryCollection& geometry,
- const ImagePositions& patternPositions, const PatternLayerMap& patternDependencies,
- std::size_t index) {
+void FillExtrusionBucket::addFeature(const GeometryTileFeature& feature,
+ const GeometryCollection& geometry,
+ const ImagePositions& patternPositions,
+ const PatternLayerMap& patternDependencies,
+ std::size_t index,
+ const CanonicalTileID& canonical) {
for (auto& polygon : classifyRings(geometry)) {
// Optimize polygons with many interior rings for earcut tesselation.
limitHoles(polygon, 500);
@@ -157,9 +160,10 @@ void FillExtrusionBucket::addFeature(const GeometryTileFeature& feature, const G
for (auto& pair : paintPropertyBinders) {
const auto it = patternDependencies.find(pair.first);
if (it != patternDependencies.end()){
- pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, it->second);
+ pair.second.populateVertexVectors(
+ feature, vertices.elements(), index, patternPositions, it->second, canonical);
} else {
- pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, {});
+ pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, {}, canonical);
}
}
}
diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp
index 8535f99b70..833eee7a73 100644
--- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp
+++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp
@@ -24,8 +24,12 @@ public:
const float,
const uint32_t);
- void addFeature(const GeometryTileFeature&, const GeometryCollection&, const mbgl::ImagePositions&,
- const PatternLayerMap&, std::size_t) override;
+ void addFeature(const GeometryTileFeature&,
+ const GeometryCollection&,
+ const mbgl::ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t,
+ const CanonicalTileID&) override;
bool hasData() const override;
diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.cpp b/src/mbgl/renderer/buckets/heatmap_bucket.cpp
index 78c4fb7507..31c4bc0e9c 100644
--- a/src/mbgl/renderer/buckets/heatmap_bucket.cpp
+++ b/src/mbgl/renderer/buckets/heatmap_bucket.cpp
@@ -39,8 +39,12 @@ bool HeatmapBucket::hasData() const {
return !segments.empty();
}
-void HeatmapBucket::addFeature(const GeometryTileFeature& feature, const GeometryCollection& geometry,
- const ImagePositions&, const PatternLayerMap&, std::size_t featureIndex) {
+void HeatmapBucket::addFeature(const GeometryTileFeature& feature,
+ const GeometryCollection& geometry,
+ const ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t featureIndex,
+ const CanonicalTileID& canonical) {
constexpr const uint16_t vertexLength = 4;
for (auto& points : geometry) {
@@ -87,7 +91,7 @@ void HeatmapBucket::addFeature(const GeometryTileFeature& feature, const Geometr
}
for (auto& pair : paintPropertyBinders) {
- pair.second.populateVertexVectors(feature, vertices.elements(), featureIndex, {}, {});
+ pair.second.populateVertexVectors(feature, vertices.elements(), featureIndex, {}, {}, canonical);
}
}
diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.hpp b/src/mbgl/renderer/buckets/heatmap_bucket.hpp
index 04d4170b50..0aaff7f298 100644
--- a/src/mbgl/renderer/buckets/heatmap_bucket.hpp
+++ b/src/mbgl/renderer/buckets/heatmap_bucket.hpp
@@ -18,8 +18,12 @@ public:
HeatmapBucket(const BucketParameters&, const std::vector<Immutable<style::LayerProperties>>&);
~HeatmapBucket() override;
- void addFeature(const GeometryTileFeature&, const GeometryCollection&, const ImagePositions&,
- const PatternLayerMap&, std::size_t) override;
+ void addFeature(const GeometryTileFeature&,
+ const GeometryCollection&,
+ const ImagePositions&,
+ const PatternLayerMap&,
+ std::size_t,
+ const CanonicalTileID&) override;
bool hasData() const override;
void upload(gfx::UploadPass&) override;
diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp
index c32515e016..fdb110bc9d 100644
--- a/src/mbgl/renderer/buckets/line_bucket.cpp
+++ b/src/mbgl/renderer/buckets/line_bucket.cpp
@@ -27,9 +27,12 @@ LineBucket::LineBucket(const LineBucket::PossiblyEvaluatedLayoutProperties layou
LineBucket::~LineBucket() = default;
-void LineBucket::addFeature(const GeometryTileFeature& feature, const GeometryCollection& geometryCollection,
- const ImagePositions& patternPositions, const PatternLayerMap& patternDependencies,
- std::size_t index) {
+void LineBucket::addFeature(const GeometryTileFeature& feature,
+ const GeometryCollection& geometryCollection,
+ const ImagePositions& patternPositions,
+ const PatternLayerMap& patternDependencies,
+ std::size_t index,
+ const CanonicalTileID& canonical) {
for (auto& line : geometryCollection) {
addGeometry(line, feature);
}
@@ -37,9 +40,10 @@ void LineBucket::addFeature(const GeometryTileFeature& feature, const GeometryCo
for (auto& pair : paintPropertyBinders) {
const auto it = patternDependencies.find(pair.first);
if (it != patternDependencies.end()){
- pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, it->second);
+ pair.second.populateVertexVectors(
+ feature, vertices.elements(), index, patternPositions, it->second, canonical);
} else {
- pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, {});
+ pair.second.populateVertexVectors(feature, vertices.elements(), index, patternPositions, {}, canonical);
}
}
}
diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp
index a3237c9df9..a3821d108b 100644
--- a/src/mbgl/renderer/buckets/line_bucket.hpp
+++ b/src/mbgl/renderer/buckets/line_bucket.hpp
@@ -25,8 +25,12 @@ public:
const uint32_t overscaling);
~LineBucket() override;
- void addFeature(const GeometryTileFeature&, const GeometryCollection&, const mbgl::ImagePositions& patternPositions,
- const PatternLayerMap&, std::size_t) override;
+ void addFeature(const GeometryTileFeature&,
+ const GeometryCollection&,
+ const mbgl::ImagePositions& patternPositions,
+ const PatternLayerMap&,
+ std::size_t,
+ const CanonicalTileID&) override;
bool hasData() const override;
diff --git a/src/mbgl/renderer/paint_property_binder.hpp b/src/mbgl/renderer/paint_property_binder.hpp
index db9f61411a..3a9dceacc0 100644
--- a/src/mbgl/renderer/paint_property_binder.hpp
+++ b/src/mbgl/renderer/paint_property_binder.hpp
@@ -105,8 +105,12 @@ public:
virtual ~PaintPropertyBinder() = default;
- virtual void populateVertexVector(const GeometryTileFeature& feature, std::size_t length, std::size_t index,
- const ImagePositions&, const optional<PatternDependency>&,
+ virtual void populateVertexVector(const GeometryTileFeature& feature,
+ std::size_t length,
+ std::size_t index,
+ const ImagePositions&,
+ const optional<PatternDependency>&,
+ const CanonicalTileID& canonical,
const style::expression::Value&) = 0;
virtual void updateVertexVectors(const FeatureStates&, const GeometryTileLayer&, const ImagePositions&) {}
@@ -131,8 +135,13 @@ public:
: constant(std::move(constant_)) {
}
- void populateVertexVector(const GeometryTileFeature&, std::size_t, std::size_t, const ImagePositions&,
- const optional<PatternDependency>&, const style::expression::Value&) override {}
+ void populateVertexVector(const GeometryTileFeature&,
+ std::size_t,
+ std::size_t,
+ const ImagePositions&,
+ const optional<PatternDependency>&,
+ const CanonicalTileID&,
+ const style::expression::Value&) override {}
void updateVertexVector(std::size_t, std::size_t, const GeometryTileFeature&, const FeatureState&) override {}
void upload(gfx::UploadPass&) override {}
void setPatternParameters(const optional<ImagePosition>&, const optional<ImagePosition>&, const CrossfadeParameters&) override {};
@@ -160,8 +169,13 @@ public:
: constant(std::move(constant_)), constantPatternPositions({}) {
}
- void populateVertexVector(const GeometryTileFeature&, std::size_t, std::size_t, const ImagePositions&,
- const optional<PatternDependency>&, const style::expression::Value&) override {}
+ void populateVertexVector(const GeometryTileFeature&,
+ std::size_t,
+ std::size_t,
+ const ImagePositions&,
+ const optional<PatternDependency>&,
+ const CanonicalTileID&,
+ const style::expression::Value&) override {}
void updateVertexVector(std::size_t, std::size_t, const GeometryTileFeature&, const FeatureState&) override {}
void upload(gfx::UploadPass&) override {}
@@ -204,11 +218,17 @@ public:
defaultValue(std::move(defaultValue_)) {
}
void setPatternParameters(const optional<ImagePosition>&, const optional<ImagePosition>&, const CrossfadeParameters&) override {};
- void populateVertexVector(const GeometryTileFeature& feature, std::size_t length, std::size_t index,
- const ImagePositions&, const optional<PatternDependency>&,
+ void populateVertexVector(const GeometryTileFeature& feature,
+ std::size_t length,
+ std::size_t index,
+ const ImagePositions&,
+ const optional<PatternDependency>&,
+ const CanonicalTileID& canonical,
const style::expression::Value& formattedSection) override {
using style::expression::EvaluationContext;
- auto evaluated = expression.evaluate(EvaluationContext(&feature).withFormattedSection(&formattedSection), defaultValue);
+ auto evaluated = expression.evaluate(
+ EvaluationContext(&feature).withFormattedSection(&formattedSection).withCanonicalTileID(canonical),
+ defaultValue);
this->statistics.add(evaluated);
auto value = attributeValue(evaluated);
auto elements = vertexVector.elements();
@@ -299,13 +319,23 @@ public:
zoomRange({zoom, zoom + 1}) {
}
void setPatternParameters(const optional<ImagePosition>&, const optional<ImagePosition>&, const CrossfadeParameters&) override {};
- void populateVertexVector(const GeometryTileFeature& feature, std::size_t length, std::size_t index,
- const ImagePositions&, const optional<PatternDependency>&,
+ void populateVertexVector(const GeometryTileFeature& feature,
+ std::size_t length,
+ std::size_t index,
+ const ImagePositions&,
+ const optional<PatternDependency>&,
+ const CanonicalTileID& canonical,
const style::expression::Value& formattedSection) override {
using style::expression::EvaluationContext;
Range<T> range = {
- expression.evaluate(EvaluationContext(zoomRange.min, &feature).withFormattedSection(&formattedSection), defaultValue),
- expression.evaluate(EvaluationContext(zoomRange.max, &feature).withFormattedSection(&formattedSection), defaultValue),
+ expression.evaluate(EvaluationContext(zoomRange.min, &feature)
+ .withFormattedSection(&formattedSection)
+ .withCanonicalTileID(canonical),
+ defaultValue),
+ expression.evaluate(EvaluationContext(zoomRange.max, &feature)
+ .withFormattedSection(&formattedSection)
+ .withCanonicalTileID(canonical),
+ defaultValue),
};
this->statistics.add(range.min);
this->statistics.add(range.max);
@@ -416,9 +446,12 @@ public:
crossfade = crossfade_;
};
- void populateVertexVector(const GeometryTileFeature&, std::size_t length, std::size_t /* index */,
+ void populateVertexVector(const GeometryTileFeature&,
+ std::size_t length,
+ std::size_t /* index */,
const ImagePositions& patternPositions,
const optional<PatternDependency>& patternDependencies,
+ const CanonicalTileID&,
const style::expression::Value&) override {
if (!patternDependencies || patternDependencies->mid.empty()) {
// Unlike other propperties with expressions that evaluate to null, the default value for `*-pattern` properties is an empty
@@ -589,12 +622,15 @@ public:
PaintPropertyBinders(PaintPropertyBinders&&) = default;
PaintPropertyBinders(const PaintPropertyBinders&) = delete;
- void populateVertexVectors(const GeometryTileFeature& feature, std::size_t length, std::size_t index,
+ void populateVertexVectors(const GeometryTileFeature& feature,
+ std::size_t length,
+ std::size_t index,
const ImagePositions& patternPositions,
const optional<PatternDependency>& patternDependencies,
+ const CanonicalTileID& canonical,
const style::expression::Value& formattedSection = {}) {
- util::ignore({(binders.template get<Ps>()->populateVertexVector(feature, length, index, patternPositions,
- patternDependencies, formattedSection),
+ util::ignore({(binders.template get<Ps>()->populateVertexVector(
+ feature, length, index, patternPositions, patternDependencies, canonical, formattedSection),
0)...});
}