@@ -177,7 +177,18 @@ export class SymbolBuffers {
177
177
this . placedSymbolArray = new PlacedSymbolArray ( ) ;
178
178
}
179
179
180
+ isEmpty ( ) {
181
+ return this . layoutVertexArray. length === 0 &&
182
+ this . indexArray . length === 0 &&
183
+ this . dynamicLayoutVertexArray . length === 0 &&
184
+ this . opacityVertexArray . length === 0 ;
185
+ }
186
+
180
187
upload ( context : Context , dynamicIndexBuffer : boolean , upload ? : boolean , update ? : boolean ) {
188
+ if ( this . isEmpty ( ) ) {
189
+ return ;
190
+ }
191
+
181
192
if ( upload ) {
182
193
this . layoutVertexBuffer = context . createVertexBuffer ( this . layoutVertexArray , symbolLayoutAttributes . members ) ;
183
194
this . indexBuffer = context . createIndexBuffer ( this . indexArray , dynamicIndexBuffer ) ;
@@ -376,11 +387,6 @@ class SymbolBucket implements Bucket {
376
387
this . text = new SymbolBuffers ( new ProgramConfigurationSet ( symbolLayoutAttributes . members , this . layers , this . zoom , property => / ^ t e x t / . test ( property ) ) ) ;
377
388
this . icon = new SymbolBuffers ( new ProgramConfigurationSet ( symbolLayoutAttributes . members , this . layers , this . zoom , property => / ^ i c o n / . test ( property ) ) ) ;
378
389
379
- this . textCollisionBox = new CollisionBuffers ( CollisionBoxLayoutArray , collisionBoxLayout . members , LineIndexArray ) ;
380
- this . iconCollisionBox = new CollisionBuffers ( CollisionBoxLayoutArray , collisionBoxLayout . members , LineIndexArray ) ;
381
- this . textCollisionCircle = new CollisionBuffers ( CollisionCircleLayoutArray , collisionCircleLayout . members , TriangleIndexArray ) ;
382
- this . iconCollisionCircle = new CollisionBuffers ( CollisionCircleLayoutArray , collisionCircleLayout . members , TriangleIndexArray ) ;
383
-
384
390
this . glyphOffsetArray = new GlyphOffsetArray ( ) ;
385
391
this . lineVertexArray = new SymbolLineVertexArray ( ) ;
386
392
this . symbolInstances = new SymbolInstanceArray ( ) ;
@@ -539,7 +545,7 @@ class SymbolBucket implements Bucket {
539
545
}
540
546
541
547
upload ( context : Context ) {
542
- if ( ! this . uploaded ) {
548
+ if ( ! this . uploaded && this . hasDebugData ( ) ) {
543
549
this . textCollisionBox . upload ( context ) ;
544
550
this . iconCollisionBox . upload ( context ) ;
545
551
this . textCollisionCircle . upload ( context ) ;
@@ -550,15 +556,22 @@ class SymbolBucket implements Bucket {
550
556
this . uploaded = true ;
551
557
}
552
558
553
- destroy ( ) {
554
- this . text . destroy ( ) ;
555
- this . icon . destroy ( ) ;
559
+ destroyDebugData ( ) {
556
560
this . textCollisionBox . destroy ( ) ;
557
561
this . iconCollisionBox . destroy ( ) ;
558
562
this . textCollisionCircle . destroy ( ) ;
559
563
this . iconCollisionCircle . destroy ( ) ;
560
564
}
561
565
566
+ destroy ( ) {
567
+ this . text . destroy ( ) ;
568
+ this . icon . destroy ( ) ;
569
+
570
+ if ( this . hasDebugData ( ) ) {
571
+ this . destroyDebugData ( ) ;
572
+ }
573
+ }
574
+
562
575
addToLineVertexArray ( anchor : Anchor , line : any ) {
563
576
const lineStartIndex = this . lineVertexArray . length ;
564
577
if ( anchor . segment !== undefined ) {
@@ -752,6 +765,15 @@ class SymbolBucket implements Bucket {
752
765
}
753
766
754
767
generateCollisionDebugBuffers ( ) {
768
+ if ( this . hasDebugData ( ) ) {
769
+ this . destroyDebugData ( ) ;
770
+ }
771
+
772
+ this . textCollisionBox = new CollisionBuffers ( CollisionBoxLayoutArray , collisionBoxLayout . members , LineIndexArray ) ;
773
+ this . iconCollisionBox = new CollisionBuffers ( CollisionBoxLayoutArray , collisionBoxLayout . members , LineIndexArray ) ;
774
+ this . textCollisionCircle = new CollisionBuffers ( CollisionCircleLayoutArray , collisionCircleLayout . members , TriangleIndexArray ) ;
775
+ this . iconCollisionCircle = new CollisionBuffers ( CollisionCircleLayoutArray , collisionCircleLayout . members , TriangleIndexArray ) ;
776
+
755
777
for ( let i = 0 ; i < this . symbolInstances . length ; i ++ ) {
756
778
const symbolInstance = this . symbolInstances . get ( i ) ;
757
779
this . addDebugCollisionBoxes ( symbolInstance . textBoxStartIndex , symbolInstance . textBoxEndIndex , symbolInstance , true ) ;
@@ -840,20 +862,24 @@ class SymbolBucket implements Bucket {
840
862
return this . icon . segments . get ( ) . length > 0 ;
841
863
}
842
864
865
+ hasDebugData ( ) {
866
+ return this . textCollisionBox && this . iconCollisionBox && this . textCollisionCircle && this . iconCollisionCircle ;
867
+ }
868
+
843
869
hasTextCollisionBoxData ( ) {
844
- return this . textCollisionBox . segments . get ( ) . length > 0 ;
870
+ return this . hasDebugData ( ) && this . textCollisionBox . segments . get ( ) . length > 0 ;
845
871
}
846
872
847
873
hasIconCollisionBoxData ( ) {
848
- return this . iconCollisionBox . segments . get ( ) . length > 0 ;
874
+ return this . hasDebugData ( ) && this . iconCollisionBox . segments . get ( ) . length > 0 ;
849
875
}
850
876
851
877
hasTextCollisionCircleData ( ) {
852
- return this . textCollisionCircle . segments . get ( ) . length > 0 ;
878
+ return this . hasDebugData ( ) && this . textCollisionCircle . segments . get ( ) . length > 0 ;
853
879
}
854
880
855
881
hasIconCollisionCircleData ( ) {
856
- return this . iconCollisionCircle . segments . get ( ) . length > 0 ;
882
+ return this . hasDebugData ( ) && this . iconCollisionCircle . segments . get ( ) . length > 0 ;
857
883
}
858
884
859
885
addIndicesForPlacedSymbol ( iconOrText : SymbolBuffers , placedSymbolIndex : number ) {
0 commit comments