@swf2es/render 0.1.19 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,14 @@
1
1
  import type { GlState } from "@swf2es/context3d/device";
2
2
  import type { Place } from "./atlas.js";
3
3
  /**
4
- * Small stable geometries merged in painter's order; unchanged streams reuse
5
- * their GPU buffers. Only what changed since the last frame, from the first
6
- * draw that differs to the stream's end, is staged on the CPU and uploaded
7
- * where it lies: the stream before it stays on the GPU alone, and a buffer
8
- * grown keeps it by a copy there.
4
+ * Small geometries merged run by run in painter's order, each run's copy a
5
+ * segment of one stream that any later run of the same geometries draws
6
+ * again, wherever it comes in the frame: its rows are in a texture of its
7
+ * own, written each frame, not in its vertices. Only the segments a frame adds are staged on the
8
+ * CPU, after the stream's top, and uploaded there at once; what is below
9
+ * stays on the GPU alone, and a buffer grown keeps it by a copy there.
10
+ * Segments no run used in a frame are let go of, and their room once the
11
+ * stream is twice what the last frame used, the stream then made anew.
9
12
  */
10
13
  export declare class FillBatches {
11
14
  private readonly gl;
@@ -21,14 +24,36 @@ export declare class FillBatches {
21
24
  private indexCapacity;
22
25
  private vertexTop;
23
26
  indexTop: number;
24
- /** Where this frame's staging starts in the stream: the first draw that differs from the last frame's. */
27
+ /** Where this frame's staging starts in the stream: its top as the frame began. */
25
28
  private fromVertex;
26
29
  private fromIndex;
27
- private readonly previous;
28
- private readonly previousRows;
29
- private cursor;
30
- /** Stays dirty if preparation aborts before upload, as an overflowing run table can do. */
31
- private changed;
30
+ /**
31
+ * The segments' rows, slot by slot (Segment.slot), as their texture holds
32
+ * them, the slots taken, and the range of them this frame changed.
33
+ */
34
+ rowsTexture: WebGLTexture | null;
35
+ private rows;
36
+ private rowsLines;
37
+ private slotTop;
38
+ private slotsMost;
39
+ private changedFrom;
40
+ private changedTo;
41
+ /** The segments by their first geometry. */
42
+ private readonly segments;
43
+ private frame;
44
+ /** What the frame's runs used of the stream, each segment once. */
45
+ private liveVertices;
46
+ private liveIndices;
47
+ /**
48
+ * The keys of the runs this frame and the last asked for (add's
49
+ * `settled`), so that a run is copied only once it is drawn again.
50
+ */
51
+ private seen;
52
+ private seenBefore;
53
+ /** A frame prepared but not uploaded, as an overflowing run table leaves one: its staging lost. */
54
+ private pending;
55
+ /** Whether a run found no room this frame, so that the next makes the stream anew. */
56
+ private full;
32
57
  /** The frames of the current watch, and the most of the stream and of the staging they used. */
33
58
  private frames;
34
59
  private mostVertices;
@@ -36,15 +61,40 @@ export declare class FillBatches {
36
61
  private mostStaged;
37
62
  private mostStagedIndices;
38
63
  constructor(gl: WebGL2RenderingContext, state: GlState);
39
- setUp(): void;
64
+ /** The buffers and the rows' texture made, `textureMost` lines at most, as the context comes. */
65
+ setUp(textureMost: number): void;
66
+ /** No segment kept: the stream made anew from its start. */
67
+ private clear;
68
+ /** A frame's preparation begun: staging from the stream's top, or from its start once it is mostly dead. */
40
69
  reset(): void;
41
- /** Append the whole run, or leave it to multi-draw if copying would cost too much. */
42
- add(places: Place[], rows: Int32Array, count: number, frame: number): void;
43
70
  /**
44
- * The staged part of the stream uploaded where it lies, the buffers grown
45
- * to fit it first, keeping what is before it; and, once a watch of
46
- * SHRINK_FRAMES has used a quarter of the room or less, the buffers and
47
- * the staging made smaller.
71
+ * The segment that draws the run, of at least `least` draws: one kept, or
72
+ * one staged now; null leaves it to the atlas, where copying would cost
73
+ * too much: a run short or of geometry added this `frame` is cheaper
74
+ * drawn from it, and with `settled` a run not drawn the frame before
75
+ * too, as a run that changes from frame to frame, as an animation's do,
76
+ * would be copied again each frame. Its vertices carry each draw's slot
77
+ * in the rows' texture, where `rows` are written.
78
+ */
79
+ add(places: Place[], rows: Int32Array, count: number, frame: number, least: number, settled: boolean): {
80
+ indexStart: number;
81
+ indices: number;
82
+ } | null;
83
+ /** Whether the `count` rows from `slot` are `rows`. */
84
+ private rowsAre;
85
+ /** `rows` written from `slot` on, what changes counted for the upload. */
86
+ private writeRows;
87
+ /** The rows' texture made tall enough for the slots taken, and the lines this frame changed uploaded. */
88
+ private uploadRows;
89
+ /** Whether `segment` is of the geometries of `places`, in their order. */
90
+ private holds;
91
+ /** `segment` used this frame, counted once among what the frame used. */
92
+ private use;
93
+ /**
94
+ * The staged segments uploaded where they lie, the buffers grown to fit
95
+ * them first, keeping what is below; the segments no run used let go of;
96
+ * and, once a watch of SHRINK_FRAMES has used a quarter of the room or
97
+ * less, the buffers and the staging made smaller.
48
98
  */
49
99
  upload(): void;
50
100
  /** What add staged uploaded where it lies, the buffers grown first to fit the stream. */
@@ -1 +1 @@
1
- {"version":3,"file":"batches.d.ts","sourceRoot":"","sources":["../../src/webgl/batches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAcxC;;;;;;GAMG;AACH,qBAAa,WAAW;IA4BpB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IA5BxB,WAAW,EAAG,sBAAsB,CAAC;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAe;IAClC,yGAAyG;IACzG,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,QAAQ,SAAK;IACb,0GAA0G;IAC1G,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,MAAM,CAAK;IACnB,2FAA2F;IAC3F,OAAO,CAAC,OAAO,CAAS;IACxB,gGAAgG;IAChG,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,iBAAiB,CAAK;IAE9B,YACmB,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,OAAO,EAC7B;IAEJ,KAAK,IAAI,IAAI,CAwBZ;IAED,KAAK,IAAI,IAAI,CAOZ;IAED,sFAAsF;IACtF,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAkEzE;IAED;;;;;OAKG;IACH,MAAM,IAAI,IAAI,CASb;IAED,yFAAyF;IACzF,OAAO,CAAC,YAAY;IA4CpB,OAAO,IAAI,IAAI,CAOd;IAED,yFAAyF;IACzF,OAAO,CAAC,SAAS;IAmBjB;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAuDb;;;;OAIG;IACH,OAAO,CAAC,MAAM;CA4Bf"}
1
+ {"version":3,"file":"batches.d.ts","sourceRoot":"","sources":["../../src/webgl/batches.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAiCxC;;;;;;;;;GASG;AACH,qBAAa,WAAW;IAkDpB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAlDxB,WAAW,EAAG,sBAAsB,CAAC;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAe;IAClC,yGAAyG;IACzG,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,QAAQ,SAAK;IACb,mFAAmF;IACnF,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAK;IACtB;;;OAGG;IACH,WAAW,EAAE,YAAY,GAAG,IAAI,CAAQ;IACxC,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,KAAK,CAAK;IAClB,mEAAmE;IACnE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB;;;OAGG;IACH,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,UAAU,CAAqB;IACvC,mGAAmG;IACnG,OAAO,CAAC,OAAO,CAAS;IACxB,sFAAsF;IACtF,OAAO,CAAC,IAAI,CAAS;IACrB,gGAAgG;IAChG,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,iBAAiB,CAAK;IAE9B,YACmB,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,OAAO,EAC7B;IAEJ,iGAAiG;IACjG,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAyB/B;IAED,4DAA4D;IAC5D,OAAO,CAAC,KAAK;IASb,4GAA4G;IAC5G,KAAK,IAAI,IAAI,CA6BZ;IAED;;;;;;;;OAQG;IACH,GAAG,CACD,MAAM,EAAE,KAAK,EAAE,EACf,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAuGhD;IAED,uDAAuD;IACvD,OAAO,CAAC,OAAO;IAUf,0EAA0E;IAC1E,OAAO,CAAC,SAAS;IAkBjB,yGAAyG;IACzG,OAAO,CAAC,UAAU;IA4ClB,0EAA0E;IAC1E,OAAO,CAAC,KAAK;IAWb,yEAAyE;IACzE,OAAO,CAAC,GAAG;IAQX;;;;;OAKG;IACH,MAAM,IAAI,IAAI,CA2Bb;IAED,yFAAyF;IACzF,OAAO,CAAC,YAAY;IA2CpB,OAAO,IAAI,IAAI,CAad;IAED,yFAAyF;IACzF,OAAO,CAAC,SAAS;IAmBjB;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAqDb;;;;OAIG;IACH,OAAO,CAAC,MAAM;CA4Bf"}
@@ -1,5 +1,9 @@
1
- import { COLOR_AT, DRAW_AT, POSITION_AT, TEXEL_AT } from "./programs.js";
2
- /** Atlas attributes followed by the packed row: transforms and snapping stay in the shader. */
1
+ import { COLOR_AT, DRAW_AT, MERGED_LINE, MERGED_UNIT, POSITION_AT, TEXEL_AT } from "./programs.js";
2
+ /**
3
+ * Atlas attributes followed by where the draw's packed row is in the rows'
4
+ * texture: transforms and snapping stay in the shader, and a row that
5
+ * changes changes no vertex.
6
+ */
3
7
  const WORDS = 6;
4
8
  /** Bound the extra CPU and GPU storage, falling back to the atlas after it fills. */
5
9
  const VERTICES_MOST = 2 << 20;
@@ -10,11 +14,14 @@ const INDICES_LEAST = 3 << 14;
10
14
  /** Frames over which the most used is watched; room four times that is let go of after them. */
11
15
  const SHRINK_FRAMES = 240;
12
16
  /**
13
- * Small stable geometries merged in painter's order; unchanged streams reuse
14
- * their GPU buffers. Only what changed since the last frame, from the first
15
- * draw that differs to the stream's end, is staged on the CPU and uploaded
16
- * where it lies: the stream before it stays on the GPU alone, and a buffer
17
- * grown keeps it by a copy there.
17
+ * Small geometries merged run by run in painter's order, each run's copy a
18
+ * segment of one stream that any later run of the same geometries draws
19
+ * again, wherever it comes in the frame: its rows are in a texture of its
20
+ * own, written each frame, not in its vertices. Only the segments a frame adds are staged on the
21
+ * CPU, after the stream's top, and uploaded there at once; what is below
22
+ * stays on the GPU alone, and a buffer grown keeps it by a copy there.
23
+ * Segments no run used in a frame are let go of, and their room once the
24
+ * stream is twice what the last frame used, the stream then made anew.
18
25
  */
19
26
  export class FillBatches {
20
27
  gl;
@@ -30,14 +37,36 @@ export class FillBatches {
30
37
  indexCapacity = 0;
31
38
  vertexTop = 0;
32
39
  indexTop = 0;
33
- /** Where this frame's staging starts in the stream: the first draw that differs from the last frame's. */
40
+ /** Where this frame's staging starts in the stream: its top as the frame began. */
34
41
  fromVertex = 0;
35
42
  fromIndex = 0;
36
- previous = [];
37
- previousRows = [];
38
- cursor = 0;
39
- /** Stays dirty if preparation aborts before upload, as an overflowing run table can do. */
40
- changed = false;
43
+ /**
44
+ * The segments' rows, slot by slot (Segment.slot), as their texture holds
45
+ * them, the slots taken, and the range of them this frame changed.
46
+ */
47
+ rowsTexture = null;
48
+ rows = new Int32Array(0);
49
+ rowsLines = 0;
50
+ slotTop = 0;
51
+ slotsMost = 0;
52
+ changedFrom = 0;
53
+ changedTo = 0;
54
+ /** The segments by their first geometry. */
55
+ segments = new Map();
56
+ frame = 0;
57
+ /** What the frame's runs used of the stream, each segment once. */
58
+ liveVertices = 0;
59
+ liveIndices = 0;
60
+ /**
61
+ * The keys of the runs this frame and the last asked for (add's
62
+ * `settled`), so that a run is copied only once it is drawn again.
63
+ */
64
+ seen = new Set();
65
+ seenBefore = new Set();
66
+ /** A frame prepared but not uploaded, as an overflowing run table leaves one: its staging lost. */
67
+ pending = false;
68
+ /** Whether a run found no room this frame, so that the next makes the stream anew. */
69
+ full = false;
41
70
  /** The frames of the current watch, and the most of the stream and of the staging they used. */
42
71
  frames = 0;
43
72
  mostVertices = 0;
@@ -48,8 +77,13 @@ export class FillBatches {
48
77
  this.gl = gl;
49
78
  this.state = state;
50
79
  }
51
- setUp() {
80
+ /** The buffers and the rows' texture made, `textureMost` lines at most, as the context comes. */
81
+ setUp(textureMost) {
52
82
  const gl = this.gl;
83
+ this.rowsTexture = null;
84
+ this.rowsLines = 0;
85
+ this.rows = new Int32Array(0);
86
+ this.slotsMost = MERGED_LINE * textureMost;
53
87
  this.vertexArray = gl.createVertexArray();
54
88
  this.vertexBuffer = gl.createBuffer();
55
89
  this.indexBuffer = gl.createBuffer();
@@ -68,59 +102,115 @@ export class FillBatches {
68
102
  gl.vertexAttribI4i(DRAW_AT, -1, 0, 0, 0);
69
103
  this.vertexCapacity = 0;
70
104
  this.indexCapacity = 0;
71
- this.previous.length = 0;
72
- this.previousRows.length = 0;
73
- this.changed = false;
74
- this.reset();
105
+ this.clear();
75
106
  }
76
- reset() {
107
+ /** No segment kept: the stream made anew from its start. */
108
+ clear() {
109
+ this.segments.clear();
77
110
  this.vertexTop = 0;
78
111
  this.indexTop = 0;
79
- this.cursor = 0;
80
- // A preparation that aborted left the whole stream to stage again.
81
- this.fromVertex = 0;
82
- this.fromIndex = 0;
112
+ this.slotTop = 0;
113
+ this.pending = false;
114
+ this.full = false;
83
115
  }
84
- /** Append the whole run, or leave it to multi-draw if copying would cost too much. */
85
- add(places, rows, count, frame) {
86
- if (count < 32) {
87
- return;
116
+ /** A frame's preparation begun: staging from the stream's top, or from its start once it is mostly dead. */
117
+ reset() {
118
+ if (this.pending) {
119
+ // Rows written and not uploaded: the texture made again, so that the CPU's copy is its own.
120
+ this.rowsLines = 0;
121
+ }
122
+ if (this.pending ||
123
+ // Room let go of where a run found none, unless the last frame used all of the stream.
124
+ (this.full && (this.vertexTop > this.liveVertices || this.indexTop > this.liveIndices)) ||
125
+ (this.vertexTop > VERTICES_LEAST && this.vertexTop > this.liveVertices * 2) ||
126
+ (this.indexTop > INDICES_LEAST && this.indexTop > this.liveIndices * 2)) {
127
+ this.clear();
128
+ }
129
+ this.full = false;
130
+ const seen = this.seenBefore;
131
+ this.seenBefore = this.seen;
132
+ this.seen = seen;
133
+ seen.clear();
134
+ this.frame++;
135
+ this.fromVertex = this.vertexTop;
136
+ this.fromIndex = this.indexTop;
137
+ this.liveVertices = 0;
138
+ this.liveIndices = 0;
139
+ this.changedFrom = this.slotTop;
140
+ this.changedTo = 0;
141
+ this.pending = true;
142
+ }
143
+ /**
144
+ * The segment that draws the run, of at least `least` draws: one kept, or
145
+ * one staged now; null leaves it to the atlas, where copying would cost
146
+ * too much: a run short or of geometry added this `frame` is cheaper
147
+ * drawn from it, and with `settled` a run not drawn the frame before
148
+ * too, as a run that changes from frame to frame, as an animation's do,
149
+ * would be copied again each frame. Its vertices carry each draw's slot
150
+ * in the rows' texture, where `rows` are written.
151
+ */
152
+ add(places, rows, count, frame, least, settled) {
153
+ if (count < least) {
154
+ return null;
88
155
  }
89
- let vertices = this.vertexTop;
90
- let indices = this.indexTop;
156
+ let vertices = 0;
157
+ let indices = 0;
158
+ // The run's geometries by where they lie in the atlas, which no two live geometries share.
159
+ let key = count;
91
160
  for (let i = 0; i < count; i++) {
92
161
  const place = places[i];
93
162
  if (!place.batch || place.batch.frame === frame) {
94
- return;
163
+ return null;
95
164
  }
96
165
  vertices += place.vertices;
97
166
  indices += place.indices;
167
+ key = Math.imul(key ^ place.indexStart, 0x9e3779b1) ^ place.indices;
98
168
  }
99
- if (vertices > VERTICES_MOST || indices > INDICES_MOST) {
100
- return;
169
+ const first = places[0].batch;
170
+ let list = this.segments.get(first);
171
+ if (list) {
172
+ for (const segment of list) {
173
+ // A copy a run drew this frame already serves another only with the same rows.
174
+ if (segment.batches.length === count &&
175
+ this.holds(segment, places) &&
176
+ (segment.frame !== this.frame || this.rowsAre(segment.slot, rows, count))) {
177
+ this.use(segment);
178
+ this.writeRows(segment.slot, rows, count);
179
+ return segment;
180
+ }
181
+ }
182
+ }
183
+ // A key alike by chance merges a run a frame early, which costs a copy and draws the same.
184
+ this.seen.add(key);
185
+ if (settled && !this.seenBefore.has(key)) {
186
+ return null;
187
+ }
188
+ if (this.vertexTop + vertices > VERTICES_MOST ||
189
+ this.indexTop + indices > INDICES_MOST ||
190
+ this.slotTop + count > this.slotsMost) {
191
+ this.full = true;
192
+ return null;
101
193
  }
194
+ const segment = {
195
+ batches: new Array(count),
196
+ vertexStart: this.vertexTop,
197
+ vertices,
198
+ indexStart: this.indexTop,
199
+ indices,
200
+ slot: this.slotTop,
201
+ frame: -1,
202
+ };
203
+ this.slotTop += count;
204
+ this.stageRoom(this.vertexTop + vertices - this.fromVertex, this.indexTop + indices - this.fromIndex);
205
+ const floats = this.floats;
206
+ const words = this.words;
207
+ const staged = this.indices;
102
208
  for (let i = 0; i < count; i++) {
103
209
  const place = places[i];
104
210
  const batch = place.batch;
105
- // An unchanged prefix has the same offsets. After a mismatch, stage the rest in order.
106
- if (!this.changed &&
107
- (this.previous[this.cursor] !== batch || this.previousRows[this.cursor] !== rows[i])) {
108
- this.changed = true;
109
- this.fromVertex = this.vertexTop;
110
- this.fromIndex = this.indexTop;
111
- }
112
- this.previous[this.cursor] = batch;
113
- this.previousRows[this.cursor++] = rows[i];
114
- if (!this.changed) {
115
- this.vertexTop += place.vertices;
116
- this.indexTop += place.indices;
117
- continue;
118
- }
119
- this.stageRoom(vertices - this.fromVertex, indices - this.fromIndex);
211
+ segment.batches[i] = batch;
120
212
  const data = batch.data;
121
213
  const base = this.vertexTop;
122
- const floats = this.floats;
123
- const words = this.words;
124
214
  for (let j = 0; j < place.vertices; j++) {
125
215
  const at = (base - this.fromVertex + j) * WORDS;
126
216
  floats[at] = data.positions[j * 2];
@@ -128,9 +218,8 @@ export class FillBatches {
128
218
  floats[at + 2] = data.texels ? data.texels[j * 2] : 0;
129
219
  floats[at + 3] = data.texels ? data.texels[j * 2 + 1] : 0;
130
220
  words[at + 4] = data.colors[j];
131
- words[at + 5] = rows[i];
221
+ words[at + 5] = segment.slot + i;
132
222
  }
133
- const staged = this.indices;
134
223
  let at = this.indexTop - this.fromIndex;
135
224
  for (let j = 0; j < place.indices; j++) {
136
225
  staged[at++] = base + data.indices[j];
@@ -138,20 +227,118 @@ export class FillBatches {
138
227
  this.vertexTop += place.vertices;
139
228
  this.indexTop += place.indices;
140
229
  }
230
+ if (!list) {
231
+ list = [];
232
+ this.segments.set(first, list);
233
+ }
234
+ list.push(segment);
235
+ this.use(segment);
236
+ this.writeRows(segment.slot, rows, count);
237
+ return segment;
238
+ }
239
+ /** Whether the `count` rows from `slot` are `rows`. */
240
+ rowsAre(slot, rows, count) {
241
+ for (let i = 0; i < count; i++) {
242
+ if (this.rows[slot + i] !== rows[i]) {
243
+ return false;
244
+ }
245
+ }
246
+ return true;
247
+ }
248
+ /** `rows` written from `slot` on, what changes counted for the upload. */
249
+ writeRows(slot, rows, count) {
250
+ if (slot + count > this.rows.length) {
251
+ const lines = Math.ceil(Math.max(slot + count, this.rows.length * 2) / MERGED_LINE);
252
+ const grown = new Int32Array(lines * MERGED_LINE);
253
+ grown.set(this.rows);
254
+ this.rows = grown;
255
+ }
256
+ const held = this.rows;
257
+ for (let i = 0; i < count; i++) {
258
+ if (held[slot + i] !== rows[i]) {
259
+ held[slot + i] = rows[i];
260
+ this.changedFrom = Math.min(this.changedFrom, slot + i);
261
+ this.changedTo = Math.max(this.changedTo, slot + i + 1);
262
+ }
263
+ }
264
+ }
265
+ /** The rows' texture made tall enough for the slots taken, and the lines this frame changed uploaded. */
266
+ uploadRows() {
267
+ const gl = this.gl;
268
+ const lines = Math.ceil(this.slotTop / MERGED_LINE);
269
+ if (lines > this.rowsLines) {
270
+ if (this.rowsTexture) {
271
+ this.state.dropTexture(this.rowsTexture);
272
+ gl.deleteTexture(this.rowsTexture);
273
+ }
274
+ // A new texture holds zeros: the rows taken uploaded again, the CPU's past them zeros too.
275
+ this.rows.fill(0, this.slotTop);
276
+ this.rowsLines = Math.min(this.slotsMost / MERGED_LINE, Math.max(lines, this.rowsLines * 2));
277
+ this.rowsTexture = gl.createTexture();
278
+ this.state.bindTexture(MERGED_UNIT, this.rowsTexture);
279
+ this.state.activeTexture(MERGED_UNIT);
280
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.R32I, MERGED_LINE, this.rowsLines);
281
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
282
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
283
+ this.changedFrom = 0;
284
+ this.changedTo = this.slotTop;
285
+ }
286
+ if (this.changedTo <= this.changedFrom) {
287
+ return;
288
+ }
289
+ const from = Math.floor(this.changedFrom / MERGED_LINE);
290
+ const to = Math.ceil(this.changedTo / MERGED_LINE);
291
+ this.state.bindTexture(MERGED_UNIT, this.rowsTexture);
292
+ this.state.activeTexture(MERGED_UNIT);
293
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, from, MERGED_LINE, to - from, gl.RED_INTEGER, gl.INT, this.rows, from * MERGED_LINE);
294
+ }
295
+ /** Whether `segment` is of the geometries of `places`, in their order. */
296
+ holds(segment, places) {
297
+ const batches = segment.batches;
298
+ for (let i = 0; i < batches.length; i++) {
299
+ if (batches[i] !== places[i].batch) {
300
+ return false;
301
+ }
302
+ }
303
+ return true;
304
+ }
305
+ /** `segment` used this frame, counted once among what the frame used. */
306
+ use(segment) {
307
+ if (segment.frame !== this.frame) {
308
+ segment.frame = this.frame;
309
+ this.liveVertices += segment.vertices;
310
+ this.liveIndices += segment.indices;
311
+ }
141
312
  }
142
313
  /**
143
- * The staged part of the stream uploaded where it lies, the buffers grown
144
- * to fit it first, keeping what is before it; and, once a watch of
145
- * SHRINK_FRAMES has used a quarter of the room or less, the buffers and
146
- * the staging made smaller.
314
+ * The staged segments uploaded where they lie, the buffers grown to fit
315
+ * them first, keeping what is below; the segments no run used let go of;
316
+ * and, once a watch of SHRINK_FRAMES has used a quarter of the room or
317
+ * less, the buffers and the staging made smaller.
147
318
  */
148
319
  upload() {
149
- this.previous.length = this.cursor;
150
- this.previousRows.length = this.cursor;
151
- const staging = this.changed && this.indexTop > 0;
320
+ const staging = this.vertexTop > this.fromVertex;
152
321
  if (staging) {
153
322
  this.uploadStaged();
154
323
  }
324
+ if (this.slotTop > 0) {
325
+ this.uploadRows();
326
+ }
327
+ for (const [first, list] of this.segments) {
328
+ let kept = 0;
329
+ for (const segment of list) {
330
+ if (segment.frame === this.frame) {
331
+ list[kept++] = segment;
332
+ }
333
+ }
334
+ if (kept === 0) {
335
+ this.segments.delete(first);
336
+ }
337
+ else {
338
+ list.length = kept;
339
+ }
340
+ }
341
+ this.pending = false;
155
342
  this.watch(staging);
156
343
  }
157
344
  /** What add staged uploaded where it lies, the buffers grown first to fit the stream. */
@@ -169,9 +356,13 @@ export class FillBatches {
169
356
  }
170
357
  gl.bufferSubData(gl.ARRAY_BUFFER, this.fromVertex * WORDS * 4, this.words, 0, (this.vertexTop - this.fromVertex) * WORDS);
171
358
  gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, this.fromIndex * 4, this.indices, 0, this.indexTop - this.fromIndex);
172
- this.changed = false;
173
359
  }
174
360
  destroy() {
361
+ if (this.rowsTexture) {
362
+ this.state.dropTexture(this.rowsTexture);
363
+ this.gl.deleteTexture(this.rowsTexture);
364
+ this.rowsTexture = null;
365
+ }
175
366
  this.gl.deleteVertexArray(this.vertexArray);
176
367
  this.gl.deleteBuffer(this.vertexBuffer);
177
368
  this.gl.deleteBuffer(this.indexBuffer);
@@ -210,10 +401,8 @@ export class FillBatches {
210
401
  return;
211
402
  }
212
403
  const gl = this.gl;
213
- // With nothing uploaded for a change, as for a stream of no draws, nothing on the GPU is kept.
214
- const kept = !this.changed;
215
- const keepVertices = kept ? this.vertexTop : 0;
216
- const keepIndices = kept ? this.indexTop : 0;
404
+ const keepVertices = this.vertexTop;
405
+ const keepIndices = this.indexTop;
217
406
  const vertices = Math.max(VERTICES_LEAST, this.mostVertices * 2);
218
407
  if (this.mostVertices * 4 <= this.vertexCapacity && vertices < this.vertexCapacity) {
219
408
  this.state.bindVertexArray(this.vertexArray);
@@ -1 +1 @@
1
- {"version":3,"file":"batches.js","sourceRoot":"","sources":["../../src/webgl/batches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batches.js","sourceRoot":"","sources":["../../src/webgl/batches.ts"],"names":[],"mappings":"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"}