From e7ce992619de6556bfe226a4813f30d4fe7517ca Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 3 Mar 2020 15:25:14 +0200 Subject: [core] Drop BucketPlacementParameters --- src/mbgl/renderer/bucket.hpp | 4 ++-- src/mbgl/renderer/buckets/symbol_bucket.cpp | 4 ++-- src/mbgl/renderer/buckets/symbol_bucket.hpp | 2 +- src/mbgl/renderer/layers/render_symbol_layer.cpp | 5 +++-- src/mbgl/renderer/render_layer.hpp | 1 + src/mbgl/text/placement.cpp | 12 +++++------- src/mbgl/text/placement.hpp | 10 +--------- 7 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp index 4e28107f07..68d6c46b7f 100644 --- a/src/mbgl/renderer/bucket.hpp +++ b/src/mbgl/renderer/bucket.hpp @@ -19,7 +19,7 @@ class PatternDependency; using PatternLayerMap = std::map; class Placement; class TransformState; -class BucketPlacementParameters; +class BucketPlacementData; class RenderTile; class Bucket { @@ -64,7 +64,7 @@ public: return std::make_pair(0u, false); } // Places this bucket to the given placement. - virtual void place(Placement&, const BucketPlacementParameters&, std::set&) {} + virtual void place(Placement&, const BucketPlacementData&, std::set&) {} virtual void updateVertices( const Placement&, bool /*updateOpacities*/, const TransformState&, const RenderTile&, std::set&) {} diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index af2a479c26..1858f29801 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -314,8 +314,8 @@ std::pair SymbolBucket::registerAtCrossTileIndex(CrossTileSymbol return std::make_pair(bucketInstanceId, firstTimeAdded); } -void SymbolBucket::place(Placement& placement, const BucketPlacementParameters& params, std::set& seenIds) { - placement.placeBucket(*this, params, seenIds); +void SymbolBucket::place(Placement& placement, const BucketPlacementData& data, std::set& seenIds) { + placement.placeSymbolBucket(data, seenIds); } void SymbolBucket::updateVertices(const Placement& placement, diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 3cdea1310c..752f92e889 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -84,7 +84,7 @@ public: void upload(gfx::UploadPass&) override; bool hasData() const override; std::pair registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const RenderTile&) override; - void place(Placement&, const BucketPlacementParameters&, std::set&) override; + void place(Placement&, const BucketPlacementData&, std::set&) override; void updateVertices( const Placement&, bool updateOpacities, const TransformState&, const RenderTile&, std::set&) override; bool hasTextData() const; diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 8de6267045..1d8c0a70a8 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -575,6 +575,7 @@ void RenderSymbolLayer::prepare(const LayerPrepareParameters& params) { addRenderPassesFromTiles(); placementData.clear(); + for (const RenderTile& renderTile : *renderTiles) { auto* bucket = static_cast(renderTile.getBucket(*baseImpl)); if (bucket && bucket->bucketLeaderID == getID()) { @@ -586,10 +587,10 @@ void RenderSymbolLayer::prepare(const LayerPrepareParameters& params) { auto featureIndex = static_cast(tile)->getFeatureIndex(); if (bucket->sortKeyRanges.empty()) { - placementData.push_back({*bucket, renderTile, featureIndex, nullopt}); + placementData.push_back({*bucket, renderTile, featureIndex, baseImpl->source, nullopt}); } else { for (const auto& sortKeyRange : bucket->sortKeyRanges) { - BucketPlacementData layerData{*bucket, renderTile, featureIndex, sortKeyRange}; + BucketPlacementData layerData{*bucket, renderTile, featureIndex, baseImpl->source, sortKeyRange}; auto sortPosition = std::upper_bound( placementData.cbegin(), placementData.cend(), layerData, [](const auto& lhs, const auto& rhs) { assert(lhs.sortKeyRange && rhs.sortKeyRange); diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 40d073d562..53dafb3b7b 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -41,6 +41,7 @@ public: std::reference_wrapper bucket; std::reference_wrapper tile; std::shared_ptr featureIndex; + std::string sourceId; optional sortKeyRange; }; diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index de8a5894bc..a0e55c6f86 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -111,10 +111,9 @@ Placement::Placement() : collisionIndex({}, MapMode::Static), collisionGroups(tr void Placement::placeLayer(const RenderLayer& layer) { std::set seenCrossTileIDs; - for (const auto& item : layer.getPlacementData()) { - Bucket& bucket = item.bucket; - BucketPlacementParameters params{item.tile, layer.baseImpl->source, item.featureIndex, item.sortKeyRange}; - bucket.place(*this, params, seenCrossTileIDs); + for (const BucketPlacementData& data : layer.getPlacementData()) { + Bucket& bucket = data.bucket; + bucket.place(*this, data, seenCrossTileIDs); } } @@ -139,10 +138,9 @@ Point calculateVariableLayoutOffset(style::SymbolAnchorType anchor, } } // namespace -void Placement::placeBucket(const SymbolBucket& bucket, - const BucketPlacementParameters& params, - std::set& seenCrossTileIDs) { +void Placement::placeSymbolBucket(const BucketPlacementData& params, std::set& seenCrossTileIDs) { assert(updateParameters); + const auto& bucket = static_cast(params.bucket.get()); const auto& layout = *bucket.layout; const RenderTile& renderTile = params.tile; const auto& state = collisionIndex.getTransformState(); diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index cbb22dc404..df7345d4cc 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -86,14 +86,6 @@ private: bool crossSourceCollisions; }; -class BucketPlacementParameters { -public: - std::reference_wrapper tile; - std::string sourceId; - std::shared_ptr featureIndex; - optional sortKeyRange; -}; - class Placement; class PlacementController { @@ -132,7 +124,7 @@ public: private: friend SymbolBucket; - void placeBucket(const SymbolBucket&, const BucketPlacementParameters&, std::set& seenCrossTileIDs); + void placeSymbolBucket(const BucketPlacementData&, std::set& seenCrossTileIDs); // Returns `true` if bucket vertices were updated; returns `false` otherwise. bool updateBucketDynamicVertices(SymbolBucket&, const TransformState&, const RenderTile& tile) const; void updateBucketOpacities(SymbolBucket&, const TransformState&, std::set&) const; -- cgit v1.2.1