diff options
author | Chris Loer <chris.loer@gmail.com> | 2017-10-25 10:15:18 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@gmail.com> | 2017-10-31 10:25:57 -0700 |
commit | 698b6e50011cb2957911ece0001e4655d063500c (patch) | |
tree | 04570f0d3226685321d98d9bd0faf7b219451e89 | |
parent | 5dac77a6c108d4e1da99db30664dece38c1d9683 (diff) | |
download | qtlocation-mapboxgl-698b6e50011cb2957911ece0001e4655d063500c.tar.gz |
Hook up placement updates for collision boxes.
-rw-r--r-- | src/mbgl/layout/symbol_layout.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/text/placement.cpp | 17 |
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 { |