summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2017-11-02 14:22:34 -0700
committerChris Loer <chris.loer@gmail.com>2017-11-02 14:22:34 -0700
commit285ba26226986c9b5ebe8951590f0c95fce47957 (patch)
tree895a6e372d128cdf848ec5fb35e99eb8b2610708
parent8d609edd878099bb805746720b592fbea6383139 (diff)
downloadqtlocation-mapboxgl-285ba26226986c9b5ebe8951590f0c95fce47957.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 9e133cb1ef..e1a97900a4 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -246,25 +246,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();