[core] Only update collision debug data if debug mode is on

Fixes issue #12294: unused debug vertices would pile up in buckets over course of tile's lifetime.
This commit is contained in:
Chris Loer
2018-07-03 11:32:43 -07:00
committed by Chris Loer
parent aa07dc5461
commit c9924ae9d5

View File

@@ -301,24 +301,36 @@ void Placement::updateBucketOpacities(SymbolBucket& bucket, std::set<uint32_t>&
}
auto updateCollisionBox = [&](const auto& feature, const bool placed) {
for (const CollisionBox& box : feature.boxes) {
if (feature.alongLine) {
auto dynamicVertex = CollisionBoxDynamicAttributes::vertex(placed, !box.used);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
} else {
auto dynamicVertex = CollisionBoxDynamicAttributes::vertex(placed, false);
bucket.collisionBox.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionBox.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionBox.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionBox.dynamicVertices.emplace_back(dynamicVertex);
}
if (feature.alongLine) {
return;
}
auto dynamicVertex = CollisionBoxDynamicAttributes::vertex(placed, false);
for (size_t i = 0; i < feature.boxes.size() * 4; i++) {
bucket.collisionBox.dynamicVertices.emplace_back(dynamicVertex);
}
};
updateCollisionBox(symbolInstance.textCollisionFeature, opacityState.text.placed);
updateCollisionBox(symbolInstance.iconCollisionFeature, opacityState.icon.placed);
auto updateCollisionCircles = [&](const auto& feature, const bool placed) {
if (!feature.alongLine) {
return;
}
for (const CollisionBox& box : feature.boxes) {
auto dynamicVertex = CollisionBoxDynamicAttributes::vertex(placed, !box.used);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
bucket.collisionCircle.dynamicVertices.emplace_back(dynamicVertex);
}
};
if (bucket.hasCollisionBoxData()) {
updateCollisionBox(symbolInstance.textCollisionFeature, opacityState.text.placed);
updateCollisionBox(symbolInstance.iconCollisionFeature, opacityState.icon.placed);
}
if (bucket.hasCollisionCircleData()) {
updateCollisionCircles(symbolInstance.textCollisionFeature, opacityState.text.placed);
updateCollisionCircles(symbolInstance.iconCollisionFeature, opacityState.icon.placed);
}
}
bucket.updateOpacity();