@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.
Files changed (49) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/build/module/config.json.js +26 -0
  3. package/build/module/config.json.js.map +1 -0
  4. package/build/module/index.d.ts +3 -0
  5. package/build/module/index.js +41 -8
  6. package/build/module/index.js.map +1 -0
  7. package/build/module/lib/config-builder.d.ts +180 -0
  8. package/build/module/lib/config-builder.js +336 -0
  9. package/build/module/lib/config-builder.js.map +1 -0
  10. package/build/module/lib/config-types.d.ts +98 -0
  11. package/build/module/lib/config-types.js +6 -0
  12. package/build/module/lib/config-types.js.map +1 -0
  13. package/build/module/lib/config.d.ts +30 -105
  14. package/build/module/lib/config.js +22 -151
  15. package/build/module/lib/config.js.map +1 -0
  16. package/build/module/lib/generator.d.ts +2 -1
  17. package/build/module/lib/generator.js +212 -273
  18. package/build/module/lib/generator.js.map +1 -0
  19. package/build/module/lib/pipeline.d.ts +3 -2
  20. package/build/module/lib/pipeline.js +158 -218
  21. package/build/module/lib/pipeline.js.map +1 -0
  22. package/build/module/lib/preload.d.ts +9 -0
  23. package/build/module/lib/preload.js +8 -0
  24. package/build/module/lib/preload.js.map +1 -0
  25. package/build/module/lib/renderer/blur-renderer.d.ts +5 -4
  26. package/build/module/lib/renderer/blur-renderer.js +102 -126
  27. package/build/module/lib/renderer/blur-renderer.js.map +1 -0
  28. package/build/module/lib/renderer/ladon-renderer.d.ts +2 -1
  29. package/build/module/lib/renderer/passthrough-renderer.d.ts +5 -4
  30. package/build/module/lib/renderer/passthrough-renderer.js +25 -44
  31. package/build/module/lib/renderer/passthrough-renderer.js.map +1 -0
  32. package/build/module/lib/renderer/replacement-renderer.d.ts +8 -5
  33. package/build/module/lib/renderer/replacement-renderer.js +84 -99
  34. package/build/module/lib/renderer/replacement-renderer.js.map +1 -0
  35. package/build/module/lib/renderer/webgl-renderer.d.ts +11 -3
  36. package/build/module/lib/renderer/webgl-renderer.js +168 -115
  37. package/build/module/lib/renderer/webgl-renderer.js.map +1 -0
  38. package/build/module/lib/shared-resource-manager.d.ts +40 -31
  39. package/build/module/lib/shared-resource-manager.js +151 -189
  40. package/build/module/lib/shared-resource-manager.js.map +1 -0
  41. package/build/module/lib/util.d.ts +10 -0
  42. package/build/module/lib/util.js +92 -179
  43. package/build/module/lib/util.js.map +1 -0
  44. package/build/module/lib/version.d.ts +1 -1
  45. package/build/module/lib/version.js +5 -2
  46. package/build/module/lib/version.js.map +1 -0
  47. package/package.json +21 -5
  48. package/build/module/lib/renderer/ladon-renderer.js +0 -2
  49. package/build/module/lib/renderer.js +0 -6
