summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/buckets
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/buckets')
-rw-r--r--src/mbgl/renderer/buckets/circle_bucket.cpp20
-rw-r--r--src/mbgl/renderer/buckets/circle_bucket.hpp2
-rw-r--r--src/mbgl/renderer/buckets/fill_bucket.cpp5
-rw-r--r--src/mbgl/renderer/buckets/fill_bucket.hpp2
-rw-r--r--src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp4
-rw-r--r--src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp2
-rw-r--r--src/mbgl/renderer/buckets/heatmap_bucket.cpp6
-rw-r--r--src/mbgl/renderer/buckets/heatmap_bucket.hpp2
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.cpp31
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.hpp7
10 files changed, 33 insertions, 48 deletions
diff --git a/src/mbgl/renderer/buckets/circle_bucket.cpp b/src/mbgl/renderer/buckets/circle_bucket.cpp
index 54ed374069..376f4e682f 100644
--- a/src/mbgl/renderer/buckets/circle_bucket.cpp
+++ b/src/mbgl/renderer/buckets/circle_bucket.cpp
@@ -10,14 +10,14 @@ namespace mbgl {
using namespace style;
-CircleBucket::CircleBucket(const BucketParameters& parameters, const std::vector<const RenderLayer*>& layers)
+CircleBucket::CircleBucket(const BucketParameters& parameters, const std::vector<Immutable<style::LayerProperties>>& layers)
: mode(parameters.mode) {
for (const auto& layer : layers) {
paintPropertyBinders.emplace(
std::piecewise_construct,
- std::forward_as_tuple(layer->getID()),
+ std::forward_as_tuple(layer->baseImpl->id),
std::forward_as_tuple(
- toRenderCircleLayer(layer)->evaluated,
+ getEvaluated<CircleLayerProperties>(layer),
parameters.tileID.overscaledZ));
}
}
@@ -99,20 +99,20 @@ void CircleBucket::addFeature(const GeometryTileFeature& feature,
}
template <class Property>
-static float get(const RenderCircleLayer& layer, const std::map<std::string, CircleProgram::Binders>& paintPropertyBinders) {
- auto it = paintPropertyBinders.find(layer.getID());
+static float get(const CirclePaintProperties::PossiblyEvaluated& evaluated, const std::string& id, const std::map<std::string, CircleProgram::Binders>& paintPropertyBinders) {
+ auto it = paintPropertyBinders.find(id);
if (it == paintPropertyBinders.end() || !it->second.statistics<Property>().max()) {
- return layer.evaluated.get<Property>().constantOr(Property::defaultValue());
+ return evaluated.get<Property>().constantOr(Property::defaultValue());
} else {
return *it->second.statistics<Property>().max();
}
}
float CircleBucket::getQueryRadius(const RenderLayer& layer) const {
- const RenderCircleLayer* circleLayer = toRenderCircleLayer(&layer);
- float radius = get<CircleRadius>(*circleLayer, paintPropertyBinders);
- float stroke = get<CircleStrokeWidth>(*circleLayer, paintPropertyBinders);
- auto translate = circleLayer->evaluated.get<CircleTranslate>();
+ const auto& evaluated = getEvaluated<CircleLayerProperties>(layer.evaluatedProperties);
+ float radius = get<CircleRadius>(evaluated, layer.getID(), paintPropertyBinders);
+ float stroke = get<CircleStrokeWidth>(evaluated, layer.getID(), paintPropertyBinders);
+ auto translate = evaluated.get<CircleTranslate>();
return radius + stroke + util::length(translate[0], translate[1]);
}
diff --git a/src/mbgl/renderer/buckets/circle_bucket.hpp b/src/mbgl/renderer/buckets/circle_bucket.hpp
index e9aceed2b1..58f76327ab 100644
--- a/src/mbgl/renderer/buckets/circle_bucket.hpp
+++ b/src/mbgl/renderer/buckets/circle_bucket.hpp
@@ -15,7 +15,7 @@ class BucketParameters;
class CircleBucket final : public Bucket {
public:
- CircleBucket(const BucketParameters&, const std::vector<const RenderLayer*>&);
+ CircleBucket(const BucketParameters&, const std::vector<Immutable<style::LayerProperties>>&);
~CircleBucket() override;
void addFeature(const GeometryTileFeature&,
diff --git a/src/mbgl/renderer/buckets/fill_bucket.cpp b/src/mbgl/renderer/buckets/fill_bucket.cpp
index 927cb4a307..2dffc555e2 100644
--- a/src/mbgl/renderer/buckets/fill_bucket.cpp
+++ b/src/mbgl/renderer/buckets/fill_bucket.cpp
@@ -141,10 +141,9 @@ bool FillBucket::supportsLayer(const style::Layer::Impl& impl) const {
return style::FillLayer::Impl::staticTypeInfo() == impl.getTypeInfo();
}
-
float FillBucket::getQueryRadius(const RenderLayer& layer) const {
- const RenderFillLayer* fillLayer = toRenderFillLayer(&layer);
- const std::array<float, 2>& translate = fillLayer->evaluated.get<FillTranslate>();
+ const auto& evaluated = getEvaluated<FillLayerProperties>(layer.evaluatedProperties);
+ const std::array<float, 2>& translate = evaluated.get<FillTranslate>();
return util::length(translate[0], translate[1]);
}
diff --git a/src/mbgl/renderer/buckets/fill_bucket.hpp b/src/mbgl/renderer/buckets/fill_bucket.hpp
index e1869e08d2..5844625d2a 100644
--- a/src/mbgl/renderer/buckets/fill_bucket.hpp
+++ b/src/mbgl/renderer/buckets/fill_bucket.hpp
@@ -18,8 +18,6 @@ class RenderFillLayer;
class FillBucket final : public Bucket {
public:
~FillBucket() override;
- // These aliases are used by the PatternLayout template
- using RenderLayerType = RenderFillLayer;
using PossiblyEvaluatedPaintProperties = style::FillPaintProperties::PossiblyEvaluated;
using PossiblyEvaluatedLayoutProperties = style::Properties<>::PossiblyEvaluated;
diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp
index e640cf504d..61fc6a1444 100644
--- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp
+++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.cpp
@@ -185,8 +185,8 @@ bool FillExtrusionBucket::supportsLayer(const style::Layer::Impl& impl) const {
}
float FillExtrusionBucket::getQueryRadius(const RenderLayer& layer) const {
- const RenderFillExtrusionLayer* fillExtrusionLayer = toRenderFillExtrusionLayer(&layer);
- const std::array<float, 2>& translate = fillExtrusionLayer->evaluated.get<FillExtrusionTranslate>();
+ const auto& evaluated = getEvaluated<FillExtrusionLayerProperties>(layer.evaluatedProperties);
+ const std::array<float, 2>& translate = evaluated.get<FillExtrusionTranslate>();
return util::length(translate[0], translate[1]);
}
diff --git a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp
index 81685e2c42..9dc2681bac 100644
--- a/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp
+++ b/src/mbgl/renderer/buckets/fill_extrusion_bucket.hpp
@@ -16,8 +16,6 @@ class RenderFillExtrusionLayer;
class FillExtrusionBucket final : public Bucket {
public:
~FillExtrusionBucket() override;
- // These aliases are used by the PatternLayout template
- using RenderLayerType = RenderFillExtrusionLayer;
using PossiblyEvaluatedPaintProperties = style::FillExtrusionPaintProperties::PossiblyEvaluated;
using PossiblyEvaluatedLayoutProperties = style::Properties<>::PossiblyEvaluated;
diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.cpp b/src/mbgl/renderer/buckets/heatmap_bucket.cpp
index 04fd58ec55..111911a88c 100644
--- a/src/mbgl/renderer/buckets/heatmap_bucket.cpp
+++ b/src/mbgl/renderer/buckets/heatmap_bucket.cpp
@@ -10,14 +10,14 @@ namespace mbgl {
using namespace style;
-HeatmapBucket::HeatmapBucket(const BucketParameters& parameters, const std::vector<const RenderLayer*>& layers)
+HeatmapBucket::HeatmapBucket(const BucketParameters& parameters, const std::vector<Immutable<style::LayerProperties>>& layers)
: mode(parameters.mode) {
for (const auto& layer : layers) {
paintPropertyBinders.emplace(
std::piecewise_construct,
- std::forward_as_tuple(layer->getID()),
+ std::forward_as_tuple(layer->baseImpl->id),
std::forward_as_tuple(
- toRenderHeatmapLayer(layer)->evaluated,
+ getEvaluated<HeatmapLayerProperties>(layer),
parameters.tileID.overscaledZ));
}
}
diff --git a/src/mbgl/renderer/buckets/heatmap_bucket.hpp b/src/mbgl/renderer/buckets/heatmap_bucket.hpp
index 62cb460e27..b11c1626cd 100644
--- a/src/mbgl/renderer/buckets/heatmap_bucket.hpp
+++ b/src/mbgl/renderer/buckets/heatmap_bucket.hpp
@@ -15,7 +15,7 @@ class BucketParameters;
class HeatmapBucket final : public Bucket {
public:
- HeatmapBucket(const BucketParameters&, const std::vector<const RenderLayer*>&);
+ HeatmapBucket(const BucketParameters&, const std::vector<Immutable<style::LayerProperties>>&);
~HeatmapBucket() override;
void addFeature(const GeometryTileFeature&,
diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp
index 13f575ba38..9a5ed9e628 100644
--- a/src/mbgl/renderer/buckets/line_bucket.cpp
+++ b/src/mbgl/renderer/buckets/line_bucket.cpp
@@ -11,10 +11,10 @@ namespace mbgl {
using namespace style;
LineBucket::LineBucket(const style::LineLayoutProperties::PossiblyEvaluated layout_,
- std::map<std::string, style::LinePaintProperties::PossiblyEvaluated> layerPaintProperties,
+ const std::map<std::string, style::LinePaintProperties::PossiblyEvaluated>& layerPaintProperties,
const float zoom_,
const uint32_t overscaling_)
- : layout(layout_),
+ : layout(std::move(layout_)),
zoom(zoom_),
overscaling(overscaling_) {
@@ -528,31 +528,26 @@ bool LineBucket::supportsLayer(const style::Layer::Impl& impl) const {
}
template <class Property>
-static float get(const RenderLineLayer& layer, const std::map<std::string, LineProgram::Binders>& paintPropertyBinders) {
- auto it = paintPropertyBinders.find(layer.getID());
+static float get(const LinePaintProperties::PossiblyEvaluated& evaluated, const std::string& id, const std::map<std::string, LineProgram::Binders>& paintPropertyBinders) {
+ auto it = paintPropertyBinders.find(id);
if (it == paintPropertyBinders.end() || !it->second.statistics<Property>().max()) {
- return layer.evaluated.get<Property>().constantOr(Property::defaultValue());
+ return evaluated.get<Property>().constantOr(Property::defaultValue());
} else {
return *it->second.statistics<Property>().max();
}
}
-float LineBucket::getLineWidth(const RenderLineLayer& layer) const {
- float lineWidth = get<LineWidth>(layer, paintPropertyBinders);
- float gapWidth = get<LineGapWidth>(layer, paintPropertyBinders);
-
+float LineBucket::getQueryRadius(const RenderLayer& layer) const {
+ const auto& evaluated = getEvaluated<LineLayerProperties>(layer.evaluatedProperties);
+ const std::array<float, 2>& translate = evaluated.get<LineTranslate>();
+ float offset = get<LineOffset>(evaluated, layer.getID(), paintPropertyBinders);
+ float lineWidth = get<LineWidth>(evaluated, layer.getID(), paintPropertyBinders);
+ float gapWidth = get<LineGapWidth>(evaluated, layer.getID(), paintPropertyBinders);
if (gapWidth) {
- return gapWidth + 2 * lineWidth;
- } else {
- return lineWidth;
+ lineWidth = gapWidth + 2 * lineWidth;
}
-}
-float LineBucket::getQueryRadius(const RenderLayer& layer) const {
- const RenderLineLayer* lineLayer = toRenderLineLayer(&layer);
- const std::array<float, 2>& translate = lineLayer->evaluated.get<LineTranslate>();
- float offset = get<LineOffset>(*lineLayer, paintPropertyBinders);
- return getLineWidth(*lineLayer) / 2.0 + std::abs(offset) + util::length(translate[0], translate[1]);
+ return lineWidth / 2.0f + std::abs(offset) + util::length(translate[0], translate[1]);
}
} // namespace mbgl
diff --git a/src/mbgl/renderer/buckets/line_bucket.hpp b/src/mbgl/renderer/buckets/line_bucket.hpp
index 7ee8677e50..6717ee7446 100644
--- a/src/mbgl/renderer/buckets/line_bucket.hpp
+++ b/src/mbgl/renderer/buckets/line_bucket.hpp
@@ -17,14 +17,11 @@ class RenderLineLayer;
class LineBucket final : public Bucket {
public:
-
- // These aliases are used by the PatternLayout template
- using RenderLayerType = RenderLineLayer;
using PossiblyEvaluatedPaintProperties = style::LinePaintProperties::PossiblyEvaluated;
using PossiblyEvaluatedLayoutProperties = style::LineLayoutProperties::PossiblyEvaluated;
LineBucket(const PossiblyEvaluatedLayoutProperties layout,
- std::map<std::string, PossiblyEvaluatedPaintProperties> layerPaintProperties,
+ const std::map<std::string, PossiblyEvaluatedPaintProperties>& layerPaintProperties,
const float zoom,
const uint32_t overscaling);
~LineBucket() override;
@@ -77,8 +74,6 @@ private:
const float zoom;
const uint32_t overscaling;
-
- float getLineWidth(const RenderLineLayer& layer) const;
};
} // namespace mbgl