@webex/ladon-ts 4.5.1 → 5.0.2
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/CHANGELOG.md +30 -0
- package/build/module/config.json.js +26 -0
- package/build/module/config.json.js.map +1 -0
- package/build/module/index.d.ts +3 -0
- package/build/module/index.js +41 -8
- package/build/module/index.js.map +1 -0
- package/build/module/lib/config-builder.d.ts +180 -0
- package/build/module/lib/config-builder.js +336 -0
- package/build/module/lib/config-builder.js.map +1 -0
- package/build/module/lib/config-types.d.ts +98 -0
- package/build/module/lib/config-types.js +6 -0
- package/build/module/lib/config-types.js.map +1 -0
- package/build/module/lib/config.d.ts +30 -105
- package/build/module/lib/config.js +22 -151
- package/build/module/lib/config.js.map +1 -0
- package/build/module/lib/generator.d.ts +2 -1
- package/build/module/lib/generator.js +212 -273
- package/build/module/lib/generator.js.map +1 -0
- package/build/module/lib/pipeline.d.ts +3 -2
- package/build/module/lib/pipeline.js +158 -218
- package/build/module/lib/pipeline.js.map +1 -0
- package/build/module/lib/preload.d.ts +9 -0
- package/build/module/lib/preload.js +8 -0
- package/build/module/lib/preload.js.map +1 -0
- package/build/module/lib/renderer/blur-renderer.d.ts +5 -4
- package/build/module/lib/renderer/blur-renderer.js +102 -126
- package/build/module/lib/renderer/blur-renderer.js.map +1 -0
- package/build/module/lib/renderer/ladon-renderer.d.ts +2 -1
- package/build/module/lib/renderer/passthrough-renderer.d.ts +5 -4
- package/build/module/lib/renderer/passthrough-renderer.js +25 -44
- package/build/module/lib/renderer/passthrough-renderer.js.map +1 -0
- package/build/module/lib/renderer/replacement-renderer.d.ts +8 -5
- package/build/module/lib/renderer/replacement-renderer.js +84 -99
- package/build/module/lib/renderer/replacement-renderer.js.map +1 -0
- package/build/module/lib/renderer/webgl-renderer.d.ts +11 -3
- package/build/module/lib/renderer/webgl-renderer.js +168 -115
- package/build/module/lib/renderer/webgl-renderer.js.map +1 -0
- package/build/module/lib/shared-resource-manager.d.ts +40 -31
- package/build/module/lib/shared-resource-manager.js +151 -189
- package/build/module/lib/shared-resource-manager.js.map +1 -0
- package/build/module/lib/util.d.ts +10 -0
- package/build/module/lib/util.js +92 -179
- package/build/module/lib/util.js.map +1 -0
- package/build/module/lib/version.d.ts +1 -1
- package/build/module/lib/version.js +5 -2
- package/build/module/lib/version.js.map +1 -0
- package/package.json +21 -5
- package/build/module/lib/renderer/ladon-renderer.js +0 -2
- package/build/module/lib/renderer.js +0 -6
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { bilinearUpsample, compileShader, linkProgram } from '../util';
|
|
11
|
-
import { WebGLRenderer } from './webgl-renderer';
|
|
12
|
-
export class BlurRenderer extends WebGLRenderer {
|
|
13
|
-
constructor(output_canvas, config) {
|
|
14
|
-
super(output_canvas, config);
|
|
15
|
-
this.output_canvas = output_canvas;
|
|
16
|
-
this.config = config;
|
|
17
|
-
this.fragment_shader_common = `#version 300 es
|
|
1
|
+
import { compileShader as o, linkProgram as h } from "../util.js";
|
|
2
|
+
import { WebGLRenderer as a } from "./webgl-renderer.js";
|
|
3
|
+
class _ extends a {
|
|
4
|
+
constructor(r, i) {
|
|
5
|
+
if (super(r, i), this.output_canvas = r, this.config = i, this.fragment_shader_common = `#version 300 es
|
|
18
6
|
precision highp float;
|
|
19
7
|
|
|
20
|
-
#define KERNEL_SIZE ${this.config.render.
|
|
8
|
+
#define KERNEL_SIZE ${this.config.render.kernelSize}
|
|
21
9
|
#define HORIZONTAL vec2(1.0, 0.0)
|
|
22
10
|
#define VERTICAL vec2(0.0, 1.0)
|
|
23
11
|
|
|
@@ -56,16 +44,12 @@ vec3 blur(sampler2D src, vec2 uv, vec2 direction) {
|
|
|
56
44
|
weightSum = max(weightSum, 0.001); // Avoid division by zero
|
|
57
45
|
return accum.rgb / weightSum;
|
|
58
46
|
}
|
|
59
|
-
|
|
60
|
-
this.fragment_shader_pass_1_src = this.fragment_shader_common +
|
|
61
|
-
`
|
|
47
|
+
`, this.fragment_shader_pass_1_src = this.fragment_shader_common + `
|
|
62
48
|
void main() {
|
|
63
49
|
vec2 st = gl_FragCoord.xy / u_resolution;
|
|
64
50
|
outColor = vec4(blur(u_image, st, HORIZONTAL), 1.0);
|
|
65
51
|
}
|
|
66
|
-
|
|
67
|
-
this.fragment_shader_pass_2_src = this.fragment_shader_common +
|
|
68
|
-
`
|
|
52
|
+
`, this.fragment_shader_pass_2_src = this.fragment_shader_common + `
|
|
69
53
|
uniform sampler2D u_blur;
|
|
70
54
|
|
|
71
55
|
void main() {
|
|
@@ -79,105 +63,97 @@ void main() {
|
|
|
79
63
|
vec3 color = mix(original, blurred, mask); // Ensure mask properly determines blur influence on background
|
|
80
64
|
outColor = vec4(color, 1.0);
|
|
81
65
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
for (let i = 0; i < this.config.render.kernel_size; i++) {
|
|
178
|
-
kernel[i] = kernel[i] / sum;
|
|
179
|
-
}
|
|
180
|
-
return new Float32Array(kernel);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ci1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVuZGVyZXIvYmx1ci1yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUd2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsTUFBTSxPQUFPLFlBQWEsU0FBUSxhQUFhO0lBZ0YzQyxZQUFtQixhQUFnQyxFQUFrQixNQUFzQjtRQUN2RixLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRGQsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQWtCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBdkVuRiwyQkFBc0IsR0FBRzs7OzBCQUdWLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBcUIsQ0FBQyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q3ZFLENBQUM7UUFFVSwrQkFBMEIsR0FDOUIsSUFBSSxDQUFDLHNCQUFzQjtZQUMzQjs7Ozs7Q0FLUCxDQUFDO1FBRVMsK0JBQTBCLEdBQzdCLElBQUksQ0FBQyxzQkFBc0I7WUFDM0I7Ozs7TUFJRixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7Ozs7Ozs7Q0FVNUIsQ0FBQztRQUtNLElBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFxQixDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUMzRDtRQUVELHVCQUF1QjtRQUN2QjtZQUNJLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FDL0IsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDckIsSUFBSSxDQUFDLGlC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
|
|
66
|
+
`, this.config.render.kernelSize % 2 === 0)
|
|
67
|
+
throw new Error("[ladon-ts] - kernel_size must be odd");
|
|
68
|
+
{
|
|
69
|
+
const e = o(
|
|
70
|
+
this.gl,
|
|
71
|
+
this.gl.VERTEX_SHADER,
|
|
72
|
+
this.vertex_shader_src
|
|
73
|
+
), t = o(
|
|
74
|
+
this.gl,
|
|
75
|
+
this.gl.FRAGMENT_SHADER,
|
|
76
|
+
this.fragment_shader_pass_1_src
|
|
77
|
+
);
|
|
78
|
+
this.program_1 = h(this.gl, e, t), this.gl.useProgram(this.program_1);
|
|
79
|
+
const s = this.gl.createFramebuffer();
|
|
80
|
+
if (!s)
|
|
81
|
+
throw new Error("[ladon-ts] - error creating framebuffer");
|
|
82
|
+
this.framebuffer = s;
|
|
83
|
+
const n = this.gl.createTexture();
|
|
84
|
+
if (!n)
|
|
85
|
+
throw new Error("[ladon-ts] - error creating output texture");
|
|
86
|
+
this.transfer_texture = n, this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer), this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR), this.gl.texParameteri(
|
|
87
|
+
this.gl.TEXTURE_2D,
|
|
88
|
+
this.gl.TEXTURE_WRAP_S,
|
|
89
|
+
this.gl.CLAMP_TO_EDGE
|
|
90
|
+
), this.gl.texParameteri(
|
|
91
|
+
this.gl.TEXTURE_2D,
|
|
92
|
+
this.gl.TEXTURE_WRAP_T,
|
|
93
|
+
this.gl.CLAMP_TO_EDGE
|
|
94
|
+
), this.gl.texImage2D(
|
|
95
|
+
this.gl.TEXTURE_2D,
|
|
96
|
+
0,
|
|
97
|
+
this.gl.RGBA,
|
|
98
|
+
this.config.input.width,
|
|
99
|
+
this.config.input.height,
|
|
100
|
+
0,
|
|
101
|
+
this.gl.RGBA,
|
|
102
|
+
this.gl.UNSIGNED_BYTE,
|
|
103
|
+
null
|
|
104
|
+
), this.gl.framebufferTexture2D(
|
|
105
|
+
this.gl.FRAMEBUFFER,
|
|
106
|
+
this.gl.COLOR_ATTACHMENT0,
|
|
107
|
+
this.gl.TEXTURE_2D,
|
|
108
|
+
this.transfer_texture,
|
|
109
|
+
0
|
|
110
|
+
), this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null), this.setSharedUniforms(this.program_1);
|
|
111
|
+
const l = this.gl.getUniformLocation(this.program_1, "u_kernel");
|
|
112
|
+
if (!l)
|
|
113
|
+
throw new Error('[ladon-ts] - error finding "u_kernel" uniform');
|
|
114
|
+
this.gl.uniform1fv(l, this.getBlurKernel());
|
|
115
|
+
}
|
|
116
|
+
{
|
|
117
|
+
const e = o(
|
|
118
|
+
this.gl,
|
|
119
|
+
this.gl.VERTEX_SHADER,
|
|
120
|
+
this.vertex_shader_src
|
|
121
|
+
), t = o(
|
|
122
|
+
this.gl,
|
|
123
|
+
this.gl.FRAGMENT_SHADER,
|
|
124
|
+
this.fragment_shader_pass_2_src
|
|
125
|
+
);
|
|
126
|
+
this.program_2 = h(this.gl, e, t), this.gl.useProgram(this.program_2);
|
|
127
|
+
const s = this.gl.getUniformLocation(this.program_2, "u_blur");
|
|
128
|
+
if (!s)
|
|
129
|
+
throw new Error('[ladon-ts] - error finding "u_blur" uniform');
|
|
130
|
+
this.u_blur = s, this.gl.activeTexture(this.gl.TEXTURE2), this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture), this.gl.uniform1i(this.u_blur, 2), this.setSharedUniforms(this.program_2);
|
|
131
|
+
const n = this.gl.getUniformLocation(this.program_2, "u_kernel");
|
|
132
|
+
if (!n)
|
|
133
|
+
throw new Error('[ladon-ts] - error finding "u_kernel" uniform');
|
|
134
|
+
this.gl.uniform1fv(n, this.getBlurKernel());
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async render(r, i) {
|
|
138
|
+
this.uploadVideoStream(r), this.uploadMask(i), this.gl.useProgram(this.program_1), this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3), this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null), this.gl.useProgram(this.program_2), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3), this.postDraw();
|
|
139
|
+
}
|
|
140
|
+
async load() {
|
|
141
|
+
}
|
|
142
|
+
destroy() {
|
|
143
|
+
}
|
|
144
|
+
getBlurKernel() {
|
|
145
|
+
const r = [];
|
|
146
|
+
let i = 0;
|
|
147
|
+
for (let e = 0; e < this.config.render.kernelSize; e++) {
|
|
148
|
+
let t = e - (this.config.render.kernelSize - 1) / 2;
|
|
149
|
+
t = Math.exp(-(t ** 2) / this.config.render.sigma ** 2), r.push(t), i += t;
|
|
150
|
+
}
|
|
151
|
+
for (let e = 0; e < this.config.render.kernelSize; e++)
|
|
152
|
+
r[e] = r[e] / i;
|
|
153
|
+
return new Float32Array(r);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
export {
|
|
157
|
+
_ as BlurRenderer
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=blur-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blur-renderer.js","sources":["../../../../src/lib/renderer/blur-renderer.ts"],"sourcesContent":["import { BlurConfig, PipelineConfig } from '../config-types';\nimport { FrameData, LadonOutput } from '../generator';\nimport { compileShader, linkProgram } from '../util';\n\nimport { LadonRenderer } from './ladon-renderer';\nimport { WebGLRenderer } from './webgl-renderer';\n\nexport class BlurRenderer extends WebGLRenderer implements LadonRenderer {\n private program_1: WebGLProgram;\n private program_2: WebGLProgram;\n\n private framebuffer: WebGLFramebuffer;\n private transfer_texture: WebGLTexture;\n\n private u_blur: WebGLUniformLocation;\n\n private fragment_shader_common = `#version 300 es\nprecision highp float;\n\n#define KERNEL_SIZE ${(this.config.render as BlurConfig).kernelSize}\n#define HORIZONTAL vec2(1.0, 0.0)\n#define VERTICAL vec2(0.0, 1.0)\n\nout vec4 outColor;\n\nuniform sampler2D u_image;\nuniform sampler2D u_mask;\nuniform vec2 u_resolution;\nuniform float u_kernel[KERNEL_SIZE];\n\n// Function to retrieve the mask value\nfloat get_mask(vec2 st) {\n return texture(u_mask, st).r;\n}\n\n// Get the inverse of the masked area\nfloat get_inv_mask(vec2 st) {\n return 1.0 - get_mask(st);\n}\n\n// Blurring function\nvec3 blur(sampler2D src, vec2 uv, vec2 direction) {\n vec4 accum = vec4(0.0);\n vec2 step = direction / u_resolution;\n int offset = (KERNEL_SIZE - 1) / 2;\n\n float weightSum = 0.0;\n for (int i = 0; i < KERNEL_SIZE; i++) {\n vec2 sampleUV = uv + step * float(i - offset);\n vec4 sampleTex = texture(src, sampleUV);\n float weight = u_kernel[i];\n accum += sampleTex * weight;\n weightSum += weight;\n }\n\n weightSum = max(weightSum, 0.001); // Avoid division by zero\n return accum.rgb / weightSum;\n}\n`;\n\n private fragment_shader_pass_1_src =\n this.fragment_shader_common +\n `\nvoid main() {\n vec2 st = gl_FragCoord.xy / u_resolution;\n outColor = vec4(blur(u_image, st, HORIZONTAL), 1.0);\n}\n`;\n\n public fragment_shader_pass_2_src =\n this.fragment_shader_common +\n `\nuniform sampler2D u_blur;\n\nvoid main() {\n ${this.getUVCalculation()};\n\n vec3 blurred = blur(u_blur, st, VERTICAL);\n vec3 original = texture(u_image, st).rgb;\n float mask = get_inv_mask(st); // Use inverse mask to blur background, not user\n\n // Correct blending based on the mask\n vec3 color = mix(original, blurred, mask); // Ensure mask properly determines blur influence on background\n outColor = vec4(color, 1.0);\n}\n`;\n\n constructor(public output_canvas: HTMLCanvasElement, public readonly config: PipelineConfig) {\n super(output_canvas, config);\n\n if ((this.config.render as BlurConfig).kernelSize % 2 === 0) {\n throw new Error('[ladon-ts] - kernel_size must be odd');\n }\n\n // program pass 1 setup\n {\n const vertex_shader = compileShader(\n this.gl,\n this.gl.VERTEX_SHADER,\n this.vertex_shader_src\n );\n const fragment_shader = compileShader(\n this.gl,\n this.gl.FRAGMENT_SHADER,\n this.fragment_shader_pass_1_src\n );\n\n this.program_1 = linkProgram(this.gl, vertex_shader, fragment_shader);\n this.gl.useProgram(this.program_1);\n\n const framebuffer = this.gl.createFramebuffer();\n if (!framebuffer) {\n throw new Error('[ladon-ts] - error creating framebuffer');\n }\n this.framebuffer = framebuffer;\n\n const transfer_texture = this.gl.createTexture();\n if (!transfer_texture) {\n throw new Error('[ladon-ts] - error creating output texture');\n }\n this.transfer_texture = transfer_texture;\n\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer);\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture);\n this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_S,\n this.gl.CLAMP_TO_EDGE\n );\n this.gl.texParameteri(\n this.gl.TEXTURE_2D,\n this.gl.TEXTURE_WRAP_T,\n this.gl.CLAMP_TO_EDGE\n );\n this.gl.texImage2D(\n this.gl.TEXTURE_2D,\n 0,\n this.gl.RGBA,\n this.config.input.width,\n this.config.input.height,\n 0,\n this.gl.RGBA,\n this.gl.UNSIGNED_BYTE,\n null\n );\n this.gl.framebufferTexture2D(\n this.gl.FRAMEBUFFER,\n this.gl.COLOR_ATTACHMENT0,\n this.gl.TEXTURE_2D,\n this.transfer_texture,\n 0\n );\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n\n this.setSharedUniforms(this.program_1);\n\n const u_kernel = this.gl.getUniformLocation(this.program_1, 'u_kernel');\n if (!u_kernel) {\n throw new Error('[ladon-ts] - error finding \"u_kernel\" uniform');\n }\n this.gl.uniform1fv(u_kernel, this.getBlurKernel());\n }\n\n // program pass 2 setup\n {\n const vertex_shader = compileShader(\n this.gl,\n this.gl.VERTEX_SHADER,\n this.vertex_shader_src\n );\n const fragment_shader = compileShader(\n this.gl,\n this.gl.FRAGMENT_SHADER,\n this.fragment_shader_pass_2_src\n );\n\n this.program_2 = linkProgram(this.gl, vertex_shader, fragment_shader);\n this.gl.useProgram(this.program_2);\n\n const u_blur = this.gl.getUniformLocation(this.program_2, 'u_blur');\n if (!u_blur) {\n throw new Error('[ladon-ts] - error finding \"u_blur\" uniform');\n }\n this.u_blur = u_blur;\n this.gl.activeTexture(this.gl.TEXTURE2);\n this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture);\n this.gl.uniform1i(this.u_blur, 2);\n\n this.setSharedUniforms(this.program_2);\n\n const u_kernel = this.gl.getUniformLocation(this.program_2, 'u_kernel');\n if (!u_kernel) {\n throw new Error('[ladon-ts] - error finding \"u_kernel\" uniform');\n }\n this.gl.uniform1fv(u_kernel, this.getBlurKernel());\n }\n }\n\n public async render(input: FrameData, mask?: LadonOutput): Promise<void> {\n this.uploadVideoStream(input);\n this.uploadMask(mask);\n\n // program pass 1 - blur in one direction & output to framebuffer\n this.gl.useProgram(this.program_1);\n\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer);\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n\n // program pass 2 - blur in other direction & draw to screen\n this.gl.useProgram(this.program_2);\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\n\n this.postDraw();\n }\n\n public async load(): Promise<void> {\n // empty\n }\n\n public destroy(): void {\n // empty\n }\n\n private getBlurKernel(): Float32Array {\n const kernel = [];\n let sum = 0;\n for (let i = 0; i < (this.config.render as BlurConfig).kernelSize; i++) {\n let w = i - ((this.config.render as BlurConfig).kernelSize - 1) / 2;\n w = Math.exp(-(w ** 2) / (this.config.render as BlurConfig).sigma ** 2);\n kernel.push(w);\n sum += w;\n }\n\n for (let i = 0; i < (this.config.render as BlurConfig).kernelSize; i++) {\n kernel[i] = kernel[i] / sum;\n }\n\n return new Float32Array(kernel);\n }\n}\n"],"names":["BlurRenderer","WebGLRenderer","output_canvas","config","vertex_shader","compileShader","fragment_shader","linkProgram","framebuffer","transfer_texture","u_kernel","u_blur","input","mask","kernel","sum","i","w"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { PipelineConfig } from '../config';
|
|
2
|
-
import { FrameData, LadonOutput } from '../generator';
|
|
3
|
-
import { LadonRenderer } from './ladon-renderer';
|
|
4
|
-
import { WebGLRenderer } from './webgl-renderer';
|
|
1
|
+
import { PipelineConfig } from '../config-types';
|
|
2
|
+
import { FrameData, LadonOutput } from '../generator';
|
|
3
|
+
import { LadonRenderer } from './ladon-renderer';
|
|
4
|
+
import { WebGLRenderer } from './webgl-renderer';
|
|
5
|
+
|
|
5
6
|
export declare class PassthroughRenderer extends WebGLRenderer implements LadonRenderer {
|
|
6
7
|
output_canvas: HTMLCanvasElement;
|
|
7
8
|
readonly config: PipelineConfig;
|
|
@@ -1,20 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { compileShader, linkProgram } from '../util';
|
|
11
|
-
import { WebGLRenderer } from './webgl-renderer';
|
|
12
|
-
export class PassthroughRenderer extends WebGLRenderer {
|
|
13
|
-
constructor(output_canvas, config) {
|
|
14
|
-
super(output_canvas, config);
|
|
15
|
-
this.output_canvas = output_canvas;
|
|
16
|
-
this.config = config;
|
|
17
|
-
this.fragment_shader = `#version 300 es
|
|
1
|
+
import { compileShader as t, linkProgram as o } from "../util.js";
|
|
2
|
+
import { WebGLRenderer as h } from "./webgl-renderer.js";
|
|
3
|
+
class l extends h {
|
|
4
|
+
constructor(r, s) {
|
|
5
|
+
super(r, s), this.output_canvas = r, this.config = s, this.fragment_shader = `#version 300 es
|
|
18
6
|
precision highp float;
|
|
19
7
|
|
|
20
8
|
out vec4 outColor;
|
|
@@ -28,30 +16,23 @@ void main() {
|
|
|
28
16
|
|
|
29
17
|
outColor = vec4(texture(u_image, st).rgb, 1.0);
|
|
30
18
|
}
|
|
31
|
-
`;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
destroy() {
|
|
54
|
-
// empty
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3Rocm91Z2gtcmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlbmRlcmVyL3Bhc3N0aHJvdWdoLXJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVBLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQW1CbEQsWUFBbUIsYUFBZ0MsRUFBa0IsTUFBc0I7UUFDdkYsS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQURkLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUFrQixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQWhCbkYsb0JBQWUsR0FBRzs7Ozs7Ozs7OztNQVV4QixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7Q0FJNUIsQ0FBQztRQUtNLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FDakMsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDdkIsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFWSxNQUFNLENBQ2YsS0FBZ0I7SUFDaEIsZ0VBQWdFO0lBQ2hFLENBQWM7O1lBRWQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVqQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFaEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUM7S0FBQTtJQUVZLElBQUk7O1lBQ2IsUUFBUTtRQUNaLENBQUM7S0FBQTtJQUVNLE9BQU87UUFDVixRQUFRO0lBQ1osQ0FBQztDQUNKIn0=
|
|
19
|
+
`;
|
|
20
|
+
const e = t(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src), i = t(
|
|
21
|
+
this.gl,
|
|
22
|
+
this.gl.FRAGMENT_SHADER,
|
|
23
|
+
this.fragment_shader
|
|
24
|
+
);
|
|
25
|
+
this.program = o(this.gl, e, i), this.gl.useProgram(this.program), this.setSharedUniforms(this.program);
|
|
26
|
+
}
|
|
27
|
+
async render(r, s) {
|
|
28
|
+
this.uploadVideoStream(r), this.gl.useProgram(this.program), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3), this.postDraw();
|
|
29
|
+
}
|
|
30
|
+
async load() {
|
|
31
|
+
}
|
|
32
|
+
destroy() {
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
l as PassthroughRenderer
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=passthrough-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passthrough-renderer.js","sources":["../../../../src/lib/renderer/passthrough-renderer.ts"],"sourcesContent":["import { PipelineConfig } from '../config-types';\nimport { FrameData, LadonOutput } from '../generator';\nimport { compileShader, linkProgram } from '../util';\n\nimport { LadonRenderer } from './ladon-renderer';\nimport { WebGLRenderer } from './webgl-renderer';\n\nexport class PassthroughRenderer extends WebGLRenderer implements LadonRenderer {\n private program: WebGLProgram;\n\n private fragment_shader = `#version 300 es\nprecision highp float;\n\nout vec4 outColor;\n\nuniform sampler2D u_image;\nuniform vec2 u_resolution;\n\n\nvoid main() {\n ${this.getUVCalculation()}\n\n outColor = vec4(texture(u_image, st).rgb, 1.0);\n}\n`;\n\n constructor(public output_canvas: HTMLCanvasElement, public readonly config: PipelineConfig) {\n super(output_canvas, config);\n\n const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);\n const fragment_shader = compileShader(\n this.gl,\n this.gl.FRAGMENT_SHADER,\n this.fragment_shader\n );\n\n this.program = linkProgram(this.gl, vertex_shader, fragment_shader);\n this.gl.useProgram(this.program);\n\n this.setSharedUniforms(this.program);\n }\n\n public async render(\n input: FrameData,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n _: LadonOutput\n ): Promise<void> {\n this.uploadVideoStream(input);\n\n this.gl.useProgram(this.program);\n\n this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);\n\n this.postDraw();\n }\n\n public async load(): Promise<void> {\n // empty\n }\n\n public destroy(): void {\n // empty\n }\n}\n"],"names":["PassthroughRenderer","WebGLRenderer","output_canvas","config","vertex_shader","compileShader","fragment_shader","linkProgram","input","_"],"mappings":";;AAOO,MAAMA,UAA4BC,EAAuC;AAAA,EAmB5E,YAAmBC,GAAkDC,GAAwB;AACzF,UAAMD,GAAeC,CAAM,GADZ,KAAA,gBAAAD,GAAkD,KAAA,SAAAC,GAhBrE,KAAQ,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUxB,KAAK,iBAAkB,CAAA;AAAA;AAAA;AAAA;AAAA;AASf,UAAAC,IAAgBC,EAAc,KAAK,IAAI,KAAK,GAAG,eAAe,KAAK,iBAAiB,GACpFC,IAAkBD;AAAA,MACpB,KAAK;AAAA,MACL,KAAK,GAAG;AAAA,MACR,KAAK;AAAA,IACT;AAEA,SAAK,UAAUE,EAAY,KAAK,IAAIH,GAAeE,CAAe,GAC7D,KAAA,GAAG,WAAW,KAAK,OAAO,GAE1B,KAAA,kBAAkB,KAAK,OAAO;AAAA,EAAA;AAAA,EAGvC,MAAa,OACTE,GAEAC,GACa;AACb,SAAK,kBAAkBD,CAAK,GAEvB,KAAA,GAAG,WAAW,KAAK,OAAO,GAE1B,KAAA,GAAG,WAAW,KAAK,GAAG,WAAW,GAAG,KAAK,MAAM,SAAS,CAAC,GAE9D,KAAK,SAAS;AAAA,EAAA;AAAA,EAGlB,MAAa,OAAsB;AAAA,EAAA;AAAA,EAI5B,UAAgB;AAAA,EAAA;AAG3B;"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { PipelineConfig } from '../config';
|
|
2
|
-
import { FrameData, LadonOutput } from '../generator';
|
|
3
|
-
import { LadonRenderer } from './ladon-renderer';
|
|
4
|
-
import { WebGLRenderer } from './webgl-renderer';
|
|
1
|
+
import { PipelineConfig } from '../config-types';
|
|
2
|
+
import { FrameData, LadonOutput } from '../generator';
|
|
3
|
+
import { LadonRenderer } from './ladon-renderer';
|
|
4
|
+
import { WebGLRenderer } from './webgl-renderer';
|
|
5
|
+
|
|
5
6
|
export declare class ReplacementRenderer extends WebGLRenderer implements LadonRenderer {
|
|
6
7
|
output_canvas: HTMLCanvasElement;
|
|
7
8
|
readonly config: PipelineConfig;
|
|
8
9
|
private program;
|
|
9
10
|
private background_canvas_ctx;
|
|
10
11
|
protected background_texture: WebGLTexture;
|
|
11
|
-
|
|
12
|
+
protected fragment_shader: string;
|
|
12
13
|
constructor(output_canvas: HTMLCanvasElement, config: PipelineConfig);
|
|
14
|
+
protected buildFragmentShader(): string;
|
|
15
|
+
protected setupBackgroundTexture(): void;
|
|
13
16
|
render(input: FrameData, mask?: LadonOutput): Promise<void>;
|
|
14
17
|
load(): Promise<void>;
|
|
15
18
|
destroy(): void;
|