@@ -1,23 +1,11 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
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.kernel_size}
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
- if (this.config.render.kernel_size % 2 === 0) {
84
- throw new Error('[ladon-ts] - kernel_size must be odd');
85
- }
86
- // program pass 1 setup
87
- {
88
- const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);
89
- const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader_pass_1_src);
90
- this.program_1 = linkProgram(this.gl, vertex_shader, fragment_shader);
91
- this.gl.useProgram(this.program_1);
92
- const framebuffer = this.gl.createFramebuffer();
93
- if (!framebuffer) {
94
- throw new Error('[ladon-ts] - error creating framebuffer');
95
- }
96
- this.framebuffer = framebuffer;
97
- const transfer_texture = this.gl.createTexture();
98
- if (!transfer_texture) {
99
- throw new Error('[ladon-ts] - error creating output texture');
100
- }
101
- this.transfer_texture = transfer_texture;
102
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer);
103
- this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture);
104
- this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);
105
- this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);
106
- this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);
107
- this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.config.input.width, this.config.input.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, null);
108
- this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER, this.gl.COLOR_ATTACHMENT0, this.gl.TEXTURE_2D, this.transfer_texture, 0);
109
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);
110
- this.setSharedUniforms(this.program_1);
111
- const u_kernel = this.gl.getUniformLocation(this.program_1, 'u_kernel');
112
- if (!u_kernel) {
113
- throw new Error('[ladon-ts] - error finding "u_kernel" uniform');
114
- }
115
- this.gl.uniform1fv(u_kernel, this.getBlurKernel());
116
- }
117
- // program pass 2 setup
118
- {
119
- const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);
120
- const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader_pass_2_src);
121
- this.program_2 = linkProgram(this.gl, vertex_shader, fragment_shader);
122
- this.gl.useProgram(this.program_2);
123
- const u_blur = this.gl.getUniformLocation(this.program_2, 'u_blur');
124
- if (!u_blur) {
125
- throw new Error('[ladon-ts] - error finding "u_blur" uniform');
126
- }
127
- this.u_blur = u_blur;
128
- this.gl.activeTexture(this.gl.TEXTURE2);
129
- this.gl.bindTexture(this.gl.TEXTURE_2D, this.transfer_texture);
130
- this.gl.uniform1i(this.u_blur, 2);
131
- this.setSharedUniforms(this.program_2);
132
- const u_kernel = this.gl.getUniformLocation(this.program_2, 'u_kernel');
133
- if (!u_kernel) {
134
- throw new Error('[ladon-ts] - error finding "u_kernel" uniform');
135
- }
136
- this.gl.uniform1fv(u_kernel, this.getBlurKernel());
137
- }
138
- }
139
- render(input, mask) {
140
- return __awaiter(this, void 0, void 0, function* () {
141
- this.uploadVideoStream(input);
142
- // The mask may not be included if it has not been generated (e.g., frame skipped).
143
- if (mask === null || mask === void 0 ? void 0 : mask.warm) {
144
- const maskData = bilinearUpsample(mask.data, this.config.mask.output_size.width, this.config.mask.output_size.height, this.config.mask.upscaled_size.width, this.config.mask.upscaled_size.height);
145
- this.gl.activeTexture(this.gl.TEXTURE1);
146
- this.gl.bindTexture(this.gl.TEXTURE_2D, this.mask_texture);
147
- this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.R8, this.config.mask.upscaled_size.width, this.config.mask.upscaled_size.height, 0, this.gl.RED, this.gl.UNSIGNED_BYTE, maskData);
148
- }
149
- // program pass 1 - blur in one direction & output to framebuffer
150
- this.gl.useProgram(this.program_1);
151
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.framebuffer);
152
- this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);
153
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);
154
- // program pass 2 - blur in other direction & draw to screen
155
- this.gl.useProgram(this.program_2);
156
- this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);
157
- this.postDraw();
158
- });
159
- }
160
- load() {
161
- return __awaiter(this, void 0, void 0, function* () {
162
- // empty
163
- });
164
- }
165
- destroy() {
166
- // empty
167
- }
168
- getBlurKernel() {
169
- const kernel = [];
170
- let sum = 0;
171
- for (let i = 0; i < this.config.render.kernel_size; i++) {
172
- let w = i - (this.config.render.kernel_size - 1) / 2;
173
- w = Math.exp(-(Math.pow(w, 2)) / Math.pow(this.config.render.sigma, 2));
174
- kernel.push(w);
175
- sum += w;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ci1yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVuZGVyZXIvYmx1ci1yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUd2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsTUFBTSxPQUFPLFlBQWEsU0FBUSxhQUFhO0lBZ0YzQyxZQUFtQixhQUFnQyxFQUFrQixNQUFzQjtRQUN2RixLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRGQsa0JBQWEsR0FBYixhQUFhLENBQW1CO1FBQWtCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBdkVuRiwyQkFBc0IsR0FBRzs7OzBCQUdWLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBcUIsQ0FBQyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F1Q3ZFLENBQUM7UUFFVSwrQkFBMEIsR0FDOUIsSUFBSSxDQUFDLHNCQUFzQjtZQUMzQjs7Ozs7Q0FLUCxDQUFDO1FBRVMsK0JBQTBCLEdBQzdCLElBQUksQ0FBQyxzQkFBc0I7WUFDM0I7Ozs7TUFJRixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Ozs7Ozs7Ozs7Q0FVNUIsQ0FBQztRQUtNLElBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFxQixDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztTQUMzRDtRQUVELHVCQUF1QjtRQUN2QjtZQUNJLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FDL0IsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUNqQyxJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUN2QixJQUFJLENBQUMsMEJBQTBCLENBQ2xDLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFFL0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBRXpDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQ2xCLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FDeEIsQ0FBQztZQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUNkLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUNsQixDQUFDLEVBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ3hCLENBQUMsRUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFDWixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDckIsSUFBSSxDQUNQLENBQUM7WUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUN4QixJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsQ0FBQyxDQUNKLENBQUM7WUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVuRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQzthQUNwRTtZQUNELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztTQUN0RDtRQUVELHVCQUF1QjtRQUN2QjtZQUNJLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FDL0IsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUN6QixDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUNqQyxJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUN2QixJQUFJLENBQUMsMEJBQTBCLENBQ2xDLENBQUM7WUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWxDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVZLE1BQU0sQ0FBQyxLQUFnQixFQUFFLElBQWtCOztZQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsbUZBQW1GO1lBQ25GLElBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksRUFBRTtnQkFDWixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FDN0IsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUN4QyxDQUFDO2dCQUVGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQ2xCLENBQUMsRUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUNyQyxDQUFDLEVBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQ3JCLFFBQVEsQ0FDWCxDQUFDO2FBQ0w7WUFFRCxpRUFBaUU7WUFDakUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRW5DLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFbkQsNERBQTREO1lBQzVELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFaEUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUM7S0FBQTtJQUVZLElBQUk7O1lBQ2IsUUFBUTtRQUNaLENBQUM7S0FBQTtJQUVNLE9BQU87UUFDVixRQUFRO0lBQ1osQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQXFCLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBcUIsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFBLENBQUMsRUFBSSxDQUFDLENBQUEsQ0FBQyxHQUFHLFNBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFxQixDQUFDLEtBQUssRUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ1o7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUMvQjtRQUVELE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNKIn0=
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,4 +1,5 @@
1
- import { FrameData, LadonOutput } from '../generator';
1
+ import { FrameData, LadonOutput } from '../generator';
2
+
2
3
  export interface LadonRenderer {
3
4
  render(input: FrameData, mask?: LadonOutput): Promise<void>;
4
5
  load(): Promise<void>;
@@ -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
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
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
- const vertex_shader = compileShader(this.gl, this.gl.VERTEX_SHADER, this.vertex_shader_src);
33
- const fragment_shader = compileShader(this.gl, this.gl.FRAGMENT_SHADER, this.fragment_shader);
34
- this.program = linkProgram(this.gl, vertex_shader, fragment_shader);
35
- this.gl.useProgram(this.program);
36
- this.setSharedUniforms(this.program);
37
- }
38
- render(input,
39
- /* eslint-disable-next-line @typescript-eslint/no-unused-vars */
40
- _) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- this.uploadVideoStream(input);
43
- this.gl.useProgram(this.program);
44
- this.gl.drawArrays(this.gl.TRIANGLES, 0, this.verts.length / 3);
45
- this.postDraw();
46
- });
47
- }
48
- load() {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- // empty
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
- private fragment_shader;
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;