@remotion/effects 4.0.541 → 4.0.542

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 (133) hide show
  1. package/THIRD_PARTY_LICENSES.md +10 -0
  2. package/dist/esm/lightning.mjs +603 -0
  3. package/dist/esm/magnify.mjs +403 -0
  4. package/dist/esm/preview/barrel-distortion.mjs +303 -0
  5. package/dist/esm/preview/bevel-alpha.mjs +525 -0
  6. package/dist/esm/preview/blur.mjs +435 -0
  7. package/dist/esm/preview/brightness.mjs +95 -0
  8. package/dist/esm/preview/burlap.mjs +481 -0
  9. package/dist/esm/preview/checkerboard.mjs +8 -0
  10. package/dist/esm/preview/chromatic-aberration.mjs +308 -0
  11. package/dist/esm/preview/color-correction.mjs +522 -0
  12. package/dist/esm/preview/color-key.mjs +440 -0
  13. package/dist/esm/preview/contour-lines.mjs +608 -0
  14. package/dist/esm/preview/contrast.mjs +95 -0
  15. package/dist/esm/preview/corner-pin.mjs +6 -0
  16. package/dist/esm/preview/curves.mjs +357 -0
  17. package/dist/esm/preview/cylinder.mjs +273 -0
  18. package/dist/esm/preview/dot-grid.mjs +333 -0
  19. package/dist/esm/preview/drop-shadow.mjs +607 -0
  20. package/dist/esm/preview/duotone.mjs +344 -0
  21. package/dist/esm/preview/emboss.mjs +479 -0
  22. package/dist/esm/preview/evolve.mjs +485 -0
  23. package/dist/esm/preview/exposure.mjs +264 -0
  24. package/dist/esm/preview/film-burn.mjs +298 -0
  25. package/dist/esm/preview/fisheye.mjs +422 -0
  26. package/dist/esm/preview/flannel.mjs +401 -0
  27. package/dist/esm/preview/fractal-noise.mjs +642 -0
  28. package/dist/esm/preview/glow.mjs +598 -0
  29. package/dist/esm/preview/grayscale.mjs +86 -0
  30. package/dist/esm/preview/gridlines.mjs +8 -0
  31. package/dist/esm/preview/halftone-linear-gradient.mjs +523 -0
  32. package/dist/esm/preview/halftone.mjs +552 -0
  33. package/dist/esm/preview/hue.mjs +83 -0
  34. package/dist/esm/preview/index-00v3hr66.mjs +299 -0
  35. package/dist/esm/preview/index-0w4eqht8.mjs +351 -0
  36. package/dist/esm/preview/index-18y0zcy2.mjs +440 -0
  37. package/dist/esm/preview/index-1m1b1ad7.mjs +520 -0
  38. package/dist/esm/preview/index-34fxm3ax.mjs +518 -0
  39. package/dist/esm/preview/index-4fvp93ps.mjs +32 -0
  40. package/dist/esm/preview/index-4scpn12x.mjs +224 -0
  41. package/dist/esm/preview/index-4z6pt3ka.mjs +104 -0
  42. package/dist/esm/preview/index-618ky75w.mjs +51 -0
  43. package/dist/esm/preview/index-6agxdrvr.mjs +411 -0
  44. package/dist/esm/preview/index-6jkps947.mjs +120 -0
  45. package/dist/esm/preview/index-8agtsbw4.mjs +617 -0
  46. package/dist/esm/preview/index-8jx11jyn.mjs +29 -0
  47. package/dist/esm/preview/index-8p04sssx.mjs +123 -0
  48. package/dist/esm/preview/index-afdtmrh2.mjs +596 -0
  49. package/dist/esm/preview/index-b86qstcs.mjs +18 -0
  50. package/dist/esm/preview/index-cb77qg3g.mjs +587 -0
  51. package/dist/esm/preview/index-cdp7tr8x.mjs +122 -0
  52. package/dist/esm/preview/index-evy8hyah.mjs +55 -0
  53. package/dist/esm/preview/index-gnsce796.mjs +6 -0
  54. package/dist/esm/preview/index-kkvzt8b7.mjs +199 -0
  55. package/dist/esm/preview/index-r0v18b2n.mjs +425 -0
  56. package/dist/esm/preview/index-rswpzmm5.mjs +926 -0
  57. package/dist/esm/preview/index-s9mrx750.mjs +97 -0
  58. package/dist/esm/preview/index-tvfexb7s.mjs +164 -0
  59. package/dist/esm/preview/index-vp56k1gj.mjs +215 -0
  60. package/dist/esm/preview/index-wxhvgv2s.mjs +79 -0
  61. package/dist/esm/preview/index-wy95a41r.mjs +407 -0
  62. package/dist/esm/preview/index-ysnwfc4t.mjs +306 -0
  63. package/dist/esm/preview/index.mjs +51 -0
  64. package/dist/esm/preview/invert.mjs +84 -0
  65. package/dist/esm/preview/iris-wipe.mjs +315 -0
  66. package/dist/esm/preview/lens-blur.mjs +563 -0
  67. package/dist/esm/preview/levels.mjs +400 -0
  68. package/dist/esm/preview/light-leak.mjs +8 -0
  69. package/dist/esm/preview/light-trail.mjs +516 -0
  70. package/dist/esm/preview/lightning.mjs +603 -0
  71. package/dist/esm/preview/linear-gradient-tint.mjs +6 -0
  72. package/dist/esm/preview/linear-gradient.mjs +6 -0
  73. package/dist/esm/preview/linear-progressive-blur.mjs +516 -0
  74. package/dist/esm/preview/linear-progressive-pixelate.mjs +176 -0
  75. package/dist/esm/preview/lines.mjs +536 -0
  76. package/dist/esm/preview/liquid-contours.mjs +512 -0
  77. package/dist/esm/preview/long-shadows.mjs +437 -0
  78. package/dist/esm/preview/lut.mjs +601 -0
  79. package/dist/esm/preview/magnify.mjs +403 -0
  80. package/dist/esm/preview/mirror.mjs +341 -0
  81. package/dist/esm/preview/noise-displacement.mjs +584 -0
  82. package/dist/esm/preview/noise.mjs +318 -0
  83. package/dist/esm/preview/outline.mjs +725 -0
  84. package/dist/esm/preview/page-turn.mjs +302 -0
  85. package/dist/esm/preview/paper.mjs +1249 -0
  86. package/dist/esm/preview/pattern.mjs +6 -0
  87. package/dist/esm/preview/pixel-dissolve.mjs +360 -0
  88. package/dist/esm/preview/pixelate.mjs +249 -0
  89. package/dist/esm/preview/radial-progressive-blur.mjs +582 -0
  90. package/dist/esm/preview/radial-progressive-pixelate.mjs +220 -0
  91. package/dist/esm/preview/radial-wipe.mjs +224 -0
  92. package/dist/esm/preview/rain-fall.mjs +114 -0
  93. package/dist/esm/preview/region-blur.mjs +500 -0
  94. package/dist/esm/preview/rings.mjs +8 -0
  95. package/dist/esm/preview/roughen-edges.mjs +590 -0
  96. package/dist/esm/preview/saturation.mjs +86 -0
  97. package/dist/esm/preview/scale.mjs +109 -0
  98. package/dist/esm/preview/scanlines.mjs +362 -0
  99. package/dist/esm/preview/shadows-highlights.mjs +284 -0
  100. package/dist/esm/preview/shatter.mjs +868 -0
  101. package/dist/esm/preview/shine.mjs +368 -0
  102. package/dist/esm/preview/shrinkwrap.mjs +769 -0
  103. package/dist/esm/preview/skew.mjs +300 -0
  104. package/dist/esm/preview/snow-fall.mjs +170 -0
  105. package/dist/esm/preview/speckle.mjs +356 -0
  106. package/dist/esm/preview/sphere.mjs +252 -0
  107. package/dist/esm/preview/starburst.mjs +8 -0
  108. package/dist/esm/preview/tear.mjs +375 -0
  109. package/dist/esm/preview/thermal-vision.mjs +387 -0
  110. package/dist/esm/preview/tile.mjs +7 -0
  111. package/dist/esm/preview/tint.mjs +125 -0
  112. package/dist/esm/preview/translate.mjs +151 -0
  113. package/dist/esm/preview/turbulent-displace.mjs +613 -0
  114. package/dist/esm/preview/tv-signal-off.mjs +308 -0
  115. package/dist/esm/preview/venetian-blinds.mjs +341 -0
  116. package/dist/esm/preview/vibrance.mjs +254 -0
  117. package/dist/esm/preview/vignette.mjs +458 -0
  118. package/dist/esm/preview/wave.mjs +384 -0
  119. package/dist/esm/preview/waves.mjs +599 -0
  120. package/dist/esm/preview/white-balance.mjs +280 -0
  121. package/dist/esm/preview/white-noise.mjs +244 -0
  122. package/dist/esm/preview/zigzag.mjs +8 -0
  123. package/dist/esm/preview/zoom-blur.mjs +389 -0
  124. package/dist/lightning/geometry.d.ts +10 -0
  125. package/dist/lightning/index.d.ts +4 -0
  126. package/dist/lightning/mask.d.ts +2 -0
  127. package/dist/lightning/params.d.ts +259 -0
  128. package/dist/lightning/shaders.d.ts +2 -0
  129. package/dist/lightning.d.ts +2 -0
  130. package/dist/magnify/shader.d.ts +1 -0
  131. package/dist/magnify/webgpu-shader.d.ts +1 -0
  132. package/dist/magnify.d.ts +28 -0
  133. package/package.json +30 -6
