summaryrefslogtreecommitdiff
path: root/src/mbgl/layout
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/layout')
-rw-r--r--src/mbgl/layout/layout.hpp3
-rw-r--r--src/mbgl/layout/pattern_layout.hpp26
-rw-r--r--src/mbgl/layout/symbol_layout.cpp7
-rw-r--r--src/mbgl/layout/symbol_layout.hpp4
4 files changed, 20 insertions, 20 deletions
diff --git a/src/mbgl/layout/layout.hpp b/src/mbgl/layout/layout.hpp
index 1deaf13193..d1f03792c1 100644
--- a/src/mbgl/layout/layout.hpp
+++ b/src/mbgl/layout/layout.hpp
@@ -11,6 +11,7 @@ class Bucket;
class BucketParameters;
class RenderLayer;
class FeatureIndex;
+class LayerRenderData;
class Layout {
public:
@@ -18,7 +19,7 @@ public:
virtual void createBucket(const ImagePositions&,
std::unique_ptr<FeatureIndex>&,
- std::unordered_map<std::string, std::shared_ptr<Bucket>>&,
+ std::unordered_map<std::string, LayerRenderData>&,
const bool,
const bool) = 0;
diff --git a/src/mbgl/layout/pattern_layout.hpp b/src/mbgl/layout/pattern_layout.hpp
index fe2e9c5950..95f8b181fc 100644
--- a/src/mbgl/layout/pattern_layout.hpp
+++ b/src/mbgl/layout/pattern_layout.hpp
@@ -26,7 +26,6 @@ public:
template <class BucketType,
class LayerPropertiesType,
class PatternPropertyType,
- class PossiblyEvaluatedPaintPropertiesType,
class PossiblyEvaluatedLayoutPropertiesType = typename style::Properties<>::PossiblyEvaluated>
class PatternLayout : public Layout {
public:
@@ -46,8 +45,8 @@ public:
for (const auto& layerProperties : group) {
const std::string& layerId = layerProperties->baseImpl->id;
- const auto evaluatedProps = static_cast<const LayerPropertiesType&>(*layerProperties).evaluated;
- const auto patternProperty = evaluatedProps.template get<PatternPropertyType>();
+ const auto& evaluated = style::getEvaluated<LayerPropertiesType>(layerProperties);
+ const auto patternProperty = evaluated.template get<PatternPropertyType>();
const auto constantPattern = patternProperty.constantOr(Faded<std::basic_string<char> >{ "", ""});
// determine if layer group has any layers that use *-pattern property and add
// constant pattern dependencies.
@@ -58,7 +57,7 @@ public:
patternDependencies.emplace(constantPattern.to, ImageType::Pattern);
patternDependencies.emplace(constantPattern.from, ImageType::Pattern);
}
- layerPaintProperties.emplace(layerId, std::move(evaluatedProps));
+ layerPropertiesMap.emplace(layerId, layerProperties);
}
const size_t featureCount = sourceLayer->featureCount();
@@ -71,9 +70,9 @@ public:
if (hasPattern) {
for (const auto& layerProperties : group) {
const std::string& layerId = layerProperties->baseImpl->id;
- const auto it = layerPaintProperties.find(layerId);
- if (it != layerPaintProperties.end()) {
- const auto paint = it->second;
+ const auto it = layerPropertiesMap.find(layerId);
+ if (it != layerPropertiesMap.end()) {
+ const auto paint = static_cast<const LayerPropertiesType&>(*it->second).evaluated;
const auto patternProperty = paint.template get<PatternPropertyType>();
if (!patternProperty.isConstant()) {
// For layers with non-data-constant pattern properties, evaluate their expression and add
@@ -101,8 +100,8 @@ public:
return hasPattern;
}
- void createBucket(const ImagePositions& patternPositions, std::unique_ptr<FeatureIndex>& featureIndex, std::unordered_map<std::string, std::shared_ptr<Bucket>>& buckets, const bool, const bool) override {
- auto bucket = std::make_shared<BucketType>(layout, layerPaintProperties, zoom, overscaling);
+ void createBucket(const ImagePositions& patternPositions, std::unique_ptr<FeatureIndex>& featureIndex, std::unordered_map<std::string, LayerRenderData>& renderData, const bool, const bool) override {
+ auto bucket = std::make_shared<BucketType>(layout, layerPropertiesMap, zoom, overscaling);
for (auto & patternFeature : features) {
const auto i = patternFeature.i;
std::unique_ptr<GeometryTileFeature> feature = std::move(patternFeature.feature);
@@ -113,17 +112,16 @@ public:
featureIndex->insert(geometries, i, sourceLayerID, bucketLeaderID);
}
if (bucket->hasData()) {
- for (const auto& pair : layerPaintProperties) {
- buckets.emplace(pair.first, bucket);
+ for (const auto& pair : layerPropertiesMap) {
+ renderData.emplace(pair.first, LayerRenderData {bucket, pair.second});
}
}
};
- std::map<std::string, PossiblyEvaluatedPaintPropertiesType> layerPaintProperties;
+private:
+ std::map<std::string, Immutable<style::LayerProperties>> layerPropertiesMap;
std::string bucketLeaderID;
-
-private:
const std::unique_ptr<GeometryTileLayer> sourceLayer;
std::vector<PatternFeature> features;
PossiblyEvaluatedLayoutPropertiesType layout;
diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp
index 0eb98f7569..d8d143632c 100644
--- a/src/mbgl/layout/symbol_layout.cpp
+++ b/src/mbgl/layout/symbol_layout.cpp
@@ -12,6 +12,7 @@
#include <mbgl/util/i18n.hpp>
#include <mbgl/util/platform.hpp>
#include <mbgl/tile/geometry_tile_data.hpp>
+#include <mbgl/tile/tile.hpp>
#include <mapbox/polylabel.hpp>
@@ -106,7 +107,7 @@ SymbolLayout::SymbolLayout(const BucketParameters& parameters,
layout.get<TextIgnorePlacement>() || layout.get<IconIgnorePlacement>());
for (const auto& layer : layers) {
- layerPaintProperties.emplace(layer->baseImpl->id, toSymbolLayerProperties(layer).evaluated);
+ layerPaintProperties.emplace(layer->baseImpl->id, layer);
}
// Determine glyph dependencies
@@ -555,7 +556,7 @@ std::vector<float> CalculateTileDistances(const GeometryCoordinates& line, const
return tileDistances;
}
-void SymbolLayout::createBucket(const ImagePositions&, std::unique_ptr<FeatureIndex>&, std::unordered_map<std::string, std::shared_ptr<Bucket>>& buckets, const bool firstLoad, const bool showCollisionBoxes) {
+void SymbolLayout::createBucket(const ImagePositions&, std::unique_ptr<FeatureIndex>&, std::unordered_map<std::string, LayerRenderData>& renderData, const bool firstLoad, const bool showCollisionBoxes) {
auto bucket = std::make_shared<SymbolBucket>(layout, layerPaintProperties, textSize, iconSize, zoom, sdfIcons, iconsNeedLinear, sortFeaturesByY, bucketLeaderID, std::move(symbolInstances), tilePixelRatio);
for (SymbolInstance &symbolInstance : bucket->symbolInstances) {
@@ -618,7 +619,7 @@ void SymbolLayout::createBucket(const ImagePositions&, std::unique_ptr<FeatureIn
if (!firstLoad) {
bucket->justReloaded = true;
}
- buckets.emplace(pair.first, bucket);
+ renderData.emplace(pair.first, LayerRenderData{bucket, pair.second});
}
}
diff --git a/src/mbgl/layout/symbol_layout.hpp b/src/mbgl/layout/symbol_layout.hpp
index 9fc48d904c..4397c5543e 100644
--- a/src/mbgl/layout/symbol_layout.hpp
+++ b/src/mbgl/layout/symbol_layout.hpp
@@ -35,12 +35,12 @@ public:
void prepareSymbols(const GlyphMap&, const GlyphPositions&,
const ImageMap&, const ImagePositions&) override;
- void createBucket(const ImagePositions&, std::unique_ptr<FeatureIndex>&, std::unordered_map<std::string, std::shared_ptr<Bucket>>&, const bool firstLoad, const bool showCollisionBoxes) override;
+ void createBucket(const ImagePositions&, std::unique_ptr<FeatureIndex>&, std::unordered_map<std::string, LayerRenderData>&, const bool firstLoad, const bool showCollisionBoxes) override;
bool hasSymbolInstances() const override;
bool hasDependencies() const override;
- std::map<std::string, style::SymbolPaintProperties::PossiblyEvaluated> layerPaintProperties;
+ std::map<std::string, Immutable<style::LayerProperties>> layerPaintProperties;
const std::string bucketLeaderID;
std::vector<SymbolInstance> symbolInstances;