@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.
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,453 @@
1
+ import { HELD, HOLD_POP, HOLD_PUSH, RUN, STENCIL_POP, STENCIL_PUSH, } from "../commands.js";
2
+ import { FilterPlan, planChain } from "../filter-plan.js";
3
+ import { Shelves } from "../shelves.js";
4
+ import { framebufferOf, LAYER_STEP, layerSide, objectOf, } from "./targets.js";
5
+ /** The width of the pages held layers and their filters' targets are placed on, side by side. */
6
+ const PAGE_WIDTH = 2048;
7
+ /** Keep content pages below the free pool's budget so they can be reused. */
8
+ const CONTENT_PAGE_BYTES = 64 * 1024 * 1024;
9
+ /**
10
+ * The frame's held layers (HOLD_PUSH), drawn ahead of the stage a level at
11
+ * a time: their content side by side on pages, then their filters' passes
12
+ * in waves, each wave's targets on pages of their own; their outputs left
13
+ * on the pages for the frame's HELD composites.
14
+ */
15
+ export class HeldLayers {
16
+ gl;
17
+ state;
18
+ pool;
19
+ draws;
20
+ compositor;
21
+ gpu;
22
+ /** The filters' passes, the backend's. */
23
+ filters;
24
+ /**
25
+ * The frame's held layers (HOLD_PUSH); the pages they took, null once
26
+ * given back; the last wave each is read in, and whether an output is on
27
+ * it, which keeps it for the frame.
28
+ */
29
+ holds = [];
30
+ pages = [];
31
+ pageUntil = [];
32
+ pageKept = [];
33
+ /** A page drawn into whole, a held layer's rectangle of one, and a held output composited. */
34
+ pageOpen = { layer: null, msaa: null, x: 0, y: 0, width: 0, height: 0 };
35
+ holdOpen = { layer: null, msaa: null, x: 0, y: 0, width: 0, height: 0 };
36
+ heldOpen = { layer: null, msaa: null, x: 0, y: 0, width: 0, height: 0 };
37
+ shelves = new Shelves();
38
+ /** The masks pushed on the held layer whose content is drawn (drawHoldContent). */
39
+ masks = { depth: 0, past: 0 };
40
+ /** The largest side a texture may have. */
41
+ textureMost = 4096;
42
+ constructor(gl, state, pool, draws, compositor, gpu) {
43
+ this.gl = gl;
44
+ this.state = state;
45
+ this.pool = pool;
46
+ this.draws = draws;
47
+ this.compositor = compositor;
48
+ this.gpu = gpu;
49
+ }
50
+ /**
51
+ * The filters' passes and the largest side a texture may have, as the
52
+ * context comes or comes back.
53
+ */
54
+ setUp(filters, textureMost) {
55
+ this.filters = filters;
56
+ this.textureMost = textureMost;
57
+ }
58
+ /**
59
+ * The frame's held layers (HOLD_PUSH), drawn ahead of the stage side by
60
+ * side: their content on pages of their own, one bind, clear and resolve
61
+ * a page; then their filters' passes in waves, the k-th pass of every
62
+ * chain at once, each wave's targets on pages of its own, which no pass
63
+ * of it reads. Each layer's output is left on its page for HELD. A layer
64
+ * larger than a page is drawn alone, as a layer of its own.
65
+ */
66
+ drawHolds(commands, scene, filters, target) {
67
+ const count = this.gatherHolds(commands);
68
+ // A level at a time, which the planner gives in order: a held layer's content composites
69
+ // those in it, of the levels before.
70
+ for (let from = 0; from < count;) {
71
+ let to = from + 1;
72
+ while (to < count && this.holds[to].level === this.holds[from].level) {
73
+ to++;
74
+ }
75
+ this.drawHoldLevel(from, to, commands, scene, filters, target);
76
+ from = to;
77
+ }
78
+ }
79
+ /** Held layers `from` up to `to`, of one level, drawn side by side (drawHolds). */
80
+ drawHoldLevel(from, to, commands, scene, filters, target) {
81
+ const gl = this.gl;
82
+ const state = this.state;
83
+ const holds = this.holds;
84
+ // The pages this level takes, from here on, which its waves give back.
85
+ const levelPages = this.pages.length;
86
+ const shelves = this.shelves;
87
+ this.draws.forgetRow();
88
+ // Their content, each at the size its own layer would take, on pages no taller than the
89
+ // frame's samples fit (fittingSamples), so that each takes them as its own layer did.
90
+ let area = 0;
91
+ let widest = 0;
92
+ for (let h = from; h < to; h++) {
93
+ area += layerSide(holds[h].width) * layerSide(holds[h].height);
94
+ widest = Math.max(widest, layerSide(holds[h].width));
95
+ }
96
+ const samples = this.pool.frameSamples;
97
+ let width = this.pageWidth(area, widest);
98
+ const fitting = Math.max(LAYER_STEP, Math.floor(CONTENT_PAGE_BYTES / (width * samples * 8) / LAYER_STEP) * LAYER_STEP);
99
+ shelves.reset(width, samples > 1 ? Math.min(this.textureMost, fitting) : this.textureMost);
100
+ for (let h = from; h < to; h++) {
101
+ const hold = holds[h];
102
+ hold.shelf = shelves.add(layerSide(hold.width), layerSide(hold.height));
103
+ if (hold.shelf < 0) {
104
+ this.drawHoldAlone(hold, commands, scene, filters, target);
105
+ }
106
+ }
107
+ for (let p = 0; p < shelves.pages; p++) {
108
+ const index = this.takePage(width, shelves.heights[p]);
109
+ const page = this.pages[index];
110
+ const whole = this.pageOpen;
111
+ whole.layer = page;
112
+ whole.msaa = this.pool.layerMsaa(page, samples);
113
+ whole.width = page.width;
114
+ whole.height = page.height;
115
+ state.bindFramebuffer(framebufferOf(whole));
116
+ state.scissor(null);
117
+ state.stencil(null);
118
+ state.colorMask(15);
119
+ gl.clearColor(0, 0, 0, 0);
120
+ gl.clearStencil(0);
121
+ gl.stencilMask(0xff);
122
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
123
+ for (let h = from; h < to; h++) {
124
+ const hold = holds[h];
125
+ if (hold.shelf < 0 || shelves.page[hold.shelf] !== p) {
126
+ continue;
127
+ }
128
+ const content = this.holdOpen;
129
+ content.layer = page;
130
+ content.msaa = whole.msaa;
131
+ content.x = hold.x;
132
+ content.y = hold.y;
133
+ content.width = hold.width;
134
+ content.height = hold.height;
135
+ content.ox = shelves.x[hold.shelf];
136
+ content.oy = shelves.y[hold.shelf];
137
+ // Kept to its rectangle by the viewport alone, as the composites in it scissor themselves.
138
+ this.draws.drawInto(content, target);
139
+ this.drawHoldContent(commands, hold, scene, content);
140
+ this.slotOf(hold, 0, index, content.ox, content.oy, hold.width, hold.height);
141
+ }
142
+ this.pool.resolve(whole, page.width, page.height);
143
+ }
144
+ // Their filters, planned, then drawn a wave at a time: each wave's new targets on pages of its
145
+ // own, which none of its passes reads, as each reads what earlier waves drew. A page goes back
146
+ // once no pass after reads it, unless an output is on it.
147
+ let waves = 0;
148
+ for (let h = from; h < to; h++) {
149
+ const hold = holds[h];
150
+ if (hold.shelf < 0) {
151
+ continue;
152
+ }
153
+ const plan = hold.plan;
154
+ planChain(plan, filters, hold.chain, hold.width, hold.height, target.resolution, this.gpu.hasTexture, this.filters.links, hold.object);
155
+ hold.targets.length = plan.slots;
156
+ hold.targets.fill(null, 1);
157
+ hold.lastUse.length = plan.slots;
158
+ hold.lastUse.fill(-1);
159
+ for (let k = 0; k < plan.count; k++) {
160
+ const pass = plan.passes[k];
161
+ hold.lastUse[pass.input] = k;
162
+ hold.lastUse[pass.output] = k;
163
+ if (pass.blurred >= 0) {
164
+ hold.lastUse[pass.blurred] = k;
165
+ }
166
+ }
167
+ this.notePage(hold, 0);
168
+ waves = Math.max(waves, plan.count);
169
+ }
170
+ for (let k = 0; k < waves; k++) {
171
+ area = 0;
172
+ widest = 0;
173
+ for (let h = from; h < to; h++) {
174
+ const hold = holds[h];
175
+ const plan = hold.plan;
176
+ if (hold.shelf >= 0 && k < plan.count && !hold.targets[plan.passes[k].output]) {
177
+ const slot = plan.passes[k].output;
178
+ area += layerSide(plan.slotWidth[slot]) * layerSide(plan.slotHeight[slot]);
179
+ widest = Math.max(widest, layerSide(plan.slotWidth[slot]));
180
+ }
181
+ }
182
+ width = this.pageWidth(area, widest);
183
+ shelves.reset(width, this.textureMost);
184
+ for (let h = from; h < to; h++) {
185
+ const hold = holds[h];
186
+ const plan = hold.plan;
187
+ hold.wave = -1;
188
+ if (hold.shelf >= 0 && k < plan.count && !hold.targets[plan.passes[k].output]) {
189
+ const slot = plan.passes[k].output;
190
+ hold.wave = shelves.add(layerSide(plan.slotWidth[slot]), layerSide(plan.slotHeight[slot]));
191
+ }
192
+ }
193
+ const first = this.pages.length;
194
+ for (let p = 0; p < shelves.pages; p++) {
195
+ const page = this.pages[this.takePage(width, shelves.heights[p])];
196
+ state.bindFramebuffer(page.framebuffer);
197
+ state.scissor(null);
198
+ state.colorMask(15);
199
+ gl.clearColor(0, 0, 0, 0);
200
+ gl.clear(gl.COLOR_BUFFER_BIT);
201
+ }
202
+ for (let h = from; h < to; h++) {
203
+ const hold = holds[h];
204
+ if (hold.wave >= 0) {
205
+ const plan = hold.plan;
206
+ const slot = plan.passes[k].output;
207
+ this.slotOf(hold, slot, first + shelves.page[hold.wave], shelves.x[hold.wave], shelves.y[hold.wave], plan.slotWidth[slot], plan.slotHeight[slot]);
208
+ this.notePage(hold, slot);
209
+ }
210
+ }
211
+ // The passes drawing into one page together, so that it is bound once: a target drawn into
212
+ // again, as a blur's runs take turns between two, is on an earlier wave's page.
213
+ let left = 0;
214
+ for (let h = from; h < to; h++) {
215
+ const hold = holds[h];
216
+ hold.drawn = !(hold.shelf >= 0 && k < hold.plan.count);
217
+ left += hold.drawn ? 0 : 1;
218
+ }
219
+ while (left > 0) {
220
+ let page = -1;
221
+ for (let h = from; h < to; h++) {
222
+ const hold = holds[h];
223
+ if (hold.drawn) {
224
+ continue;
225
+ }
226
+ const output = hold.targets[hold.plan.passes[k].output];
227
+ if (page < 0) {
228
+ page = output.index;
229
+ }
230
+ if (output.index === page) {
231
+ this.filters.drawPass(hold.plan, k, hold.targets, false);
232
+ hold.drawn = true;
233
+ left--;
234
+ }
235
+ }
236
+ }
237
+ for (let index = levelPages; index < this.pages.length; index++) {
238
+ const page = this.pages[index];
239
+ if (page && !this.pageKept[index] && this.pageUntil[index] <= k) {
240
+ this.pool.giveLayer(page);
241
+ this.pages[index] = null;
242
+ }
243
+ }
244
+ }
245
+ for (let h = from; h < to; h++) {
246
+ const hold = holds[h];
247
+ if (hold.shelf >= 0) {
248
+ hold.result = hold.targets[hold.plan.result];
249
+ }
250
+ }
251
+ }
252
+ /**
253
+ * The width of a page for rectangles of `area` in all, the widest `widest`:
254
+ * about square, in LAYER_STEP's steps, at most PAGE_WIDTH.
255
+ */
256
+ pageWidth(area, widest) {
257
+ const square = Math.ceil(Math.sqrt(area) / LAYER_STEP) * LAYER_STEP;
258
+ return Math.min(this.textureMost, PAGE_WIDTH, Math.max(widest, square));
259
+ }
260
+ /** A page of at least `width` by `height` taken for the frame: its index in `pages`. */
261
+ takePage(width, height) {
262
+ return this.addPage(this.pool.takeLayer(width, height), false);
263
+ }
264
+ /**
265
+ * `layer` added to the frame's pages, read by no pass yet, kept for the
266
+ * frame where `kept`: its index in `pages`.
267
+ */
268
+ addPage(layer, kept) {
269
+ const index = this.pages.length;
270
+ this.pages.push(layer);
271
+ this.pageUntil.push(-1);
272
+ this.pageKept.push(kept);
273
+ return index;
274
+ }
275
+ /** Slot `slot` of `hold` noted on its page: read until its last pass, or kept as its output. */
276
+ notePage(hold, slot) {
277
+ const index = hold.targets[slot].index;
278
+ this.pageUntil[index] = Math.max(this.pageUntil[index], hold.lastUse[slot]);
279
+ if (slot === hold.plan.result) {
280
+ this.pageKept[index] = true;
281
+ }
282
+ }
283
+ /** The held layers' rectangles and operations (HOLD_PUSH), which the commands begin with: how many. */
284
+ gatherHolds(commands) {
285
+ const ops = commands.ops;
286
+ const params = commands.params;
287
+ const holds = this.holds;
288
+ let count = 0;
289
+ for (let k = 0; k < commands.length && ops[k * 4] === HOLD_PUSH; k++) {
290
+ const from = ops[k * 4 + 1];
291
+ let hold = holds[count];
292
+ if (!hold) {
293
+ hold = {
294
+ x: 0,
295
+ y: 0,
296
+ width: 0,
297
+ height: 0,
298
+ first: 0,
299
+ end: 0,
300
+ chain: 0,
301
+ object: null,
302
+ plan: new FilterPlan(),
303
+ targets: [],
304
+ slots: [],
305
+ lastUse: [],
306
+ result: null,
307
+ shelf: -1,
308
+ wave: -1,
309
+ drawn: false,
310
+ level: 0,
311
+ };
312
+ holds[count] = hold;
313
+ }
314
+ count++;
315
+ hold.level = ops[k * 4 + 3];
316
+ hold.x = params[from];
317
+ hold.y = params[from + 1];
318
+ hold.width = params[from + 2];
319
+ hold.height = params[from + 3];
320
+ hold.object = objectOf(params, from + 4);
321
+ hold.first = k + 1;
322
+ while (ops[k * 4] !== HOLD_POP) {
323
+ k++;
324
+ }
325
+ hold.end = k;
326
+ hold.chain = ops[k * 4 + 1];
327
+ hold.result = null;
328
+ hold.targets.length = 0;
329
+ }
330
+ return count;
331
+ }
332
+ /**
333
+ * Slot `slot` of `hold`'s targets: the rectangle of page `index` from (x,
334
+ * y) a target of `width` by `height` takes, as its own layer would; its
335
+ * record kept from frame to frame.
336
+ */
337
+ slotOf(hold, slot, index, x, y, width, height) {
338
+ const page = this.pages[index];
339
+ let record = hold.slots[slot];
340
+ if (!record) {
341
+ record = {
342
+ framebuffer: page.framebuffer,
343
+ texture: page.texture,
344
+ x,
345
+ y,
346
+ width,
347
+ height,
348
+ page,
349
+ index,
350
+ };
351
+ hold.slots[slot] = record;
352
+ }
353
+ record.framebuffer = page.framebuffer;
354
+ record.texture = page.texture;
355
+ record.x = x;
356
+ record.y = y;
357
+ record.width = layerSide(width);
358
+ record.height = layerSide(height);
359
+ record.page = page;
360
+ record.index = index;
361
+ hold.targets[slot] = record;
362
+ return record;
363
+ }
364
+ /**
365
+ * Held layer `hold`'s draws, masks and held layers' composites into
366
+ * `open`, bound, its stencil starting clear.
367
+ */
368
+ drawHoldContent(commands, hold, scene, open) {
369
+ const state = this.state;
370
+ const ops = commands.ops;
371
+ const masks = this.masks;
372
+ masks.depth = 0;
373
+ masks.past = 0;
374
+ state.stencil(null);
375
+ state.colorMask(15);
376
+ for (let k = hold.first; k < hold.end; k++) {
377
+ const at = k * 4;
378
+ switch (ops[at]) {
379
+ case RUN:
380
+ this.draws.drawRun(scene, ops[at + 1], ops[at + 1] + ops[at + 2], k);
381
+ break;
382
+ case STENCIL_PUSH:
383
+ case STENCIL_POP:
384
+ this.draws.drawMask(scene, ops[at + 1], ops[at + 1] + ops[at + 2], ops[at] === STENCIL_PUSH, masks, k);
385
+ break;
386
+ case HELD:
387
+ this.draws.maskBy(masks);
388
+ this.compositeHeld(ops[at + 1], open, ops[at + 2], ops[at + 3]);
389
+ break;
390
+ }
391
+ }
392
+ state.stencil(null);
393
+ }
394
+ /** Held output `held` composited onto `under`, bound, in blend mode `mode`, coloured by `row`. */
395
+ compositeHeld(held, under, mode, row) {
396
+ const hold = this.holds[held];
397
+ const result = hold.result;
398
+ if (!result) {
399
+ return;
400
+ }
401
+ const open = this.heldOpen;
402
+ open.layer = result.page;
403
+ open.x = hold.x;
404
+ open.y = hold.y;
405
+ open.width = hold.width;
406
+ open.height = hold.height;
407
+ open.ox = result.x;
408
+ open.oy = result.y;
409
+ this.compositor.compositeLayer(open, under, mode, row);
410
+ }
411
+ /**
412
+ * Held layer `hold`, too large for a page, drawn as a layer of its own and
413
+ * filtered there, its output left in a page of its own.
414
+ */
415
+ drawHoldAlone(hold, commands, scene, filters, target) {
416
+ const gl = this.gl;
417
+ const state = this.state;
418
+ const layer = this.pool.takeLayer(hold.width, hold.height, true);
419
+ const open = {
420
+ layer,
421
+ msaa: this.pool.layerMsaa(layer, this.pool.frameSamples),
422
+ x: hold.x,
423
+ y: hold.y,
424
+ width: hold.width,
425
+ height: hold.height,
426
+ };
427
+ this.draws.drawInto(open, target);
428
+ state.scissor(null);
429
+ state.colorMask(15);
430
+ state.stencil(null);
431
+ gl.clearColor(0, 0, 0, 0);
432
+ gl.clearStencil(0);
433
+ gl.stencilMask(0xff);
434
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
435
+ this.drawHoldContent(commands, hold, scene, open);
436
+ this.pool.resolve(open, layer.width, layer.height);
437
+ const output = this.filters.run(filters, hold.chain, layer, hold.width, hold.height, target.resolution, hold.object);
438
+ const index = this.addPage(output, true);
439
+ hold.result = this.slotOf(hold, 0, index, 0, 0, output.width, output.height);
440
+ }
441
+ /** The pages the frame took given back, as it ends. */
442
+ givePages() {
443
+ for (const page of this.pages) {
444
+ if (page) {
445
+ this.pool.giveLayer(page);
446
+ }
447
+ }
448
+ this.pages.length = 0;
449
+ this.pageUntil.length = 0;
450
+ this.pageKept.length = 0;
451
+ }
452
+ }
453
+ //# sourceMappingURL=holds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/webgl/holds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { type Target, WebGLBackend } from "./backend.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webgl/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ // The renderer's WebGL 2 backend (docs/renderer.md, "The backend"): the
2
+ // only part that calls the GPU.
3
+ export { WebGLBackend } from "./backend.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webgl/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,gCAAgC;AAChC,OAAO,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { type GlState } from "@swf2es/context3d/device";
2
+ import type { Filters } from "../filters.js";
3
+ import type { KernelImage } from "../kernel-shaders.js";
4
+ /**
5
+ * A Pixel Bender kernel's program: where it takes its uniforms, asked
6
+ * once each, and the values of up to four floats it was last told for
7
+ * each, by name (the filter runner's `set`).
8
+ */
9
+ export interface KernelProgram {
10
+ program: WebGLProgram;
11
+ uniforms: Map<string, WebGLUniformLocation | null>;
12
+ told: Map<string, Float32Array>;
13
+ at(name: string): WebGLUniformLocation | null;
14
+ }
15
+ /** Where kernels' programs find the textures their images are and the samplers they read them by. */
16
+ export interface KernelHost {
17
+ texture(id: number): WebGLTexture | null;
18
+ sampler(bits: number): WebGLSampler;
19
+ }
20
+ /**
21
+ * The first unit a kernel's own images are bound to, as many as
22
+ * kernel-shaders.ts's KERNEL_IMAGES: past every unit the other programs
23
+ * use (programs.ts's, and the filter passes' 4 to 6), as WebGL 2 has 32
24
+ * for a draw's programs together.
25
+ */
26
+ export declare const KERNEL_UNIT = 16;
27
+ /**
28
+ * The programs of Pixel Bender kernels, a ShaderFilter's, a blend
29
+ * shader's or a shader fill's, by their fragment shaders, each a use's
30
+ * own and so with one vertex shader:
31
+ * linked as first used, the one used longest ago deleted past
32
+ * KERNEL_PROGRAMS; null for one the GPU would not link, which its user
33
+ * draws otherwise. One for the backend, which its users share.
34
+ */
35
+ export declare class KernelPrograms {
36
+ private readonly gl;
37
+ private readonly state;
38
+ private readonly programs;
39
+ private readonly ints;
40
+ constructor(gl: WebGL2RenderingContext, state: GlState);
41
+ /**
42
+ * The program of `vertex` and `fragment`, in use; null where it would
43
+ * not link. `prepare` is told it as it is linked, to set its samplers.
44
+ */
45
+ use(vertex: string, fragment: string, prepare: (program: WebGLProgram) => void): KernelProgram | null;
46
+ /** Texture `id` bound to a kernel's own image unit `k`, which its sampler at `location` names. */
47
+ bindImage(location: WebGLUniformLocation | null, k: number, id: number, host: KernelHost): void;
48
+ /** `count` ints of `source` from `at` set as the ivec4 array at `location`, its program in use. */
49
+ setInts(location: WebGLUniformLocation | null, source: Int32Array, at: number, count: number): void;
50
+ /** What readImages reads into, its records kept from call to call. */
51
+ private readonly images;
52
+ /**
53
+ * The images of the kernel at entry `i` of `filters`, a blend shader's
54
+ * or a shader fill's, its values laid out as a ShaderFilter's
55
+ * (filters.ts, SHADER): -1 for what is below, -2 for the layer blended.
56
+ * Null where a texture of its own is gone, as such a kernel is left out.
57
+ */
58
+ readImages(filters: Filters, i: number, host: KernelHost): KernelImage[] | null;
59
+ /** The parameters and own images of the kernel at entry `i` of `filters` set on `kernel`, in use. */
60
+ setUniforms(kernel: KernelProgram, filters: Filters, i: number, host: KernelHost): void;
61
+ /** Every program deleted, as the backend goes; none kept, as a lost context comes back. */
62
+ clear(): void;
63
+ }
64
+ //# sourceMappingURL=kernels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernels.d.ts","sourceRoot":"","sources":["../../src/webgl/kernels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAA4B,MAAM,0BAA0B,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACnD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAAC;CAC/C;AAED,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACzC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;CACrC;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,KAAK,CAAC;AAK9B;;;;;;;GAOG;AACH,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAE1C,YACmB,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,OAAO,EAC7B;IAEJ;;;OAGG;IACH,GAAG,CACD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,GACvC,aAAa,GAAG,IAAI,CAsDtB;IAED,kGAAkG;IAClG,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAK9F;IAED,mGAAmG;IACnG,OAAO,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAQ3F;IAED,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,WAAW,EAAE,GAAG,IAAI,CAwB9E;IAED,qGAAqG;IACrG,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAsBtF;IAED,2FAA2F;IAC3F,KAAK,IAAI,IAAI,CAQZ;CACF"}