From 4a5dc37245d23805d13865f5ef9c5f26e539a9ca Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Thu, 14 Jun 2018 14:35:39 -0700 Subject: [core] Implement CrossFadedDataDrivenProperty to add support for feature expressions in `*-pattern` properties --- src/mbgl/renderer/buckets/line_bucket.cpp | 40 ++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'src/mbgl/renderer/buckets/line_bucket.cpp') diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp index 80149edafe..2efb60c9ac 100644 --- a/src/mbgl/renderer/buckets/line_bucket.cpp +++ b/src/mbgl/renderer/buckets/line_bucket.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -11,34 +10,45 @@ namespace mbgl { using namespace style; -LineBucket::LineBucket(const BucketParameters& parameters, - const std::vector& layers, - const style::LineLayoutProperties::Unevaluated& layout_) +LineBucket::LineBucket(const style::LineLayoutProperties::PossiblyEvaluated layout_, + std::map layerPaintProperties, + const float zoom_, + const uint32_t overscaling_) : Bucket(LayerType::Line), - layout(layout_.evaluate(PropertyEvaluationParameters(parameters.tileID.overscaledZ))), - overscaling(parameters.tileID.overscaleFactor()), - zoom(parameters.tileID.overscaledZ) { - for (const auto& layer : layers) { + layout(layout_), + zoom(zoom_), + overscaling(overscaling_) { + + for (const auto& pair : layerPaintProperties) { paintPropertyBinders.emplace( std::piecewise_construct, - std::forward_as_tuple(layer->getID()), + std::forward_as_tuple(pair.first), std::forward_as_tuple( - layer->as()->evaluated, - parameters.tileID.overscaledZ)); + pair.second, + zoom)); } } + void LineBucket::addFeature(const GeometryTileFeature& feature, - const GeometryCollection& geometryCollection) { + const GeometryCollection& geometryCollection, + const ImagePositions& patternPositions, + const PatternLayerMap& patternDependencies) { for (auto& line : geometryCollection) { addGeometry(line, feature); } for (auto& pair : paintPropertyBinders) { - pair.second.populateVertexVectors(feature, vertices.vertexSize()); + const auto it = patternDependencies.find(pair.first); + if (it != patternDependencies.end()){ + pair.second.populateVertexVectors(feature, vertices.vertexSize(), patternPositions, it->second); + } else { + pair.second.populateVertexVectors(feature, vertices.vertexSize(), patternPositions, {}); + } } } + /* * Sharp corners cause dashed lines to tilt because the distance along the line * is the same at both the inner and outer corners. To improve the appearance of @@ -130,7 +140,9 @@ void LineBucket::addGeometry(const GeometryCoordinates& coordinates, const Geome const float miterLimit = joinType == LineJoinType::Bevel ? 1.05f : float(layout.get()); - const double sharpCornerOffset = SHARP_CORNER_OFFSET * (float(util::EXTENT) / (util::tileSize * overscaling)); + const double sharpCornerOffset = overscaling == 0 ? + SHARP_CORNER_OFFSET * (float(util::EXTENT) / util::tileSize) : + SHARP_CORNER_OFFSET * (float(util::EXTENT) / (util::tileSize * overscaling)); const GeometryCoordinate firstCoordinate = coordinates[first]; const LineCapType beginCap = layout.get(); -- cgit v1.2.1