@swf2es/render 0.0.0-stage → 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.
Files changed (143) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +17 -2
  3. package/dist/commands.d.ts +67 -0
  4. package/dist/commands.d.ts.map +1 -0
  5. package/dist/commands.js +93 -0
  6. package/dist/commands.js.map +1 -0
  7. package/dist/filter-plan.d.ts +110 -0
  8. package/dist/filter-plan.d.ts.map +1 -0
  9. package/dist/filter-plan.js +480 -0
  10. package/dist/filter-plan.js.map +1 -0
  11. package/dist/filter-shaders.d.ts +63 -0
  12. package/dist/filter-shaders.d.ts.map +1 -0
  13. package/dist/filter-shaders.js +350 -0
  14. package/dist/filter-shaders.js.map +1 -0
  15. package/dist/filters.d.ts +107 -0
  16. package/dist/filters.d.ts.map +1 -0
  17. package/dist/filters.js +187 -0
  18. package/dist/filters.js.map +1 -0
  19. package/dist/geometry.d.ts +83 -0
  20. package/dist/geometry.d.ts.map +1 -0
  21. package/dist/geometry.js +93 -0
  22. package/dist/geometry.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +13 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/keeps.d.ts +17 -0
  28. package/dist/keeps.d.ts.map +1 -0
  29. package/dist/keeps.js +17 -0
  30. package/dist/keeps.js.map +1 -0
  31. package/dist/kernel-shaders.d.ts +74 -0
  32. package/dist/kernel-shaders.d.ts.map +1 -0
  33. package/dist/kernel-shaders.js +323 -0
  34. package/dist/kernel-shaders.js.map +1 -0
  35. package/dist/measure.d.ts +56 -0
  36. package/dist/measure.d.ts.map +1 -0
  37. package/dist/measure.js +287 -0
  38. package/dist/measure.js.map +1 -0
  39. package/dist/plan.d.ts +14 -0
  40. package/dist/plan.d.ts.map +1 -0
  41. package/dist/plan.js +247 -0
  42. package/dist/plan.js.map +1 -0
  43. package/dist/registry.d.ts +49 -0
  44. package/dist/registry.d.ts.map +1 -0
  45. package/dist/registry.js +87 -0
  46. package/dist/registry.js.map +1 -0
  47. package/dist/rows.d.ts +39 -0
  48. package/dist/rows.d.ts.map +1 -0
  49. package/dist/rows.js +60 -0
  50. package/dist/rows.js.map +1 -0
  51. package/dist/scene.d.ts +179 -0
  52. package/dist/scene.d.ts.map +1 -0
  53. package/dist/scene.js +265 -0
  54. package/dist/scene.js.map +1 -0
  55. package/dist/shelves.d.ts +23 -0
  56. package/dist/shelves.d.ts.map +1 -0
  57. package/dist/shelves.js +63 -0
  58. package/dist/shelves.js.map +1 -0
  59. package/dist/textures.d.ts +72 -0
  60. package/dist/textures.d.ts.map +1 -0
  61. package/dist/textures.js +160 -0
  62. package/dist/textures.js.map +1 -0
  63. package/dist/webgl/atlas.d.ts +63 -0
  64. package/dist/webgl/atlas.d.ts.map +1 -0
  65. package/dist/webgl/atlas.js +328 -0
  66. package/dist/webgl/atlas.js.map +1 -0
  67. package/dist/webgl/backend.d.ts +141 -0
  68. package/dist/webgl/backend.d.ts.map +1 -0
  69. package/dist/webgl/backend.js +659 -0
  70. package/dist/webgl/backend.js.map +1 -0
  71. package/dist/webgl/composite.d.ts +101 -0
  72. package/dist/webgl/composite.d.ts.map +1 -0
  73. package/dist/webgl/composite.js +293 -0
  74. package/dist/webgl/composite.js.map +1 -0
  75. package/dist/webgl/draws.d.ts +213 -0
  76. package/dist/webgl/draws.d.ts.map +1 -0
  77. package/dist/webgl/draws.js +714 -0
  78. package/dist/webgl/draws.js.map +1 -0
  79. package/dist/webgl/filters.d.ts +107 -0
  80. package/dist/webgl/filters.d.ts.map +1 -0
  81. package/dist/webgl/filters.js +351 -0
  82. package/dist/webgl/filters.js.map +1 -0
  83. package/dist/webgl/gpu-textures.d.ts +44 -0
  84. package/dist/webgl/gpu-textures.d.ts.map +1 -0
  85. package/dist/webgl/gpu-textures.js +178 -0
  86. package/dist/webgl/gpu-textures.js.map +1 -0
  87. package/dist/webgl/holds.d.ts +97 -0
  88. package/dist/webgl/holds.d.ts.map +1 -0
  89. package/dist/webgl/holds.js +453 -0
  90. package/dist/webgl/holds.js.map +1 -0
  91. package/dist/webgl/index.d.ts +2 -0
  92. package/dist/webgl/index.d.ts.map +1 -0
  93. package/dist/webgl/index.js +4 -0
  94. package/dist/webgl/index.js.map +1 -0
  95. package/dist/webgl/kernels.d.ts +64 -0
  96. package/dist/webgl/kernels.d.ts.map +1 -0
  97. package/dist/webgl/kernels.js +160 -0
  98. package/dist/webgl/kernels.js.map +1 -0
  99. package/dist/webgl/pool.d.ts +71 -0
  100. package/dist/webgl/pool.d.ts.map +1 -0
  101. package/dist/webgl/pool.js +192 -0
  102. package/dist/webgl/pool.js.map +1 -0
  103. package/dist/webgl/programs.d.ts +130 -0
  104. package/dist/webgl/programs.d.ts.map +1 -0
  105. package/dist/webgl/programs.js +582 -0
  106. package/dist/webgl/programs.js.map +1 -0
  107. package/dist/webgl/stage.d.ts +67 -0
  108. package/dist/webgl/stage.d.ts.map +1 -0
  109. package/dist/webgl/stage.js +173 -0
  110. package/dist/webgl/stage.js.map +1 -0
  111. package/dist/webgl/targets.d.ts +172 -0
  112. package/dist/webgl/targets.d.ts.map +1 -0
  113. package/dist/webgl/targets.js +323 -0
  114. package/dist/webgl/targets.js.map +1 -0
  115. package/package.json +35 -3
  116. package/src/commands.ts +98 -0
  117. package/src/filter-plan.ts +755 -0
  118. package/src/filter-shaders.ts +360 -0
  119. package/src/filters.ts +220 -0
  120. package/src/geometry.ts +143 -0
  121. package/src/index.ts +87 -0
  122. package/src/keeps.ts +21 -0
  123. package/src/kernel-shaders.ts +375 -0
  124. package/src/measure.ts +400 -0
  125. package/src/plan.ts +331 -0
  126. package/src/registry.ts +105 -0
  127. package/src/rows.ts +93 -0
  128. package/src/scene.ts +297 -0
  129. package/src/shelves.ts +70 -0
  130. package/src/textures.ts +198 -0
  131. package/src/webgl/atlas.ts +370 -0
  132. package/src/webgl/backend.ts +973 -0
  133. package/src/webgl/composite.ts +372 -0
  134. package/src/webgl/draws.ts +902 -0
  135. package/src/webgl/filters.ts +502 -0
  136. package/src/webgl/gpu-textures.ts +253 -0
  137. package/src/webgl/holds.ts +624 -0
  138. package/src/webgl/index.ts +3 -0
  139. package/src/webgl/kernels.ts +205 -0
  140. package/src/webgl/pool.ts +245 -0
  141. package/src/webgl/programs.ts +620 -0
  142. package/src/webgl/stage.ts +214 -0
  143. 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"}
@@ -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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"}
@@ -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"}
@@ -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"}