@swf2es/render 0.1.18 → 0.1.19
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.
- package/dist/webgl/atlas.d.ts +14 -1
- package/dist/webgl/atlas.d.ts.map +1 -1
- package/dist/webgl/atlas.js +119 -28
- package/dist/webgl/atlas.js.map +1 -1
- package/package.json +2 -2
- package/src/webgl/atlas.ts +149 -27
package/dist/webgl/atlas.d.ts
CHANGED
|
@@ -38,6 +38,15 @@ export declare class GeometryAtlas {
|
|
|
38
38
|
private indexTop;
|
|
39
39
|
private live;
|
|
40
40
|
private holes;
|
|
41
|
+
/** Vertices staged for the atlas from vertex `stagedVertexAt`, as floats and as words. */
|
|
42
|
+
private readonly stagedFloats;
|
|
43
|
+
private readonly stagedWords;
|
|
44
|
+
private stagedVertexAt;
|
|
45
|
+
private stagedVertices;
|
|
46
|
+
/** Indices staged for the atlas from index `stagedIndexAt`. */
|
|
47
|
+
private readonly stagedIndices;
|
|
48
|
+
private stagedIndexAt;
|
|
49
|
+
private stagedIndexCount;
|
|
41
50
|
places: (Place | null)[];
|
|
42
51
|
glyphArray: WebGLVertexArrayObject;
|
|
43
52
|
private glyphBuffer;
|
|
@@ -59,8 +68,12 @@ export declare class GeometryAtlas {
|
|
|
59
68
|
repackGlyphs(geometries: Geometries): void;
|
|
60
69
|
/** `data` copied in at the top of the atlas, its indices made absolute. */
|
|
61
70
|
private copyIn;
|
|
62
|
-
/** `data`'s vertices interleaved
|
|
71
|
+
/** `data`'s vertices interleaved for the atlas from vertex `base`: staged, or uploaded if too many. */
|
|
63
72
|
private copyVertices;
|
|
73
|
+
/** What is staged, uploaded: before anything draws from the atlas. */
|
|
74
|
+
private flush;
|
|
75
|
+
private flushVertices;
|
|
76
|
+
private flushIndices;
|
|
64
77
|
private batch;
|
|
65
78
|
/** Glyph quads copied in at the top of the glyph atlas, their indices made absolute in it. */
|
|
66
79
|
private copyGlyphs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlas.d.ts","sourceRoot":"","sources":["../../src/webgl/atlas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAgB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"atlas.d.ts","sourceRoot":"","sources":["../../src/webgl/atlas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAoElF,6FAA6F;AAC7F,MAAM,WAAW,KAAK;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3D,+CAA+C;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,+EAA+E;IAC/E,KAAK,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACrD;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,KAAK,SAAK;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,WAAW,EAAG,sBAAsB,CAAC;IACrC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;IAClB,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0D;IACvF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6C;IACzE,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,+DAA+D;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,MAAM,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAM;IAC9B,UAAU,EAAG,sBAAsB,CAAC;IACpC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAe;IACvC,sGAAsG;IACtG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAOrB;IAEF,YAAY,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAGrD;IAED,kGAAkG;IAClG,KAAK,IAAI,IAAI,CAgDZ;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAwFlC;IAED,6FAA6F;IAC7F,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAkCnC;IAED,0FAA0F;IAC1F,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CA8BzC;IAED,2EAA2E;IAC3E,OAAO,CAAC,MAAM;IAoDd,uGAAuG;IACvG,OAAO,CAAC,YAAY;IAuBpB,sEAAsE;IACtE,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,KAAK;IAMb,8FAA8F;IAC9F,OAAO,CAAC,UAAU;IA4BlB,kEAAkE;IAClE,OAAO,IAAI,IAAI,CAQd;CACF"}
|
package/dist/webgl/atlas.js
CHANGED
|
@@ -13,6 +13,42 @@ const GLYPHS_LEAST = 1024;
|
|
|
13
13
|
const LEAST = 1 << 16;
|
|
14
14
|
/** Holes past which, and past the live vertices, the atlas is packed again. */
|
|
15
15
|
const SLACK = 1 << 16;
|
|
16
|
+
/**
|
|
17
|
+
* The vertices, and the indices, staged before an upload: geometries placed
|
|
18
|
+
* one after another go to the GPU in one call for each buffer, not two a
|
|
19
|
+
* geometry, which shapes drawn anew each frame paid for some thousand times
|
|
20
|
+
* a frame. A geometry larger than the staging is uploaded from its own copy.
|
|
21
|
+
*/
|
|
22
|
+
const STAGED_VERTICES = 1 << 14;
|
|
23
|
+
const STAGED_INDICES = 1 << 16;
|
|
24
|
+
/**
|
|
25
|
+
* `data`'s `count` vertices interleaved into `floats` from float `at`, `words` the same bytes:
|
|
26
|
+
* a position, a texel or zeros, then the colour's bytes or a mesh's depth.
|
|
27
|
+
*/
|
|
28
|
+
function interleave(data, count, floats, words, at) {
|
|
29
|
+
const positions = data.positions;
|
|
30
|
+
const texels = data.texels;
|
|
31
|
+
const depths = data.depths;
|
|
32
|
+
const colors = data.colors;
|
|
33
|
+
for (let i = 0; i < count; i++, at += 5) {
|
|
34
|
+
floats[at] = positions[i * 2];
|
|
35
|
+
floats[at + 1] = positions[i * 2 + 1];
|
|
36
|
+
if (texels) {
|
|
37
|
+
floats[at + 2] = texels[i * 2];
|
|
38
|
+
floats[at + 3] = texels[i * 2 + 1];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
floats[at + 2] = 0;
|
|
42
|
+
floats[at + 3] = 0;
|
|
43
|
+
}
|
|
44
|
+
if (depths) {
|
|
45
|
+
floats[at + 4] = depths[i];
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
words[at + 4] = colors[i];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
16
52
|
/**
|
|
17
53
|
* The geometry atlas: every geometry copied once into a vertex and an index
|
|
18
54
|
* buffer, and advanced text's glyph quads into an atlas of their own, where
|
|
@@ -33,6 +69,15 @@ export class GeometryAtlas {
|
|
|
33
69
|
indexTop = 0;
|
|
34
70
|
live = 0;
|
|
35
71
|
holes = 0;
|
|
72
|
+
/** Vertices staged for the atlas from vertex `stagedVertexAt`, as floats and as words. */
|
|
73
|
+
stagedFloats = new Float32Array(STAGED_VERTICES * (VERTEX_BYTES / 4));
|
|
74
|
+
stagedWords = new Uint32Array(this.stagedFloats.buffer);
|
|
75
|
+
stagedVertexAt = 0;
|
|
76
|
+
stagedVertices = 0;
|
|
77
|
+
/** Indices staged for the atlas from index `stagedIndexAt`. */
|
|
78
|
+
stagedIndices = new Uint32Array(STAGED_INDICES);
|
|
79
|
+
stagedIndexAt = 0;
|
|
80
|
+
stagedIndexCount = 0;
|
|
36
81
|
places = [];
|
|
37
82
|
glyphArray;
|
|
38
83
|
glyphBuffer;
|
|
@@ -95,6 +140,8 @@ export class GeometryAtlas {
|
|
|
95
140
|
});
|
|
96
141
|
this.vertexCapacity = 0;
|
|
97
142
|
this.indexCapacity = 0;
|
|
143
|
+
this.stagedVertices = 0;
|
|
144
|
+
this.stagedIndexCount = 0;
|
|
98
145
|
this.places = [];
|
|
99
146
|
}
|
|
100
147
|
/**
|
|
@@ -118,6 +165,12 @@ export class GeometryAtlas {
|
|
|
118
165
|
}
|
|
119
166
|
}
|
|
120
167
|
geometries.removed.length = 0;
|
|
168
|
+
// Nothing left in it: filled again from its start, in the buffers it has.
|
|
169
|
+
if (this.live === 0) {
|
|
170
|
+
this.vertexTop = 0;
|
|
171
|
+
this.indexTop = 0;
|
|
172
|
+
this.holes = 0;
|
|
173
|
+
}
|
|
121
174
|
// Changed in place: copied again where they lie, else as added.
|
|
122
175
|
for (const id of geometries.updated) {
|
|
123
176
|
const place = this.places[id];
|
|
@@ -177,6 +230,7 @@ export class GeometryAtlas {
|
|
|
177
230
|
}
|
|
178
231
|
}
|
|
179
232
|
geometries.added.length = 0;
|
|
233
|
+
this.flush();
|
|
180
234
|
}
|
|
181
235
|
/** Every live shape's geometry copied into new buffers, with room for twice what is live. */
|
|
182
236
|
repack(geometries) {
|
|
@@ -197,6 +251,9 @@ export class GeometryAtlas {
|
|
|
197
251
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
198
252
|
gl.bufferData(gl.ARRAY_BUFFER, this.vertexCapacity * VERTEX_BYTES, gl.STATIC_DRAW);
|
|
199
253
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indexCapacity * 4, gl.STATIC_DRAW);
|
|
254
|
+
// What was staged for the buffers replaced is copied again below.
|
|
255
|
+
this.stagedVertices = 0;
|
|
256
|
+
this.stagedIndexCount = 0;
|
|
200
257
|
this.vertexTop = 0;
|
|
201
258
|
this.indexTop = 0;
|
|
202
259
|
this.live = 0;
|
|
@@ -207,6 +264,7 @@ export class GeometryAtlas {
|
|
|
207
264
|
this.copyIn(id, data);
|
|
208
265
|
}
|
|
209
266
|
}
|
|
267
|
+
this.flush();
|
|
210
268
|
}
|
|
211
269
|
/** Every live text's quads copied into new glyph buffers: none till a text needs them. */
|
|
212
270
|
repackGlyphs(geometries) {
|
|
@@ -245,52 +303,85 @@ export class GeometryAtlas {
|
|
|
245
303
|
this.copyGlyphs(id, data);
|
|
246
304
|
return;
|
|
247
305
|
}
|
|
248
|
-
const gl = this.gl;
|
|
249
306
|
const count = data.positions.length / 2;
|
|
250
307
|
const base = this.vertexTop;
|
|
251
308
|
this.copyVertices(data, base);
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
309
|
+
const source = data.indices;
|
|
310
|
+
const length = source.length;
|
|
311
|
+
if (length > STAGED_INDICES) {
|
|
312
|
+
const indices = new Uint32Array(length);
|
|
313
|
+
for (let i = 0; i < length; i++) {
|
|
314
|
+
indices[i] = source[i] + base;
|
|
315
|
+
}
|
|
316
|
+
this.flushIndices();
|
|
317
|
+
this.state.bindVertexArray(this.vertexArray);
|
|
318
|
+
this.gl.bufferSubData(this.gl.ELEMENT_ARRAY_BUFFER, this.indexTop * 4, indices);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
if (this.stagedIndexCount + length > STAGED_INDICES ||
|
|
322
|
+
this.stagedIndexAt + this.stagedIndexCount !== this.indexTop) {
|
|
323
|
+
this.flushIndices();
|
|
324
|
+
this.stagedIndexAt = this.indexTop;
|
|
325
|
+
}
|
|
326
|
+
const staged = this.stagedIndices;
|
|
327
|
+
const at = this.stagedIndexCount;
|
|
328
|
+
for (let i = 0; i < length; i++) {
|
|
329
|
+
staged[at + i] = source[i] + base;
|
|
330
|
+
}
|
|
331
|
+
this.stagedIndexCount = at + length;
|
|
255
332
|
}
|
|
256
|
-
this.state.bindVertexArray(this.vertexArray);
|
|
257
|
-
gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, this.indexTop * 4, indices);
|
|
258
333
|
this.places[id] = {
|
|
259
334
|
vertexStart: base,
|
|
260
335
|
vertices: count,
|
|
261
336
|
indexStart: this.indexTop,
|
|
262
|
-
indices:
|
|
337
|
+
indices: length,
|
|
263
338
|
glyphs: null,
|
|
264
339
|
flat: data.flat === true,
|
|
265
340
|
batch: this.batch(data),
|
|
266
341
|
};
|
|
267
342
|
this.vertexTop += count;
|
|
268
|
-
this.indexTop +=
|
|
343
|
+
this.indexTop += length;
|
|
269
344
|
this.live += count;
|
|
270
345
|
}
|
|
271
|
-
/** `data`'s vertices interleaved
|
|
346
|
+
/** `data`'s vertices interleaved for the atlas from vertex `base`: staged, or uploaded if too many. */
|
|
272
347
|
copyVertices(data, base) {
|
|
273
|
-
const gl = this.gl;
|
|
274
348
|
const count = data.positions.length / 2;
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
349
|
+
if (count > STAGED_VERTICES) {
|
|
350
|
+
const floats = new Float32Array(count * (VERTEX_BYTES / 4));
|
|
351
|
+
interleave(data, count, floats, new Uint32Array(floats.buffer), 0);
|
|
352
|
+
this.flushVertices();
|
|
353
|
+
this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
354
|
+
this.gl.bufferSubData(this.gl.ARRAY_BUFFER, base * VERTEX_BYTES, floats);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
if (this.stagedVertices + count > STAGED_VERTICES ||
|
|
358
|
+
this.stagedVertexAt + this.stagedVertices !== base) {
|
|
359
|
+
this.flushVertices();
|
|
360
|
+
this.stagedVertexAt = base;
|
|
361
|
+
}
|
|
362
|
+
interleave(data, count, this.stagedFloats, this.stagedWords, this.stagedVertices * 5);
|
|
363
|
+
this.stagedVertices += count;
|
|
364
|
+
}
|
|
365
|
+
/** What is staged, uploaded: before anything draws from the atlas. */
|
|
366
|
+
flush() {
|
|
367
|
+
this.flushVertices();
|
|
368
|
+
this.flushIndices();
|
|
369
|
+
}
|
|
370
|
+
flushVertices() {
|
|
371
|
+
if (this.stagedVertices > 0) {
|
|
372
|
+
const gl = this.gl;
|
|
373
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
374
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, this.stagedVertexAt * VERTEX_BYTES, this.stagedFloats, 0, this.stagedVertices * 5);
|
|
375
|
+
this.stagedVertices = 0;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
flushIndices() {
|
|
379
|
+
if (this.stagedIndexCount > 0) {
|
|
380
|
+
const gl = this.gl;
|
|
381
|
+
this.state.bindVertexArray(this.vertexArray);
|
|
382
|
+
gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, this.stagedIndexAt * 4, this.stagedIndices, 0, this.stagedIndexCount);
|
|
383
|
+
this.stagedIndexCount = 0;
|
|
291
384
|
}
|
|
292
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
293
|
-
gl.bufferSubData(gl.ARRAY_BUFFER, base * VERTEX_BYTES, floats);
|
|
294
385
|
}
|
|
295
386
|
batch(data) {
|
|
296
387
|
return data.positions.length <= 512 && data.indices.length <= 1024 && !data.depths
|
package/dist/webgl/atlas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../src/webgl/atlas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../src/webgl/atlas.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,EACR,OAAO,GACR,MAAM,eAAe,CAAC;AAEvB;;;GAGG;AACH,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,+EAA+E;AAC/E,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;AACrC,4EAA4E;AAC5E,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,iFAAiF;AACjF,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACtB,+EAA+E;AAC/E,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AACtB;;;;;GAKG;AACH,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,CAAC;AAChC,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC;AAE/B;;;GAGG;AACH,SAAS,UAAU,CACjB,IAAkB,EAClB,KAAa,EACb,MAAoB,EACpB,KAAkB,EAClB,EAAU;IAEV,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC;AAeD;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACxB,KAAK,GAAG,CAAC,CAAC;IACO,EAAE,CAAyB;IAC3B,KAAK,CAAU;IAChC,WAAW,CAA0B;IAC7B,YAAY,CAAe;IAC3B,WAAW,CAAe;IAC1B,cAAc,GAAG,CAAC,CAAC;IACnB,aAAa,GAAG,CAAC,CAAC;IAClB,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,CAAC,CAAC;IACT,KAAK,GAAG,CAAC,CAAC;IAClB,0FAA0F;IACzE,YAAY,GAAG,IAAI,YAAY,CAAC,eAAe,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACjE,cAAc,GAAG,CAAC,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC;IAC3B,+DAA+D;IAC9C,aAAa,GAAG,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC;IACzD,aAAa,GAAG,CAAC,CAAC;IAClB,gBAAgB,GAAG,CAAC,CAAC;IAC7B,MAAM,GAAqB,EAAE,CAAC;IAC9B,UAAU,CAA0B;IAC5B,WAAW,CAAe;IAC1B,gBAAgB,CAAe;IACvC,sGAAsG;IACrF,MAAM,GAAG;QACxB,QAAQ,EAAE,CAAC;QACX,GAAG,EAAE,CAAC;QACN,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;KACT,CAAC;IAEF,YAAY,EAA0B,EAAE,KAAc;QACpD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,kGAAkG;IAClG,KAAK;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,iBAAiB,EAA4B,CAAC;QACpE,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,EAAiB,CAAC;QACrD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,EAAiB,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,EAAE,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QACxC,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACzE,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACtE,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9E,yFAAyF;QACzF,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAA4B,CAAC;QACnE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,EAAiB,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,YAAY,EAAiB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9D,EAAE,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QACxC,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI;YACzB,CAAC,SAAS,EAAE,CAAC,CAAC;YACd,CAAC,QAAQ,EAAE,EAAE,CAAC;YACd,CAAC,MAAM,EAAE,EAAE,CAAC;YACZ,CAAC,OAAO,EAAE,EAAE,CAAC;SACd,EAAE,CAAC;YACF,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YAC/B,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;YACzB,QAAQ,EAAE,CAAC;YACX,GAAG,EAAE,CAAC;YACN,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAsB;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;YACtC,CAAC;iBAAM,IAAI,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC;gBAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,0EAA0E;QAC1E,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,gEAAgE;QAChE,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClF,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC3C,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;iBAAM,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACvB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC;oBACnC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC;oBAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;gBAC/B,CAAC;gBAED,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;gBAC5D,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAED,yFAAyF;QACzF,sCAAsC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,MAAM,GACV,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,cAAc;YAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,aAAa;YAC5C,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,KAAK,GACT,CAAC,CAAC,GAAG,GAAG,aAAa,GAAG,CAAC,CAAC,QAAQ;YAClC,CAAC,CAAC,QAAQ,GAAG,YAAY,GAAG,CAAC,CAAC,aAAa;YAC3C,CAAC,CAAC,CAAC,KAAK,GAAG,YAAY,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAChC,CAAC;QAED,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,6FAA6F;IAC7F,MAAM,CAAC,UAAsB;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAiB,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,GAAG,YAAY,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QACnF,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QAC/E,kEAAkE;QAClE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAiB,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,0FAA0F;IAC1F,YAAY,CAAC,UAAsB;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAiB,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;gBACvD,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAED,CAAC,CAAC,QAAQ,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,GAAG,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QACzE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,aAAa,GAAG,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;QAC5E,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACf,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACX,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAiB,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,2EAA2E;IACnE,MAAM,CAAC,EAAU,EAAE,IAAkB;QAC3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAChC,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,IACE,IAAI,CAAC,gBAAgB,GAAG,MAAM,GAAG,cAAc;gBAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,QAAQ,EAC5D,CAAC;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;YACrC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;YAChB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,IAAI,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SACxB,CAAC;QACF,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;IACrB,CAAC;IAED,uGAAuG;IAC/F,YAAY,CAAC,IAAkB,EAAE,IAAY;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,GAAG,YAAY,EAAE,MAAM,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,IACE,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,eAAe;YAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,EAClD,CAAC;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC;IAC/B,CAAC;IAED,sEAAsE;IAC9D,KAAK;QACX,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAClD,EAAE,CAAC,aAAa,CACd,EAAE,CAAC,YAAY,EACf,IAAI,CAAC,cAAc,GAAG,YAAY,EAClC,IAAI,CAAC,YAAY,EACjB,CAAC,EACD,IAAI,CAAC,cAAc,GAAG,CAAC,CACxB,CAAC;YACF,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7C,EAAE,CAAC,aAAa,CACd,EAAE,CAAC,oBAAoB,EACvB,IAAI,CAAC,aAAa,GAAG,CAAC,EACtB,IAAI,CAAC,aAAa,EAClB,CAAC,EACD,IAAI,CAAC,gBAAgB,CACtB,CAAC;YACF,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAkB;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAChF,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YAC7B,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,8FAA8F;IACtF,UAAU,CAAC,EAAU,EAAE,IAAkB;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAA6C,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,YAAY,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,GAAG,GAAG,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG;YAChB,WAAW,EAAE,CAAC,CAAC,GAAG;YAClB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,CAAC,CAAC,QAAQ;YACtB,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;YAClD,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;SACZ,CAAC;QACF,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC;QACf,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;QAC7B,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC;IAClB,CAAC;IAED,kEAAkE;IAClE,OAAO;QACL,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swf2es/render",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.19",
|
|
4
4
|
"description": "swf2es's own renderer: a scene list, a planner and a WebGL 2 backend (docs/renderer.md)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"swf",
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
"src"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@swf2es/context3d": "0.1.
|
|
36
|
+
"@swf2es/context3d": "0.1.19"
|
|
37
37
|
}
|
|
38
38
|
}
|
package/src/webgl/atlas.ts
CHANGED
|
@@ -24,6 +24,48 @@ const GLYPHS_LEAST = 1024;
|
|
|
24
24
|
const LEAST = 1 << 16;
|
|
25
25
|
/** Holes past which, and past the live vertices, the atlas is packed again. */
|
|
26
26
|
const SLACK = 1 << 16;
|
|
27
|
+
/**
|
|
28
|
+
* The vertices, and the indices, staged before an upload: geometries placed
|
|
29
|
+
* one after another go to the GPU in one call for each buffer, not two a
|
|
30
|
+
* geometry, which shapes drawn anew each frame paid for some thousand times
|
|
31
|
+
* a frame. A geometry larger than the staging is uploaded from its own copy.
|
|
32
|
+
*/
|
|
33
|
+
const STAGED_VERTICES = 1 << 14;
|
|
34
|
+
const STAGED_INDICES = 1 << 16;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* `data`'s `count` vertices interleaved into `floats` from float `at`, `words` the same bytes:
|
|
38
|
+
* a position, a texel or zeros, then the colour's bytes or a mesh's depth.
|
|
39
|
+
*/
|
|
40
|
+
function interleave(
|
|
41
|
+
data: GeometryData,
|
|
42
|
+
count: number,
|
|
43
|
+
floats: Float32Array,
|
|
44
|
+
words: Uint32Array,
|
|
45
|
+
at: number,
|
|
46
|
+
): void {
|
|
47
|
+
const positions = data.positions;
|
|
48
|
+
const texels = data.texels;
|
|
49
|
+
const depths = data.depths;
|
|
50
|
+
const colors = data.colors;
|
|
51
|
+
for (let i = 0; i < count; i++, at += 5) {
|
|
52
|
+
floats[at] = positions[i * 2];
|
|
53
|
+
floats[at + 1] = positions[i * 2 + 1];
|
|
54
|
+
if (texels) {
|
|
55
|
+
floats[at + 2] = texels[i * 2];
|
|
56
|
+
floats[at + 3] = texels[i * 2 + 1];
|
|
57
|
+
} else {
|
|
58
|
+
floats[at + 2] = 0;
|
|
59
|
+
floats[at + 3] = 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (depths) {
|
|
63
|
+
floats[at + 4] = depths[i];
|
|
64
|
+
} else {
|
|
65
|
+
words[at + 4] = colors[i];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
27
69
|
|
|
28
70
|
/** Where a geometry lies in the atlas, or the glyph atlas with its text's mode and table. */
|
|
29
71
|
export interface Place {
|
|
@@ -58,6 +100,15 @@ export class GeometryAtlas {
|
|
|
58
100
|
private indexTop = 0;
|
|
59
101
|
private live = 0;
|
|
60
102
|
private holes = 0;
|
|
103
|
+
/** Vertices staged for the atlas from vertex `stagedVertexAt`, as floats and as words. */
|
|
104
|
+
private readonly stagedFloats = new Float32Array(STAGED_VERTICES * (VERTEX_BYTES / 4));
|
|
105
|
+
private readonly stagedWords = new Uint32Array(this.stagedFloats.buffer);
|
|
106
|
+
private stagedVertexAt = 0;
|
|
107
|
+
private stagedVertices = 0;
|
|
108
|
+
/** Indices staged for the atlas from index `stagedIndexAt`. */
|
|
109
|
+
private readonly stagedIndices = new Uint32Array(STAGED_INDICES);
|
|
110
|
+
private stagedIndexAt = 0;
|
|
111
|
+
private stagedIndexCount = 0;
|
|
61
112
|
places: (Place | null)[] = [];
|
|
62
113
|
glyphArray!: WebGLVertexArrayObject;
|
|
63
114
|
private glyphBuffer!: WebGLBuffer;
|
|
@@ -123,6 +174,8 @@ export class GeometryAtlas {
|
|
|
123
174
|
});
|
|
124
175
|
this.vertexCapacity = 0;
|
|
125
176
|
this.indexCapacity = 0;
|
|
177
|
+
this.stagedVertices = 0;
|
|
178
|
+
this.stagedIndexCount = 0;
|
|
126
179
|
this.places = [];
|
|
127
180
|
}
|
|
128
181
|
|
|
@@ -147,6 +200,13 @@ export class GeometryAtlas {
|
|
|
147
200
|
}
|
|
148
201
|
|
|
149
202
|
geometries.removed.length = 0;
|
|
203
|
+
// Nothing left in it: filled again from its start, in the buffers it has.
|
|
204
|
+
if (this.live === 0) {
|
|
205
|
+
this.vertexTop = 0;
|
|
206
|
+
this.indexTop = 0;
|
|
207
|
+
this.holes = 0;
|
|
208
|
+
}
|
|
209
|
+
|
|
150
210
|
// Changed in place: copied again where they lie, else as added.
|
|
151
211
|
for (const id of geometries.updated) {
|
|
152
212
|
const place = this.places[id];
|
|
@@ -211,6 +271,7 @@ export class GeometryAtlas {
|
|
|
211
271
|
}
|
|
212
272
|
|
|
213
273
|
geometries.added.length = 0;
|
|
274
|
+
this.flush();
|
|
214
275
|
}
|
|
215
276
|
|
|
216
277
|
/** Every live shape's geometry copied into new buffers, with room for twice what is live. */
|
|
@@ -233,6 +294,9 @@ export class GeometryAtlas {
|
|
|
233
294
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
234
295
|
gl.bufferData(gl.ARRAY_BUFFER, this.vertexCapacity * VERTEX_BYTES, gl.STATIC_DRAW);
|
|
235
296
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indexCapacity * 4, gl.STATIC_DRAW);
|
|
297
|
+
// What was staged for the buffers replaced is copied again below.
|
|
298
|
+
this.stagedVertices = 0;
|
|
299
|
+
this.stagedIndexCount = 0;
|
|
236
300
|
this.vertexTop = 0;
|
|
237
301
|
this.indexTop = 0;
|
|
238
302
|
this.live = 0;
|
|
@@ -243,6 +307,8 @@ export class GeometryAtlas {
|
|
|
243
307
|
this.copyIn(id, data);
|
|
244
308
|
}
|
|
245
309
|
}
|
|
310
|
+
|
|
311
|
+
this.flush();
|
|
246
312
|
}
|
|
247
313
|
|
|
248
314
|
/** Every live text's quads copied into new glyph buffers: none till a text needs them. */
|
|
@@ -285,54 +351,110 @@ export class GeometryAtlas {
|
|
|
285
351
|
return;
|
|
286
352
|
}
|
|
287
353
|
|
|
288
|
-
const gl = this.gl;
|
|
289
354
|
const count = data.positions.length / 2;
|
|
290
355
|
const base = this.vertexTop;
|
|
291
356
|
this.copyVertices(data, base);
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
357
|
+
const source = data.indices;
|
|
358
|
+
const length = source.length;
|
|
359
|
+
if (length > STAGED_INDICES) {
|
|
360
|
+
const indices = new Uint32Array(length);
|
|
361
|
+
for (let i = 0; i < length; i++) {
|
|
362
|
+
indices[i] = source[i] + base;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
this.flushIndices();
|
|
366
|
+
this.state.bindVertexArray(this.vertexArray);
|
|
367
|
+
this.gl.bufferSubData(this.gl.ELEMENT_ARRAY_BUFFER, this.indexTop * 4, indices);
|
|
368
|
+
} else {
|
|
369
|
+
if (
|
|
370
|
+
this.stagedIndexCount + length > STAGED_INDICES ||
|
|
371
|
+
this.stagedIndexAt + this.stagedIndexCount !== this.indexTop
|
|
372
|
+
) {
|
|
373
|
+
this.flushIndices();
|
|
374
|
+
this.stagedIndexAt = this.indexTop;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
const staged = this.stagedIndices;
|
|
378
|
+
const at = this.stagedIndexCount;
|
|
379
|
+
for (let i = 0; i < length; i++) {
|
|
380
|
+
staged[at + i] = source[i] + base;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
this.stagedIndexCount = at + length;
|
|
295
384
|
}
|
|
296
385
|
|
|
297
|
-
this.state.bindVertexArray(this.vertexArray);
|
|
298
|
-
gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, this.indexTop * 4, indices);
|
|
299
386
|
this.places[id] = {
|
|
300
387
|
vertexStart: base,
|
|
301
388
|
vertices: count,
|
|
302
389
|
indexStart: this.indexTop,
|
|
303
|
-
indices:
|
|
390
|
+
indices: length,
|
|
304
391
|
glyphs: null,
|
|
305
392
|
flat: data.flat === true,
|
|
306
393
|
batch: this.batch(data),
|
|
307
394
|
};
|
|
308
395
|
this.vertexTop += count;
|
|
309
|
-
this.indexTop +=
|
|
396
|
+
this.indexTop += length;
|
|
310
397
|
this.live += count;
|
|
311
398
|
}
|
|
312
399
|
|
|
313
|
-
/** `data`'s vertices interleaved
|
|
400
|
+
/** `data`'s vertices interleaved for the atlas from vertex `base`: staged, or uploaded if too many. */
|
|
314
401
|
private copyVertices(data: GeometryData, base: number): void {
|
|
315
|
-
const gl = this.gl;
|
|
316
402
|
const count = data.positions.length / 2;
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
floats[i * 5 + 1] = data.positions[i * 2 + 1];
|
|
325
|
-
floats[i * 5 + 2] = texels ? texels[i * 2] : 0;
|
|
326
|
-
floats[i * 5 + 3] = texels ? texels[i * 2 + 1] : 0;
|
|
327
|
-
if (depths) {
|
|
328
|
-
floats[i * 5 + 4] = depths[i];
|
|
329
|
-
} else {
|
|
330
|
-
words[i * 5 + 4] = data.colors[i];
|
|
331
|
-
}
|
|
403
|
+
if (count > STAGED_VERTICES) {
|
|
404
|
+
const floats = new Float32Array(count * (VERTEX_BYTES / 4));
|
|
405
|
+
interleave(data, count, floats, new Uint32Array(floats.buffer), 0);
|
|
406
|
+
this.flushVertices();
|
|
407
|
+
this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
408
|
+
this.gl.bufferSubData(this.gl.ARRAY_BUFFER, base * VERTEX_BYTES, floats);
|
|
409
|
+
return;
|
|
332
410
|
}
|
|
333
411
|
|
|
334
|
-
|
|
335
|
-
|
|
412
|
+
if (
|
|
413
|
+
this.stagedVertices + count > STAGED_VERTICES ||
|
|
414
|
+
this.stagedVertexAt + this.stagedVertices !== base
|
|
415
|
+
) {
|
|
416
|
+
this.flushVertices();
|
|
417
|
+
this.stagedVertexAt = base;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
interleave(data, count, this.stagedFloats, this.stagedWords, this.stagedVertices * 5);
|
|
421
|
+
this.stagedVertices += count;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/** What is staged, uploaded: before anything draws from the atlas. */
|
|
425
|
+
private flush(): void {
|
|
426
|
+
this.flushVertices();
|
|
427
|
+
this.flushIndices();
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
private flushVertices(): void {
|
|
431
|
+
if (this.stagedVertices > 0) {
|
|
432
|
+
const gl = this.gl;
|
|
433
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
434
|
+
gl.bufferSubData(
|
|
435
|
+
gl.ARRAY_BUFFER,
|
|
436
|
+
this.stagedVertexAt * VERTEX_BYTES,
|
|
437
|
+
this.stagedFloats,
|
|
438
|
+
0,
|
|
439
|
+
this.stagedVertices * 5,
|
|
440
|
+
);
|
|
441
|
+
this.stagedVertices = 0;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
private flushIndices(): void {
|
|
446
|
+
if (this.stagedIndexCount > 0) {
|
|
447
|
+
const gl = this.gl;
|
|
448
|
+
this.state.bindVertexArray(this.vertexArray);
|
|
449
|
+
gl.bufferSubData(
|
|
450
|
+
gl.ELEMENT_ARRAY_BUFFER,
|
|
451
|
+
this.stagedIndexAt * 4,
|
|
452
|
+
this.stagedIndices,
|
|
453
|
+
0,
|
|
454
|
+
this.stagedIndexCount,
|
|
455
|
+
);
|
|
456
|
+
this.stagedIndexCount = 0;
|
|
457
|
+
}
|
|
336
458
|
}
|
|
337
459
|
|
|
338
460
|
private batch(data: GeometryData): Place["batch"] {
|