diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-07 23:24:17 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-04-17 17:21:41 +0300 |
commit | 7a7192516ffa9b4ed5b94b60961a4dc74fcf6e64 (patch) | |
tree | 432a69b7a31b833304ccafcffe83b0cfe00d3c1f /src/mbgl/layout | |
parent | 4b21560cf59877125ea0bdae1a2546ab06f1efb2 (diff) | |
download | qtlocation-mapboxgl-7a7192516ffa9b4ed5b94b60961a4dc74fcf6e64.tar.gz |
[core] Introduce `LayerRenderData`. Source::update() accepts layer properties.
Diffstat (limited to 'src/mbgl/layout')
-rw-r--r-- | src/mbgl/layout/layout.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/layout/pattern_layout.hpp | 26 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/layout/symbol_layout.hpp | 4 |
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; |