diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-11-02 14:22:34 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@mapbox.com> | 2017-11-03 11:28:48 -0700 |
commit | ec20aac097de244644ab459ded6053a425e1b2d1 (patch) | |
tree | fb26409988bcac6ec1e7c66ac1f0c38e7d1a2980 | |
parent | 13871d41c7f2b8bee06244bde18cf0ac9ffbc6ff (diff) | |
download | qtlocation-mapboxgl-ec20aac097de244644ab459ded6053a425e1b2d1.tar.gz |
Fix collision box dynamic updating logic to match tile boundaries used in collision box generation.
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 38 |
2 files changed, 25 insertions, 20 deletions
diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 77dc29ccf7..9eb1c5171d 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -533,7 +533,7 @@ size_t SymbolLayout::addSymbol(Buffer& buffer, buffer.dynamicVertices.emplace_back(dynamicVertex); buffer.dynamicVertices.emplace_back(dynamicVertex); - auto opacityVertex = SymbolOpacityAttributes::vertex(1.0, 1.0); // TODO + auto opacityVertex = SymbolOpacityAttributes::vertex(1.0, 1.0); // TODO: This data doesn't matter, it's just a kind-of-silly way to set the size of the opacity buffer buffer.opacityVertices.emplace_back(opacityVertex); buffer.opacityVertices.emplace_back(opacityVertex); buffer.opacityVertices.emplace_back(opacityVertex); @@ -558,6 +558,9 @@ void SymbolLayout::addToDebugBuffers(SymbolBucket& bucket) { } for (const SymbolInstance &symbolInstance : symbolInstances) { + if (!symbolInstance.insideTileBoundaries) { + continue; + } auto populateCollisionBox = [&](const auto& feature) { SymbolBucket::CollisionBuffer& collisionBuffer = feature.alongLine ? static_cast<SymbolBucket::CollisionBuffer&>(bucket.collisionCircle) : @@ -586,7 +589,7 @@ void SymbolLayout::addToDebugBuffers(SymbolBucket& bucket) { collisionBuffer.vertices.emplace_back(CollisionBoxProgram::vertex(anchor, symbolInstance.anchor.point, br)); collisionBuffer.vertices.emplace_back(CollisionBoxProgram::vertex(anchor, symbolInstance.anchor.point, bl)); - auto opacityVertex = CollisionBoxOpacityAttributes::vertex(true, false); // TODO + auto opacityVertex = CollisionBoxOpacityAttributes::vertex(false, false); // TODO: This data doesn't matter, it's just a kind-of-silly way to set the size of the opacity buffer collisionBuffer.opacityVertices.emplace_back(opacityVertex); collisionBuffer.opacityVertices.emplace_back(opacityVertex); collisionBuffer.opacityVertices.emplace_back(opacityVertex); diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp index 399243f363..9a9456db2f 100644 --- a/src/mbgl/text/placement.cpp +++ b/src/mbgl/text/placement.cpp @@ -245,25 +245,27 @@ void Placement::updateBucketOpacities(SymbolBucket& bucket) { } } - auto updateCollisionBox = [&](const auto& feature, const bool placed) { - for (const CollisionBox& box : feature.boxes) { - if (feature.alongLine) { - auto opacityVertex = CollisionBoxOpacityAttributes::vertex(placed, !box.used); - bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); - bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); - bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); - bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); - } else { - auto opacityVertex = CollisionBoxOpacityAttributes::vertex(placed, false); - bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); - bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); - bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); - bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); + if (symbolInstance.insideTileBoundaries) { + auto updateCollisionBox = [&](const auto& feature, const bool placed) { + for (const CollisionBox& box : feature.boxes) { + if (feature.alongLine) { + auto opacityVertex = CollisionBoxOpacityAttributes::vertex(placed, !box.used); + bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); + bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); + bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); + bucket.collisionCircle.opacityVertices.emplace_back(opacityVertex); + } else { + auto opacityVertex = CollisionBoxOpacityAttributes::vertex(placed, false); + bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); + bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); + bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); + bucket.collisionBox.opacityVertices.emplace_back(opacityVertex); + } } - } - }; - updateCollisionBox(symbolInstance.textCollisionFeature, opacityState.text.placed); - updateCollisionBox(symbolInstance.iconCollisionFeature, opacityState.icon.placed); + }; + updateCollisionBox(symbolInstance.textCollisionFeature, opacityState.text.placed); + updateCollisionBox(symbolInstance.iconCollisionFeature, opacityState.icon.placed); + } } bucket.updateOpacity(); |