summaryrefslogtreecommitdiff
path: root/src/mbgl/layout/pattern_layout.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/layout/pattern_layout.hpp')
-rw-r--r--src/mbgl/layout/pattern_layout.hpp46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/mbgl/layout/pattern_layout.hpp b/src/mbgl/layout/pattern_layout.hpp
index d6d878955f..48531e836b 100644
--- a/src/mbgl/layout/pattern_layout.hpp
+++ b/src/mbgl/layout/pattern_layout.hpp
@@ -1,8 +1,9 @@
#pragma once
+#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/layout/layout.hpp>
#include <mbgl/renderer/bucket_parameters.hpp>
-#include <mbgl/geometry/feature_index.hpp>
#include <mbgl/renderer/render_layer.hpp>
+#include <mbgl/style/expression/image.hpp>
#include <mbgl/style/layer_properties.hpp>
namespace mbgl {
@@ -32,11 +33,11 @@ public:
PatternLayout(const BucketParameters& parameters,
const std::vector<Immutable<style::LayerProperties>>& group,
std::unique_ptr<GeometryTileLayer> sourceLayer_,
- ImageDependencies& patternDependencies)
- : sourceLayer(std::move(sourceLayer_)),
- zoom(parameters.tileID.overscaledZ),
- overscaling(parameters.tileID.overscaleFactor()),
- hasPattern(false) {
+ const LayoutParameters& layoutParameters)
+ : sourceLayer(std::move(sourceLayer_)),
+ zoom(parameters.tileID.overscaledZ),
+ overscaling(parameters.tileID.overscaleFactor()),
+ hasPattern(false) {
assert(!group.empty());
auto leaderLayerProperties = staticImmutableCast<LayerPropertiesType>(group.front());
layout = leaderLayerProperties->layerImpl().layout.evaluate(PropertyEvaluationParameters(zoom));
@@ -47,15 +48,15 @@ public:
const std::string& layerId = layerProperties->baseImpl->id;
const auto& evaluated = style::getEvaluated<LayerPropertiesType>(layerProperties);
const auto patternProperty = evaluated.template get<PatternPropertyType>();
- const auto constantPattern = patternProperty.constantOr(Faded<std::basic_string<char> >{ "", ""});
+ const auto constantPattern = patternProperty.constantOr(Faded<style::expression::Image>{"", ""});
// determine if layer group has any layers that use *-pattern property and add
// constant pattern dependencies.
if (!patternProperty.isConstant()) {
hasPattern = true;
- } else if (!constantPattern.to.empty()){
+ } else if (!constantPattern.to.id().empty()) {
hasPattern = true;
- patternDependencies.emplace(constantPattern.to, ImageType::Pattern);
- patternDependencies.emplace(constantPattern.from, ImageType::Pattern);
+ layoutParameters.imageDependencies.emplace(constantPattern.to.id(), ImageType::Pattern);
+ layoutParameters.imageDependencies.emplace(constantPattern.from.id(), ImageType::Pattern);
}
layerPropertiesMap.emplace(layerId, layerProperties);
}
@@ -77,15 +78,22 @@ public:
if (!patternProperty.isConstant()) {
// For layers with non-data-constant pattern properties, evaluate their expression and add
// the patterns to the dependency vector
- const auto min = patternProperty.evaluate(*feature, zoom - 1, PatternPropertyType::defaultValue());
- const auto mid = patternProperty.evaluate(*feature, zoom, PatternPropertyType::defaultValue());
- const auto max = patternProperty.evaluate(*feature, zoom + 1, PatternPropertyType::defaultValue());
-
- patternDependencies.emplace(min.to, ImageType::Pattern);
- patternDependencies.emplace(mid.to, ImageType::Pattern);
- patternDependencies.emplace(max.to, ImageType::Pattern);
- patternDependencyMap.emplace(layerId, PatternDependency {min.to, mid.to, max.to});
-
+ const auto min = patternProperty.evaluate(*feature,
+ zoom - 1,
+ layoutParameters.availableImages,
+ PatternPropertyType::defaultValue());
+ const auto mid = patternProperty.evaluate(
+ *feature, zoom, layoutParameters.availableImages, PatternPropertyType::defaultValue());
+ const auto max = patternProperty.evaluate(*feature,
+ zoom + 1,
+ layoutParameters.availableImages,
+ PatternPropertyType::defaultValue());
+
+ layoutParameters.imageDependencies.emplace(min.to.id(), ImageType::Pattern);
+ layoutParameters.imageDependencies.emplace(mid.to.id(), ImageType::Pattern);
+ layoutParameters.imageDependencies.emplace(max.to.id(), ImageType::Pattern);
+ patternDependencyMap.emplace(layerId,
+ PatternDependency{min.to.id(), mid.to.id(), max.to.id()});
}
}
}