diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-01-16 20:12:13 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-01-22 14:30:26 +0200 |
commit | e6ddcf9beb8e0aad52d4185dac0c0b1d15205a16 (patch) | |
tree | 0b6189a8f0ea9f0430d4c05706867f71d3c2a264 /src | |
parent | 5a4568b2ac355f807b7ea8e7d99b812db8a01a15 (diff) | |
download | qtlocation-mapboxgl-e6ddcf9beb8e0aad52d4185dac0c0b1d15205a16.tar.gz |
[core] Simplify CrossTileSymbolIndex::addLayer()
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/renderer/bucket.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/cross_tile_symbol_index.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/text/cross_tile_symbol_index.hpp | 5 |
5 files changed, 20 insertions, 10 deletions
diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp index 6da0f280e6..3e756a06a4 100644 --- a/src/mbgl/renderer/bucket.hpp +++ b/src/mbgl/renderer/bucket.hpp @@ -56,7 +56,7 @@ public: // Returns a pair, the first element of which is a bucket cross-tile id // on success call; `0` otherwise. The second element is `true` if // the bucket was originally registered; `false` otherwise. - virtual std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&, uint32_t&) { + virtual std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) { return std::make_pair(0u, false); } // Places this bucket to the given placement. diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index 7efd81053e..382aac6563 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -295,8 +295,9 @@ bool SymbolBucket::hasFormatSectionOverrides() const { return *hasFormatSectionOverrides_; } -std::pair<uint32_t, bool> SymbolBucket::registerAtCrossTileIndex(CrossTileSymbolLayerIndex& index, const OverscaledTileID& tileID, uint32_t& maxCrossTileID) { - bool firstTimeAdded = index.addBucket(tileID, *this, maxCrossTileID); +std::pair<uint32_t, bool> SymbolBucket::registerAtCrossTileIndex(CrossTileSymbolLayerIndex& index, + const OverscaledTileID& tileID) { + bool firstTimeAdded = index.addBucket(tileID, *this); return std::make_pair(bucketInstanceId, firstTimeAdded); } diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 1d1aa13dd0..432589a52b 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -81,7 +81,7 @@ public: void upload(gfx::UploadPass&) override; bool hasData() const override; - std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&, uint32_t& maxCrossTileID) override; + std::pair<uint32_t, bool> registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) override; void place(Placement&, const BucketPlacementParameters&, std::set<uint32_t>&) override; void updateVertices( const Placement&, bool updateOpacities, const TransformState&, const RenderTile&, std::set<uint32_t>&) override; diff --git a/src/mbgl/text/cross_tile_symbol_index.cpp b/src/mbgl/text/cross_tile_symbol_index.cpp index d8bd0292ec..5b9d6ae69c 100644 --- a/src/mbgl/text/cross_tile_symbol_index.cpp +++ b/src/mbgl/text/cross_tile_symbol_index.cpp @@ -67,7 +67,7 @@ void TileLayerIndex::findMatches(SymbolBucket& bucket, } } -CrossTileSymbolLayerIndex::CrossTileSymbolLayerIndex() = default; +CrossTileSymbolLayerIndex::CrossTileSymbolLayerIndex(uint32_t& maxCrossTileID_) : maxCrossTileID(maxCrossTileID_) {} /* * Sometimes when a user pans across the antimeridian the longitude value gets wrapped. @@ -95,7 +95,7 @@ void CrossTileSymbolLayerIndex::handleWrapJump(float newLng) { lng = newLng; } -bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, SymbolBucket& bucket, uint32_t& maxCrossTileID) { +bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, SymbolBucket& bucket) { auto& thisZoomIndexes = indexes[tileID.overscaledZ]; auto previousIndex = thisZoomIndexes.find(tileID); if (previousIndex != thisZoomIndexes.end()) { @@ -177,7 +177,15 @@ bool CrossTileSymbolLayerIndex::removeStaleBuckets(const std::unordered_set<uint CrossTileSymbolIndex::CrossTileSymbolIndex() = default; auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddLayerResult { - auto& layerIndex = layerIndexes[layer.getID()]; + auto found = layerIndexes.find(layer.getID()); + if (found == layerIndexes.end()) { + found = layerIndexes + .emplace(std::piecewise_construct, + std::forward_as_tuple(layer.getID()), + std::forward_as_tuple(maxCrossTileID)) + .first; + } + auto& layerIndex = found->second; AddLayerResult result = AddLayerResult::NoChanges; std::unordered_set<uint32_t> currentBucketIDs; @@ -187,7 +195,7 @@ auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddL for (const auto& item : layer.getPlacementData()) { const RenderTile& renderTile = item.tile; Bucket& bucket = item.bucket; - auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID(), maxCrossTileID); + auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID()); assert(pair.first != 0u); if (pair.second) result |= AddLayerResult::BucketsAdded; currentBucketIDs.insert(pair.first); diff --git a/src/mbgl/text/cross_tile_symbol_index.hpp b/src/mbgl/text/cross_tile_symbol_index.hpp index ddcdb814c6..3b7c367726 100644 --- a/src/mbgl/text/cross_tile_symbol_index.hpp +++ b/src/mbgl/text/cross_tile_symbol_index.hpp @@ -47,8 +47,8 @@ public: class CrossTileSymbolLayerIndex { public: - CrossTileSymbolLayerIndex(); - bool addBucket(const OverscaledTileID&, SymbolBucket&, uint32_t& maxCrossTileID); + CrossTileSymbolLayerIndex(uint32_t& maxCrossTileID); + bool addBucket(const OverscaledTileID&, SymbolBucket&); bool removeStaleBuckets(const std::unordered_set<uint32_t>& currentIDs); void handleWrapJump(float newLng); private: @@ -57,6 +57,7 @@ private: std::map<uint8_t, std::map<OverscaledTileID,TileLayerIndex>> indexes; std::map<uint8_t, std::set<uint32_t>> usedCrossTileIDs; float lng = 0; + uint32_t& maxCrossTileID; }; class CrossTileSymbolIndex { |