diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-01 11:29:28 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-17 17:21:41 +0300 |
commit | 4b21560cf59877125ea0bdae1a2546ab06f1efb2 (patch) | |
tree | bd7f76fd51c29c63ef7b15964752f9c8c9e3bf38 /src/mbgl/renderer/buckets/line_bucket.cpp | |
parent | 1a66a02097f0e3c95a4d06610fc0b7609f6d77b9 (diff) | |
download | qtlocation-mapboxgl-4b21560cf59877125ea0bdae1a2546ab06f1efb2.tar.gz |
[core] Use `style::LayerProperties` in render layers, buckets and layouts.
Diffstat (limited to 'src/mbgl/renderer/buckets/line_bucket.cpp')
-rw-r--r-- | src/mbgl/renderer/buckets/line_bucket.cpp | 31 |
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 |