summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2017-10-25 10:15:18 -0700
committerChris Loer <chris.loer@mapbox.com>2017-10-25 10:23:13 -0700
commitc63fb6041b71f6e6938609f9e020b0e26b7e2242 (patch)
tree770fe9cc67d5d9d3dfd24e7754472e732728fcb9
parentf7c792569759fe5acbf70e8a258ac41bd0360c1f (diff)
downloadqtlocation-mapboxgl-c63fb6041b71f6e6938609f9e020b0e26b7e2242.tar.gz
Hook up placement updates for collision boxes.
-rw-r--r--src/mbgl/layout/symbol_layout.cpp2
-rw-r--r--src/mbgl/text/placement.cpp17
2 files changed, 18 insertions, 1 deletions
diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp
index 00202ed992..60b1c61d20 100644
--- a/src/mbgl/layout/symbol_layout.cpp
+++ b/src/mbgl/layout/symbol_layout.cpp
@@ -607,7 +607,7 @@ void SymbolLayout::addToDebugBuffers(CollisionTile& collisionTile, SymbolBucket&
collisionBox.vertices.emplace_back(CollisionBoxProgram::vertex(anchor, symbolInstance.anchor.point, br));
collisionBox.vertices.emplace_back(CollisionBoxProgram::vertex(anchor, symbolInstance.anchor.point, bl));
- auto opacityVertex = CollisionBoxOpacityAttributes::vertex(true, true); // TODO
+ auto opacityVertex = CollisionBoxOpacityAttributes::vertex(true, false); // TODO
collisionBox.opacityVertices.emplace_back(opacityVertex);
collisionBox.opacityVertices.emplace_back(opacityVertex);
collisionBox.opacityVertices.emplace_back(opacityVertex);
diff --git a/src/mbgl/text/placement.cpp b/src/mbgl/text/placement.cpp
index af0724bf80..0583902932 100644
--- a/src/mbgl/text/placement.cpp
+++ b/src/mbgl/text/placement.cpp
@@ -125,10 +125,12 @@ void Placement::placeLayerBucket(
placeIcon = placeText && placeIcon;
}
+ symbolInstance.placedText = placeText;
if (placeText) {
collisionIndex.insertFeature(symbolInstance.textCollisionFeature, bucket.layout.get<TextIgnorePlacement>());
}
+ symbolInstance.placedIcon = placeIcon;
if (placeIcon) {
collisionIndex.insertFeature(symbolInstance.iconCollisionFeature, bucket.layout.get<IconIgnorePlacement>());
}
@@ -196,6 +198,7 @@ void Placement::updateBucketOpacities(SymbolBucket& bucket, gl::Context& context
// TODO check if this clear is necessary, whether the vector has been moved out
if (bucket.hasTextData()) bucket.text.opacityVertices.clear();
if (bucket.hasIconData()) bucket.icon.opacityVertices.clear();
+ if (bucket.hasCollisionBoxData()) bucket.collisionBox.opacityVertices.clear();
for (SymbolInstance& symbolInstance : bucket.symbolInstances) {
auto opacityState = getOpacity(symbolInstance.crossTileID);
@@ -218,10 +221,24 @@ void Placement::updateBucketOpacities(SymbolBucket& bucket, gl::Context& context
bucket.icon.opacityVertices.emplace_back(opacityVertex);
}
}
+
+ auto updateCollisionBox = [&](const auto& feature, const bool placed) {
+ for (size_t i = 0; i < feature.boxes.size(); i++) {
+ auto opacityVertex = CollisionBoxOpacityAttributes::vertex(placed, false); // TODO
+ 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, symbolInstance.placedText);
+ updateCollisionBox(symbolInstance.iconCollisionFeature, symbolInstance.placedIcon);
}
if (bucket.hasTextData()) context.updateVertexBuffer(*bucket.text.opacityVertexBuffer, std::move(bucket.text.opacityVertices));
if (bucket.hasIconData()) context.updateVertexBuffer(*bucket.icon.opacityVertexBuffer, std::move(bucket.icon.opacityVertices));
+ if (bucket.hasCollisionBoxData()) context.updateVertexBuffer(*bucket.collisionBox.opacityVertexBuffer, std::move(bucket.collisionBox.opacityVertices));
}
JointOpacityState Placement::getOpacity(uint32_t crossTileSymbolID) const {