diff options
author | Ansis Brammanis <ansis@mapbox.com> | 2017-10-27 13:13:07 -0400 |
---|---|---|
committer | Ansis Brammanis <ansis@mapbox.com> | 2017-10-27 13:13:07 -0400 |
commit | 26c9eff60ab58e94e8a86fd84159f0047efb2839 (patch) | |
tree | c17605888ba30b9e88da17caa9ae095f47ac1051 | |
parent | 9e1e4f7968a0f30c8bfe90138306c009b336ad77 (diff) | |
download | qtlocation-mapboxgl-upstream/start-collision-flicker.tar.gz |
fix collisions in overscaled tiles [skip ci]upstream/start-collision-flicker
-rw-r--r-- | src/mbgl/text/placement.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/text/placement.hpp | 1 |
2 files changed, 6 insertions, 3 deletions
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index d67da53643..3f9ea07d58 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -51,6 +51,8 @@ void Placement::placeLayer(RenderSymbolLayer& symbolLayer, const mat4& projMatri const float scale = std::pow(2, state.getZoom() - renderTile.id.canonical.z); + const float pixelRatio = util::EXTENT / (util::tileSize * renderTile.tile.id.overscaleFactor()); + // TODO perf: do this only once for each tile, not once per layer state.matrixFor(renderTile.matrix, renderTile.id); matrix::multiply(renderTile.matrix, projMatrix, renderTile.matrix); @@ -67,7 +69,7 @@ void Placement::placeLayer(RenderSymbolLayer& symbolLayer, const mat4& projMatri state, pixelsToTileUnits); - placeLayerBucket(symbolBucket, renderTile.matrix, textLabelPlaneMatrix, iconLabelPlaneMatrix, scale, showCollisionBoxes); + placeLayerBucket(symbolBucket, renderTile.matrix, textLabelPlaneMatrix, iconLabelPlaneMatrix, scale, pixelRatio, showCollisionBoxes); } } @@ -77,6 +79,7 @@ void Placement::placeLayerBucket( const mat4& textLabelPlaneMatrix, const mat4& iconLabelPlaneMatrix, const float scale, + const float pixelRatio, const bool showCollisionBoxes) { // TODO collision debug array clearing @@ -86,7 +89,6 @@ void Placement::placeLayerBucket( const bool iconWithoutText = !bucket.hasTextData() || bucket.layout.get<TextOptional>(); const bool textWithoutIcon = !bucket.hasIconData() || bucket.layout.get<IconOptional>(); - float pixelRatio = util::EXTENT / util::tileSize; for (auto& symbolInstance : bucket.symbolInstances) { @@ -108,7 +110,7 @@ void Placement::placeLayerBucket( placeText = collisionIndex.placeFeature(symbolInstance.textCollisionFeature, posMatrix, textLabelPlaneMatrix, pixelRatio, - placedSymbol,scale, fontSize, + placedSymbol, scale, fontSize, bucket.layout.get<TextAllowOverlap>(), bucket.layout.get<TextPitchAlignment>() == style::AlignmentType::Map, showCollisionBoxes); diff --git a/src/mbgl/text/placement.hpp b/src/mbgl/text/placement.hpp index c694e8ef98..9802ad546b 100644 --- a/src/mbgl/text/placement.hpp +++ b/src/mbgl/text/placement.hpp @@ -54,6 +54,7 @@ namespace mbgl { const mat4& textLabelPlaneMatrix, const mat4& iconLabelPlaneMatrix, const float scale, + const float pixelRatio, const bool showCollisionBoxes); void updateBucketOpacities(SymbolBucket&); |