@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,480 @@
|
|
|
1
|
+
// A filtered layer's chain of Flash's filters as passes planned ahead of the
|
|
2
|
+
// GPU: for each pass, its program, the targets it reads and draws into, by
|
|
3
|
+
// slot, their frames, and its uniforms' values, as the backend's runner
|
|
4
|
+
// (webgl/filters.ts) draws them. Pure, so that a frame's chains can be
|
|
5
|
+
// planned all at once and their passes run in any order their slots allow.
|
|
6
|
+
import { BEVEL, BLUR, blurShrink, COLOR_MATRIX, CONVOLUTION, DISPLACEMENT, GLOW, GRADIENT, SHADER, } from "./filters.js";
|
|
7
|
+
import { filterKernel, kernelImagesFit, PIXELS_BACK, PIXELS_DOWN, } from "./kernel-shaders.js";
|
|
8
|
+
/** The passes' programs, each a fragment shader of filter-shaders.ts. */
|
|
9
|
+
export const BOX_PASS = 1;
|
|
10
|
+
export const SHRINK_PASS = 2;
|
|
11
|
+
export const READ_BACK_PASS = 3;
|
|
12
|
+
export const GLOW_PASS = 4;
|
|
13
|
+
export const BEVEL_PASS = 5;
|
|
14
|
+
export const GRADIENT_PASS = 6;
|
|
15
|
+
export const MATRIX_PASS = 7;
|
|
16
|
+
export const CONVOLUTION_PASS = 8;
|
|
17
|
+
export const DISPLACE_PASS = 9;
|
|
18
|
+
/** A Pixel Bender kernel's pass, its program FilterPass.kernel. */
|
|
19
|
+
export const KERNEL_PASS = 10;
|
|
20
|
+
/**
|
|
21
|
+
* How a uniform's values are set: one to four floats, an array of vec4s, a
|
|
22
|
+
* 4 by 4 matrix, an array of ivec4s, or a sampler, its value the texture of
|
|
23
|
+
* the frame's it reads.
|
|
24
|
+
*/
|
|
25
|
+
export const FLOATS = 1;
|
|
26
|
+
export const VEC4S = 2;
|
|
27
|
+
export const MATRIX4 = 3;
|
|
28
|
+
export const IVEC4S = 4;
|
|
29
|
+
export const SAMPLER = 5;
|
|
30
|
+
/** A pass's blurred input (FilterPass.blurred): none read, or the pass's input itself. */
|
|
31
|
+
export const NO_BLUR = -2;
|
|
32
|
+
export const INPUT_BLUR = -1;
|
|
33
|
+
/** The most floats a convolution's matrix takes in its shader: 57 vec4s. */
|
|
34
|
+
const CONVOLUTION_FLOATS = 57 * 4;
|
|
35
|
+
/**
|
|
36
|
+
* A chain's passes, its targets by slot, each a frame of a width and
|
|
37
|
+
* height, slot 0 the layer it runs on, and the slot its output is left
|
|
38
|
+
* in. Kept from chain to chain, its records reused.
|
|
39
|
+
*/
|
|
40
|
+
export class FilterPlan {
|
|
41
|
+
passes = [];
|
|
42
|
+
count = 0;
|
|
43
|
+
slotWidth = [];
|
|
44
|
+
slotHeight = [];
|
|
45
|
+
slots = 0;
|
|
46
|
+
result = 0;
|
|
47
|
+
/** The target's pixels a unit of its own, which the shaders read their input's size in. */
|
|
48
|
+
resolution = 1;
|
|
49
|
+
/** The uniforms: each one's name, how it is set, where its values start and how many. */
|
|
50
|
+
uniformName = [];
|
|
51
|
+
uniformKind = [];
|
|
52
|
+
uniformAt = [];
|
|
53
|
+
uniformCount = [];
|
|
54
|
+
uniforms = 0;
|
|
55
|
+
values = new Float32Array(1024);
|
|
56
|
+
valueCount = 0;
|
|
57
|
+
/** The ints of the IVEC4S uniforms, which floats would round: their uniformAt is in here. */
|
|
58
|
+
ints = new Int32Array(64);
|
|
59
|
+
intCount = 0;
|
|
60
|
+
/** Empty, for a chain run at `resolution` on a layer of `width` by `height`. */
|
|
61
|
+
reset(width, height, resolution) {
|
|
62
|
+
this.count = 0;
|
|
63
|
+
this.slots = 0;
|
|
64
|
+
this.uniforms = 0;
|
|
65
|
+
this.valueCount = 0;
|
|
66
|
+
this.intCount = 0;
|
|
67
|
+
this.resolution = resolution;
|
|
68
|
+
this.result = this.slot(width, height);
|
|
69
|
+
}
|
|
70
|
+
/** A new slot, a target of `width` by `height`. */
|
|
71
|
+
slot(width, height) {
|
|
72
|
+
this.slotWidth[this.slots] = width;
|
|
73
|
+
this.slotHeight[this.slots] = height;
|
|
74
|
+
return this.slots++;
|
|
75
|
+
}
|
|
76
|
+
/** A pass begun, its uniforms the ones set after it until the next. */
|
|
77
|
+
pass(program, input, readWidth, readHeight, output, width, height) {
|
|
78
|
+
let pass = this.passes[this.count];
|
|
79
|
+
if (!pass) {
|
|
80
|
+
pass = {
|
|
81
|
+
program: 0,
|
|
82
|
+
input: 0,
|
|
83
|
+
readWidth: 0,
|
|
84
|
+
readHeight: 0,
|
|
85
|
+
output: 0,
|
|
86
|
+
width: 0,
|
|
87
|
+
height: 0,
|
|
88
|
+
blurred: NO_BLUR,
|
|
89
|
+
across: 1,
|
|
90
|
+
down: 1,
|
|
91
|
+
texture: -1,
|
|
92
|
+
kernel: null,
|
|
93
|
+
first: 0,
|
|
94
|
+
end: 0,
|
|
95
|
+
};
|
|
96
|
+
this.passes[this.count] = pass;
|
|
97
|
+
}
|
|
98
|
+
this.count++;
|
|
99
|
+
pass.program = program;
|
|
100
|
+
pass.input = input;
|
|
101
|
+
pass.readWidth = readWidth;
|
|
102
|
+
pass.readHeight = readHeight;
|
|
103
|
+
pass.output = output;
|
|
104
|
+
pass.width = width;
|
|
105
|
+
pass.height = height;
|
|
106
|
+
pass.blurred = NO_BLUR;
|
|
107
|
+
pass.across = 1;
|
|
108
|
+
pass.down = 1;
|
|
109
|
+
pass.texture = -1;
|
|
110
|
+
pass.kernel = null;
|
|
111
|
+
pass.first = this.uniforms;
|
|
112
|
+
pass.end = this.uniforms;
|
|
113
|
+
return pass;
|
|
114
|
+
}
|
|
115
|
+
/** A uniform of `count` floats of the pass begun last, `x` and those after. */
|
|
116
|
+
uniform(name, count, x, y = 0, z = 0, w = 0) {
|
|
117
|
+
const four = this.four;
|
|
118
|
+
four[0] = x;
|
|
119
|
+
four[1] = y;
|
|
120
|
+
four[2] = z;
|
|
121
|
+
four[3] = w;
|
|
122
|
+
this.uniformFrom(name, FLOATS, four, 0, count);
|
|
123
|
+
}
|
|
124
|
+
/** uniform's values, passed on without an array of their own. */
|
|
125
|
+
four = new Float64Array(4);
|
|
126
|
+
/** A uniform of the pass begun last, set `kind` from `count` of `source` from `at`. */
|
|
127
|
+
uniformFrom(name, kind, source, at, count) {
|
|
128
|
+
const u = this.uniforms++;
|
|
129
|
+
this.uniformName[u] = name;
|
|
130
|
+
this.uniformKind[u] = kind;
|
|
131
|
+
this.uniformAt[u] = this.valueCount;
|
|
132
|
+
this.uniformCount[u] = count;
|
|
133
|
+
if (this.valueCount + count > this.values.length) {
|
|
134
|
+
const grown = new Float32Array(Math.max(this.values.length * 2, this.valueCount + count));
|
|
135
|
+
grown.set(this.values);
|
|
136
|
+
this.values = grown;
|
|
137
|
+
}
|
|
138
|
+
for (let k = 0; k < count; k++) {
|
|
139
|
+
this.values[this.valueCount + k] = source[at + k];
|
|
140
|
+
}
|
|
141
|
+
this.valueCount += count;
|
|
142
|
+
this.passes[this.count - 1].end = this.uniforms;
|
|
143
|
+
}
|
|
144
|
+
/** An array of ivec4s of the pass begun last, `count` ints of `source` from `at`. */
|
|
145
|
+
uniformInts(name, source, at, count) {
|
|
146
|
+
const u = this.uniforms++;
|
|
147
|
+
this.uniformName[u] = name;
|
|
148
|
+
this.uniformKind[u] = IVEC4S;
|
|
149
|
+
this.uniformAt[u] = this.intCount;
|
|
150
|
+
this.uniformCount[u] = count;
|
|
151
|
+
if (this.intCount + count > this.ints.length) {
|
|
152
|
+
const grown = new Int32Array(Math.max(this.ints.length * 2, this.intCount + count));
|
|
153
|
+
grown.set(this.ints);
|
|
154
|
+
this.ints = grown;
|
|
155
|
+
}
|
|
156
|
+
this.ints.set(source.subarray(at, at + count), this.intCount);
|
|
157
|
+
this.intCount += count;
|
|
158
|
+
this.passes[this.count - 1].end = this.uniforms;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Chain `chain` of `filters` planned into `plan` over a layer of `width` by
|
|
163
|
+
* `height` texels at `resolution`, `hasTexture` telling which of the
|
|
164
|
+
* frame's textures there are: a filter whose texture is not leaves its
|
|
165
|
+
* input as it is, as one that changes nothing does; `links` whether a
|
|
166
|
+
* kernel's pass's fragment shader links, as one that does not leaves it
|
|
167
|
+
* too; `object` where the layer's object lies in it.
|
|
168
|
+
*/
|
|
169
|
+
export function planChain(plan, filters, chain, width, height, resolution, hasTexture, links = () => true, object = null) {
|
|
170
|
+
plan.reset(width, height, resolution);
|
|
171
|
+
const end = filters.chains[chain + 1];
|
|
172
|
+
for (let i = filters.chains[chain]; i < end; i++) {
|
|
173
|
+
plan.result =
|
|
174
|
+
filters.kind[i] === SHADER
|
|
175
|
+
? shader(plan, filters, i, plan.result, width, height, hasTexture, links, object)
|
|
176
|
+
: planFilter(plan, filters.kind[i], filters.values, filters.start[i], filters.texture[i], plan.result, width, height, hasTexture);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** One filter, its values from `v[at]`, over slot `input`: the slot it drew into, or `input`. */
|
|
180
|
+
function planFilter(plan, kind, v, at, texture, input, width, height, hasTexture) {
|
|
181
|
+
switch (kind) {
|
|
182
|
+
case BLUR:
|
|
183
|
+
return blurFilter(plan, v, at, input, width, height);
|
|
184
|
+
case GLOW:
|
|
185
|
+
return glow(plan, v, at, input, width, height);
|
|
186
|
+
case BEVEL:
|
|
187
|
+
return bevel(plan, v, at, input, width, height);
|
|
188
|
+
case GRADIENT:
|
|
189
|
+
return hasTexture(texture) ? gradient(plan, v, at, texture, input, width, height) : input;
|
|
190
|
+
case COLOR_MATRIX:
|
|
191
|
+
return colorMatrix(plan, v, at, input, width, height);
|
|
192
|
+
case CONVOLUTION:
|
|
193
|
+
return convolution(plan, v, at, input, width, height);
|
|
194
|
+
case DISPLACEMENT:
|
|
195
|
+
return hasTexture(texture) ? displacement(plan, v, at, texture, input, width, height) : input;
|
|
196
|
+
default:
|
|
197
|
+
return input;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/** A blur: the box's runs, done coarser and drawn back between their texels where that is close enough. */
|
|
201
|
+
function blurFilter(plan, v, at, input, width, height) {
|
|
202
|
+
const blurX = v[at];
|
|
203
|
+
const blurY = v[at + 1];
|
|
204
|
+
const quality = v[at + 2];
|
|
205
|
+
if (!(quality > 0 && (blurX > 1 || blurY > 1))) {
|
|
206
|
+
return input;
|
|
207
|
+
}
|
|
208
|
+
const texels = plan.resolution * v[at + 3];
|
|
209
|
+
const across = blurShrink(blurX, quality, 1, texels);
|
|
210
|
+
const down = blurShrink(blurY, quality, 1, texels);
|
|
211
|
+
if (across === 1 && down === 1) {
|
|
212
|
+
const out = plan.slot(width, height);
|
|
213
|
+
boxRuns(plan, input, width, height, out, blurX, blurY, quality, texels, texels);
|
|
214
|
+
return out;
|
|
215
|
+
}
|
|
216
|
+
const blurred = blurredOf(plan, input, width, height, blurX, blurY, quality, texels, across, down);
|
|
217
|
+
const out = plan.slot(width, height);
|
|
218
|
+
readBlurred(plan.pass(READ_BACK_PASS, input, width, height, out, width, height), blurred);
|
|
219
|
+
return out;
|
|
220
|
+
}
|
|
221
|
+
/** A glow or a drop shadow: the input's alpha blurred, coarser where close enough, in its colour. */
|
|
222
|
+
function glow(plan, v, at, input, width, height) {
|
|
223
|
+
const blurX = v[at];
|
|
224
|
+
const blurY = v[at + 1];
|
|
225
|
+
const quality = v[at + 2];
|
|
226
|
+
const strength = v[at + 8];
|
|
227
|
+
const texels = plan.resolution * v[at + 3];
|
|
228
|
+
const across = blurShrink(blurX, quality, strength, texels);
|
|
229
|
+
const down = blurShrink(blurY, quality, strength, texels);
|
|
230
|
+
const blurred = blurredOf(plan, input, width, height, blurX, blurY, quality, texels, across, down);
|
|
231
|
+
const out = plan.slot(width, height);
|
|
232
|
+
readBlurred(plan.pass(GLOW_PASS, input, width, height, out, width, height), blurred);
|
|
233
|
+
plan.uniformFrom("uColor", FLOATS, v, at + 4, 3);
|
|
234
|
+
plan.uniform("uAlpha", 1, v[at + 7]);
|
|
235
|
+
plan.uniform("uStrength", 1, strength);
|
|
236
|
+
plan.uniformFrom("uOffset", FLOATS, v, at + 9, 2);
|
|
237
|
+
plan.uniform("uInner", 1, v[at + 11]);
|
|
238
|
+
plan.uniform("uKnockout", 1, v[at + 12]);
|
|
239
|
+
plan.uniform("uHide", 1, v[at + 13]);
|
|
240
|
+
return out;
|
|
241
|
+
}
|
|
242
|
+
/** A bevel: the input's alpha blurred, read on and back by its offset. */
|
|
243
|
+
function bevel(plan, v, at, input, width, height) {
|
|
244
|
+
const texels = plan.resolution * v[at + 3];
|
|
245
|
+
const blurred = blurredOf(plan, input, width, height, v[at], v[at + 1], v[at + 2], texels, 1, 1);
|
|
246
|
+
const out = plan.slot(width, height);
|
|
247
|
+
readBlurred(plan.pass(BEVEL_PASS, input, width, height, out, width, height), blurred);
|
|
248
|
+
plan.uniformFrom("uHighlight", FLOATS, v, at + 4, 3);
|
|
249
|
+
plan.uniformFrom("uShadow", FLOATS, v, at + 7, 3);
|
|
250
|
+
plan.uniform("uHighlightAlpha", 1, v[at + 10]);
|
|
251
|
+
plan.uniform("uShadowAlpha", 1, v[at + 11]);
|
|
252
|
+
plan.uniform("uStrength", 1, v[at + 12]);
|
|
253
|
+
plan.uniformFrom("uOffset", FLOATS, v, at + 13, 2);
|
|
254
|
+
plan.uniform("uType", 1, v[at + 15]);
|
|
255
|
+
plan.uniform("uKnockout", 1, v[at + 16]);
|
|
256
|
+
return out;
|
|
257
|
+
}
|
|
258
|
+
/** A gradient glow or bevel: the blurred alpha picking a colour of its gradient, texture `id`. */
|
|
259
|
+
function gradient(plan, v, at, id, input, width, height) {
|
|
260
|
+
const units = v[at + 3];
|
|
261
|
+
const texels = plan.resolution * units;
|
|
262
|
+
const blurred = blurredOf(plan, input, width, height, v[at], v[at + 1], v[at + 2], texels, 1, 1);
|
|
263
|
+
const out = plan.slot(width, height);
|
|
264
|
+
const pass = plan.pass(GRADIENT_PASS, input, width, height, out, width, height);
|
|
265
|
+
readBlurred(pass, blurred);
|
|
266
|
+
pass.texture = id;
|
|
267
|
+
plan.uniform("uStrength", 1, v[at + 4]);
|
|
268
|
+
plan.uniformFrom("uOffset", FLOATS, v, at + 5, 2);
|
|
269
|
+
plan.uniform("uType", 1, v[at + 7]);
|
|
270
|
+
plan.uniform("uKnockout", 1, v[at + 8]);
|
|
271
|
+
plan.uniform("uBevel", 1, v[at + 9]);
|
|
272
|
+
const inset = v[at + 10];
|
|
273
|
+
plan.uniform("uRegion", 4, inset - v[at + 11] * units, inset - v[at + 12] * units, width / plan.resolution - inset + units + v[at + 13] * units, height / plan.resolution - inset + units + v[at + 14] * units);
|
|
274
|
+
return out;
|
|
275
|
+
}
|
|
276
|
+
function colorMatrix(plan, v, at, input, width, height) {
|
|
277
|
+
const out = plan.slot(width, height);
|
|
278
|
+
plan.pass(MATRIX_PASS, input, width, height, out, width, height);
|
|
279
|
+
plan.uniformFrom("uMatrix", MATRIX4, v, at, 16);
|
|
280
|
+
plan.uniformFrom("uOffset", FLOATS, v, at + 16, 4);
|
|
281
|
+
return out;
|
|
282
|
+
}
|
|
283
|
+
/** A convolution's weights, its matrix by rows padded to the shader's array. */
|
|
284
|
+
const weights = new Float32Array(CONVOLUTION_FLOATS);
|
|
285
|
+
function convolution(plan, v, at, input, width, height) {
|
|
286
|
+
const columns = v[at];
|
|
287
|
+
const rows = v[at + 1];
|
|
288
|
+
weights.fill(0);
|
|
289
|
+
weights.set(v.subarray(at + 12, at + 12 + Math.min(columns * rows, weights.length)));
|
|
290
|
+
const out = plan.slot(width, height);
|
|
291
|
+
plan.pass(CONVOLUTION_PASS, input, width, height, out, width, height);
|
|
292
|
+
plan.uniformFrom("uMatrix", VEC4S, weights, 0, weights.length);
|
|
293
|
+
plan.uniform("uSize", 2, columns, rows);
|
|
294
|
+
plan.uniformFrom("uEdge", FLOATS, v, at + 2, 4);
|
|
295
|
+
plan.uniform("uDivisor", 1, v[at + 6]);
|
|
296
|
+
plan.uniform("uReciprocal", 1, v[at + 7]);
|
|
297
|
+
plan.uniform("uBias", 1, v[at + 8]);
|
|
298
|
+
plan.uniform("uClamp", 1, v[at + 9]);
|
|
299
|
+
plan.uniform("uPreserve", 1, v[at + 10]);
|
|
300
|
+
const inset = v[at + 11];
|
|
301
|
+
plan.uniform("uBox", 4, inset, inset, width / plan.resolution - inset + 1, height / plan.resolution - inset + 1);
|
|
302
|
+
return out;
|
|
303
|
+
}
|
|
304
|
+
/** A displacement map: each of the object's pixels read from where its map, texture `id`, moves it. */
|
|
305
|
+
function displacement(plan, v, at, id, input, width, height) {
|
|
306
|
+
const out = plan.slot(width, height);
|
|
307
|
+
const pass = plan.pass(DISPLACE_PASS, input, width, height, out, width, height);
|
|
308
|
+
pass.texture = id;
|
|
309
|
+
plan.uniformFrom("uComponentX", FLOATS, v, at, 4);
|
|
310
|
+
plan.uniformFrom("uComponentY", FLOATS, v, at + 4, 4);
|
|
311
|
+
plan.uniformFrom("uScale", FLOATS, v, at + 8, 2);
|
|
312
|
+
plan.uniform("uMode", 1, v[at + 10]);
|
|
313
|
+
plan.uniformFrom("uColor", FLOATS, v, at + 11, 4);
|
|
314
|
+
plan.uniformFrom("uGrow", FLOATS, v, at + 15, 2);
|
|
315
|
+
const inset = v[at + 17];
|
|
316
|
+
plan.uniform("uBox", 4, inset, inset, width / plan.resolution - inset + 1, height / plan.resolution - inset + 1);
|
|
317
|
+
plan.uniform("uMapAt", 4, inset + v[at + 18], inset + v[at + 19], v[at + 20], v[at + 21]);
|
|
318
|
+
return out;
|
|
319
|
+
}
|
|
320
|
+
/** A kernel's images, read as the plan's of a ShaderFilter are: each one's number and kind. */
|
|
321
|
+
const kernelImages = [];
|
|
322
|
+
/**
|
|
323
|
+
* A ShaderFilter, filter `i` of `filters`: its kernel (kernel-shaders.ts,
|
|
324
|
+
* filterKernel) over the input, the bitmap it reads lying where the
|
|
325
|
+
* object's does, grown by the filters before it, and its output that
|
|
326
|
+
* grown by its extensions; its images and parameters as uniforms. Run
|
|
327
|
+
* once a stage pixel, as Flash runs it over its bitmap of the object:
|
|
328
|
+
* where a whole number of the input's texels make a stage pixel and the
|
|
329
|
+
* bitmap starts on a texel, the input is shrunk to one a pixel on the
|
|
330
|
+
* bitmap's grid, the mean of its texels within the frame, run, and drawn
|
|
331
|
+
* back, each texel its pixel's; else run at each texel. One of whose
|
|
332
|
+
* images there is no texture, of more images than a program binds, or
|
|
333
|
+
* whose shader will not link, leaves its input be.
|
|
334
|
+
*/
|
|
335
|
+
function shader(plan, filters, i, input, width, height, hasTexture, links, object) {
|
|
336
|
+
const v = filters.values;
|
|
337
|
+
const at = filters.start[i];
|
|
338
|
+
const kernel = filters.kernels[i];
|
|
339
|
+
const units = v[at];
|
|
340
|
+
const inset = v[at + 1];
|
|
341
|
+
const padding = v[at + 2];
|
|
342
|
+
const count = v[at + 7];
|
|
343
|
+
kernelImages.length = 0;
|
|
344
|
+
for (let k = 0; k < count; k++) {
|
|
345
|
+
const id = v[at + 9 + k * 3];
|
|
346
|
+
if (id >= 0 && !hasTexture(id)) {
|
|
347
|
+
return input;
|
|
348
|
+
}
|
|
349
|
+
kernelImages.push({ texture: v[at + 8 + k * 3], layer: id < 0, float: v[at + 10 + k * 3] > 0 });
|
|
350
|
+
}
|
|
351
|
+
const fragment = kernel ? filterKernel(kernel, kernelImages) : null;
|
|
352
|
+
if (!fragment || !kernelImagesFit(kernelImages) || !links(fragment)) {
|
|
353
|
+
return input;
|
|
354
|
+
}
|
|
355
|
+
// The bitmap this filter reads: the object's, grown by the filters before it.
|
|
356
|
+
const res = plan.resolution;
|
|
357
|
+
const texels = units * res;
|
|
358
|
+
const before = (padding - inset) * res;
|
|
359
|
+
const x = (object ? object.x : padding * res) - before;
|
|
360
|
+
const y = (object ? object.y : padding * res) - before;
|
|
361
|
+
const bitmapWidth = (object ? object.width : width - padding * res * 2) + before * 2;
|
|
362
|
+
const bitmapHeight = (object ? object.height : height - padding * res * 2) + before * 2;
|
|
363
|
+
const shrink = texels > 1 &&
|
|
364
|
+
texels <= 16 &&
|
|
365
|
+
Number.isInteger(texels) &&
|
|
366
|
+
Number.isInteger(x) &&
|
|
367
|
+
Number.isInteger(y)
|
|
368
|
+
? texels
|
|
369
|
+
: 1;
|
|
370
|
+
// The grid's first pixel from the frame's corner, at or before it, a line of it on the bitmap's.
|
|
371
|
+
const startX = x - shrink * Math.ceil(x / shrink);
|
|
372
|
+
const startY = y - shrink * Math.ceil(y / shrink);
|
|
373
|
+
let from = input;
|
|
374
|
+
let w = width;
|
|
375
|
+
let h = height;
|
|
376
|
+
if (shrink > 1) {
|
|
377
|
+
w = Math.ceil((width - startX) / shrink);
|
|
378
|
+
h = Math.ceil((height - startY) / shrink);
|
|
379
|
+
from = plan.slot(w, h);
|
|
380
|
+
plan.pass(KERNEL_PASS, input, width, height, from, w, h).kernel = PIXELS_DOWN;
|
|
381
|
+
plan.uniform("uDown", 3, shrink, startX, startY);
|
|
382
|
+
plan.uniform("uKernelFrame", 2, width, height);
|
|
383
|
+
}
|
|
384
|
+
let out = plan.slot(w, h);
|
|
385
|
+
const pass = plan.pass(KERNEL_PASS, from, w, h, out, w, h);
|
|
386
|
+
pass.kernel = fragment;
|
|
387
|
+
plan.uniform("uKernelAt", 3, (x - startX) / shrink, (y - startY) / shrink, texels / shrink);
|
|
388
|
+
plan.uniform("uKernelFrame", 2, w, h);
|
|
389
|
+
plan.uniform("uKernelRegion", 4, -v[at + 3], -v[at + 4], bitmapWidth / texels + v[at + 5], bitmapHeight / texels + v[at + 6]);
|
|
390
|
+
for (let k = 0; k < count; k++) {
|
|
391
|
+
if (v[at + 9 + k * 3] >= 0) {
|
|
392
|
+
plan.uniformFrom(`pbImage${v[at + 8 + k * 3]}`, SAMPLER, v, at + 9 + k * 3, 1);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
const floats = at + 8 + count * 3;
|
|
396
|
+
if (v[floats] > 0) {
|
|
397
|
+
plan.uniformFrom("pbFloats", VEC4S, v, floats + 1, v[floats]);
|
|
398
|
+
}
|
|
399
|
+
const intsAt = filters.intStart[i];
|
|
400
|
+
const ints = filters.intStart[i + 1] - intsAt;
|
|
401
|
+
if (ints > 0) {
|
|
402
|
+
plan.uniformInts("pbInts", filters.ints, intsAt, ints);
|
|
403
|
+
}
|
|
404
|
+
if (shrink > 1) {
|
|
405
|
+
const pixels = out;
|
|
406
|
+
out = plan.slot(width, height);
|
|
407
|
+
plan.pass(KERNEL_PASS, pixels, w, h, out, width, height).kernel = PIXELS_BACK;
|
|
408
|
+
plan.uniform("uDown", 3, shrink, startX, startY);
|
|
409
|
+
}
|
|
410
|
+
return out;
|
|
411
|
+
}
|
|
412
|
+
/** `pass` reading `blurred` as its blur, or its input where nothing blurred it. */
|
|
413
|
+
function readBlurred(pass, blurred) {
|
|
414
|
+
pass.blurred = blurred ? blurred.slot : INPUT_BLUR;
|
|
415
|
+
pass.across = blurred ? blurred.across : 1;
|
|
416
|
+
pass.down = blurred ? blurred.down : 1;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* The box's runs over `input`'s frame into a new slot, `across` times
|
|
420
|
+
* narrower and `down` times lower (blurShrink); null where no run would
|
|
421
|
+
* change it.
|
|
422
|
+
*/
|
|
423
|
+
function blurredOf(plan, input, width, height, blurX, blurY, quality, texels, across, down) {
|
|
424
|
+
if (!(quality > 0 && (blurX > 1 || blurY > 1))) {
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
let source = input;
|
|
428
|
+
let w = width;
|
|
429
|
+
let h = height;
|
|
430
|
+
if (across > 1 || down > 1) {
|
|
431
|
+
w = Math.ceil(width / across);
|
|
432
|
+
h = Math.ceil(height / down);
|
|
433
|
+
source = plan.slot(w, h);
|
|
434
|
+
plan.pass(SHRINK_PASS, input, w * across, h * down, source, w, h);
|
|
435
|
+
plan.uniform("uFactor", 2, across, down);
|
|
436
|
+
}
|
|
437
|
+
const out = plan.slot(w, h);
|
|
438
|
+
boxRuns(plan, source, w, h, out, blurX, blurY, quality, texels / across, texels / down);
|
|
439
|
+
blurredScratch.slot = out;
|
|
440
|
+
blurredScratch.across = across;
|
|
441
|
+
blurredScratch.down = down;
|
|
442
|
+
return blurredScratch;
|
|
443
|
+
}
|
|
444
|
+
/** What blurredOf gives, read before it is asked again. */
|
|
445
|
+
const blurredScratch = { slot: 0, across: 1, down: 1 };
|
|
446
|
+
/**
|
|
447
|
+
* The box's runs over slot `input`'s frame into slot `output`'s, through
|
|
448
|
+
* slots between them, the second only where a third run needs one:
|
|
449
|
+
* `texelsX` and `texelsY` to a stage pixel each way, which the blur is in,
|
|
450
|
+
* each step a texel of the input.
|
|
451
|
+
*/
|
|
452
|
+
function boxRuns(plan, input, width, height, output, blurX, blurY, quality, texelsX, texelsY) {
|
|
453
|
+
const step = 1 / plan.resolution;
|
|
454
|
+
const across = blurX > 1;
|
|
455
|
+
const down = blurY > 1;
|
|
456
|
+
const runs = quality * ((across ? 1 : 0) + (down ? 1 : 0));
|
|
457
|
+
if (runs === 0) {
|
|
458
|
+
plan.pass(BOX_PASS, input, width, height, output, width, height);
|
|
459
|
+
plan.uniform("uDirection", 2, 1, 0);
|
|
460
|
+
plan.uniform("uWidth", 1, 1);
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
const first = runs > 1 ? plan.slot(width, height) : -1;
|
|
464
|
+
const second = runs > 2 ? plan.slot(width, height) : -1;
|
|
465
|
+
let from = input;
|
|
466
|
+
for (let k = 0; k < runs; k++) {
|
|
467
|
+
const to = k === runs - 1 ? output : k % 2 === 0 ? first : second;
|
|
468
|
+
plan.pass(BOX_PASS, from, width, height, to, width, height);
|
|
469
|
+
if (across && (!down || k % 2 === 0)) {
|
|
470
|
+
plan.uniform("uDirection", 2, step, 0);
|
|
471
|
+
plan.uniform("uWidth", 1, blurX * texelsX);
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
plan.uniform("uDirection", 2, 0, step);
|
|
475
|
+
plan.uniform("uWidth", 1, blurY * texelsY);
|
|
476
|
+
}
|
|
477
|
+
from = to;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=filter-plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-plan.js","sourceRoot":"","sources":["../src/filter-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Truncated to 8 bits, as adl's each pass is: a hair over, so that an exact value stays. */
|
|
2
|
+
export declare const TRUNCATE = "floor(c * 255.0 + 0.001) / 255.0";
|
|
3
|
+
/**
|
|
4
|
+
* One run of the box one way: `uWidth` texels wide, its end texels weighted
|
|
5
|
+
* by their part; `uDirection` a texel's step in the input's pixels, which
|
|
6
|
+
* uInputSize gives the coordinates in.
|
|
7
|
+
*/
|
|
8
|
+
export declare const BOX = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\n// As the vertex shader has it, which is highp: a program's uniforms agree.\nuniform highp vec4 uInputSize;\nuniform vec2 uDirection;\nuniform float uWidth;\nvoid main(void) {\n float half_ = uWidth * 0.5;\n int reach = int(ceil(half_));\n vec4 sum = vec4(0.0);\n // As far as 255 pixels at 4 texels a pixel, each way.\n for (int i = 0; i <= 2040; i++) {\n if (i > 2 * reach) { break; }\n float f = float(i - reach);\n float weight = max(0.0, min(f + 0.5, half_) - max(f - 0.5, -half_));\n sum += texture(uTexture, vTextureCoord + uDirection * uInputSize.zw * f) * weight;\n }\n vec4 c = sum / uWidth;\n finalColor = floor(c * 255.0 + 0.001) / 255.0;\n}";
|
|
9
|
+
export declare const SHRINK = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform highp vec4 uInputPixel;\nuniform vec2 uFactor;\nvoid main(void) {\n vec4 sum = vec4(0.0);\n vec2 centre = (uFactor - 1.0) * 0.5;\n for (int j = 0; j < 16; j += 2) {\n float y = float(j);\n if (y >= uFactor.y) { break; }\n float ny = min(2.0, uFactor.y - y);\n for (int i = 0; i < 16; i += 2) {\n float x = float(i);\n if (x >= uFactor.x) { break; }\n float nx = min(2.0, uFactor.x - x);\n vec2 at = vec2(x, y) + (vec2(nx, ny) - 1.0) * 0.5 - centre;\n sum += texture(uTexture, vTextureCoord + at * uInputPixel.zw) * (nx * ny);\n }\n }\n finalColor = sum / (uFactor.x * uFactor.y);\n}";
|
|
10
|
+
/** A blur's runs, done coarser (blurred), drawn back between their texels over the input's frame. */
|
|
11
|
+
export declare const READ_BACK = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uBlurred;\nuniform vec2 uBlurredScale;\nvoid main(void) {\n finalColor = texture(uBlurred, vTextureCoord * uBlurredScale);\n}";
|
|
12
|
+
/**
|
|
13
|
+
* A glow or a shadow: the input's blurred alpha (uBlurred), from `uOffset`
|
|
14
|
+
* texels back for a shadow, times strength and alpha, in its colour; behind
|
|
15
|
+
* the object, or inside it for an inner one; the object kept, or not.
|
|
16
|
+
*/
|
|
17
|
+
export declare const GLOW = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform sampler2D uBlurred;\nuniform highp vec4 uInputSize;\nuniform vec3 uColor;\nuniform float uAlpha;\nuniform float uStrength;\nuniform vec2 uOffset;\nuniform vec2 uBlurredScale;\nuniform float uInner;\nuniform float uKnockout;\nuniform float uHide;\nvoid main(void) {\n vec4 src = texture(uTexture, vTextureCoord);\n float a = texture(uBlurred, (vTextureCoord - uOffset * uInputSize.zw) * uBlurredScale).a;\n vec4 c;\n if (uInner > 0.5) {\n float g = clamp((1.0 - a) * uStrength, 0.0, 1.0) * uAlpha * src.a;\n vec4 glow = vec4(uColor * g, g);\n c = uKnockout > 0.5 ? glow : glow + src * (1.0 - g);\n } else {\n float g = clamp(a * uStrength, 0.0, 1.0) * uAlpha;\n vec4 glow = vec4(uColor * g, g);\n c = uKnockout > 0.5 ? glow * (1.0 - src.a) : uHide > 0.5 ? glow : src + glow * (1.0 - src.a);\n }\n finalColor = floor(c * 255.0 + 0.001) / 255.0;\n}";
|
|
18
|
+
/**
|
|
19
|
+
* A bevel: the input's blurred alpha (uBlurred) from uOffset texels on and
|
|
20
|
+
* back; their difference times strength, clamped, times the colour's alpha,
|
|
21
|
+
* the highlight where on is more and the shadow where it is less. Inner
|
|
22
|
+
* (uType 0) atop the object, outer (1) behind it, full (2) over it;
|
|
23
|
+
* knocked out, alone, masked to where the object is (inner) or is not
|
|
24
|
+
* (outer).
|
|
25
|
+
*/
|
|
26
|
+
export declare const BEVEL = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform sampler2D uBlurred;\nuniform highp vec4 uInputSize;\nuniform vec3 uHighlight;\nuniform vec3 uShadow;\nuniform float uHighlightAlpha;\nuniform float uShadowAlpha;\nuniform float uStrength;\nuniform vec2 uOffset;\nuniform float uType;\nuniform float uKnockout;\nvoid main(void) {\n // Keep source samples sharp; the bevel reads alpha at a stage pixel's centre.\n vec2 at = (floor(vTextureCoord * uInputSize.xy) + 0.5) * uInputSize.zw;\n vec4 src = texture(uTexture, vTextureCoord);\n vec2 step_ = uOffset * uInputSize.zw;\n // In 255ths, each read truncated, as adl's are.\n float on = floor(texture(uBlurred, at + step_).a * 255.0 + 0.001);\n float back = floor(texture(uBlurred, at - step_).a * 255.0 + 0.001);\n float d = on - back;\n bool lit = d > 0.0;\n float strong = min(255.0, floor(abs(d) * uStrength + 0.001));\n float la = floor(strong * (lit ? uHighlightAlpha : uShadowAlpha) + 0.5) / 255.0;\n float m = uType < 0.5 ? src.a : (uType < 1.5 && uKnockout > 0.5 ? 1.0 - src.a : 1.0);\n vec4 layer = vec4((lit ? uHighlight : uShadow) * la, la) * m;\n vec4 c;\n if (uKnockout > 0.5) {\n c = layer;\n } else if (uType > 0.5 && uType < 1.5) {\n c = src + layer * (1.0 - src.a);\n } else {\n c = layer + src * (1.0 - (uType < 0.5 ? la : layer.a));\n }\n finalColor = floor(c * 255.0 + 0.001) / 255.0;\n}";
|
|
27
|
+
/**
|
|
28
|
+
* How a bevel or a gradient filter places its layer (premultiplied) on the
|
|
29
|
+
* object's pixel, as bitmap/filters' placer does: masked to where the
|
|
30
|
+
* object is (uType 0, inner) or, knocked out, is not (1, outer); inner
|
|
31
|
+
* atop it, outer behind it, full (2) over it, knocked out alone.
|
|
32
|
+
*/
|
|
33
|
+
export declare const PLACE = "vec4 place(vec4 src, vec4 layer) {\n float m = uType < 0.5 ? src.a : (uType < 1.5 && uKnockout > 0.5 ? 1.0 - src.a : 1.0);\n vec4 masked = layer * m;\n if (uKnockout > 0.5) {\n return masked;\n }\n if (uType > 0.5 && uType < 1.5) {\n return src + masked * (1.0 - src.a);\n }\n return masked + src * (1.0 - (uType < 0.5 ? layer.a : masked.a));\n}";
|
|
34
|
+
/**
|
|
35
|
+
* A gradient glow: the input's blurred alpha (uBlurred) from uOffset back,
|
|
36
|
+
* as a shadow reads it, times strength, picking a texel of the gradient
|
|
37
|
+
* (uGradient, 256 wide); a gradient bevel (uBevel 1): the difference of
|
|
38
|
+
* that alpha on and back, the middle of the gradient where they agree.
|
|
39
|
+
* Each pixel is evaluated once, at its centre, in 255ths truncated.
|
|
40
|
+
*/
|
|
41
|
+
export declare const GRADIENT = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform sampler2D uBlurred;\nuniform sampler2D uGradient;\nuniform highp vec4 uInputSize;\nuniform float uStrength;\nuniform vec2 uOffset;\nuniform float uType;\nuniform float uKnockout;\nuniform float uBevel;\nuniform vec4 uRegion;\nvec4 place(vec4 src, vec4 layer) {\n float m = uType < 0.5 ? src.a : (uType < 1.5 && uKnockout > 0.5 ? 1.0 - src.a : 1.0);\n vec4 masked = layer * m;\n if (uKnockout > 0.5) {\n return masked;\n }\n if (uType > 0.5 && uType < 1.5) {\n return src + masked * (1.0 - src.a);\n }\n return masked + src * (1.0 - (uType < 0.5 ? layer.a : masked.a));\n}\nfloat alphaAt(vec2 at) {\n return floor(texture(uBlurred, at).a * 255.0 + 0.001);\n}\nvoid main(void) {\n vec2 p = floor(vTextureCoord * uInputSize.xy) + 0.5;\n // Past the filter's rect it draws nothing, though its gradient may have colour at 0.\n if (any(lessThan(p, uRegion.xy)) || any(greaterThanEqual(p, uRegion.zw))) {\n finalColor = vec4(0.0);\n return;\n }\n vec2 at = p * uInputSize.zw;\n vec4 src = texture(uTexture, at);\n vec2 step_ = uOffset * uInputSize.zw;\n float index;\n if (uBevel > 0.5) {\n float d = clamp(floor((alphaAt(at + step_) - alphaAt(at - step_)) * uStrength), -255.0, 255.0);\n index = floor((d + 256.0) / 2.0);\n } else {\n index = min(255.0, floor(alphaAt(at - step_) * uStrength + 0.001));\n }\n vec4 layer = texture(uGradient, vec2((index + 0.5) / 256.0, 0.5));\n vec4 c = place(src, layer);\n finalColor = floor(c * 255.0 + 0.001) / 255.0;\n}";
|
|
42
|
+
/**
|
|
43
|
+
* A displacement map, in the input's pixels from its frame's corner: each
|
|
44
|
+
* pixel of the object's (uBox) where the map lies (uMapAt, uMapSize) takes
|
|
45
|
+
* the input at itself moved by the map's channel (uComponents picks one
|
|
46
|
+
* for x, one for y) less 128, times scale, in 256ths toward 0, between
|
|
47
|
+
* pixels with weights in 256ths; past the object's pixels as uMode says:
|
|
48
|
+
* 0 wrap, 1 clamp, 2 its own place, 3 uColor, which also fills uGrow pixels
|
|
49
|
+
* round the object, as adl's drawing of it does. Each pixel once, at its
|
|
50
|
+
* centre.
|
|
51
|
+
*/
|
|
52
|
+
export declare const DISPLACE = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform sampler2D uMap;\nuniform highp vec4 uInputSize;\nuniform vec4 uBox;\nuniform vec4 uMapAt;\nuniform vec4 uComponentX;\nuniform vec4 uComponentY;\nuniform vec2 uScale;\nuniform float uMode;\nuniform vec4 uColor;\nuniform vec2 uGrow;\nvec4 read(vec2 at, vec2 own) {\n vec2 size = uBox.zw - uBox.xy;\n vec2 i = at - uBox.xy;\n if (any(lessThan(i, vec2(0.0))) || any(greaterThanEqual(i, size))) {\n if (uMode < 0.5) {\n i = mod(i, size);\n } else if (uMode < 2.5) {\n i = clamp(i, vec2(0.0), size - 1.0);\n } else {\n return uColor;\n }\n }\n return texture(uTexture, (uBox.xy + i + 0.5) * uInputSize.zw);\n}\nvoid main(void) {\n vec2 p = floor(vTextureCoord * uInputSize.xy);\n vec4 own = texture(uTexture, (p + 0.5) * uInputSize.zw);\n vec2 m = p - uMapAt.xy;\n if (any(lessThan(p, uBox.xy)) || any(greaterThanEqual(p, uBox.zw))) {\n bool near = all(greaterThanEqual(p, uBox.xy - uGrow)) && all(lessThan(p, uBox.zw + uGrow));\n finalColor = uMode > 2.5 && near ? uColor : vec4(0.0);\n return;\n }\n if (any(lessThan(m, vec2(0.0))) || any(greaterThanEqual(m, uMapAt.zw))) {\n finalColor = own;\n return;\n }\n vec4 map = texture(uMap, (m + 0.5) / uMapAt.zw);\n vec4 straight = map.a > 0.0 ? vec4(map.rgb / map.a, map.a) : vec4(0.0);\n vec2 c = floor(vec2(dot(straight, uComponentX), dot(straight, uComponentY)) * 255.0 + 0.5);\n // None picked: no move.\n c = vec2(uComponentX == vec4(0.0) ? 128.0 : c.x, uComponentY == vec4(0.0) ? 128.0 : c.y);\n // Toward 0, without trunc, which GLSL ES 1 has not.\n vec2 moved = (c - 128.0) * uScale;\n vec2 q = p * 256.0 + sign(moved) * floor(abs(moved));\n vec2 whole = floor(q / 256.0);\n vec2 f = q - whole * 256.0;\n if (uMode > 1.5 && uMode < 2.5) {\n vec2 i = whole - uBox.xy;\n vec2 size = uBox.zw - uBox.xy;\n whole = vec2(i.x < 0.0 || i.x >= size.x ? p.x : whole.x, i.y < 0.0 || i.y >= size.y ? p.y : whole.y);\n }\n float w00 = floor((256.0 - f.x) * (256.0 - f.y) / 256.0);\n float w10 = floor(f.x * (256.0 - f.y) / 256.0);\n float w01 = floor((256.0 - f.x) * f.y / 256.0);\n float w11 = floor(f.x * f.y / 256.0);\n vec4 v = read(whole, p) * w00 + read(whole + vec2(1.0, 0.0), p) * w10 +\n read(whole + vec2(0.0, 1.0), p) * w01 + read(whole + vec2(1.0, 1.0), p) * w11;\n vec4 c8 = floor(v * 255.0 / 256.0 + 0.001) / 255.0;\n finalColor = c8;\n}";
|
|
53
|
+
/** A colour matrix of a pixel's straight colour, its offsets in 255ths, transparent pixels too. */
|
|
54
|
+
export declare const MATRIX = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform mat4 uMatrix;\nuniform vec4 uOffset;\nvoid main(void) {\n vec4 src = texture(uTexture, vTextureCoord);\n vec4 straight = src.a > 0.0 ? vec4(src.rgb / src.a, src.a) : vec4(0.0);\n vec4 s = clamp(uMatrix * straight + uOffset, 0.0, 1.0);\n vec4 c = vec4(s.rgb * s.a, s.a);\n finalColor = floor(c * 255.0 + 0.001) / 255.0;\n}";
|
|
55
|
+
/**
|
|
56
|
+
* A convolution, in 255ths: the taps' straight colour over uBox, the
|
|
57
|
+
* object's pixels as adl filters them, in the input's pixels from its
|
|
58
|
+
* frame's corner; past it the nearest edge's or uEdge; summed, divided,
|
|
59
|
+
* biased, clamped and premultiplied as bitmap/filters' convolve does, the
|
|
60
|
+
* fixed-point way too (uReciprocal not 0) where every tap lies in the box.
|
|
61
|
+
*/
|
|
62
|
+
export declare const CONVOLUTION = "in vec2 vTextureCoord;\nout vec4 finalColor;\nuniform sampler2D uTexture;\nuniform highp vec4 uInputSize;\nuniform vec4 uMatrix[57];\nuniform vec2 uSize;\nuniform vec4 uBox;\nuniform vec4 uEdge;\nuniform float uDivisor;\nuniform float uReciprocal;\nuniform float uBias;\nuniform float uClamp;\nuniform float uPreserve;\nvec4 straight(vec2 p) {\n if (any(lessThan(p, uBox.xy)) || any(greaterThanEqual(p, uBox.zw))) {\n if (uClamp < 0.5) { return uEdge; }\n p = clamp(p, floor(uBox.xy) + 0.5, floor(uBox.zw) - 0.5);\n }\n vec4 c = texture(uTexture, p * uInputSize.zw);\n return c.a > 0.0 ? floor(vec4(c.rgb / c.a, c.a) * 255.0 + 0.5) : vec4(0.0);\n}\nvoid main(void) {\n // The pixel's centre, which all its texels read alike, as adl's one pixel.\n vec2 p = floor(vTextureCoord * uInputSize.xy) + 0.5;\n vec2 reach = floor(uSize * 0.5);\n if (any(lessThan(p, uBox.xy - reach)) || any(greaterThanEqual(p, uBox.zw + reach))) {\n finalColor = vec4(0.0);\n return;\n }\n bool fixed_ = uReciprocal != 0.0 && all(greaterThanEqual(p - 1.0, uBox.xy)) &&\n all(lessThan(p + 1.0, uBox.zw));\n int cols = int(uSize.x);\n int count = cols * int(uSize.y);\n vec4 sum = vec4(0.0);\n // One loop, its index alone indexing the weights, as GLSL ES 1 allows.\n for (int k = 0; k < 225; k++) {\n if (k >= count) { break; }\n float w = dot(uMatrix[k / 4], vec4(equal(vec4(float(k - k / 4 * 4)), vec4(0.0, 1.0, 2.0, 3.0))));\n if (w != 0.0) {\n int j = k / cols;\n vec2 at = vec2(float(k - j * cols), float(j)) - reach;\n sum += straight(fixed_ && k == 8 ? p : p + at) * w;\n }\n }\n sum = fixed_ ? floor(sum * uReciprocal) : sum / uDivisor;\n vec4 v = floor(clamp(sum + uBias, 0.0, 255.0) + 0.0001);\n float a = uPreserve > 0.5 ? straight(p).a : v.a;\n vec3 c = fixed_ ? floor(v.rgb * a / 255.0) : floor((v.rgb * a + 127.0) / 255.0);\n finalColor = vec4(c, a) / 255.0;\n}";
|
|
63
|
+
//# sourceMappingURL=filter-shaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-shaders.d.ts","sourceRoot":"","sources":["../src/filter-shaders.ts"],"names":[],"mappings":"AAKA,6FAA6F;AAC7F,eAAO,MAAM,QAAQ,qCAAqC,CAAC;AAE3D;;;;GAIG;AACH,eAAO,MAAM,GAAG,ivBAoBd,CAAC;AAMH,eAAO,MAAM,MAAM,2sBAqBjB,CAAC;AAEH,qGAAqG;AACrG,eAAO,MAAM,SAAS,mMAMpB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,IAAI,87BA2Bf,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,64CAoChB,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,2WAUhB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,8iDAoCnB,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,65EA+DnB,CAAC;AAEH,mGAAmG;AACnG,eAAO,MAAM,MAAM,8ZAWjB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,63DAiDtB,CAAC"}
|