diff options
author | Molly Lloyd <molly@mapbox.com> | 2018-08-29 17:27:40 -0700 |
---|---|---|
committer | Molly Lloyd <mollymerp@users.noreply.github.com> | 2018-08-31 13:08:47 -0700 |
commit | d197fc7d8daf06cc2efc35a34fb45d86ea64d65b (patch) | |
tree | 365b09122531ef51b253417191368c14de171eb4 /src/mbgl/layout/pattern_layout.hpp | |
parent | f7dcd5d7416f076c3553ccec9844fa77fe0e0ea5 (diff) | |
download | qtlocation-mapboxgl-d197fc7d8daf06cc2efc35a34fb45d86ea64d65b.tar.gz |
[core] simplify dependency layout process and refactor data structures
Diffstat (limited to 'src/mbgl/layout/pattern_layout.hpp')
-rw-r--r-- | src/mbgl/layout/pattern_layout.hpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/mbgl/layout/pattern_layout.hpp b/src/mbgl/layout/pattern_layout.hpp index 9f4964ca6b..0ffac36b75 100644 --- a/src/mbgl/layout/pattern_layout.hpp +++ b/src/mbgl/layout/pattern_layout.hpp @@ -1,4 +1,5 @@ #pragma once +#include <mbgl/layout/layout.hpp> #include <mbgl/renderer/bucket_parameters.hpp> #include <mbgl/geometry/feature_index.hpp> #include <mbgl/renderer/render_layer.hpp> @@ -22,13 +23,14 @@ public: }; template <class B> -class PatternLayout { +class PatternLayout : public Layout { public: PatternLayout(const BucketParameters& parameters, const std::vector<const RenderLayer*>& layers, std::unique_ptr<GeometryTileLayer> sourceLayer_, ImageDependencies& patternDependencies) - : bucketLeaderID(layers.at(0)->getID()), + : Layout(), + bucketLeaderID(layers.at(0)->getID()), sourceLayer(std::move(sourceLayer_)), zoom(parameters.tileID.overscaledZ), overscaling(parameters.tileID.overscaleFactor()), @@ -90,12 +92,14 @@ public: } }; - bool pattern() { + ~PatternLayout() final = default; + + bool hasDependencies() const override { return hasPattern; } - std::unique_ptr<B> createBucket(const ImagePositions& patternPositions, std::unique_ptr<FeatureIndex>& featureIndex) { - auto bucket = std::make_unique<B>(layout, layerPaintProperties, zoom, overscaling); + 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<B>(layout, layerPaintProperties, zoom, overscaling); for (auto & patternFeature : features) { const auto i = patternFeature.i; std::unique_ptr<GeometryTileFeature> feature = std::move(patternFeature.feature); @@ -105,7 +109,11 @@ public: bucket->addFeature(*feature, geometries, patternPositions, patterns); featureIndex->insert(geometries, i, sourceLayerID, groupID); } - return bucket; + if (bucket->hasData()) { + for (const auto& pair : layerPaintProperties) { + buckets.emplace(pair.first, bucket); + } + } }; std::map<std::string, typename B::PossiblyEvaluatedPaintProperties> layerPaintProperties; |