@swf2es/player 0.1.0 → 0.1.1
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/package.json +7 -7
- package/dist/audio.d.ts +0 -22
- package/dist/audio.d.ts.map +0 -1
- package/dist/audio.js +0 -106
- package/dist/audio.js.map +0 -1
- package/dist/bitmap-filters.d.ts +0 -29
- package/dist/bitmap-filters.d.ts.map +0 -1
- package/dist/bitmap-filters.js +0 -906
- package/dist/bitmap-filters.js.map +0 -1
- package/dist/bitmap-ops.d.ts +0 -113
- package/dist/bitmap-ops.d.ts.map +0 -1
- package/dist/bitmap-ops.js +0 -725
- package/dist/bitmap-ops.js.map +0 -1
- package/dist/bitmap.d.ts +0 -98
- package/dist/bitmap.d.ts.map +0 -1
- package/dist/bitmap.js +0 -314
- package/dist/bitmap.js.map +0 -1
- package/dist/bounds.d.ts +0 -26
- package/dist/bounds.d.ts.map +0 -1
- package/dist/bounds.js +0 -300
- package/dist/bounds.js.map +0 -1
- package/dist/color.d.ts +0 -7
- package/dist/color.d.ts.map +0 -1
- package/dist/color.js +0 -42
- package/dist/color.js.map +0 -1
- package/dist/display.d.ts +0 -425
- package/dist/display.d.ts.map +0 -1
- package/dist/display.js +0 -1274
- package/dist/display.js.map +0 -1
- package/dist/drawing.d.ts +0 -52
- package/dist/drawing.d.ts.map +0 -1
- package/dist/drawing.js +0 -204
- package/dist/drawing.js.map +0 -1
- package/dist/filters.d.ts +0 -54
- package/dist/filters.d.ts.map +0 -1
- package/dist/filters.js +0 -155
- package/dist/filters.js.map +0 -1
- package/dist/fonts.d.ts +0 -23
- package/dist/fonts.d.ts.map +0 -1
- package/dist/fonts.js +0 -91
- package/dist/fonts.js.map +0 -1
- package/dist/geometry.d.ts +0 -21
- package/dist/geometry.d.ts.map +0 -1
- package/dist/geometry.js +0 -76
- package/dist/geometry.js.map +0 -1
- package/dist/gradients.d.ts +0 -29
- package/dist/gradients.d.ts.map +0 -1
- package/dist/gradients.js +0 -116
- package/dist/gradients.js.map +0 -1
- package/dist/images.d.ts +0 -22
- package/dist/images.d.ts.map +0 -1
- package/dist/images.js +0 -147
- package/dist/images.js.map +0 -1
- package/dist/input.d.ts +0 -79
- package/dist/input.d.ts.map +0 -1
- package/dist/input.js +0 -366
- package/dist/input.js.map +0 -1
- package/dist/keyboard.d.ts +0 -97
- package/dist/keyboard.d.ts.map +0 -1
- package/dist/keyboard.js +0 -583
- package/dist/keyboard.js.map +0 -1
- package/dist/morph.d.ts +0 -17
- package/dist/morph.d.ts.map +0 -1
- package/dist/morph.js +0 -218
- package/dist/morph.js.map +0 -1
- package/dist/pixi-blend.d.ts +0 -7
- package/dist/pixi-blend.d.ts.map +0 -1
- package/dist/pixi-blend.js +0 -253
- package/dist/pixi-blend.js.map +0 -1
- package/dist/pixi-color.d.ts +0 -54
- package/dist/pixi-color.d.ts.map +0 -1
- package/dist/pixi-color.js +0 -336
- package/dist/pixi-color.js.map +0 -1
- package/dist/pixi-filters.d.ts +0 -40
- package/dist/pixi-filters.d.ts.map +0 -1
- package/dist/pixi-filters.js +0 -953
- package/dist/pixi-filters.js.map +0 -1
- package/dist/pixi-resolve.d.ts +0 -4
- package/dist/pixi-resolve.d.ts.map +0 -1
- package/dist/pixi-resolve.js +0 -76
- package/dist/pixi-resolve.js.map +0 -1
- package/dist/pixi.d.ts +0 -219
- package/dist/pixi.d.ts.map +0 -1
- package/dist/pixi.js +0 -2169
- package/dist/pixi.js.map +0 -1
- package/dist/playerglobal/flash/filters/filters.d.ts +0 -26
- package/dist/playerglobal/flash/filters/filters.d.ts.map +0 -1
- package/dist/playerglobal/flash/filters/filters.js +0 -287
- package/dist/playerglobal/flash/filters/filters.js.map +0 -1
- package/dist/playerglobal/flash/system/FSCommand.d.ts +0 -4
- package/dist/playerglobal/flash/system/FSCommand.d.ts.map +0 -1
- package/dist/playerglobal/flash/system/FSCommand.js +0 -18
- package/dist/playerglobal/flash/system/FSCommand.js.map +0 -1
- package/dist/playerglobal/natives.d.ts +0 -10
- package/dist/playerglobal/natives.d.ts.map +0 -1
- package/dist/playerglobal/natives.js +0 -53
- package/dist/playerglobal/natives.js.map +0 -1
- package/dist/png.d.ts +0 -4
- package/dist/png.d.ts.map +0 -1
- package/dist/png.js +0 -140
- package/dist/png.js.map +0 -1
- package/dist/render/art.d.ts +0 -148
- package/dist/render/art.d.ts.map +0 -1
- package/dist/render/art.js +0 -575
- package/dist/render/art.js.map +0 -1
- package/dist/render/batchers.d.ts +0 -23
- package/dist/render/batchers.d.ts.map +0 -1
- package/dist/render/batchers.js +0 -52
- package/dist/render/batchers.js.map +0 -1
- package/dist/render/bitmaps.d.ts +0 -117
- package/dist/render/bitmaps.d.ts.map +0 -1
- package/dist/render/bitmaps.js +0 -422
- package/dist/render/bitmaps.js.map +0 -1
- package/dist/render/blend.d.ts +0 -37
- package/dist/render/blend.d.ts.map +0 -1
- package/dist/render/blend.js +0 -195
- package/dist/render/blend.js.map +0 -1
- package/dist/render/color.d.ts +0 -111
- package/dist/render/color.d.ts.map +0 -1
- package/dist/render/color.js +0 -533
- package/dist/render/color.js.map +0 -1
- package/dist/render/compositing.d.ts +0 -77
- package/dist/render/compositing.d.ts.map +0 -1
- package/dist/render/compositing.js +0 -188
- package/dist/render/compositing.js.map +0 -1
- package/dist/render/filters.d.ts +0 -98
- package/dist/render/filters.d.ts.map +0 -1
- package/dist/render/filters.js +0 -1326
- package/dist/render/filters.js.map +0 -1
- package/dist/render/hooks.d.ts +0 -4
- package/dist/render/hooks.d.ts.map +0 -1
- package/dist/render/hooks.js +0 -48
- package/dist/render/hooks.js.map +0 -1
- package/dist/render/node.d.ts +0 -139
- package/dist/render/node.d.ts.map +0 -1
- package/dist/render/node.js +0 -59
- package/dist/render/node.js.map +0 -1
- package/dist/render/patches.d.ts +0 -54
- package/dist/render/patches.d.ts.map +0 -1
- package/dist/render/patches.js +0 -154
- package/dist/render/patches.js.map +0 -1
- package/dist/render/planes.d.ts +0 -74
- package/dist/render/planes.d.ts.map +0 -1
- package/dist/render/planes.js +0 -267
- package/dist/render/planes.js.map +0 -1
- package/dist/render/pointer.d.ts +0 -5
- package/dist/render/pointer.d.ts.map +0 -1
- package/dist/render/pointer.js +0 -279
- package/dist/render/pointer.js.map +0 -1
- package/dist/render/pools.d.ts +0 -122
- package/dist/render/pools.d.ts.map +0 -1
- package/dist/render/pools.js +0 -238
- package/dist/render/pools.js.map +0 -1
- package/dist/render/resolve.d.ts +0 -4
- package/dist/render/resolve.d.ts.map +0 -1
- package/dist/render/resolve.js +0 -76
- package/dist/render/resolve.js.map +0 -1
- package/dist/render/saffron.d.ts +0 -135
- package/dist/render/saffron.d.ts.map +0 -1
- package/dist/render/saffron.js +0 -725
- package/dist/render/saffron.js.map +0 -1
- package/dist/render/settle.d.ts +0 -60
- package/dist/render/settle.d.ts.map +0 -1
- package/dist/render/settle.js +0 -128
- package/dist/render/settle.js.map +0 -1
- package/dist/render/shared.d.ts +0 -25
- package/dist/render/shared.d.ts.map +0 -1
- package/dist/render/shared.js +0 -33
- package/dist/render/shared.js.map +0 -1
- package/dist/render/snapshot.d.ts +0 -21
- package/dist/render/snapshot.d.ts.map +0 -1
- package/dist/render/snapshot.js +0 -91
- package/dist/render/snapshot.js.map +0 -1
- package/dist/render/spares.d.ts +0 -56
- package/dist/render/spares.d.ts.map +0 -1
- package/dist/render/spares.js +0 -160
- package/dist/render/spares.js.map +0 -1
- package/dist/render/strokes.d.ts +0 -107
- package/dist/render/strokes.d.ts.map +0 -1
- package/dist/render/strokes.js +0 -448
- package/dist/render/strokes.js.map +0 -1
- package/dist/render/table.d.ts +0 -213
- package/dist/render/table.d.ts.map +0 -1
- package/dist/render/table.js +0 -795
- package/dist/render/table.js.map +0 -1
- package/dist/render/tessellate.d.ts +0 -89
- package/dist/render/tessellate.d.ts.map +0 -1
- package/dist/render/tessellate.js +0 -386
- package/dist/render/tessellate.js.map +0 -1
- package/dist/render/text.d.ts +0 -40
- package/dist/render/text.d.ts.map +0 -1
- package/dist/render/text.js +0 -309
- package/dist/render/text.js.map +0 -1
- package/dist/render/three.d.ts +0 -83
- package/dist/render/three.d.ts.map +0 -1
- package/dist/render/three.js +0 -511
- package/dist/render/three.js.map +0 -1
- package/dist/render/triangles.d.ts +0 -28
- package/dist/render/triangles.d.ts.map +0 -1
- package/dist/render/triangles.js +0 -189
- package/dist/render/triangles.js.map +0 -1
- package/dist/render/view.d.ts +0 -238
- package/dist/render/view.d.ts.map +0 -1
- package/dist/render/view.js +0 -1173
- package/dist/render/view.js.map +0 -1
- package/dist/render/worker/bitmaps.d.ts +0 -43
- package/dist/render/worker/bitmaps.d.ts.map +0 -1
- package/dist/render/worker/bitmaps.js +0 -151
- package/dist/render/worker/bitmaps.js.map +0 -1
- package/dist/render/worker/drawing.d.ts +0 -21
- package/dist/render/worker/drawing.d.ts.map +0 -1
- package/dist/render/worker/drawing.js +0 -356
- package/dist/render/worker/drawing.js.map +0 -1
- package/dist/render/worker/filters.d.ts +0 -7
- package/dist/render/worker/filters.d.ts.map +0 -1
- package/dist/render/worker/filters.js +0 -125
- package/dist/render/worker/filters.js.map +0 -1
- package/dist/render/worker/frames.d.ts +0 -32
- package/dist/render/worker/frames.d.ts.map +0 -1
- package/dist/render/worker/frames.js +0 -124
- package/dist/render/worker/frames.js.map +0 -1
- package/dist/render/worker/host.d.ts +0 -60
- package/dist/render/worker/host.d.ts.map +0 -1
- package/dist/render/worker/host.js +0 -297
- package/dist/render/worker/host.js.map +0 -1
- package/dist/render/worker/libraries.d.ts +0 -36
- package/dist/render/worker/libraries.d.ts.map +0 -1
- package/dist/render/worker/libraries.js +0 -153
- package/dist/render/worker/libraries.js.map +0 -1
- package/dist/render/worker/presentation.d.ts +0 -18
- package/dist/render/worker/presentation.d.ts.map +0 -1
- package/dist/render/worker/presentation.js +0 -47
- package/dist/render/worker/presentation.js.map +0 -1
- package/dist/render/worker/renderer.d.ts +0 -4
- package/dist/render/worker/renderer.d.ts.map +0 -1
- package/dist/render/worker/renderer.js +0 -21
- package/dist/render/worker/renderer.js.map +0 -1
- package/dist/render/worker/scene.d.ts +0 -32
- package/dist/render/worker/scene.d.ts.map +0 -1
- package/dist/render/worker/scene.js +0 -611
- package/dist/render/worker/scene.js.map +0 -1
- package/dist/render/worker/text.d.ts +0 -47
- package/dist/render/worker/text.d.ts.map +0 -1
- package/dist/render/worker/text.js +0 -261
- package/dist/render/worker/text.js.map +0 -1
- package/dist/render/worker/thread.d.ts +0 -23
- package/dist/render/worker/thread.d.ts.map +0 -1
- package/dist/render/worker/thread.js +0 -107
- package/dist/render/worker/thread.js.map +0 -1
- package/dist/render/worker/values.d.ts +0 -18
- package/dist/render/worker/values.d.ts.map +0 -1
- package/dist/render/worker/values.js +0 -64
- package/dist/render/worker/values.js.map +0 -1
- package/dist/sha256.d.ts +0 -5
- package/dist/sha256.d.ts.map +0 -1
- package/dist/sha256.js +0 -96
- package/dist/sha256.js.map +0 -1
- package/dist/shapes.d.ts +0 -71
- package/dist/shapes.d.ts.map +0 -1
- package/dist/shapes.js +0 -340
- package/dist/shapes.js.map +0 -1
- package/dist/static-text.d.ts +0 -33
- package/dist/static-text.d.ts.map +0 -1
- package/dist/static-text.js +0 -105
- package/dist/static-text.js.map +0 -1
- package/dist/text-layout.d.ts +0 -66
- package/dist/text-layout.d.ts.map +0 -1
- package/dist/text-layout.js +0 -315
- package/dist/text-layout.js.map +0 -1
- package/dist/text.d.ts +0 -67
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js +0 -383
- package/dist/text.js.map +0 -1
- package/dist/timeline.d.ts +0 -150
- package/dist/timeline.d.ts.map +0 -1
- package/dist/timeline.js +0 -266
- package/dist/timeline.js.map +0 -1
package/dist/render/strokes.js
DELETED
|
@@ -1,448 +0,0 @@
|
|
|
1
|
-
import { Matrix } from "pixi.js";
|
|
2
|
-
import { blendLayers, droppedLayers } from "../display/morph.js";
|
|
3
|
-
import { LINE, pointsOf } from "../display/shapes.js";
|
|
4
|
-
import { deviceMemory, IdleBudget, LINES_IDLE_MOST, LINES_IDLE_MS, LINES_IDLE_VERTICES, linesCeiling, } from "./pools.js";
|
|
5
|
-
import { destroyContext, remakeable, shapeContext, trace } from "./tessellate.js";
|
|
6
|
-
export const UNIT = [1, 0, 0, 1];
|
|
7
|
-
export function sameLinear(p, q) {
|
|
8
|
-
return p[0] === q[0] && p[1] === q[1] && p[2] === q[2] && p[3] === q[3];
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* A line's width on the stage. Flash strokes a transformed shape with one
|
|
12
|
-
* width all along, not the local width stretched by the transform: the
|
|
13
|
-
* width scaled by the transform's (a + c, b + d) as a line's scale mode
|
|
14
|
-
* allows, never under `least`, a pixel of the screen it is shown on, which
|
|
15
|
-
* is also how wide a hairline is.
|
|
16
|
-
*/
|
|
17
|
-
function screenWidth(line, m, least) {
|
|
18
|
-
const sx = Math.abs(m[0] + m[2]);
|
|
19
|
-
const sy = Math.abs(m[1] + m[3]);
|
|
20
|
-
const scale = line.noHScale
|
|
21
|
-
? line.noVScale
|
|
22
|
-
? 1
|
|
23
|
-
: sy
|
|
24
|
-
: line.noVScale
|
|
25
|
-
? sx
|
|
26
|
-
: Math.sqrt((sx * sx + sy * sy) / 2);
|
|
27
|
-
return Math.max(least, (line.width / 20) * scale);
|
|
28
|
-
}
|
|
29
|
-
function stroke(line, m, least) {
|
|
30
|
-
const caps = ["round", "butt", "square"];
|
|
31
|
-
const joins = ["round", "bevel", "miter"];
|
|
32
|
-
return {
|
|
33
|
-
width: screenWidth(line, m, least),
|
|
34
|
-
color: line.color & 0xffffff,
|
|
35
|
-
alpha: (line.color >>> 24) / 255,
|
|
36
|
-
cap: caps[line.startCap] ?? "round",
|
|
37
|
-
join: joins[line.join] ?? "round",
|
|
38
|
-
miterLimit: line.miterLimit,
|
|
39
|
-
alignment: 0.5,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function transformPath(path, m) {
|
|
43
|
-
const out = path.slice();
|
|
44
|
-
for (let i = 0; i < out.length;) {
|
|
45
|
-
const points = pointsOf(out[i]);
|
|
46
|
-
for (let k = 0; k < points; k++) {
|
|
47
|
-
const x = out[i + 1 + 2 * k];
|
|
48
|
-
const y = out[i + 2 + 2 * k];
|
|
49
|
-
out[i + 1 + 2 * k] = m[0] * x + m[2] * y;
|
|
50
|
-
out[i + 2 + 2 * k] = m[1] * x + m[3] * y;
|
|
51
|
-
}
|
|
52
|
-
i += 1 + 2 * points;
|
|
53
|
-
}
|
|
54
|
-
return out;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* The context a line's Graphics shows until restroke gives it its own: one
|
|
58
|
-
* for all, never given back nor destroyed, where each made one of its own
|
|
59
|
-
* to throw away.
|
|
60
|
-
*/
|
|
61
|
-
export const NO_LINES = shapeContext();
|
|
62
|
-
/**
|
|
63
|
-
* A layer's lines as seen through `m`, drawn in its space so that their
|
|
64
|
-
* width is even; as wide as `by` makes them, which is `m` but for a 9-slice's.
|
|
65
|
-
*/
|
|
66
|
-
function strokeContext(layer, m, least, by = m) {
|
|
67
|
-
const context = shapeContext();
|
|
68
|
-
for (const { line, paths, closes, triangles } of layer.strokes) {
|
|
69
|
-
context.beginPath();
|
|
70
|
-
let next = 0;
|
|
71
|
-
for (const [i, path] of paths.entries()) {
|
|
72
|
-
const close = closes?.[next]?.at === i ? closes[next++] : null;
|
|
73
|
-
// Back to the path's start, a closed path, joined there as Flash joins it; a triangle's
|
|
74
|
-
// outline is, its last point its first, which Pixi drops.
|
|
75
|
-
const home = triangles || (close?.x === path[1] && close.y === path[2]);
|
|
76
|
-
trace(context, transformPath(close && !home ? [...path, LINE, close.x, close.y] : path, m));
|
|
77
|
-
if (home) {
|
|
78
|
-
context.closePath();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
context.stroke(stroke(line, by, least));
|
|
82
|
-
}
|
|
83
|
-
return context;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Lines' contexts by shape layer and the linear transform they are seen
|
|
87
|
-
* through, shared by every instance that sees a character's layer alike:
|
|
88
|
-
* instances of one creature in step, or one instance on its loop's next
|
|
89
|
-
* turn. Contexts are counted as they are taken and given back, a removed
|
|
90
|
-
* object's too; one no longer taken waits among the idle, destroyed after
|
|
91
|
-
* LINES_IDLE_MS or, the oldest first, past the budget of their vertices,
|
|
92
|
-
* which grows from LINES_IDLE_VERTICES as content comes back to what it
|
|
93
|
-
* let go (IdleBudget), or past as many of them, LINES_IDLE_MOST for that
|
|
94
|
-
* budget's least and more for more. Only a character's layers
|
|
95
|
-
* are shared, which never change, and a blend's while its morph keeps it:
|
|
96
|
-
* one it has dropped is never drawn from again, so its lines go at once.
|
|
97
|
-
*/
|
|
98
|
-
export class StrokeContexts {
|
|
99
|
-
counts;
|
|
100
|
-
byLayer = new WeakMap();
|
|
101
|
-
uses = new Map();
|
|
102
|
-
keys = new Map();
|
|
103
|
-
/** Contexts no one holds, oldest first, with the time each went idle. */
|
|
104
|
-
idle = new Map();
|
|
105
|
-
/** The idle ones' vertices as they went idle, and their sum. */
|
|
106
|
-
idleSizes = new Map();
|
|
107
|
-
idleVertices = 0;
|
|
108
|
-
/** How many vertices the idle may hold, grown as content comes back to what went for room. */
|
|
109
|
-
budget;
|
|
110
|
-
/** Each layer's number, for the budget's keys, which must hold no layer. */
|
|
111
|
-
layerIds = new WeakMap();
|
|
112
|
-
layerCount = 0;
|
|
113
|
-
/** The idle ones of blends, which go as soon as their morph drops the blend. */
|
|
114
|
-
idleBlends = new Set();
|
|
115
|
-
constructor(counts, device = deviceMemory()) {
|
|
116
|
-
this.counts = counts;
|
|
117
|
-
this.budget = new IdleBudget(LINES_IDLE_VERTICES, linesCeiling(device), LINES_IDLE_MS, 4 * LINES_IDLE_MOST);
|
|
118
|
-
}
|
|
119
|
-
/** Content unloaded: the budget back to its floor, the unloaded content's idle lines going on the next tick. */
|
|
120
|
-
unloaded() {
|
|
121
|
-
this.budget.reset();
|
|
122
|
-
}
|
|
123
|
-
/** The layer's lines under `key` if they are kept, not taken: for a view drawn once to borrow. */
|
|
124
|
-
peek(layer, key) {
|
|
125
|
-
return this.byLayer.get(layer)?.get(key) ?? null;
|
|
126
|
-
}
|
|
127
|
-
/** The layer's lines seen through `m`, taken: made or found. */
|
|
128
|
-
take(layer, m, least, key = linesKey(m, least)) {
|
|
129
|
-
let contexts = this.byLayer.get(layer);
|
|
130
|
-
if (!contexts) {
|
|
131
|
-
contexts = new Map();
|
|
132
|
-
this.byLayer.set(layer, contexts);
|
|
133
|
-
}
|
|
134
|
-
let context = contexts.get(key);
|
|
135
|
-
if (context) {
|
|
136
|
-
this.counts.strokeReuses++;
|
|
137
|
-
this.wake(context);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
context = linesContext(layer, m, least);
|
|
141
|
-
this.counts.strokeContexts++;
|
|
142
|
-
if (this.budget.remembered > 0) {
|
|
143
|
-
this.budget.missed(this.ghostKey(layer, key), performance.now());
|
|
144
|
-
}
|
|
145
|
-
contexts.set(key, context);
|
|
146
|
-
this.keys.set(context, [layer, key]);
|
|
147
|
-
}
|
|
148
|
-
this.uses.set(context, (this.uses.get(context) ?? 0) + 1);
|
|
149
|
-
return context;
|
|
150
|
-
}
|
|
151
|
-
/** Give a context back: one of these goes idle when no one holds it; any other is destroyed. */
|
|
152
|
-
give(context) {
|
|
153
|
-
if (context === NO_LINES) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const uses = this.uses.get(context);
|
|
157
|
-
if (uses === undefined) {
|
|
158
|
-
destroyContext(context);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (uses > 1) {
|
|
162
|
-
this.uses.set(context, uses - 1);
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
this.uses.delete(context);
|
|
166
|
-
const layer = this.keys.get(context)[0];
|
|
167
|
-
if (droppedLayers.has(layer)) {
|
|
168
|
-
this.drop(context);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
const vertices = verticesOf(context);
|
|
172
|
-
this.idle.set(context, performance.now());
|
|
173
|
-
this.idleSizes.set(context, vertices);
|
|
174
|
-
this.idleVertices += vertices;
|
|
175
|
-
if (blendLayers.has(layer)) {
|
|
176
|
-
this.idleBlends.add(context);
|
|
177
|
-
}
|
|
178
|
-
this.trim();
|
|
179
|
-
}
|
|
180
|
-
/** A frame prepared: the contexts idle too long go, and those of blends their morph dropped. */
|
|
181
|
-
tick() {
|
|
182
|
-
for (const context of this.idleBlends) {
|
|
183
|
-
if (droppedLayers.has(this.keys.get(context)[0])) {
|
|
184
|
-
this.drop(context);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
const now = performance.now();
|
|
188
|
-
for (const [context, since] of this.idle) {
|
|
189
|
-
if (now - since < LINES_IDLE_MS) {
|
|
190
|
-
break;
|
|
191
|
-
}
|
|
192
|
-
this.drop(context);
|
|
193
|
-
}
|
|
194
|
-
this.budget.tick(now);
|
|
195
|
-
this.trim();
|
|
196
|
-
}
|
|
197
|
-
/** The oldest idle let go, their keys remembered, till the rest are within the budget. */
|
|
198
|
-
trim() {
|
|
199
|
-
const budget = this.budget.size;
|
|
200
|
-
const most = (LINES_IDLE_MOST * budget) / LINES_IDLE_VERTICES;
|
|
201
|
-
while (this.idle.size > most || this.idleVertices > budget) {
|
|
202
|
-
const [context, since] = this.idle.entries().next().value;
|
|
203
|
-
const [layer, key] = this.keys.get(context);
|
|
204
|
-
// At least a context's share of the least budget: one let go for their count grows it too.
|
|
205
|
-
const size = Math.max(this.idleSizes.get(context) ?? 0, LINES_IDLE_VERTICES / LINES_IDLE_MOST);
|
|
206
|
-
this.budget.evicted(this.ghostKey(layer, key), since, size);
|
|
207
|
-
this.drop(context);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
ghostKey(layer, key) {
|
|
211
|
-
let id = this.layerIds.get(layer);
|
|
212
|
-
if (id === undefined) {
|
|
213
|
-
id = this.layerCount++;
|
|
214
|
-
this.layerIds.set(layer, id);
|
|
215
|
-
}
|
|
216
|
-
return `${id}:${key}`;
|
|
217
|
-
}
|
|
218
|
-
/** Take a context off the idle, if it is there. */
|
|
219
|
-
wake(context) {
|
|
220
|
-
this.idleVertices -= this.idleSizes.get(context) ?? 0;
|
|
221
|
-
this.idleSizes.delete(context);
|
|
222
|
-
this.idle.delete(context);
|
|
223
|
-
this.idleBlends.delete(context);
|
|
224
|
-
}
|
|
225
|
-
drop(context) {
|
|
226
|
-
this.wake(context);
|
|
227
|
-
const [layer, key] = this.keys.get(context);
|
|
228
|
-
this.keys.delete(context);
|
|
229
|
-
this.byLayer.get(layer)?.delete(key);
|
|
230
|
-
destroyContext(context);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* The vertices Pixi tessellated a context into, for each renderer that drew
|
|
235
|
-
* it: what keeping it costs.
|
|
236
|
-
*/
|
|
237
|
-
function verticesOf(context) {
|
|
238
|
-
const data = context._gpuData;
|
|
239
|
-
let vertices = 0;
|
|
240
|
-
for (const uid in data) {
|
|
241
|
-
vertices += (data[uid]?.geometryData?.vertices.length ?? 0) / 2;
|
|
242
|
-
}
|
|
243
|
-
return vertices;
|
|
244
|
-
}
|
|
245
|
-
/** The key a layer's lines seen through `m`, at least `least` wide, are kept by. */
|
|
246
|
-
function linesKey(m, least) {
|
|
247
|
-
return `${m[0]},${m[1]},${m[2]},${m[3]},${least}`;
|
|
248
|
-
}
|
|
249
|
-
/** Lines stroked through `m`: the key they are kept by, and the inverse that takes them back to the object's axes. */
|
|
250
|
-
export function strokeFrame(m, least) {
|
|
251
|
-
const det = m[0] * m[3] - m[1] * m[2];
|
|
252
|
-
return {
|
|
253
|
-
m,
|
|
254
|
-
key: linesKey(m, least),
|
|
255
|
-
inverse: det === 0 ? null : new Matrix(m[3] / det, -m[1] / det, -m[2] / det, m[0] / det, 0, 0),
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* `m`'s stretch, without its turn or mirror: m is a rotation or a mirror
|
|
260
|
-
* times this symmetric stretch, and a line scaled both ways is as wide
|
|
261
|
-
* through either (screenWidth reads |m's columns' sum|, which no rotation
|
|
262
|
-
* changes), so its lines are the same stroked through the stretch alone
|
|
263
|
-
* and then turned. A limb that turns on every frame of a loop, a spinning
|
|
264
|
-
* particle squashed one way, every mirror and every instance alike then
|
|
265
|
-
* share the lines of one context, where each angle was tessellated anew.
|
|
266
|
-
* Rounded, so that one stretch has one key however its turn rounded it;
|
|
267
|
-
* null where m flattens everything, or nearly, where rounding would.
|
|
268
|
-
*/
|
|
269
|
-
export function stretchOf(m, out) {
|
|
270
|
-
const a = m[0];
|
|
271
|
-
const b = m[1];
|
|
272
|
-
const c = m[2];
|
|
273
|
-
const d = m[3];
|
|
274
|
-
// S = sqrt(mᵀm), in closed form for 2 by 2.
|
|
275
|
-
const p = a * a + b * b;
|
|
276
|
-
const q = c * c + d * d;
|
|
277
|
-
const r = a * c + b * d;
|
|
278
|
-
const det = Math.abs(a * d - b * c);
|
|
279
|
-
const t = Math.sqrt(p + q + 2 * det);
|
|
280
|
-
if (det === 0 || t === 0) {
|
|
281
|
-
return null;
|
|
282
|
-
}
|
|
283
|
-
const off = roundStretch(r, t);
|
|
284
|
-
const a2 = roundStretch(p + det, t);
|
|
285
|
-
const d2 = roundStretch(q + det, t);
|
|
286
|
-
// Near collapse, a scale of a few 65536ths rounds away, and the lines with it.
|
|
287
|
-
const rounded = Math.abs(a2 * d2 - off * off);
|
|
288
|
-
if (Math.abs(rounded - det) > 1e-3 * det) {
|
|
289
|
-
return null;
|
|
290
|
-
}
|
|
291
|
-
// Into `out` where given: a turn each frame then makes no array to compare.
|
|
292
|
-
const stretch = out ?? [0, 0, 0, 0];
|
|
293
|
-
stretch[0] = a2;
|
|
294
|
-
stretch[1] = off;
|
|
295
|
-
stretch[2] = off;
|
|
296
|
-
stretch[3] = d2;
|
|
297
|
-
return stretch;
|
|
298
|
-
}
|
|
299
|
-
const roundStretch = (x, t) => Math.round((x / t) * 65536) / 65536;
|
|
300
|
-
/**
|
|
301
|
-
* How far, in pixels of the screen, a line's edge may stand from where its
|
|
302
|
-
* own stretch puts it when stroked through a nearby one on the grid
|
|
303
|
-
* (settledStretch): a twentieth of a pixel, a twip, for a hairline, whose
|
|
304
|
-
* width the stretch does not change; a wider line's width moves with the
|
|
305
|
-
* stretch as well as its stroke, and its edges up to twice as far. A
|
|
306
|
-
* fiftieth gave a hairline a step of 1/64 of its scale, and a crowded
|
|
307
|
-
* room's hairlines, scaled a little more or less on each frame by their
|
|
308
|
-
* tweens, a stretch of their own on most frames: nine in ten lines stroked
|
|
309
|
-
* anew each frame were such hairlines.
|
|
310
|
-
*/
|
|
311
|
-
const EDGE_SLACK = 0.05;
|
|
312
|
-
/**
|
|
313
|
-
* How far, in pixels of the screen, a line's edge may stand from its own
|
|
314
|
-
* stretch's place when stroked through an even one (settledStretch): two
|
|
315
|
-
* twips, a tenth of a pixel. A part that turns inside a parent scaled a
|
|
316
|
-
* little unevenly, as a limb in a squashed body, has a stretch that turns
|
|
317
|
-
* with it, a new one each frame, and its lines were tessellated each frame;
|
|
318
|
-
* stroked through one even scale, every angle shares them.
|
|
319
|
-
*/
|
|
320
|
-
const EVEN_SLACK = 0.1;
|
|
321
|
-
/** The coarsest step of the stretches' grid, a hairline's: about 6% of a scale. */
|
|
322
|
-
const COARSEST_STEP = 1 / 16;
|
|
323
|
-
/** The finest: a line wider than this allows is stroked through its own stretch. */
|
|
324
|
-
const FINEST_STEP = 1 / 4096;
|
|
325
|
-
/**
|
|
326
|
-
* The stretch `s` (stretchOf's, symmetric with a positive determinant)
|
|
327
|
-
* moved to the nearest point of a grid, `widest` the width of its widest
|
|
328
|
-
* line in twips and `least` a pixel of the screen; or `s` itself. A tween
|
|
329
|
-
* that scales a little on every frame, a character that breathes, gave
|
|
330
|
-
* each frame a stretch of its own, and its lines were tessellated again
|
|
331
|
-
* on every frame of every loop, faster than the cache could keep them; the
|
|
332
|
-
* grid gives such a pulse a few. Lines stroked through the grid's stretch
|
|
333
|
-
* and taken back through its inverse (strokeFrame) follow the shape's path
|
|
334
|
-
* exactly; only their width and joins see the small difference between
|
|
335
|
-
* the two stretches, s q⁻¹'s from the identity, which the grid keeps under
|
|
336
|
-
* EDGE_SLACK of a pixel at their edges. The grid is on the stretch's
|
|
337
|
-
* logarithm, a symmetric matrix whose entries measure scale and shear
|
|
338
|
-
* alike, in a step that is a power of two, so that stretches settled alike
|
|
339
|
-
* share their contexts; one it would move further than a step, as it may
|
|
340
|
-
* one that squashes nearly flat, is its own.
|
|
341
|
-
*/
|
|
342
|
-
export function settledStretch(s, widest, least, out) {
|
|
343
|
-
// s = mean I + N, N = [[half, off], [off, -half]], N² = r² I: its scales are mean ± r, along
|
|
344
|
-
// the axes P± = (I ± N / r) / 2 project on.
|
|
345
|
-
const mean = (s[0] + s[3]) / 2;
|
|
346
|
-
const half = (s[0] - s[3]) / 2;
|
|
347
|
-
const off = s[1];
|
|
348
|
-
const r = Math.sqrt(half * half + off * off);
|
|
349
|
-
if (!(mean - r > 0)) {
|
|
350
|
-
return s;
|
|
351
|
-
}
|
|
352
|
-
// Nearly even: stroked through the even stretch of the same area, k, which no turn changes,
|
|
353
|
-
// and taken back through its inverse, a line is as wide as k makes it times what s q⁻¹ = s / k
|
|
354
|
-
// stretches each way, between the smaller scale over k and the larger. Through s itself it is
|
|
355
|
-
// one width all along, somewhere in that span as screenWidth reads s at its angle; its edges
|
|
356
|
-
// share the difference, which must stay within the slack at every angle, so that a part
|
|
357
|
-
// turning does not flip between the even stretch and its own. A hairline, a pixel wide however
|
|
358
|
-
// small its scale, stretches with s / k as any line: a part squashed far keeps its own.
|
|
359
|
-
if (r > 0) {
|
|
360
|
-
const k = Math.sqrt((mean + r) * (mean - r));
|
|
361
|
-
const stroked = Math.max(least, (widest / 20) * k);
|
|
362
|
-
if ((stroked * 2 * r) / k <= 2 * EVEN_SLACK * least) {
|
|
363
|
-
const even = out ?? [0, 0, 0, 0];
|
|
364
|
-
even[0] = k;
|
|
365
|
-
even[1] = 0;
|
|
366
|
-
even[2] = 0;
|
|
367
|
-
even[3] = k;
|
|
368
|
-
return settledStretch(even, widest, least, even);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
// Half the widest line's width on the screen, at most as the larger scale makes it, times the
|
|
372
|
-
// step must stay under the slack.
|
|
373
|
-
const width = Math.max(least, (widest / 20) * (mean + r));
|
|
374
|
-
const most = Math.min(COARSEST_STEP, (2 * EDGE_SLACK * least) / width);
|
|
375
|
-
if (!(most >= FINEST_STEP)) {
|
|
376
|
-
return s;
|
|
377
|
-
}
|
|
378
|
-
const step = 2 ** Math.floor(Math.log2(most));
|
|
379
|
-
// Its logarithm, ln(mean + r) P+ + ln(mean - r) P-, is α I + β N; its entries go on the grid.
|
|
380
|
-
const large = Math.log(mean + r);
|
|
381
|
-
const small = Math.log(mean - r);
|
|
382
|
-
const alpha = (large + small) / 2;
|
|
383
|
-
const beta = r === 0 ? 1 / mean : (large - small) / (2 * r);
|
|
384
|
-
const l11 = Math.round((alpha + beta * half) / step) * step;
|
|
385
|
-
const l22 = Math.round((alpha - beta * half) / step) * step;
|
|
386
|
-
const l12 = Math.round((beta * off) / step) * step;
|
|
387
|
-
// And back: the grid's α' I + N', N'² = ρ² I, is e^(α' + ρ) P'+ + e^(α' - ρ) P'-.
|
|
388
|
-
const h = (l11 - l22) / 2;
|
|
389
|
-
const rho = Math.sqrt(h * h + l12 * l12);
|
|
390
|
-
const up = Math.exp((l11 + l22) / 2 + rho);
|
|
391
|
-
const down = Math.exp((l11 + l22) / 2 - rho);
|
|
392
|
-
const across = rho === 0 ? 0 : (up - down) / (2 * rho);
|
|
393
|
-
const q0 = (up + down) / 2 + across * h;
|
|
394
|
-
const q1 = across * l12;
|
|
395
|
-
const q3 = (up + down) / 2 - across * h;
|
|
396
|
-
// s q⁻¹ near the identity, within a step by its norm, the most it stretches any direction: the
|
|
397
|
-
// edges, half the widest line from the path, within the slack of their place. (Each entry
|
|
398
|
-
// within a step alone let an edge stray to nearly twice that, 0.036 of a pixel measured.)
|
|
399
|
-
const qDet = q0 * q3 - q1 * q1;
|
|
400
|
-
const e0 = (s[0] * q3 - s[2] * q1) / qDet;
|
|
401
|
-
const e1 = (s[1] * q3 - s[3] * q1) / qDet;
|
|
402
|
-
const e2 = (s[2] * q0 - s[0] * q1) / qDet;
|
|
403
|
-
const e3 = (s[3] * q0 - s[1] * q1) / qDet;
|
|
404
|
-
// The spectral norm of D = s q⁻¹ - I: the root of the larger eigenvalue of DᵀD.
|
|
405
|
-
const d0 = e0 - 1;
|
|
406
|
-
const d3 = e3 - 1;
|
|
407
|
-
const frobenius = d0 * d0 + e1 * e1 + e2 * e2 + d3 * d3;
|
|
408
|
-
const det = d0 * d3 - e1 * e2;
|
|
409
|
-
const norm = Math.sqrt((frobenius + Math.sqrt(Math.max(0, frobenius * frobenius - 4 * det * det))) / 2);
|
|
410
|
-
if (!(norm <= step)) {
|
|
411
|
-
return s;
|
|
412
|
-
}
|
|
413
|
-
// Into `out` where given, which may be `s`, as stretchOf's: a move each frame then makes no
|
|
414
|
-
// array to compare.
|
|
415
|
-
const q = out ?? [0, 0, 0, 0];
|
|
416
|
-
q[0] = q0;
|
|
417
|
-
q[1] = q1;
|
|
418
|
-
q[2] = q1;
|
|
419
|
-
q[3] = q3;
|
|
420
|
-
return q;
|
|
421
|
-
}
|
|
422
|
-
/** The width of the layer's widest line, in twips. */
|
|
423
|
-
export function widestLine(layer) {
|
|
424
|
-
let widest = 0;
|
|
425
|
-
for (const { line } of layer.strokes) {
|
|
426
|
-
widest = Math.max(widest, line.width);
|
|
427
|
-
}
|
|
428
|
-
return widest;
|
|
429
|
-
}
|
|
430
|
-
/** Whether every line of the layer scales both ways, whose width no rotation changes; one scaled one way alone turns with it. */
|
|
431
|
-
export function scalesEvenly(layer) {
|
|
432
|
-
return layer.strokes.every(({ line }) => !line.noHScale && !line.noVScale);
|
|
433
|
-
}
|
|
434
|
-
/** A layer's lines seen through `m`, nothing where `m` flattens them. */
|
|
435
|
-
export function linesContext(layer, m, least, by = m) {
|
|
436
|
-
// Empty, drawn alone as every shape's are: one batched would get no
|
|
437
|
-
// instruction till its group rebuilt.
|
|
438
|
-
if (m[0] * m[3] - m[1] * m[2] === 0) {
|
|
439
|
-
return shapeContext();
|
|
440
|
-
}
|
|
441
|
-
// A view's alone, whose renderer builds it once: its paths go then. The
|
|
442
|
-
// transforms copied, as a caller may reuse its arrays.
|
|
443
|
-
const seen = [m[0], m[1], m[2], m[3]];
|
|
444
|
-
const width = [by[0], by[1], by[2], by[3]];
|
|
445
|
-
const make = () => strokeContext(layer, seen, least, width);
|
|
446
|
-
return remakeable(make(), make);
|
|
447
|
-
}
|
|
448
|
-
//# sourceMappingURL=strokes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strokes.js","sourceRoot":"","sources":["../../src/render/strokes.ts"],"names":[],"mappings":"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"}
|