@swf2es/render 0.0.0-stage → 0.1.0
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/LICENSE +202 -0
- package/README.md +17 -2
- package/dist/commands.d.ts +67 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +93 -0
- package/dist/commands.js.map +1 -0
- package/dist/filter-plan.d.ts +110 -0
- package/dist/filter-plan.d.ts.map +1 -0
- package/dist/filter-plan.js +480 -0
- package/dist/filter-plan.js.map +1 -0
- package/dist/filter-shaders.d.ts +63 -0
- package/dist/filter-shaders.d.ts.map +1 -0
- package/dist/filter-shaders.js +350 -0
- package/dist/filter-shaders.js.map +1 -0
- package/dist/filters.d.ts +107 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +187 -0
- package/dist/filters.js.map +1 -0
- package/dist/geometry.d.ts +83 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +93 -0
- package/dist/geometry.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/keeps.d.ts +17 -0
- package/dist/keeps.d.ts.map +1 -0
- package/dist/keeps.js +17 -0
- package/dist/keeps.js.map +1 -0
- package/dist/kernel-shaders.d.ts +74 -0
- package/dist/kernel-shaders.d.ts.map +1 -0
- package/dist/kernel-shaders.js +323 -0
- package/dist/kernel-shaders.js.map +1 -0
- package/dist/measure.d.ts +56 -0
- package/dist/measure.d.ts.map +1 -0
- package/dist/measure.js +287 -0
- package/dist/measure.js.map +1 -0
- package/dist/plan.d.ts +14 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +247 -0
- package/dist/plan.js.map +1 -0
- package/dist/registry.d.ts +49 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +87 -0
- package/dist/registry.js.map +1 -0
- package/dist/rows.d.ts +39 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +60 -0
- package/dist/rows.js.map +1 -0
- package/dist/scene.d.ts +179 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +265 -0
- package/dist/scene.js.map +1 -0
- package/dist/shelves.d.ts +23 -0
- package/dist/shelves.d.ts.map +1 -0
- package/dist/shelves.js +63 -0
- package/dist/shelves.js.map +1 -0
- package/dist/textures.d.ts +72 -0
- package/dist/textures.d.ts.map +1 -0
- package/dist/textures.js +160 -0
- package/dist/textures.js.map +1 -0
- package/dist/webgl/atlas.d.ts +63 -0
- package/dist/webgl/atlas.d.ts.map +1 -0
- package/dist/webgl/atlas.js +328 -0
- package/dist/webgl/atlas.js.map +1 -0
- package/dist/webgl/backend.d.ts +141 -0
- package/dist/webgl/backend.d.ts.map +1 -0
- package/dist/webgl/backend.js +659 -0
- package/dist/webgl/backend.js.map +1 -0
- package/dist/webgl/composite.d.ts +101 -0
- package/dist/webgl/composite.d.ts.map +1 -0
- package/dist/webgl/composite.js +293 -0
- package/dist/webgl/composite.js.map +1 -0
- package/dist/webgl/draws.d.ts +213 -0
- package/dist/webgl/draws.d.ts.map +1 -0
- package/dist/webgl/draws.js +714 -0
- package/dist/webgl/draws.js.map +1 -0
- package/dist/webgl/filters.d.ts +107 -0
- package/dist/webgl/filters.d.ts.map +1 -0
- package/dist/webgl/filters.js +351 -0
- package/dist/webgl/filters.js.map +1 -0
- package/dist/webgl/gpu-textures.d.ts +44 -0
- package/dist/webgl/gpu-textures.d.ts.map +1 -0
- package/dist/webgl/gpu-textures.js +178 -0
- package/dist/webgl/gpu-textures.js.map +1 -0
- package/dist/webgl/holds.d.ts +97 -0
- package/dist/webgl/holds.d.ts.map +1 -0
- package/dist/webgl/holds.js +453 -0
- package/dist/webgl/holds.js.map +1 -0
- package/dist/webgl/index.d.ts +2 -0
- package/dist/webgl/index.d.ts.map +1 -0
- package/dist/webgl/index.js +4 -0
- package/dist/webgl/index.js.map +1 -0
- package/dist/webgl/kernels.d.ts +64 -0
- package/dist/webgl/kernels.d.ts.map +1 -0
- package/dist/webgl/kernels.js +160 -0
- package/dist/webgl/kernels.js.map +1 -0
- package/dist/webgl/pool.d.ts +71 -0
- package/dist/webgl/pool.d.ts.map +1 -0
- package/dist/webgl/pool.js +192 -0
- package/dist/webgl/pool.js.map +1 -0
- package/dist/webgl/programs.d.ts +130 -0
- package/dist/webgl/programs.d.ts.map +1 -0
- package/dist/webgl/programs.js +582 -0
- package/dist/webgl/programs.js.map +1 -0
- package/dist/webgl/stage.d.ts +67 -0
- package/dist/webgl/stage.d.ts.map +1 -0
- package/dist/webgl/stage.js +173 -0
- package/dist/webgl/stage.js.map +1 -0
- package/dist/webgl/targets.d.ts +172 -0
- package/dist/webgl/targets.d.ts.map +1 -0
- package/dist/webgl/targets.js +323 -0
- package/dist/webgl/targets.js.map +1 -0
- package/package.json +35 -3
- package/src/commands.ts +98 -0
- package/src/filter-plan.ts +755 -0
- package/src/filter-shaders.ts +360 -0
- package/src/filters.ts +220 -0
- package/src/geometry.ts +143 -0
- package/src/index.ts +87 -0
- package/src/keeps.ts +21 -0
- package/src/kernel-shaders.ts +375 -0
- package/src/measure.ts +400 -0
- package/src/plan.ts +331 -0
- package/src/registry.ts +105 -0
- package/src/rows.ts +93 -0
- package/src/scene.ts +297 -0
- package/src/shelves.ts +70 -0
- package/src/textures.ts +198 -0
- package/src/webgl/atlas.ts +370 -0
- package/src/webgl/backend.ts +973 -0
- package/src/webgl/composite.ts +372 -0
- package/src/webgl/draws.ts +902 -0
- package/src/webgl/filters.ts +502 -0
- package/src/webgl/gpu-textures.ts +253 -0
- package/src/webgl/holds.ts +624 -0
- package/src/webgl/index.ts +3 -0
- package/src/webgl/kernels.ts +205 -0
- package/src/webgl/pool.ts +245 -0
- package/src/webgl/programs.ts +620 -0
- package/src/webgl/stage.ts +214 -0
- package/src/webgl/targets.ts +464 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type Handle, Registry } from "./registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* How many frames a geometry may go undrawn before it is let go of: a
|
|
4
|
+
* pool's object or a loop's rarer frame comes back within a few seconds.
|
|
5
|
+
*/
|
|
6
|
+
export declare const IDLE_FRAMES = 300;
|
|
7
|
+
/** Floats a vertex of advanced text's glyph quads (GeometryData.glyphs). */
|
|
8
|
+
export declare const GLYPH_FLOATS = 18;
|
|
9
|
+
/** A geometry as its owner holds it: its id, and the generation the id had, which a reused id moves on. */
|
|
10
|
+
export type GeometryHandle = Handle;
|
|
11
|
+
/**
|
|
12
|
+
* Triangles to draw under a row's transform: positions on the stage in
|
|
13
|
+
* pixels, two floats a vertex; each vertex' straight colour, its bytes red,
|
|
14
|
+
* green, blue and alpha from the lowest; where it samples a texture, where
|
|
15
|
+
* in texels, two floats a vertex, which a draw divides by the texture's
|
|
16
|
+
* size; and indices into the vertices, three a triangle. The backend copies
|
|
17
|
+
* them into its atlas once.
|
|
18
|
+
*/
|
|
19
|
+
export interface GeometryData {
|
|
20
|
+
positions: Float32Array;
|
|
21
|
+
/** None for a mesh, whose depths take their place. */
|
|
22
|
+
colors: Uint32Array;
|
|
23
|
+
/** A mesh's (MESH) are its u and v from 0 to 1, which its program reads as they are. */
|
|
24
|
+
texels?: Float32Array;
|
|
25
|
+
/** A mesh's depth at each vertex, its t, in place of its colour. */
|
|
26
|
+
depths?: Float32Array;
|
|
27
|
+
/**
|
|
28
|
+
* Advanced text's glyph quads: GLYPH_FLOATS floats a vertex, its position
|
|
29
|
+
* first, as its positions have it, then its glyph's pen and tables,
|
|
30
|
+
* outline bounds and corner, segments and size, and colour; and the
|
|
31
|
+
* text's mode and cutoff tables, which its draw takes as uniforms. Drawn
|
|
32
|
+
* by the glyph program (webgl/programs.ts, glyphsVertex), each pixel of a
|
|
33
|
+
* quad covered by its distance to the glyph's outline, in the outlines'
|
|
34
|
+
* segments (WebGLBackend.uploadOutlines), as adl covers it.
|
|
35
|
+
*/
|
|
36
|
+
glyphs?: {
|
|
37
|
+
vertices: Float32Array;
|
|
38
|
+
mode: Float32Array;
|
|
39
|
+
table: Float32Array;
|
|
40
|
+
};
|
|
41
|
+
indices: Uint32Array;
|
|
42
|
+
/**
|
|
43
|
+
* No part of it over another: a bitmap's quad, or one fill's triangles.
|
|
44
|
+
* Alone in a blend mode's layer, such a geometry is drawn straight onto
|
|
45
|
+
* what is below it, as blending it pixel by pixel blends each pixel once.
|
|
46
|
+
*/
|
|
47
|
+
flat?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Every geometry a scene list may name, by id. What goes undrawn for
|
|
51
|
+
* IDLE_FRAMES is let go of; its owner finds it gone by its handle and adds
|
|
52
|
+
* it again. The backend takes what was added and removed since it last
|
|
53
|
+
* looked (taken), and keeps its own copies.
|
|
54
|
+
*/
|
|
55
|
+
export declare class Geometries extends Registry {
|
|
56
|
+
/** Changes only when a handle can have become stale, including expiry and context loss. */
|
|
57
|
+
removalVersion: number;
|
|
58
|
+
private readonly data;
|
|
59
|
+
/** Each geometry's box: its positions' least x and y, then their greatest. */
|
|
60
|
+
private boxes;
|
|
61
|
+
/** Added since the backend last took them. */
|
|
62
|
+
added: number[];
|
|
63
|
+
/** Changed in place since the backend last took them (update). */
|
|
64
|
+
updated: number[];
|
|
65
|
+
add(data: GeometryData): GeometryHandle;
|
|
66
|
+
/**
|
|
67
|
+
* Geometry `id`'s arrays changed in place, their lengths as they were: its
|
|
68
|
+
* box measured again, and its vertices copied again where they lie.
|
|
69
|
+
*/
|
|
70
|
+
update(id: number): void;
|
|
71
|
+
private measure;
|
|
72
|
+
/**
|
|
73
|
+
* The boxes of every geometry, four floats from `id * 4`: least x and y,
|
|
74
|
+
* greatest x and y; a geometry of no vertices has its least past its
|
|
75
|
+
* greatest.
|
|
76
|
+
*/
|
|
77
|
+
get box(): Float32Array;
|
|
78
|
+
get(id: number): GeometryData | null;
|
|
79
|
+
/** The ids of every geometry held, in order. */
|
|
80
|
+
live(): number[];
|
|
81
|
+
protected dropped(id: number): void;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,4EAA4E;AAC5E,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,2GAA2G;AAC3G,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,sDAAsD;IACtD,MAAM,EAAE,WAAW,CAAC;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,oEAAoE;IACpE,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC;IAC7E,OAAO,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,QAAQ;IACtC,2FAA2F;IAC3F,cAAc,SAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+B;IACpD,8EAA8E;IAC9E,OAAO,CAAC,KAAK,CAA0B;IACvC,8CAA8C;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAM;IAEvB,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAOtC;IAED;;;OAGG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAKvB;IAED,OAAO,CAAC,OAAO;IA2Bf;;;;OAIG;IACH,IAAI,GAAG,IAAI,YAAY,CAEtB;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAEnC;IAED,gDAAgD;IAChD,IAAI,IAAI,MAAM,EAAE,CASf;IAED,UAAmB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG3C;CACF"}
|
package/dist/geometry.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Registry } from "./registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* How many frames a geometry may go undrawn before it is let go of: a
|
|
4
|
+
* pool's object or a loop's rarer frame comes back within a few seconds.
|
|
5
|
+
*/
|
|
6
|
+
export const IDLE_FRAMES = 300;
|
|
7
|
+
/** Floats a vertex of advanced text's glyph quads (GeometryData.glyphs). */
|
|
8
|
+
export const GLYPH_FLOATS = 18;
|
|
9
|
+
/**
|
|
10
|
+
* Every geometry a scene list may name, by id. What goes undrawn for
|
|
11
|
+
* IDLE_FRAMES is let go of; its owner finds it gone by its handle and adds
|
|
12
|
+
* it again. The backend takes what was added and removed since it last
|
|
13
|
+
* looked (taken), and keeps its own copies.
|
|
14
|
+
*/
|
|
15
|
+
export class Geometries extends Registry {
|
|
16
|
+
/** Changes only when a handle can have become stale, including expiry and context loss. */
|
|
17
|
+
removalVersion = 0;
|
|
18
|
+
data = [];
|
|
19
|
+
/** Each geometry's box: its positions' least x and y, then their greatest. */
|
|
20
|
+
boxes = new Float32Array(1024);
|
|
21
|
+
/** Added since the backend last took them. */
|
|
22
|
+
added = [];
|
|
23
|
+
/** Changed in place since the backend last took them (update). */
|
|
24
|
+
updated = [];
|
|
25
|
+
add(data) {
|
|
26
|
+
const handle = this.hold(IDLE_FRAMES);
|
|
27
|
+
const id = handle.id;
|
|
28
|
+
this.data[id] = data;
|
|
29
|
+
this.added.push(id);
|
|
30
|
+
this.measure(id);
|
|
31
|
+
return handle;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Geometry `id`'s arrays changed in place, their lengths as they were: its
|
|
35
|
+
* box measured again, and its vertices copied again where they lie.
|
|
36
|
+
*/
|
|
37
|
+
update(id) {
|
|
38
|
+
if (this.data[id]) {
|
|
39
|
+
this.measure(id);
|
|
40
|
+
this.updated.push(id);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
measure(id) {
|
|
44
|
+
const data = this.data[id];
|
|
45
|
+
if (id * 4 >= this.boxes.length) {
|
|
46
|
+
const grown = new Float32Array(Math.max(this.boxes.length * 2, id * 4 + 4));
|
|
47
|
+
grown.set(this.boxes);
|
|
48
|
+
this.boxes = grown;
|
|
49
|
+
}
|
|
50
|
+
const p = data.positions;
|
|
51
|
+
let x0 = Number.POSITIVE_INFINITY;
|
|
52
|
+
let y0 = Number.POSITIVE_INFINITY;
|
|
53
|
+
let x1 = Number.NEGATIVE_INFINITY;
|
|
54
|
+
let y1 = Number.NEGATIVE_INFINITY;
|
|
55
|
+
for (let i = 0; i < p.length; i += 2) {
|
|
56
|
+
x0 = Math.min(x0, p[i]);
|
|
57
|
+
y0 = Math.min(y0, p[i + 1]);
|
|
58
|
+
x1 = Math.max(x1, p[i]);
|
|
59
|
+
y1 = Math.max(y1, p[i + 1]);
|
|
60
|
+
}
|
|
61
|
+
const box = this.boxes;
|
|
62
|
+
box[id * 4] = x0;
|
|
63
|
+
box[id * 4 + 1] = y0;
|
|
64
|
+
box[id * 4 + 2] = x1;
|
|
65
|
+
box[id * 4 + 3] = y1;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* The boxes of every geometry, four floats from `id * 4`: least x and y,
|
|
69
|
+
* greatest x and y; a geometry of no vertices has its least past its
|
|
70
|
+
* greatest.
|
|
71
|
+
*/
|
|
72
|
+
get box() {
|
|
73
|
+
return this.boxes;
|
|
74
|
+
}
|
|
75
|
+
get(id) {
|
|
76
|
+
return this.data[id] ?? null;
|
|
77
|
+
}
|
|
78
|
+
/** The ids of every geometry held, in order. */
|
|
79
|
+
live() {
|
|
80
|
+
const ids = [];
|
|
81
|
+
for (let id = 0; id < this.data.length; id++) {
|
|
82
|
+
if (this.data[id]) {
|
|
83
|
+
ids.push(id);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return ids;
|
|
87
|
+
}
|
|
88
|
+
dropped(id) {
|
|
89
|
+
this.removalVersion++;
|
|
90
|
+
this.data[id] = null;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geometry.js","sourceRoot":"","sources":["../src/geometry.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { CLEAR, COMPOSITE, Commands, FILTER, HELD, HOLD_POP, HOLD_PUSH, LAYER_POP, LAYER_PUSH, RUN, STENCIL_POP, STENCIL_PUSH, } from "./commands.js";
|
|
2
|
+
export * as filterShaders from "./filter-shaders.js";
|
|
3
|
+
export { BEVEL, BLEND, BLUR, blurShrink, COLOR_MATRIX, CONVOLUTION, DISPLACEMENT, FILL_SHADER, Filters, GLOW, GRADIENT, SHADER, } from "./filters.js";
|
|
4
|
+
export { Geometries, type GeometryData, type GeometryHandle, GLYPH_FLOATS, IDLE_FRAMES, } from "./geometry.js";
|
|
5
|
+
export { KEEP_IDLE_FRAMES, type KeepHandle, Keeps } from "./keeps.js";
|
|
6
|
+
export { drawnArea, filteredRect, type MeasureTarget, measureLayers, wholeBitmap, } from "./measure.js";
|
|
7
|
+
export { plan } from "./plan.js";
|
|
8
|
+
export { type ColorRow, ROW_FLOATS, ROWS_A_LINE, Rows } from "./rows.js";
|
|
9
|
+
export { ADD, ALPHA, ALPHA_MASK, BLEND_NAMES, CLAMP, DARKEN, DIFFERENCE, DRAW, ERASE, HARDLIGHT, INVERT, KEPT, KERNEL, LAYER, LAYER_BEGIN, LAYER_END, LIGHTEN, MASK_BEGIN, MASK_POP, MASK_USE, MESH, MIRROR, MULTIPLY, NO_WHOLE, NORMAL, OVERLAY, PLANE, REPEAT, SCREEN, SceneList, SHADED, SMOOTH, SNAP, SUBTRACT, WHOLE_ALIASED, WHOLE_SMOOTH, } from "./scene.js";
|
|
10
|
+
export { KEEP_FRAMES, type TextureData, type TextureHandle, Textures } from "./textures.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,GAAG,EACH,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,SAAS,EACT,YAAY,EACZ,KAAK,aAAa,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EACL,GAAG,EACH,KAAK,EACL,UAAU,EACV,WAAW,EACX,KAAK,EACL,MAAM,EACN,UAAU,EACV,IAAI,EACJ,KAAK,EACL,SAAS,EACT,MAAM,EACN,IAAI,EACJ,MAAM,EACN,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The renderer's core (docs/renderer.md): what a frame draws, as typed
|
|
2
|
+
// arrays, and the planner that turns it into commands. No GPU, no DOM.
|
|
3
|
+
export { CLEAR, COMPOSITE, Commands, FILTER, HELD, HOLD_POP, HOLD_PUSH, LAYER_POP, LAYER_PUSH, RUN, STENCIL_POP, STENCIL_PUSH, } from "./commands.js";
|
|
4
|
+
export * as filterShaders from "./filter-shaders.js";
|
|
5
|
+
export { BEVEL, BLEND, BLUR, blurShrink, COLOR_MATRIX, CONVOLUTION, DISPLACEMENT, FILL_SHADER, Filters, GLOW, GRADIENT, SHADER, } from "./filters.js";
|
|
6
|
+
export { Geometries, GLYPH_FLOATS, IDLE_FRAMES, } from "./geometry.js";
|
|
7
|
+
export { KEEP_IDLE_FRAMES, Keeps } from "./keeps.js";
|
|
8
|
+
export { drawnArea, filteredRect, measureLayers, wholeBitmap, } from "./measure.js";
|
|
9
|
+
export { plan } from "./plan.js";
|
|
10
|
+
export { ROW_FLOATS, ROWS_A_LINE, Rows } from "./rows.js";
|
|
11
|
+
export { ADD, ALPHA, ALPHA_MASK, BLEND_NAMES, CLAMP, DARKEN, DIFFERENCE, DRAW, ERASE, HARDLIGHT, INVERT, KEPT, KERNEL, LAYER, LAYER_BEGIN, LAYER_END, LIGHTEN, MASK_BEGIN, MASK_POP, MASK_USE, MESH, MIRROR, MULTIPLY, NO_WHOLE, NORMAL, OVERLAY, PLANE, REPEAT, SCREEN, SceneList, SHADED, SMOOTH, SNAP, SUBTRACT, WHOLE_ALIASED, WHOLE_SMOOTH, } from "./scene.js";
|
|
12
|
+
export { KEEP_FRAMES, Textures } from "./textures.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uEAAuE;AACvE,OAAO,EACL,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,GAAG,EACH,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,aAAa,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,GACP,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EAGV,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAmB,KAAK,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EACL,SAAS,EACT,YAAY,EAEZ,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAiB,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EACL,GAAG,EACH,KAAK,EACL,UAAU,EACV,WAAW,EACX,KAAK,EACL,MAAM,EACN,UAAU,EACV,IAAI,EACJ,KAAK,EACL,SAAS,EACT,MAAM,EACN,IAAI,EACJ,MAAM,EACN,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACN,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAwC,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/keeps.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Handle, Registry } from "./registry.js";
|
|
2
|
+
/** A kept output as its owner holds it: its id, and the generation the id had. */
|
|
3
|
+
export type KeepHandle = Handle;
|
|
4
|
+
/** Frames a kept output may go undrawn before it is let go of, unless its owner says otherwise. */
|
|
5
|
+
export declare const KEEP_IDLE_FRAMES = 60;
|
|
6
|
+
/**
|
|
7
|
+
* The layers kept from one frame to the next, as Flash keeps a filtered
|
|
8
|
+
* object's bitmap while nothing in it changed: an owner adds one, names it
|
|
9
|
+
* on the layer whose output it keeps, and composites it again while it
|
|
10
|
+
* stands (SceneList.keptLayer). The backend holds their targets, and lets
|
|
11
|
+
* go of those removed; what goes undrawn for KEEP_IDLE_FRAMES is removed.
|
|
12
|
+
*/
|
|
13
|
+
export declare class Keeps extends Registry {
|
|
14
|
+
/** A kept output's id, let go of once undrawn for `idle` frames. */
|
|
15
|
+
add(idle?: number): KeepHandle;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=keeps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keeps.d.ts","sourceRoot":"","sources":["../src/keeps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtD,kFAAkF;AAClF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,mGAAmG;AACnG,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;;;;;GAMG;AACH,qBAAa,KAAM,SAAQ,QAAQ;IACjC,oEAAoE;IACpE,GAAG,CAAC,IAAI,SAAmB,GAAG,UAAU,CAEvC;CACF"}
|
package/dist/keeps.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Registry } from "./registry.js";
|
|
2
|
+
/** Frames a kept output may go undrawn before it is let go of, unless its owner says otherwise. */
|
|
3
|
+
export const KEEP_IDLE_FRAMES = 60;
|
|
4
|
+
/**
|
|
5
|
+
* The layers kept from one frame to the next, as Flash keeps a filtered
|
|
6
|
+
* object's bitmap while nothing in it changed: an owner adds one, names it
|
|
7
|
+
* on the layer whose output it keeps, and composites it again while it
|
|
8
|
+
* stands (SceneList.keptLayer). The backend holds their targets, and lets
|
|
9
|
+
* go of those removed; what goes undrawn for KEEP_IDLE_FRAMES is removed.
|
|
10
|
+
*/
|
|
11
|
+
export class Keeps extends Registry {
|
|
12
|
+
/** A kept output's id, let go of once undrawn for `idle` frames. */
|
|
13
|
+
add(idle = KEEP_IDLE_FRAMES) {
|
|
14
|
+
return this.hold(idle);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=keeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keeps.js","sourceRoot":"","sources":["../src/keeps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKtD,mGAAmG;AACnG,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,OAAO,KAAM,SAAQ,QAAQ;IACjC,oEAAoE;IACpE,GAAG,CAAC,IAAI,GAAG,gBAAgB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/** The most images a kernel's program binds besides its layer's: one with more is not drawn. */
|
|
2
|
+
export declare const KERNEL_IMAGES = 8;
|
|
3
|
+
/**
|
|
4
|
+
* An image a kernel samples: its texture number; whether it is the
|
|
5
|
+
* filtered layer, else a texture of its own; and whether its texels are
|
|
6
|
+
* floats (RGBA32F), else bytes. For a blend, a layer's image is what is
|
|
7
|
+
* below where `back`, else the layer blended.
|
|
8
|
+
*/
|
|
9
|
+
export interface KernelImage {
|
|
10
|
+
texture: number;
|
|
11
|
+
layer: boolean;
|
|
12
|
+
float: boolean;
|
|
13
|
+
back?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Whether `images` bind no more textures of their own than a program takes (KERNEL_IMAGES). */
|
|
16
|
+
export declare function kernelImagesFit(images: readonly KernelImage[]): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* The kernel's GLSL with what every use puts round it: PRELUDE, then each
|
|
19
|
+
* image, by `layerTexel` for the layer's, its texel at an index, and
|
|
20
|
+
* ownImage for the others; `layerAt` takes a kernel's coordinate to the
|
|
21
|
+
* layer's texels.
|
|
22
|
+
*/
|
|
23
|
+
export declare function withImages(kernel: string, images: readonly KernelImage[], layerTexel: (t: number, back: boolean) => string, layerAt: string): string;
|
|
24
|
+
/** A kernel's shader for its images, made once: a frame asks for it again on each of its uses. */
|
|
25
|
+
export declare function madeOnce(made: Map<string, Map<string, string>>, kernel: string, images: readonly KernelImage[], make: () => string): string;
|
|
26
|
+
/**
|
|
27
|
+
* A ShaderFilter's pass (filter-plan.ts, KERNEL_PASS), run as the
|
|
28
|
+
* filters' other passes are (webgl/filters.ts): the kernel's output over
|
|
29
|
+
* the input's frame, `outCoord` its pixel's centre in stage pixels from
|
|
30
|
+
* the corner of the bitmap the filter reads, `uKernelAt.xy` texels in from
|
|
31
|
+
* the frame's, which starts at `uOutputAt` in the target drawn into, at
|
|
32
|
+
* `uKernelAt.z` texels a stage pixel. The layer's image is the input
|
|
33
|
+
* (uTexture, within uTextureRect), transparent past the frame,
|
|
34
|
+
* `uKernelFrame` texels, as adl reads a filter's source; the others clamp
|
|
35
|
+
* to their edges. The output is as adl writes it (pbOutput), and
|
|
36
|
+
* transparent outside `uKernelRegion`, that bitmap grown by the filter's
|
|
37
|
+
* extensions, in stage pixels.
|
|
38
|
+
*/
|
|
39
|
+
export declare function filterKernel(kernel: string, images: readonly KernelImage[]): string;
|
|
40
|
+
/**
|
|
41
|
+
* A blend shader's composite (webgl/composite.ts), drawn as the composite
|
|
42
|
+
* program is (programs.ts, compositeFragment), its uniforms the same: as
|
|
43
|
+
* adl runs one, a pixel at a time, each where the layer covers anything
|
|
44
|
+
* and nothing where it does not, or over its whole rectangle (uWhole),
|
|
45
|
+
* the kernel's coordinate (0.5, 0.5) and its first two inputs that pixel
|
|
46
|
+
* of what is below and of the layer, coloured, whatever coordinate it
|
|
47
|
+
* samples them at; its result in place of what was below, as adl writes
|
|
48
|
+
* it (pbOutput). `rows` is the colour transform's reading of uRows
|
|
49
|
+
* (programs.ts, LAYER_COLOR).
|
|
50
|
+
*/
|
|
51
|
+
export declare function blendKernel(kernel: string, images: readonly KernelImage[], rows: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* The layer shrunk to a texel a stage pixel for a kernel run once a pixel
|
|
54
|
+
* (filter-plan.ts): each output texel the mean of the `uDown.x` by
|
|
55
|
+
* `uDown.x` texels of the pixel it stands for, the grid from `uDown.yz`
|
|
56
|
+
* texels past the input's corner, which may be less than 0; the texels of
|
|
57
|
+
* a pixel past the frame, `uKernelFrame`, left out of the mean.
|
|
58
|
+
*/
|
|
59
|
+
export declare const PIXELS_DOWN = "#version 300 es\nprecision highp float;\nprecision highp int;\nin vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform vec4 uTextureRect;\nuniform vec3 uDown;\nuniform vec2 uKernelFrame;\nuniform vec2 uOutputAt;\nvoid main(void) {\n int n = int(uDown.x);\n ivec2 from = ivec2(gl_FragCoord.xy - uOutputAt) * n + ivec2(uDown.yz);\n ivec2 frame = ivec2(uKernelFrame);\n vec4 sum = vec4(0.0);\n float count = 0.0;\n for (int j = 0; j < 16; j++) {\n if (j >= n) { break; }\n for (int i = 0; i < 16; i++) {\n if (i >= n) { break; }\n ivec2 at = from + ivec2(i, j);\n if (all(greaterThanEqual(at, ivec2(0))) && all(lessThan(at, frame))) {\n sum += texelFetch(uTexture, ivec2(uTextureRect.xy) + at, 0);\n count += 1.0;\n }\n }\n }\n finalColor = count > 0.0 ? sum / count : vec4(0.0);\n}\n";
|
|
60
|
+
/**
|
|
61
|
+
* A kernel's output, run a texel a stage pixel, drawn back over the
|
|
62
|
+
* layer's frame: each texel its pixel's, the grid as PIXELS_DOWN had it.
|
|
63
|
+
*/
|
|
64
|
+
export declare const PIXELS_BACK = "#version 300 es\nprecision highp float;\nprecision highp int;\nin vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform vec4 uTextureRect;\nuniform vec3 uDown;\nuniform vec2 uOutputAt;\nvoid main(void) {\n ivec2 at = (ivec2(gl_FragCoord.xy - uOutputAt) - ivec2(uDown.yz)) / int(uDown.x);\n at = clamp(at, ivec2(0), ivec2(uTextureRect.zw) - 1);\n finalColor = texelFetch(uTexture, ivec2(uTextureRect.xy) + at, 0);\n}\n";
|
|
65
|
+
/**
|
|
66
|
+
* A shader fill's program, after the mesh's vertex shader (programs.ts,
|
|
67
|
+
* meshVertex), which carries the kernel's coordinates in vUVT with a depth
|
|
68
|
+
* of 1: the kernel run once a pixel of Flash's, at its centre (uFrag as the
|
|
69
|
+
* mesh's has it), its images clamped to their edges; its colours left
|
|
70
|
+
* past its alpha, as adl composites them, but under a colour transform,
|
|
71
|
+
* which takes them straight.
|
|
72
|
+
*/
|
|
73
|
+
export declare function fillKernel(kernel: string, images: readonly KernelImage[]): string;
|
|
74
|
+
//# sourceMappingURL=kernel-shaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel-shaders.d.ts","sourceRoot":"","sources":["../src/kernel-shaders.ts"],"names":[],"mappings":"AAiBA,gGAAgG;AAChG,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,gGAAgG;AAChG,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CASvE;AAgFD;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,MAAM,EAChD,OAAO,EAAE,MAAM,GACd,MAAM,CAYR;AAKD,kGAAkG;AAClG,wBAAgB,QAAQ,CACtB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,IAAI,EAAE,MAAM,MAAM,GACjB,MAAM,CAwBR;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAEnF;AAiCD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhG;AAkCD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,g2BA2BvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,mcAYvB,CAAC;AAIF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAEjF"}
|