summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/buckets/line_bucket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/buckets/line_bucket.cpp')
-rw-r--r--src/mbgl/renderer/buckets/line_bucket.cpp31
1 files changed, 13 insertions, 18 deletions
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