summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2017-11-02 14:22:34 -0700
committerChris Loer <chris.loer@mapbox.com>2017-11-03 11:28:48 -0700
commitec20aac097de244644ab459ded6053a425e1b2d1 (patch)
treefb26409988bcac6ec1e7c66ac1f0c38e7d1a2980
parent13871d41c7f2b8bee06244bde18cf0ac9ffbc6ff (diff)
downloadqtlocation-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.cpp7
-rw-r--r--src/mbgl/text/placement.cpp38
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();