@swf2es/native 0.1.18 → 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.
- package/README.md +24 -2
- package/dist/atf/binary.js +1 -1
- package/dist/audio/binary.js +1 -1
- package/dist/compress/binary.js +1 -1
- package/dist/mp3/binary.js +1 -1
- package/dist/render/binary.d.ts +1 -1
- package/dist/render/binary.d.ts.map +1 -1
- package/dist/render/binary.js +2 -2
- package/dist/render/binary.js.map +1 -1
- package/dist/render/bitmap-kernel.d.ts +10 -0
- package/dist/render/bitmap-kernel.d.ts.map +1 -1
- package/dist/render/bitmap-kernel.js +18 -1
- package/dist/render/bitmap-kernel.js.map +1 -1
- package/dist/render/index.d.ts +1 -1
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +1 -1
- package/dist/render/index.js.map +1 -1
- package/dist/render/pixel-ops.d.ts +14 -0
- package/dist/render/pixel-ops.d.ts.map +1 -1
- package/dist/render/pixel-ops.js +33 -0
- package/dist/render/pixel-ops.js.map +1 -1
- package/dist/render/tessellator.d.ts +26 -2
- package/dist/render/tessellator.d.ts.map +1 -1
- package/dist/render/tessellator.js +82 -30
- package/dist/render/tessellator.js.map +1 -1
- package/package.json +1 -1
- package/src/render/bitmap-kernel.ts +20 -0
- package/src/render/index.ts +4 -0
- package/src/render/pixel-ops.ts +49 -0
- package/src/render/tessellator.ts +96 -31
|
@@ -26,6 +26,17 @@ const RANGE = 5;
|
|
|
26
26
|
*/
|
|
27
27
|
export class Tessellator {
|
|
28
28
|
instance = null;
|
|
29
|
+
/**
|
|
30
|
+
* The instance's whole memory as each kind a layer reads and writes, made again once growth
|
|
31
|
+
* detaches them (their length 0) or the instance is another: a view made for each array of each
|
|
32
|
+
* call cost a drawing made again every frame as much as the copies.
|
|
33
|
+
*/
|
|
34
|
+
f64 = new Float64Array(0);
|
|
35
|
+
i32 = new Int32Array(0);
|
|
36
|
+
u32 = new Uint32Array(0);
|
|
37
|
+
u16 = new Uint16Array(0);
|
|
38
|
+
u8 = new Uint8Array(0);
|
|
39
|
+
viewed = null;
|
|
29
40
|
limit;
|
|
30
41
|
keep;
|
|
31
42
|
bands;
|
|
@@ -58,7 +69,7 @@ export class Tessellator {
|
|
|
58
69
|
return (this.instance?.memory.buffer.byteLength ?? 0) + this.lines.capacity;
|
|
59
70
|
}
|
|
60
71
|
dispose() {
|
|
61
|
-
this.
|
|
72
|
+
this.release();
|
|
62
73
|
this.lines.dispose();
|
|
63
74
|
}
|
|
64
75
|
/** The instance, made on first use, its arena reset; filling by the bands alone where `bands`. */
|
|
@@ -72,16 +83,38 @@ export class Tessellator {
|
|
|
72
83
|
x.bandsOnly(Number(bands));
|
|
73
84
|
return x;
|
|
74
85
|
}
|
|
86
|
+
/** `x`'s memory viewed as it is now (f64 and the rest). */
|
|
87
|
+
view(x) {
|
|
88
|
+
if (this.viewed !== x || this.u8.length === 0) {
|
|
89
|
+
const buffer = x.memory.buffer;
|
|
90
|
+
this.f64 = new Float64Array(buffer, 0, buffer.byteLength >> 3);
|
|
91
|
+
this.i32 = new Int32Array(buffer);
|
|
92
|
+
this.u32 = new Uint32Array(buffer);
|
|
93
|
+
this.u16 = new Uint16Array(buffer);
|
|
94
|
+
this.u8 = new Uint8Array(buffer);
|
|
95
|
+
this.viewed = x;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
75
98
|
/** A call that threw: a trapped instance is never used again. */
|
|
76
99
|
failed() {
|
|
77
100
|
// In particular, longjmp unwinds through a throwing import: never resume that C instance. The
|
|
78
101
|
// line builder's instance is its own.
|
|
102
|
+
this.release();
|
|
103
|
+
}
|
|
104
|
+
/** The instance let go of, and the views that would keep its memory. */
|
|
105
|
+
release() {
|
|
79
106
|
this.instance = null;
|
|
107
|
+
this.viewed = null;
|
|
108
|
+
this.f64 = new Float64Array(0);
|
|
109
|
+
this.i32 = new Int32Array(0);
|
|
110
|
+
this.u32 = new Uint32Array(0);
|
|
111
|
+
this.u16 = new Uint16Array(0);
|
|
112
|
+
this.u8 = new Uint8Array(0);
|
|
80
113
|
}
|
|
81
114
|
/** An instance grown past what is kept, let go. */
|
|
82
115
|
trim() {
|
|
83
116
|
if ((this.instance?.memory.buffer.byteLength ?? 0) > this.keep) {
|
|
84
|
-
this.
|
|
117
|
+
this.release();
|
|
85
118
|
}
|
|
86
119
|
}
|
|
87
120
|
/** One fill. The module checks the coordinates; only the arrays' lengths are looked at here. */
|
|
@@ -138,23 +171,19 @@ export class Tessellator {
|
|
|
138
171
|
}
|
|
139
172
|
}
|
|
140
173
|
/** Each fill flattened and tessellated, as `fill` would make its polygons, in one call and one copy out. */
|
|
141
|
-
layer = (fills, nonZero) => this.layerBy(fills, nonZero, this.bands);
|
|
174
|
+
layer = (fills, nonZero, borrowed = false) => this.layerBy(fills, nonZero, this.bands, borrowed);
|
|
142
175
|
/** The layer, by the bands alone where `bands`; again so in a new instance where libtess2 trapped. */
|
|
143
|
-
layerBy(fills, nonZero, bands) {
|
|
176
|
+
layerBy(fills, nonZero, bands, borrowed = false) {
|
|
144
177
|
let length = 0;
|
|
145
178
|
let contours = 0;
|
|
146
|
-
const rules = new Uint8Array(fills.length);
|
|
147
179
|
for (let i = 0; i < fills.length; i++) {
|
|
148
180
|
const fill = fills[i];
|
|
149
|
-
if (fill.length
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
length += fill[j].length;
|
|
181
|
+
if (fill.length <= MOST_CONTOURS) {
|
|
182
|
+
for (let j = 0; j < fill.length; j++) {
|
|
183
|
+
length += fill[j].length;
|
|
184
|
+
}
|
|
185
|
+
contours += fill.length;
|
|
155
186
|
}
|
|
156
|
-
rules[i] = Number(nonZero[i]);
|
|
157
|
-
contours += fill.length;
|
|
158
187
|
}
|
|
159
188
|
let ranges;
|
|
160
189
|
let vertices;
|
|
@@ -169,22 +198,27 @@ export class Tessellator {
|
|
|
169
198
|
const endsAt = commandAt + length * 8;
|
|
170
199
|
const fillsAt = endsAt + contours * 4;
|
|
171
200
|
const rulesAt = fillsAt + fills.length * 4;
|
|
172
|
-
|
|
173
|
-
const
|
|
174
|
-
const
|
|
175
|
-
|
|
201
|
+
this.view(x);
|
|
202
|
+
const commands = this.f64;
|
|
203
|
+
const ends = this.u32;
|
|
204
|
+
const rules = this.u8;
|
|
205
|
+
const command = commandAt >> 3;
|
|
176
206
|
let at = 0;
|
|
177
207
|
let contour = 0;
|
|
178
208
|
for (let i = 0; i < fills.length; i++) {
|
|
179
|
-
|
|
180
|
-
|
|
209
|
+
const fill = fills[i];
|
|
210
|
+
if (fill.length <= MOST_CONTOURS) {
|
|
181
211
|
for (let j = 0; j < fill.length; j++) {
|
|
182
|
-
commands.set(fill[j], at);
|
|
212
|
+
commands.set(fill[j], command + at);
|
|
183
213
|
at += fill[j].length;
|
|
184
|
-
ends[contour++] = at;
|
|
214
|
+
ends[(endsAt >> 2) + contour++] = at;
|
|
185
215
|
}
|
|
216
|
+
rules[rulesAt + i] = Number(nonZero[i]);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
rules[rulesAt + i] = REJECTED;
|
|
186
220
|
}
|
|
187
|
-
|
|
221
|
+
ends[(fillsAt >> 2) + i] = contour;
|
|
188
222
|
}
|
|
189
223
|
const head = x.layer(commandAt, length, endsAt, contours, fillsAt, rulesAt, fills.length);
|
|
190
224
|
if (head === 0) {
|
|
@@ -194,13 +228,31 @@ export class Tessellator {
|
|
|
194
228
|
: fills.map((fill, i) => this.alone(fill, nonZero[i], bands));
|
|
195
229
|
}
|
|
196
230
|
// The one copy out, its ranges read before a retry resets the arena.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
231
|
+
this.view(x);
|
|
232
|
+
const count = LAYER + fills.length * RANGE;
|
|
233
|
+
ranges = this.i32.subarray(head >> 2, (head >> 2) + count);
|
|
234
|
+
// A fill that ran out is tried alone, which resets the arena under what is borrowed.
|
|
235
|
+
let lent = borrowed;
|
|
236
|
+
for (let i = 0; lent && i < fills.length; i++) {
|
|
237
|
+
lent = ranges[LAYER + i * RANGE] !== -1;
|
|
238
|
+
}
|
|
239
|
+
const vertexAt = ranges[0] >> 3;
|
|
240
|
+
const indexAt = ranges[1];
|
|
241
|
+
if (lent) {
|
|
242
|
+
vertices = this.f64.subarray(vertexAt, vertexAt + ranges[2] * 2);
|
|
243
|
+
indices =
|
|
244
|
+
ranges[4] === 2
|
|
245
|
+
? this.u16.subarray(indexAt >> 1, (indexAt >> 1) + ranges[3])
|
|
246
|
+
: this.u32.subarray(indexAt >> 2, (indexAt >> 2) + ranges[3]);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
ranges = ranges.slice();
|
|
250
|
+
vertices = this.f64.slice(vertexAt, vertexAt + ranges[2] * 2);
|
|
251
|
+
indices =
|
|
252
|
+
ranges[4] === 2
|
|
253
|
+
? this.u16.slice(indexAt >> 1, (indexAt >> 1) + ranges[3])
|
|
254
|
+
: this.u32.slice(indexAt >> 2, (indexAt >> 2) + ranges[3]);
|
|
255
|
+
}
|
|
204
256
|
}
|
|
205
257
|
catch {
|
|
206
258
|
this.failed();
|
|
@@ -210,7 +262,7 @@ export class Tessellator {
|
|
|
210
262
|
// libtess2 trapped: each fill in a fresh instance, and one that traps alone again by the
|
|
211
263
|
// bands, which never trap.
|
|
212
264
|
return fills.length === 1
|
|
213
|
-
? this.layerBy(fills, nonZero, true)
|
|
265
|
+
? this.layerBy(fills, nonZero, true, borrowed)
|
|
214
266
|
: fills.map((fill, i) => this.alone(fill, nonZero[i], false));
|
|
215
267
|
}
|
|
216
268
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tessellator.js","sourceRoot":"","sources":["../../src/render/tessellator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tessellator.js","sourceRoot":"","sources":["../../src/render/tessellator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -9,9 +9,11 @@ import {
|
|
|
9
9
|
type Progress,
|
|
10
10
|
perlinRows,
|
|
11
11
|
transformRows,
|
|
12
|
+
wordRuns,
|
|
12
13
|
} from "./pixel-ops.js";
|
|
13
14
|
|
|
14
15
|
export type { CopyOp, PerlinSetup, PixelRegion } from "./pixel-ops.js";
|
|
16
|
+
export { WORDS_PLAIN, WORDS_PREMULTIPLY, WORDS_SOLID, WORDS_UNMULTIPLY } from "./pixel-ops.js";
|
|
15
17
|
|
|
16
18
|
export interface BitmapSource {
|
|
17
19
|
width: number;
|
|
@@ -805,6 +807,24 @@ export class BitmapKernel {
|
|
|
805
807
|
);
|
|
806
808
|
}
|
|
807
809
|
|
|
810
|
+
/**
|
|
811
|
+
* The words of `from`, four bytes each, made into `into`, as long and
|
|
812
|
+
* maybe the same, the pixels of values or the values of pixels (`kind`,
|
|
813
|
+
* one of WORDS_*), reversed where `swap` (pixel-ops.ts): setPixels',
|
|
814
|
+
* setVector's, getPixels' and getVector's runs. How many bytes were
|
|
815
|
+
* made, from the first: all of them, or fewer where the module refused
|
|
816
|
+
* the rest, which are as they were.
|
|
817
|
+
*/
|
|
818
|
+
words(into: Uint8Array, from: Uint8Array, kind: number, swap: boolean): number {
|
|
819
|
+
if (from.length % 4 !== 0 || into.length !== from.length) {
|
|
820
|
+
return 0;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
const progress: Progress = { row: 0, state: 0 };
|
|
824
|
+
this.call((wasm) => (wordRuns(wasm, into, from, kind, swap, progress) ? true : null), true);
|
|
825
|
+
return Math.min(progress.row, from.length);
|
|
826
|
+
}
|
|
827
|
+
|
|
808
828
|
/** perlinNoise over every pixel of a `width`-wide store: false where the module refused it. */
|
|
809
829
|
perlin(pixels: Uint32Array, width: number, setup: PerlinSetup): boolean {
|
|
810
830
|
if (!(width > 0) || pixels.length % width !== 0 || pixels.length === 0) {
|
package/src/render/index.ts
CHANGED
package/src/render/pixel-ops.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface PixelExports {
|
|
|
20
20
|
transformPixels(params: number): number;
|
|
21
21
|
noisePixels(params: number): number;
|
|
22
22
|
perlinPixels(params: number): number;
|
|
23
|
+
wordsPixels(params: number): number;
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
/** The rows of a band's work: about this much of the pixels it copies in. */
|
|
@@ -290,6 +291,54 @@ export function noiseRows(
|
|
|
290
291
|
return true;
|
|
291
292
|
}
|
|
292
293
|
|
|
294
|
+
/** What `wordRuns` makes of each word: pixels.zig's WordKind. */
|
|
295
|
+
export const WORDS_SOLID = 0;
|
|
296
|
+
export const WORDS_PREMULTIPLY = 1;
|
|
297
|
+
export const WORDS_UNMULTIPLY = 2;
|
|
298
|
+
export const WORDS_PLAIN = 3;
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* The words of `from`, four bytes each in the module's order, made the
|
|
302
|
+
* pixels of values or the values of pixels (`kind`) into `into`, as long,
|
|
303
|
+
* which may be `from`: bytes reversed, where `swap`, as the values' order
|
|
304
|
+
* asks. Band by band, which nothing but their size bounds: a word is made
|
|
305
|
+
* of itself alone. False where the module refused a band.
|
|
306
|
+
*/
|
|
307
|
+
export function wordRuns(
|
|
308
|
+
wasm: PixelExports,
|
|
309
|
+
into: Uint8Array,
|
|
310
|
+
from: Uint8Array,
|
|
311
|
+
kind: number,
|
|
312
|
+
swap: boolean,
|
|
313
|
+
progress: Progress,
|
|
314
|
+
): boolean {
|
|
315
|
+
for (; progress.row < from.length; progress.row += BAND_BYTES) {
|
|
316
|
+
const bytes = Math.min(BAND_BYTES, from.length - progress.row);
|
|
317
|
+
const at = wasm.resetArena(HEAD + bytes);
|
|
318
|
+
if (!at) {
|
|
319
|
+
return false;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
const block = at + HEAD;
|
|
323
|
+
new Uint8Array(wasm.memory.buffer).set(
|
|
324
|
+
from.subarray(progress.row, progress.row + bytes),
|
|
325
|
+
block,
|
|
326
|
+
);
|
|
327
|
+
const params = new DataView(wasm.memory.buffer, at, HEAD);
|
|
328
|
+
params.setUint32(0, bytes >> 2, true);
|
|
329
|
+
params.setUint32(4, block, true);
|
|
330
|
+
params.setUint32(8, kind, true);
|
|
331
|
+
params.setUint32(12, Number(swap), true);
|
|
332
|
+
if (!wasm.wordsPixels(at)) {
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
into.set(new Uint8Array(wasm.memory.buffer, block, bytes), progress.row);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
return true;
|
|
340
|
+
}
|
|
341
|
+
|
|
293
342
|
/** perlinNoise's set-up, as turbulence.ts makes it of the seed and the call's arguments. */
|
|
294
343
|
export interface PerlinSetup {
|
|
295
344
|
lattice: Int32Array;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { LineBuilder } from "./lines.js";
|
|
2
2
|
import { renderInstance, renderModule } from "./module.js";
|
|
3
3
|
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Buffers are owned by the caller; subsequent calls and disposal cannot change them, but for a
|
|
6
|
+
* layer asked for `borrowed` (FillTessellate.layer).
|
|
7
|
+
*/
|
|
5
8
|
export interface FillGeometry {
|
|
6
9
|
vertices: Float64Array;
|
|
7
10
|
indices: Uint16Array | Uint32Array;
|
|
@@ -21,10 +24,17 @@ export interface FillTessellate {
|
|
|
21
24
|
* flattens itself: each fill's geometry, or null for one it refused, all
|
|
22
25
|
* fills' positions and indices in one buffer each. Its output needs no checking: the module has checked
|
|
23
26
|
* every coordinate finite and every index in range.
|
|
27
|
+
*
|
|
28
|
+
* Where `borrowed`, the geometries may be views of the module's memory,
|
|
29
|
+
* which the tessellator's next call of any kind overwrites: for a caller
|
|
30
|
+
* that reads them at once, as the player does for a drawing made again
|
|
31
|
+
* every frame, which the two buffers a layer otherwise takes cost more
|
|
32
|
+
* than the copy does.
|
|
24
33
|
*/
|
|
25
34
|
layer(
|
|
26
35
|
fills: readonly (readonly (readonly number[])[])[],
|
|
27
36
|
nonZero: readonly boolean[],
|
|
37
|
+
borrowed?: boolean,
|
|
28
38
|
): (FillGeometry | null)[] | null;
|
|
29
39
|
/** A layer's lines in one call, their outlines filled by the same libtess2 (LineBuilder). */
|
|
30
40
|
lines: LineBuilder;
|
|
@@ -94,6 +104,17 @@ const RANGE = 5;
|
|
|
94
104
|
*/
|
|
95
105
|
export class Tessellator {
|
|
96
106
|
private instance: NativeExports | null = null;
|
|
107
|
+
/**
|
|
108
|
+
* The instance's whole memory as each kind a layer reads and writes, made again once growth
|
|
109
|
+
* detaches them (their length 0) or the instance is another: a view made for each array of each
|
|
110
|
+
* call cost a drawing made again every frame as much as the copies.
|
|
111
|
+
*/
|
|
112
|
+
private f64 = new Float64Array(0);
|
|
113
|
+
private i32 = new Int32Array(0);
|
|
114
|
+
private u32 = new Uint32Array(0);
|
|
115
|
+
private u16 = new Uint16Array(0);
|
|
116
|
+
private u8 = new Uint8Array(0);
|
|
117
|
+
private viewed: NativeExports | null = null;
|
|
97
118
|
private readonly limit: number;
|
|
98
119
|
private readonly keep: number;
|
|
99
120
|
private readonly bands: boolean;
|
|
@@ -132,7 +153,7 @@ export class Tessellator {
|
|
|
132
153
|
}
|
|
133
154
|
|
|
134
155
|
dispose(): void {
|
|
135
|
-
this.
|
|
156
|
+
this.release();
|
|
136
157
|
this.lines.dispose();
|
|
137
158
|
}
|
|
138
159
|
|
|
@@ -148,17 +169,41 @@ export class Tessellator {
|
|
|
148
169
|
return x;
|
|
149
170
|
}
|
|
150
171
|
|
|
172
|
+
/** `x`'s memory viewed as it is now (f64 and the rest). */
|
|
173
|
+
private view(x: NativeExports): void {
|
|
174
|
+
if (this.viewed !== x || this.u8.length === 0) {
|
|
175
|
+
const buffer = x.memory.buffer;
|
|
176
|
+
this.f64 = new Float64Array(buffer, 0, buffer.byteLength >> 3);
|
|
177
|
+
this.i32 = new Int32Array(buffer);
|
|
178
|
+
this.u32 = new Uint32Array(buffer);
|
|
179
|
+
this.u16 = new Uint16Array(buffer);
|
|
180
|
+
this.u8 = new Uint8Array(buffer);
|
|
181
|
+
this.viewed = x;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
151
185
|
/** A call that threw: a trapped instance is never used again. */
|
|
152
186
|
private failed(): void {
|
|
153
187
|
// In particular, longjmp unwinds through a throwing import: never resume that C instance. The
|
|
154
188
|
// line builder's instance is its own.
|
|
189
|
+
this.release();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** The instance let go of, and the views that would keep its memory. */
|
|
193
|
+
private release(): void {
|
|
155
194
|
this.instance = null;
|
|
195
|
+
this.viewed = null;
|
|
196
|
+
this.f64 = new Float64Array(0);
|
|
197
|
+
this.i32 = new Int32Array(0);
|
|
198
|
+
this.u32 = new Uint32Array(0);
|
|
199
|
+
this.u16 = new Uint16Array(0);
|
|
200
|
+
this.u8 = new Uint8Array(0);
|
|
156
201
|
}
|
|
157
202
|
|
|
158
203
|
/** An instance grown past what is kept, let go. */
|
|
159
204
|
private trim(): void {
|
|
160
205
|
if ((this.instance?.memory.buffer.byteLength ?? 0) > this.keep) {
|
|
161
|
-
this.
|
|
206
|
+
this.release();
|
|
162
207
|
}
|
|
163
208
|
}
|
|
164
209
|
|
|
@@ -236,30 +281,27 @@ export class Tessellator {
|
|
|
236
281
|
private readonly layer = (
|
|
237
282
|
fills: readonly (readonly (readonly number[])[])[],
|
|
238
283
|
nonZero: readonly boolean[],
|
|
239
|
-
|
|
284
|
+
borrowed = false,
|
|
285
|
+
): (FillGeometry | null)[] | null => this.layerBy(fills, nonZero, this.bands, borrowed);
|
|
240
286
|
|
|
241
287
|
/** The layer, by the bands alone where `bands`; again so in a new instance where libtess2 trapped. */
|
|
242
288
|
private layerBy(
|
|
243
289
|
fills: readonly (readonly (readonly number[])[])[],
|
|
244
290
|
nonZero: readonly boolean[],
|
|
245
291
|
bands: boolean,
|
|
292
|
+
borrowed = false,
|
|
246
293
|
): (FillGeometry | null)[] | null {
|
|
247
294
|
let length = 0;
|
|
248
295
|
let contours = 0;
|
|
249
|
-
const rules = new Uint8Array(fills.length);
|
|
250
296
|
for (let i = 0; i < fills.length; i++) {
|
|
251
297
|
const fill = fills[i];
|
|
252
|
-
if (fill.length
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
298
|
+
if (fill.length <= MOST_CONTOURS) {
|
|
299
|
+
for (let j = 0; j < fill.length; j++) {
|
|
300
|
+
length += fill[j].length;
|
|
301
|
+
}
|
|
256
302
|
|
|
257
|
-
|
|
258
|
-
length += fill[j].length;
|
|
303
|
+
contours += fill.length;
|
|
259
304
|
}
|
|
260
|
-
|
|
261
|
-
rules[i] = Number(nonZero[i]);
|
|
262
|
-
contours += fill.length;
|
|
263
305
|
}
|
|
264
306
|
|
|
265
307
|
let ranges: Int32Array;
|
|
@@ -277,23 +319,28 @@ export class Tessellator {
|
|
|
277
319
|
const fillsAt = endsAt + contours * 4;
|
|
278
320
|
const rulesAt = fillsAt + fills.length * 4;
|
|
279
321
|
|
|
280
|
-
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
|
|
322
|
+
this.view(x);
|
|
323
|
+
const commands = this.f64;
|
|
324
|
+
const ends = this.u32;
|
|
325
|
+
const rules = this.u8;
|
|
326
|
+
const command = commandAt >> 3;
|
|
284
327
|
let at = 0;
|
|
285
328
|
let contour = 0;
|
|
286
329
|
for (let i = 0; i < fills.length; i++) {
|
|
287
|
-
|
|
288
|
-
|
|
330
|
+
const fill = fills[i];
|
|
331
|
+
if (fill.length <= MOST_CONTOURS) {
|
|
289
332
|
for (let j = 0; j < fill.length; j++) {
|
|
290
|
-
commands.set(fill[j], at);
|
|
333
|
+
commands.set(fill[j], command + at);
|
|
291
334
|
at += fill[j].length;
|
|
292
|
-
ends[contour++] = at;
|
|
335
|
+
ends[(endsAt >> 2) + contour++] = at;
|
|
293
336
|
}
|
|
337
|
+
|
|
338
|
+
rules[rulesAt + i] = Number(nonZero[i]);
|
|
339
|
+
} else {
|
|
340
|
+
rules[rulesAt + i] = REJECTED;
|
|
294
341
|
}
|
|
295
342
|
|
|
296
|
-
|
|
343
|
+
ends[(fillsAt >> 2) + i] = contour;
|
|
297
344
|
}
|
|
298
345
|
|
|
299
346
|
const head = x.layer(commandAt, length, endsAt, contours, fillsAt, rulesAt, fills.length);
|
|
@@ -305,13 +352,31 @@ export class Tessellator {
|
|
|
305
352
|
}
|
|
306
353
|
|
|
307
354
|
// The one copy out, its ranges read before a retry resets the arena.
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
355
|
+
this.view(x);
|
|
356
|
+
const count = LAYER + fills.length * RANGE;
|
|
357
|
+
ranges = this.i32.subarray(head >> 2, (head >> 2) + count);
|
|
358
|
+
// A fill that ran out is tried alone, which resets the arena under what is borrowed.
|
|
359
|
+
let lent = borrowed;
|
|
360
|
+
for (let i = 0; lent && i < fills.length; i++) {
|
|
361
|
+
lent = ranges[LAYER + i * RANGE] !== -1;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const vertexAt = ranges[0] >> 3;
|
|
365
|
+
const indexAt = ranges[1];
|
|
366
|
+
if (lent) {
|
|
367
|
+
vertices = this.f64.subarray(vertexAt, vertexAt + ranges[2] * 2);
|
|
368
|
+
indices =
|
|
369
|
+
ranges[4] === 2
|
|
370
|
+
? this.u16.subarray(indexAt >> 1, (indexAt >> 1) + ranges[3])
|
|
371
|
+
: this.u32.subarray(indexAt >> 2, (indexAt >> 2) + ranges[3]);
|
|
372
|
+
} else {
|
|
373
|
+
ranges = ranges.slice();
|
|
374
|
+
vertices = this.f64.slice(vertexAt, vertexAt + ranges[2] * 2);
|
|
375
|
+
indices =
|
|
376
|
+
ranges[4] === 2
|
|
377
|
+
? this.u16.slice(indexAt >> 1, (indexAt >> 1) + ranges[3])
|
|
378
|
+
: this.u32.slice(indexAt >> 2, (indexAt >> 2) + ranges[3]);
|
|
379
|
+
}
|
|
315
380
|
} catch {
|
|
316
381
|
this.failed();
|
|
317
382
|
if (bands) {
|
|
@@ -321,7 +386,7 @@ export class Tessellator {
|
|
|
321
386
|
// libtess2 trapped: each fill in a fresh instance, and one that traps alone again by the
|
|
322
387
|
// bands, which never trap.
|
|
323
388
|
return fills.length === 1
|
|
324
|
-
? this.layerBy(fills, nonZero, true)
|
|
389
|
+
? this.layerBy(fills, nonZero, true, borrowed)
|
|
325
390
|
: fills.map((fill, i) => this.alone(fill, nonZero[i], false));
|
|
326
391
|
} finally {
|
|
327
392
|
this.trim();
|