From 5d4317653627ccc444c9577390d7065f9bd9a6ac Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Mon, 20 Jan 2020 09:14:11 +0200 Subject: [core] Pass TransformState to the cross tile symbol index --- src/mbgl/renderer/bucket.hpp | 4 +++- src/mbgl/renderer/buckets/symbol_bucket.cpp | 5 +++-- src/mbgl/renderer/buckets/symbol_bucket.hpp | 4 +++- src/mbgl/renderer/render_orchestrator.cpp | 3 +-- src/mbgl/text/cross_tile_symbol_index.cpp | 10 ++++++---- src/mbgl/text/cross_tile_symbol_index.hpp | 5 +++-- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp index 3e756a06a4..5a535920cd 100644 --- a/src/mbgl/renderer/bucket.hpp +++ b/src/mbgl/renderer/bucket.hpp @@ -56,7 +56,9 @@ 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 registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) { + virtual std::pair registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, + const OverscaledTileID&, + const TransformState&) { 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 382aac6563..09775ce12f 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -296,8 +296,9 @@ bool SymbolBucket::hasFormatSectionOverrides() const { } std::pair SymbolBucket::registerAtCrossTileIndex(CrossTileSymbolLayerIndex& index, - const OverscaledTileID& tileID) { - bool firstTimeAdded = index.addBucket(tileID, *this); + const OverscaledTileID& tileID, + const TransformState& transformState) { + bool firstTimeAdded = index.addBucket(tileID, *this, transformState); 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 432589a52b..fce43c1cac 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -81,7 +81,9 @@ public: void upload(gfx::UploadPass&) override; bool hasData() const override; - std::pair registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, const OverscaledTileID&) override; + std::pair registerAtCrossTileIndex(CrossTileSymbolLayerIndex&, + const OverscaledTileID&, + const TransformState& transformState) override; void place(Placement&, const BucketPlacementParameters&, std::set&) override; void updateVertices( const Placement&, bool updateOpacities, const TransformState&, const RenderTile&, std::set&) override; diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index 79059164ae..21d13f8021 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -375,11 +375,10 @@ std::unique_ptr RenderOrchestrator::createRenderTree( } // Symbol placement. bool symbolBucketsChanged = false; - auto longitude = updateParameters->transformState.getLatLng().longitude(); if (isMapModeContinuous) { bool symbolBucketsAdded = false; for (auto it = layersNeedPlacement.crbegin(); it != layersNeedPlacement.crend(); ++it) { - auto result = crossTileSymbolIndex.addLayer(*it, longitude); + auto result = crossTileSymbolIndex.addLayer(*it, updateParameters->transformState); symbolBucketsAdded = symbolBucketsAdded || (result & CrossTileSymbolIndex::AddLayerResult::BucketsAdded); symbolBucketsChanged = symbolBucketsChanged || (result != CrossTileSymbolIndex::AddLayerResult::NoChanges); } diff --git a/src/mbgl/text/cross_tile_symbol_index.cpp b/src/mbgl/text/cross_tile_symbol_index.cpp index 5b9d6ae69c..2faf79ddf0 100644 --- a/src/mbgl/text/cross_tile_symbol_index.cpp +++ b/src/mbgl/text/cross_tile_symbol_index.cpp @@ -95,7 +95,9 @@ void CrossTileSymbolLayerIndex::handleWrapJump(float newLng) { lng = newLng; } -bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, SymbolBucket& bucket) { +bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, + SymbolBucket& bucket, + const TransformState& /*transformState*/) { auto& thisZoomIndexes = indexes[tileID.overscaledZ]; auto previousIndex = thisZoomIndexes.find(tileID); if (previousIndex != thisZoomIndexes.end()) { @@ -176,7 +178,7 @@ bool CrossTileSymbolLayerIndex::removeStaleBuckets(const std::unordered_set AddLayerResult { +auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, const TransformState& transformState) -> AddLayerResult { auto found = layerIndexes.find(layer.getID()); if (found == layerIndexes.end()) { found = layerIndexes @@ -190,12 +192,12 @@ auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddL AddLayerResult result = AddLayerResult::NoChanges; std::unordered_set currentBucketIDs; - layerIndex.handleWrapJump(lng); + layerIndex.handleWrapJump(transformState.getLatLng().longitude()); for (const auto& item : layer.getPlacementData()) { const RenderTile& renderTile = item.tile; Bucket& bucket = item.bucket; - auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID()); + auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID(), transformState); 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 3b7c367726..34a4f9c143 100644 --- a/src/mbgl/text/cross_tile_symbol_index.hpp +++ b/src/mbgl/text/cross_tile_symbol_index.hpp @@ -18,6 +18,7 @@ namespace mbgl { class SymbolInstance; class RenderLayer; class SymbolBucket; +class TransformState; class IndexedSymbolInstance { public: @@ -48,7 +49,7 @@ public: class CrossTileSymbolLayerIndex { public: CrossTileSymbolLayerIndex(uint32_t& maxCrossTileID); - bool addBucket(const OverscaledTileID&, SymbolBucket&); + bool addBucket(const OverscaledTileID&, SymbolBucket&, const TransformState& transformState); bool removeStaleBuckets(const std::unordered_set& currentIDs); void handleWrapJump(float newLng); private: @@ -70,7 +71,7 @@ public: BucketsRemoved = 1 << 1 }; - AddLayerResult addLayer(const RenderLayer& layer, float lng); + AddLayerResult addLayer(const RenderLayer& layer, const TransformState&); void pruneUnusedLayers(const std::set&); void reset(); -- cgit v1.2.1