Skip to content

Commit

Permalink
Rename SegmentVector's invalidateLast to forceNewSegmentOnTextPrepare
Browse files Browse the repository at this point in the history
  • Loading branch information
kubapelc committed Apr 8, 2024
1 parent ae0ead7 commit a405cb8
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
6 changes: 3 additions & 3 deletions src/data/segment.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ describe('SegmentVector', () => {
const indexBuffer = new TriangleIndexArray();
const segmentVector = new SegmentVector();
const first = mockUseSegment(segmentVector, vertexBuffer, indexBuffer, 5);
segmentVector.invalidateLast();
segmentVector.forceNewSegmentOnTextPrepare();
const second = segmentVector.createNewSegment(vertexBuffer, indexBuffer);
second.vertexLength += 5;
addVertices(vertexBuffer, 5);
Expand Down Expand Up @@ -125,7 +125,7 @@ describe('SegmentVector', () => {
const indexBuffer = new TriangleIndexArray();
const segmentVector = new SegmentVector();
const first = mockUseSegment(segmentVector, vertexBuffer, indexBuffer, 5);
segmentVector.invalidateLast();
segmentVector.forceNewSegmentOnTextPrepare();
const second = segmentVector.getOrCreateLatestSegment(vertexBuffer, indexBuffer);
second.vertexLength += 5;
addVertices(vertexBuffer, 5);
Expand All @@ -145,7 +145,7 @@ describe('SegmentVector', () => {
const indexBuffer = new TriangleIndexArray();
const segmentVector = new SegmentVector();
const first = mockUseSegment(segmentVector, vertexBuffer, indexBuffer, 5);
segmentVector.invalidateLast();
segmentVector.forceNewSegmentOnTextPrepare();
const second = mockUseSegment(segmentVector, vertexBuffer, indexBuffer, 5);
const third = mockUseSegment(segmentVector, vertexBuffer, indexBuffer, 5);
expect(first).toBeTruthy();
Expand Down
16 changes: 11 additions & 5 deletions src/data/segment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export type Segment = {
export class SegmentVector {
static MAX_VERTEX_ARRAY_LENGTH: number;
segments: Array<Segment>;
private _invalidateLast: boolean = false;
private _forceNewSegmentOnNextPrepare: boolean = false;

constructor(segments: Array<Segment> = []) {
this.segments = segments;
Expand All @@ -47,7 +47,7 @@ export class SegmentVector {
warnOnce(`Max vertices per segment is ${SegmentVector.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${numVertices}. Consider using the \`fillLargeMeshArrays\` function if you require meshes with more than ${SegmentVector.MAX_VERTEX_ARRAY_LENGTH} vertices.`);
}

if (!lastSegment || lastSegment.vertexLength + numVertices > SegmentVector.MAX_VERTEX_ARRAY_LENGTH || lastSegment.sortKey !== sortKey || this._invalidateLast) {
if (this._forceNewSegmentOnNextPrepare || !lastSegment || lastSegment.vertexLength + numVertices > SegmentVector.MAX_VERTEX_ARRAY_LENGTH || lastSegment.sortKey !== sortKey) {
return this.createNewSegment(layoutVertexArray, indexArray, sortKey);
} else {
return lastSegment;
Expand All @@ -74,7 +74,9 @@ export class SegmentVector {
segment.sortKey = sortKey;
}

this._invalidateLast = false;
// If this was set, we have no need to create a new segment on next prepareSegment call,
// since this function already created a new, empty segment.
this._forceNewSegmentOnNextPrepare = false;
this.segments.push(segment);
return segment;
}
Expand All @@ -90,8 +92,12 @@ export class SegmentVector {
return this.prepareSegment(0, layoutVertexArray, indexArray, sortKey);
}

invalidateLast() {
this._invalidateLast = true;
/**
* Causes the next call to {@link prepareSegment} to always return a new segment,
* not reusing the current segment even if the new geometry would fit it.
*/
forceNewSegmentOnTextPrepare() {

This comment has been minimized.

Copy link
@HarelM

HarelM Apr 8, 2024

Collaborator

Text -> Next

this._forceNewSegmentOnNextPrepare = true;
}

get() {
Expand Down
4 changes: 2 additions & 2 deletions src/render/fill_large_mesh_arrays.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ export function fillLargeMeshArrays(
// Triangles and lines share vertex buffer, but we increment vertex counts of their segments by different amounts.
// This can cause incorrect indices to be used if we reuse those segments, so we force the segment vector
// to create new segments on the next `prepareSegment` call.
segmentsTriangles.invalidateLast();
segmentsLines?.invalidateLast();
segmentsTriangles.forceNewSegmentOnTextPrepare();
segmentsLines?.forceNewSegmentOnTextPrepare();
}
}

Expand Down

0 comments on commit a405cb8

Please sign in to comment.