diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-06-03 16:22:54 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-06-03 17:03:57 +0300 |
commit | b2428835871933ecf5a93e86493bac0b76db0ede (patch) | |
tree | c53eeea19bfc01438cc4c9394a41056ffc76cc38 /src/mbgl/text/placement.cpp | |
parent | a44b7f1e5ddae61260e55db5b68b10d9aa5e711d (diff) | |
download | qtlocation-mapboxgl-b2428835871933ecf5a93e86493bac0b76db0ede.tar.gz |
[core] Use fresh transform state for bucket vertices update in placement
The transform state cached in placement might get stale and cannot be used for bucket vertices updates.
Diffstat (limited to 'src/mbgl/text/placement.cpp')
-rw-r--r-- | src/mbgl/text/placement.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 452a071683..edf73101ab 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -60,7 +60,6 @@ const CollisionGroups::CollisionGroup& CollisionGroups::get(const std::string& s Placement::Placement(const TransformState& state_, MapMode mapMode_, style::TransitionOptions transitionOptions_, const bool crossSourceCollisions, std::unique_ptr<Placement> prevPlacement_) : collisionIndex(state_) - , state(state_) , mapMode(mapMode_) , transitionOptions(std::move(transitionOptions_)) , collisionGroups(crossSourceCollisions) @@ -103,6 +102,7 @@ void Placement::placeBucket( std::set<uint32_t>& seenCrossTileIDs) { const auto& layout = bucket.layout; const auto& renderTile = params.tile; + const auto& state = collisionIndex.getTransformState(); const float pixelsToTileUnits = renderTile.id.pixelsToTileUnits(1, state.getZoom()); const OverscaledTileID& overscaledID = renderTile.getOverscaledTileID(); const float scale = std::pow(2, state.getZoom() - overscaledID.overscaledZ); @@ -384,10 +384,10 @@ void Placement::commit(TimePoint now) { fadeStartTime = placementChanged ? commitTime : prevPlacement->fadeStartTime; } -void Placement::updateLayerBuckets(const RenderLayer& layer, bool updateOpacities) { +void Placement::updateLayerBuckets(const RenderLayer& layer, const TransformState& state, bool updateOpacities) { std::set<uint32_t> seenCrossTileIDs; for (const auto& item : layer.getPlacementData()) { - item.bucket.get().updateVertices(*this, updateOpacities, item.tile, seenCrossTileIDs); + item.bucket.get().updateVertices(*this, updateOpacities, state, item.tile, seenCrossTileIDs); } } @@ -402,7 +402,7 @@ Point<float> calculateVariableRenderShift(style::SymbolAnchorType anchor, float } } // namespace -bool Placement::updateBucketDynamicVertices(SymbolBucket& bucket, const RenderTile& tile) { +bool Placement::updateBucketDynamicVertices(SymbolBucket& bucket, const TransformState& state, const RenderTile& tile) { using namespace style; const auto& layout = bucket.layout; const bool alongLine = layout.get<SymbolPlacement>() != SymbolPlacementType::Point; @@ -499,7 +499,7 @@ bool Placement::updateBucketDynamicVertices(SymbolBucket& bucket, const RenderTi return result; } -void Placement::updateBucketOpacities(SymbolBucket& bucket, std::set<uint32_t>& seenCrossTileIDs) { +void Placement::updateBucketOpacities(SymbolBucket& bucket, const TransformState& state, std::set<uint32_t>& seenCrossTileIDs) { if (bucket.hasTextData()) bucket.text.opacityVertices.clear(); if (bucket.hasIconData()) bucket.icon.opacityVertices.clear(); if (bucket.hasCollisionBoxData()) bucket.collisionBox.dynamicVertices.clear(); @@ -597,7 +597,7 @@ void Placement::updateBucketOpacities(SymbolBucket& bucket, std::set<uint32_t>& } }; - auto updateCollisionTextBox = [this, &bucket, &symbolInstance, variablePlacement, rotateWithMap, pitchWithMap](const auto& feature, const bool placed) { + auto updateCollisionTextBox = [this, &bucket, &symbolInstance, &state, variablePlacement, rotateWithMap, pitchWithMap](const auto& feature, const bool placed) { if (feature.alongLine) { return; } |