From f81592c59304582f2b0b46d085d9c3f0dcbbc055 Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 10 Mar 2020 23:05:47 +0200 Subject: [PATCH] [core] Collision index uses doubled padding with the tilted view --- src/mbgl/text/collision_index.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/mbgl/text/collision_index.cpp b/src/mbgl/text/collision_index.cpp index ef0358dd6b0..c785bfe1c43 100644 --- a/src/mbgl/text/collision_index.cpp +++ b/src/mbgl/text/collision_index.cpp @@ -16,19 +16,27 @@ namespace mbgl { +namespace { // When a symbol crosses the edge that causes it to be included in // collision detection, it will cause changes in the symbols around // it. This constant specifies how many pixels to pad the edge of // the viewport for collision detection so that the bulk of the changes // occur offscreen. Making this constant greater increases label // stability, but it's expensive. -static const float viewportPaddingDefault = 100; +const float viewportPaddingDefault = 100; // Viewport padding must be much larger for static tiles to avoid clipped labels. -static const float viewportPaddingForStaticTiles = 1024; +const float viewportPaddingForStaticTiles = 1024; + +inline float getViewportPadding(const TransformState& transformState, MapMode mapMode) { + if (mapMode == MapMode::Tile) return viewportPaddingForStaticTiles; + return (transformState.getPitch() != 0.0f) ? viewportPaddingDefault * 2 : viewportPaddingDefault; +} + +} // namespace CollisionIndex::CollisionIndex(const TransformState& transformState_, MapMode mapMode) : transformState(transformState_), - viewportPadding(mapMode == MapMode::Tile ? viewportPaddingForStaticTiles : viewportPaddingDefault), + viewportPadding(getViewportPadding(transformState_, mapMode)), collisionGrid(transformState.getSize().width + 2 * viewportPadding, transformState.getSize().height + 2 * viewportPadding, 25),