Skip to content

Commit 5c806a9

Browse files
karimnaajimike-unearth
authored andcommitted
Prevent empty buffers from being created for debug data (mapbox#9237)
1 parent daae8d2 commit 5c806a9

File tree

1 file changed

+39
-13
lines changed

1 file changed

+39
-13
lines changed

src/data/bucket/symbol_bucket.js

+39-13
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,18 @@ export class SymbolBuffers {
177177
this.placedSymbolArray = new PlacedSymbolArray();
178178
}
179179

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+
180187
upload(context: Context, dynamicIndexBuffer: boolean, upload?: boolean, update?: boolean) {
188+
if (this.isEmpty()) {
189+
return;
190+
}
191+
181192
if (upload) {
182193
this.layoutVertexBuffer = context.createVertexBuffer(this.layoutVertexArray, symbolLayoutAttributes.members);
183194
this.indexBuffer = context.createIndexBuffer(this.indexArray, dynamicIndexBuffer);
@@ -376,11 +387,6 @@ class SymbolBucket implements Bucket {
376387
this.text = new SymbolBuffers(new ProgramConfigurationSet(symbolLayoutAttributes.members, this.layers, this.zoom, property => /^text/.test(property)));
377388
this.icon = new SymbolBuffers(new ProgramConfigurationSet(symbolLayoutAttributes.members, this.layers, this.zoom, property => /^icon/.test(property)));
378389

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-
384390
this.glyphOffsetArray = new GlyphOffsetArray();
385391
this.lineVertexArray = new SymbolLineVertexArray();
386392
this.symbolInstances = new SymbolInstanceArray();
@@ -539,7 +545,7 @@ class SymbolBucket implements Bucket {
539545
}
540546

541547
upload(context: Context) {
542-
if (!this.uploaded) {
548+
if (!this.uploaded && this.hasDebugData()) {
543549
this.textCollisionBox.upload(context);
544550
this.iconCollisionBox.upload(context);
545551
this.textCollisionCircle.upload(context);
@@ -550,15 +556,22 @@ class SymbolBucket implements Bucket {
550556
this.uploaded = true;
551557
}
552558

553-
destroy() {
554-
this.text.destroy();
555-
this.icon.destroy();
559+
destroyDebugData() {
556560
this.textCollisionBox.destroy();
557561
this.iconCollisionBox.destroy();
558562
this.textCollisionCircle.destroy();
559563
this.iconCollisionCircle.destroy();
560564
}
561565

566+
destroy() {
567+
this.text.destroy();
568+
this.icon.destroy();
569+
570+
if (this.hasDebugData()) {
571+
this.destroyDebugData();
572+
}
573+
}
574+
562575
addToLineVertexArray(anchor: Anchor, line: any) {
563576
const lineStartIndex = this.lineVertexArray.length;
564577
if (anchor.segment !== undefined) {
@@ -752,6 +765,15 @@ class SymbolBucket implements Bucket {
752765
}
753766

754767
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+
755777
for (let i = 0; i < this.symbolInstances.length; i++) {
756778
const symbolInstance = this.symbolInstances.get(i);
757779
this.addDebugCollisionBoxes(symbolInstance.textBoxStartIndex, symbolInstance.textBoxEndIndex, symbolInstance, true);
@@ -840,20 +862,24 @@ class SymbolBucket implements Bucket {
840862
return this.icon.segments.get().length > 0;
841863
}
842864

865+
hasDebugData() {
866+
return this.textCollisionBox && this.iconCollisionBox && this.textCollisionCircle && this.iconCollisionCircle;
867+
}
868+
843869
hasTextCollisionBoxData() {
844-
return this.textCollisionBox.segments.get().length > 0;
870+
return this.hasDebugData() && this.textCollisionBox.segments.get().length > 0;
845871
}
846872

847873
hasIconCollisionBoxData() {
848-
return this.iconCollisionBox.segments.get().length > 0;
874+
return this.hasDebugData() && this.iconCollisionBox.segments.get().length > 0;
849875
}
850876

851877
hasTextCollisionCircleData() {
852-
return this.textCollisionCircle.segments.get().length > 0;
878+
return this.hasDebugData() && this.textCollisionCircle.segments.get().length > 0;
853879
}
854880

855881
hasIconCollisionCircleData() {
856-
return this.iconCollisionCircle.segments.get().length > 0;
882+
return this.hasDebugData() && this.iconCollisionCircle.segments.get().length > 0;
857883
}
858884

859885
addIndicesForPlacedSymbol(iconOrText: SymbolBuffers, placedSymbolIndex: number) {

0 commit comments

Comments
 (0)