@@ -0,0 +1,375 @@
1
+ import {
2
+ setupWebGpuMesh,
3
+ cleanupWebGpuMesh,
4
+ applyWebGpuMesh
5
+ } from "./index-4scpn12x.mjs";
6
+ import {
7
+ assertOptionalFiniteNumber
8
+ } from "./index-wxhvgv2s.mjs";
9
+ import {
10
+ assertEffectParamsObject
11
+ } from "./index-4fvp93ps.mjs";
12
+
13
+ // src/tear.ts
14
+ import { Internals } from "remotion";
15
+
16
+ // src/tear-webgpu-shader.ts
17
+ var TEAR_WEBGPU_SHADER = `
18
+ struct Params {resolution: vec2f, angle: f32, progress: f32, rotation: f32, jaggedness: f32,}
19
+ struct VertexOutput {@builtin(position) position: vec4f, @location(0) uv: vec2f,}
20
+ @group(0) @binding(0) var sourceTexture: texture_2d<f32>;
21
+ @group(0) @binding(1) var sourceSampler: sampler;
22
+ @group(0) @binding(2) var<uniform> params: Params;
23
+ @vertex fn vertex(@builtin(vertex_index) index: u32, @builtin(instance_index) instance: u32) -> VertexOutput {
24
+ let aPos=vec2f(f32(index%2u),f32(index/2u)/192.0);
25
+ let side=select(-1.0,1.0,instance!=0u);
26
+ let direction=radians(params.angle);let dc=cos(direction);let ds=sin(direction);
27
+ let toCanvas=mat2x2f(vec2f(dc,-ds),vec2f(ds,dc));
28
+ let extent=vec2f(abs(dc)*params.resolution.x+abs(ds)*params.resolution.y,abs(ds)*params.resolution.x+abs(dc)*params.resolution.y);
29
+ let outerEdge=select(0.0,extent.x,side>=0.0);
30
+ let zigzag=1.0-4.0*abs(fract(aPos.y*6.0+0.25)-0.5);
31
+ let seam=extent.x*0.5+zigzag*min(params.jaggedness,extent.x*0.45);
32
+ let source=vec2f(mix(outerEdge,seam,aPos.x),aPos.y*extent.y);
33
+ let sourceCanvas=toCanvas*(source-extent*0.5)+params.resolution*0.5;
34
+ let tearProgress=min(params.progress,1.0);
35
+ let tipY=tearProgress*extent.y;
36
+ let pivot=vec2f(extent.x*0.5,tipY);
37
+ let fullAngle=radians(params.rotation)*tearProgress;
38
+ let bendHeight=max(extent.y*0.15,fullAngle*extent.x*1.5);
39
+ let bend=smoothstep(0.0,bendHeight,tipY-source.y);
40
+ let angle=side*fullAngle*bend;let c=cos(angle);let s=sin(angle);
41
+ let delta=source-pivot;
42
+ var position=pivot+vec2f(c*delta.x-s*delta.y,s*delta.x+c*delta.y);
43
+ position.x+=side*max(params.progress-1.0,0.0)*extent.x*0.5;
44
+ position=toCanvas*(position-extent*0.5)+params.resolution*0.5;
45
+ var output: VertexOutput;
46
+ // Mesh runtime restores orientation after resolving WebGL-compatible samples.
47
+ output.position=vec4f(position.x/params.resolution.x*2.0-1.0,position.y/params.resolution.y*2.0-1.0,0,1);
48
+ output.uv=sourceCanvas/params.resolution;
49
+ return output;
50
+ }
51
+ @fragment fn fragment(input: VertexOutput) -> @location(0) vec4f {
52
+ if (any(input.uv<vec2f(0)) || any(input.uv>vec2f(1))) {discard;}
53
+ return textureSample(sourceTexture,sourceSampler,input.uv);
54
+ }
55
+ `;
56
+
57
+ // src/tear.ts
58
+ var { createEffect, createWebGL2ContextError } = Internals;
59
+ var DEFAULT_PROGRESS = 0.5;
60
+ var DEFAULT_ANGLE = 0;
61
+ var DEFAULT_ROTATION = 20;
62
+ var DEFAULT_JAGGEDNESS = 20;
63
+ var MESH_ROWS = 192;
64
+ var tearSchema = {
65
+ progress: {
66
+ type: "number",
67
+ min: 0,
68
+ step: 0.01,
69
+ default: DEFAULT_PROGRESS,
70
+ description: "Progress",
71
+ hiddenFromList: false
72
+ },
73
+ angle: {
74
+ type: "number",
75
+ step: 1,
76
+ default: DEFAULT_ANGLE,
77
+ description: "Angle",
78
+ hiddenFromList: false
79
+ },
80
+ rotation: {
81
+ type: "number",
82
+ min: 0,
83
+ max: 90,
84
+ step: 1,
85
+ default: DEFAULT_ROTATION,
86
+ description: "Rotation",
87
+ hiddenFromList: false
88
+ },
89
+ jaggedness: {
90
+ type: "number",
91
+ min: 0,
92
+ max: 100,
93
+ step: 1,
94
+ default: DEFAULT_JAGGEDNESS,
95
+ description: "Jaggedness",
96
+ hiddenFromList: false
97
+ }
98
+ };
99
+ var resolve = (p) => ({
100
+ progress: p.progress ?? DEFAULT_PROGRESS,
101
+ angle: p.angle ?? DEFAULT_ANGLE,
102
+ rotation: p.rotation ?? DEFAULT_ROTATION,
103
+ jaggedness: p.jaggedness ?? DEFAULT_JAGGEDNESS
104
+ });
105
+ var validateTearParams = (params) => {
106
+ assertEffectParamsObject(params, "Tear");
107
+ assertOptionalFiniteNumber(params.progress, "progress");
108
+ assertOptionalFiniteNumber(params.angle, "angle");
109
+ assertOptionalFiniteNumber(params.rotation, "rotation");
110
+ assertOptionalFiniteNumber(params.jaggedness, "jaggedness");
111
+ const r = resolve(params);
112
+ if (r.progress < 0) {
113
+ throw new Error('"progress" must be >= 0');
114
+ }
115
+ if (r.rotation < 0 || r.rotation > 90) {
116
+ throw new Error('"rotation" must be between 0 and 90');
117
+ }
118
+ if (r.jaggedness < 0) {
119
+ throw new Error('"jaggedness" must be >= 0');
120
+ }
121
+ };
122
+ var VERTEX_SHADER = `#version 300 es
123
+ in vec2 aPos;
124
+ out vec2 vUv;
125
+ uniform vec2 uResolution;
126
+ uniform float uAngle;
127
+ uniform float uProgress;
128
+ uniform float uRotation;
129
+ uniform float uJaggedness;
130
+ uniform float uSide;
131
+
132
+ float seam(float y, float width) {
133
+ // Six zigzags, with matching edges on both pieces. Limit the amplitude
134
+ // to keep the tear inside the source, even on very narrow canvases.
135
+ float zigzag = 1.0 - 4.0 * abs(fract(y * 6.0 + 0.25) - 0.5);
136
+ return width * 0.5 + zigzag * min(uJaggedness, width * 0.45);
137
+ }
138
+
139
+ void main() {
140
+ // Work in a rectangle aligned with the rip, large enough to cover the
141
+ // original canvas at every angle. Rotate UVs back to the source so the
142
+ // image itself keeps its orientation.
143
+ float direction = radians(uAngle);
144
+ float dc = cos(direction);
145
+ float ds = sin(direction);
146
+ mat2 toCanvas = mat2(dc, -ds, ds, dc);
147
+ vec2 extent = vec2(
148
+ abs(dc) * uResolution.x + abs(ds) * uResolution.y,
149
+ abs(ds) * uResolution.x + abs(dc) * uResolution.y
150
+ );
151
+ float outerEdge = uSide < 0.0 ? 0.0 : extent.x;
152
+ vec2 source = vec2(mix(outerEdge, seam(aPos.y, extent.x), aPos.x), aPos.y * extent.y);
153
+ vec2 sourceCanvas = toCanvas * (source - extent * 0.5) + uResolution * 0.5;
154
+ vUv = vec2(sourceCanvas.x / uResolution.x, 1.0 - sourceCanvas.y / uResolution.y);
155
+
156
+ float tearProgress = min(uProgress, 1.0);
157
+ float tipY = tearProgress * extent.y;
158
+ // Keep the motion independent of the jagged edge. Following the seam
159
+ // with the pivot would rock the entire image at every zigzag.
160
+ vec2 pivot = vec2(extent.x * 0.5, tipY);
161
+ // The short bend near the tip joins the rotating portion continuously
162
+ // to the untouched area below it. Work in pixels to preserve angles
163
+ // at different aspect ratios.
164
+ float fullAngle = radians(uRotation) * tearProgress;
165
+ // Widen the bend for larger rotations / wider sheets so neighboring
166
+ // rows cannot fold over each other at the outside edges.
167
+ float bendHeight = max(extent.y * 0.15, fullAngle * extent.x * 1.5);
168
+ float bend = smoothstep(0.0, bendHeight, tipY - source.y);
169
+ float angle = uSide * fullAngle * bend;
170
+ float c = cos(angle);
171
+ float s = sin(angle);
172
+ vec2 delta = source - pivot;
173
+ vec2 position = pivot + vec2(c * delta.x - s * delta.y, s * delta.x + c * delta.y);
174
+ // After the tear reaches the bottom, keep the rotation stable and
175
+ // move each piece outward by half a canvas width per unit of progress.
176
+ position.x += uSide * max(uProgress - 1.0, 0.0) * extent.x * 0.5;
177
+ position = toCanvas * (position - extent * 0.5) + uResolution * 0.5;
178
+ gl_Position = vec4(position.x / uResolution.x * 2.0 - 1.0, 1.0 - position.y / uResolution.y * 2.0, 0.0, 1.0);
179
+ }
180
+ `;
181
+ var FRAGMENT_SHADER = `#version 300 es
182
+ precision highp float;
183
+ in vec2 vUv;
184
+ out vec4 fragColor;
185
+ uniform sampler2D uSource;
186
+
187
+ void main() {
188
+ // The rotated mesh extends beyond the original image. Those parts
189
+ // must remain transparent instead of smearing clamped border pixels.
190
+ if (any(lessThan(vUv, vec2(0.0))) || any(greaterThan(vUv, vec2(1.0)))) {
191
+ discard;
192
+ }
193
+ fragColor = texture(uSource, vUv);
194
+ }
195
+ `;
196
+ var compileShader = (gl, type, source) => {
197
+ const shader = gl.createShader(type);
198
+ if (!shader) {
199
+ throw new Error("Failed to create WebGL shader");
200
+ }
201
+ gl.shaderSource(shader, source);
202
+ gl.compileShader(shader);
203
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
204
+ const log = gl.getShaderInfoLog(shader);
205
+ gl.deleteShader(shader);
206
+ throw new Error(`Tear shader compile failed: ${log ?? "(no log)"}`);
207
+ }
208
+ return shader;
209
+ };
210
+ var linkProgram = (gl, vs, fs) => {
211
+ const program = gl.createProgram();
212
+ if (!program) {
213
+ throw new Error("Failed to create WebGL program");
214
+ }
215
+ gl.attachShader(program, vs);
216
+ gl.attachShader(program, fs);
217
+ gl.linkProgram(program);
218
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
219
+ const log = gl.getProgramInfoLog(program);
220
+ gl.deleteProgram(program);
221
+ throw new Error(`Tear program link failed: ${log ?? "(no log)"}`);
222
+ }
223
+ return program;
224
+ };
225
+ var createTearState = (gl) => {
226
+ const vs = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
227
+ const fs = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
228
+ const program = linkProgram(gl, vs, fs);
229
+ gl.deleteShader(vs);
230
+ gl.deleteShader(fs);
231
+ const vao = gl.createVertexArray();
232
+ if (!vao) {
233
+ throw new Error("Failed to create WebGL vertex array");
234
+ }
235
+ gl.bindVertexArray(vao);
236
+ const data = new Float32Array((MESH_ROWS + 1) * 4);
237
+ for (let row = 0;row <= MESH_ROWS; row++) {
238
+ data.set([0, row / MESH_ROWS, 1, row / MESH_ROWS], row * 4);
239
+ }
240
+ const vbo = gl.createBuffer();
241
+ if (!vbo) {
242
+ throw new Error("Failed to create WebGL buffer");
243
+ }
244
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
245
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
246
+ const aPos = gl.getAttribLocation(program, "aPos");
247
+ gl.enableVertexAttribArray(aPos);
248
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 8, 0);
249
+ gl.bindVertexArray(null);
250
+ const texture = gl.createTexture();
251
+ if (!texture) {
252
+ throw new Error("Failed to create WebGL texture");
253
+ }
254
+ gl.bindTexture(gl.TEXTURE_2D, texture);
255
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
256
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
257
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
258
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
259
+ gl.bindTexture(gl.TEXTURE_2D, null);
260
+ return {
261
+ gl,
262
+ program,
263
+ vao,
264
+ vbo,
265
+ texture,
266
+ uSource: gl.getUniformLocation(program, "uSource"),
267
+ uResolution: gl.getUniformLocation(program, "uResolution"),
268
+ uAngle: gl.getUniformLocation(program, "uAngle"),
269
+ uProgress: gl.getUniformLocation(program, "uProgress"),
270
+ uRotation: gl.getUniformLocation(program, "uRotation"),
271
+ uJaggedness: gl.getUniformLocation(program, "uJaggedness"),
272
+ uSide: gl.getUniformLocation(program, "uSide")
273
+ };
274
+ };
275
+ var tear = createEffect({
276
+ type: "dev.remotion.effects.tear",
277
+ label: "tear()",
278
+ documentationLink: "https://www.remotion.dev/docs/effects/tear",
279
+ calculateKey: (params) => {
280
+ const r = resolve(params);
281
+ return `tear-${r.progress}-${r.rotation}-${r.jaggedness}-${r.angle}`;
282
+ },
283
+ implementations: {
284
+ webgpu: Internals.createEffectImplementation({
285
+ setup: (target) => setupWebGpuMesh(target, "tear"),
286
+ apply: ({ source, width, height, params, state, gpuDevice }) => {
287
+ if (!gpuDevice)
288
+ throw new Error("A WebGPU device is required for tear");
289
+ const r = resolve(params);
290
+ applyWebGpuMesh({
291
+ state,
292
+ source,
293
+ width,
294
+ height,
295
+ device: gpuDevice,
296
+ shader: TEAR_WEBGPU_SHADER,
297
+ uniformData: new Float32Array([
298
+ width,
299
+ height,
300
+ r.angle % 360,
301
+ r.progress,
302
+ r.rotation,
303
+ r.jaggedness,
304
+ 0,
305
+ 0
306
+ ]),
307
+ vertices: null,
308
+ topology: "triangle-strip",
309
+ blend: false,
310
+ vertexCount: (MESH_ROWS + 1) * 2,
311
+ instanceCount: 2
312
+ });
313
+ },
314
+ cleanup: cleanupWebGpuMesh
315
+ }),
316
+ webgl2: Internals.createEffectImplementation({
317
+ setup: (target) => {
318
+ const gl = target.getContext("webgl2", {
319
+ premultipliedAlpha: true,
320
+ alpha: true,
321
+ preserveDrawingBuffer: true
322
+ });
323
+ if (!gl) {
324
+ throw createWebGL2ContextError("tear effect");
325
+ }
326
+ return createTearState(gl);
327
+ },
328
+ apply: ({ source, width, height, params, state, flipSourceY }) => {
329
+ const r = resolve(params);
330
+ state.gl.viewport(0, 0, width, height);
331
+ state.gl.bindFramebuffer(state.gl.FRAMEBUFFER, null);
332
+ state.gl.clearColor(0, 0, 0, 0);
333
+ state.gl.clear(state.gl.COLOR_BUFFER_BIT);
334
+ state.gl.useProgram(state.program);
335
+ state.gl.bindVertexArray(state.vao);
336
+ state.gl.activeTexture(state.gl.TEXTURE0);
337
+ state.gl.bindTexture(state.gl.TEXTURE_2D, state.texture);
338
+ state.gl.pixelStorei(state.gl.UNPACK_FLIP_Y_WEBGL, flipSourceY);
339
+ state.gl.pixelStorei(state.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
340
+ state.gl.texImage2D(state.gl.TEXTURE_2D, 0, state.gl.RGBA, state.gl.RGBA, state.gl.UNSIGNED_BYTE, source);
341
+ if (state.uSource)
342
+ state.gl.uniform1i(state.uSource, 0);
343
+ if (state.uAngle)
344
+ state.gl.uniform1f(state.uAngle, r.angle % 360);
345
+ if (state.uProgress)
346
+ state.gl.uniform1f(state.uProgress, r.progress);
347
+ if (state.uRotation)
348
+ state.gl.uniform1f(state.uRotation, r.rotation);
349
+ if (state.uJaggedness)
350
+ state.gl.uniform1f(state.uJaggedness, r.jaggedness);
351
+ if (state.uResolution)
352
+ state.gl.uniform2f(state.uResolution, width, height);
353
+ for (const side of [-1, 1]) {
354
+ if (state.uSide)
355
+ state.gl.uniform1f(state.uSide, side);
356
+ state.gl.drawArrays(state.gl.TRIANGLE_STRIP, 0, (MESH_ROWS + 1) * 2);
357
+ }
358
+ state.gl.bindVertexArray(null);
359
+ state.gl.bindTexture(state.gl.TEXTURE_2D, null);
360
+ state.gl.useProgram(null);
361
+ },
362
+ cleanup: ({ gl, program, vao, vbo, texture }) => {
363
+ gl.deleteTexture(texture);
364
+ gl.deleteBuffer(vbo);
365
+ gl.deleteProgram(program);
366
+ gl.deleteVertexArray(vao);
367
+ }
368
+ })
369
+ },
370
+ schema: tearSchema,
371
+ validateParams: validateTearParams
372
+ });
373
+ export {
374
+ tear
375
+ };