@@ -437,8 +437,8 @@ export class Placement {
437437 }
438438 }
439439
440- placeLayerBucketPart ( bucketPart : BucketPart , seenCrossTileIDs : Set < number > , showCollisionBoxes : boolean , updateCollisionBoxIfNecessary : boolean , scaleFactor : number = 1 ) {
441- this . algorithm . placeLayerBucketPart ( this , bucketPart , seenCrossTileIDs , showCollisionBoxes , updateCollisionBoxIfNecessary , scaleFactor ) ;
440+ placeLayerBucketPart ( bucketPart : BucketPart , seenCrossTileIDs : Set < number > , showCollisionBoxes : boolean , scaleFactor : number = 1 ) {
441+ this . algorithm . placeLayerBucketPart ( this , bucketPart , seenCrossTileIDs , showCollisionBoxes , scaleFactor ) ;
442442 }
443443
444444 commit ( now : number ) : void {
@@ -504,7 +504,7 @@ export class Placement {
504504 }
505505 }
506506
507- updateLayerOpacities ( styleLayer : TypedStyleLayer , tiles : Array < Tile > , layerIndex : number , replacementSource ?: ReplacementSource | null ) {
507+ updateLayerOpacities ( styleLayer : TypedStyleLayer , tiles : Array < Tile > , layerIndex : number , replacementSource ?: ReplacementSource | null , showCollisionBoxes : boolean = false , scaleFactor : number = 1 ) {
508508 if ( replacementSource ) {
509509 this . lastReplacementSourceUpdateTime = replacementSource . updateTime ;
510510 }
@@ -521,6 +521,18 @@ export class Placement {
521521 symbolBucket . hdExt . updateRoadElevation ( symbolBucket , tile . tileID . canonical ) ;
522522 }
523523 symbolBucket . updateZOffset ( ) ;
524+
525+ // Collision debug boxes encode elevation directly in their vertex data, so they must be
526+ // rebuilt here (after zOffset is refreshed above) rather than during placement, otherwise
527+ // they'd render one placement cycle behind the actual symbol quads whenever elevation changes.
528+ if ( showCollisionBoxes && tile . collisionBoxArray ) {
529+ const layout = symbolBucket . layers [ 0 ] . layout ;
530+ const [ textSizeScaleRangeMin , textSizeScaleRangeMax ] = layout . get ( 'text-size-scale-range' ) ;
531+ const [ iconSizeScaleRangeMin , iconSizeScaleRangeMax ] = layout . get ( 'icon-size-scale-range' ) ;
532+ const textScaleFactor = clamp ( scaleFactor , textSizeScaleRangeMin , textSizeScaleRangeMax ) ;
533+ const iconScaleFactor = clamp ( scaleFactor , iconSizeScaleRangeMin , iconSizeScaleRangeMax ) ;
534+ symbolBucket . updateCollisionDebugBuffers ( this . transform . zoom , tile . collisionBoxArray , textScaleFactor , iconScaleFactor ) ;
535+ }
524536 }
525537 }
526538 }
0 commit comments