@remotion/web-renderer 4.0.391 → 4.0.393

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 (38) hide show
  1. package/dist/can-use-webfs-target.d.ts +1 -0
  2. package/dist/can-use-webfs-target.js +19 -0
  3. package/dist/compose.d.ts +6 -1
  4. package/dist/compose.js +31 -23
  5. package/dist/drawing/calculate-transforms.js +27 -8
  6. package/dist/drawing/draw-dom-element.d.ts +2 -0
  7. package/dist/drawing/draw-dom-element.js +17 -0
  8. package/dist/drawing/draw-element-to-canvas.d.ts +7 -3
  9. package/dist/drawing/draw-element-to-canvas.js +40 -48
  10. package/dist/drawing/draw-element.d.ts +9 -0
  11. package/dist/drawing/draw-element.js +50 -0
  12. package/dist/drawing/drawn-fn.d.ts +5 -0
  13. package/dist/drawing/drawn-fn.js +1 -0
  14. package/dist/drawing/text/apply-text-transform.d.ts +1 -0
  15. package/dist/drawing/text/apply-text-transform.js +12 -0
  16. package/dist/drawing/text/draw-text.d.ts +2 -0
  17. package/dist/drawing/text/draw-text.js +44 -0
  18. package/dist/drawing/text/handle-text-node.d.ts +7 -1
  19. package/dist/drawing/text/handle-text-node.js +7 -66
  20. package/dist/drawing/transform-in-3d.d.ts +8 -0
  21. package/dist/drawing/transform-in-3d.js +142 -0
  22. package/dist/esm/index.mjs +677 -8534
  23. package/dist/index.d.ts +2 -1
  24. package/dist/mediabunny-mappings.d.ts +1 -0
  25. package/dist/mediabunny-mappings.js +10 -0
  26. package/dist/output-target.d.ts +1 -0
  27. package/dist/output-target.js +1 -0
  28. package/dist/render-media-on-web.d.ts +6 -1
  29. package/dist/render-media-on-web.js +64 -24
  30. package/dist/render-operations-queue.d.ts +3 -0
  31. package/dist/render-operations-queue.js +3 -0
  32. package/dist/render-still-on-web.js +15 -9
  33. package/dist/take-screenshot.js +1 -1
  34. package/dist/walk-tree.d.ts +1 -0
  35. package/dist/walk-tree.js +14 -0
  36. package/dist/web-fs-target.d.ts +7 -0
  37. package/dist/web-fs-target.js +41 -0
  38. package/package.json +6 -6
@@ -0,0 +1,142 @@
1
+ function compileShader(shaderGl, source, type) {
2
+ const shader = shaderGl.createShader(type);
3
+ if (!shader) {
4
+ throw new Error('Could not create shader');
5
+ }
6
+ shaderGl.shaderSource(shader, source);
7
+ shaderGl.compileShader(shader);
8
+ if (!shaderGl.getShaderParameter(shader, shaderGl.COMPILE_STATUS)) {
9
+ const log = shaderGl.getShaderInfoLog(shader);
10
+ shaderGl.deleteShader(shader);
11
+ throw new Error('Shader compile error: ' + log);
12
+ }
13
+ return shader;
14
+ }
15
+ let helperCanvas = null;
16
+ const createHelperCanvas = ({ canvasWidth, canvasHeight, }) => {
17
+ if (helperCanvas &&
18
+ helperCanvas.canvas.width >= canvasWidth &&
19
+ helperCanvas.canvas.height >= canvasHeight) {
20
+ // Clear and draw
21
+ helperCanvas.gl.clearColor(0, 0, 0, 0); // Transparent background
22
+ helperCanvas.gl.clear(helperCanvas.gl.COLOR_BUFFER_BIT);
23
+ return helperCanvas;
24
+ }
25
+ const canvas = new OffscreenCanvas(canvasWidth, canvasHeight);
26
+ const gl = canvas.getContext('webgl');
27
+ if (!gl) {
28
+ throw new Error('WebGL not supported');
29
+ }
30
+ // Vertex shader - now includes texture coordinates
31
+ const vsSource = `
32
+ attribute vec2 aPosition;
33
+ attribute vec2 aTexCoord;
34
+ uniform mat4 uTransform;
35
+ uniform mat4 uProjection;
36
+ varying vec2 vTexCoord;
37
+
38
+ void main() {
39
+ gl_Position = uProjection * uTransform * vec4(aPosition, 0.0, 1.0);
40
+ vTexCoord = aTexCoord;
41
+ }
42
+ `;
43
+ // Fragment shader - now samples from texture
44
+ const fsSource = `
45
+ precision mediump float;
46
+ uniform sampler2D uTexture;
47
+ varying vec2 vTexCoord;
48
+
49
+ void main() {
50
+ gl_FragColor = texture2D(uTexture, vTexCoord);
51
+ }
52
+ `;
53
+ // Create program
54
+ const vertexShader = compileShader(gl, vsSource, gl.VERTEX_SHADER);
55
+ const fragmentShader = compileShader(gl, fsSource, gl.FRAGMENT_SHADER);
56
+ const program = gl.createProgram();
57
+ gl.attachShader(program, vertexShader);
58
+ gl.attachShader(program, fragmentShader);
59
+ gl.linkProgram(program);
60
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
61
+ throw new Error('Program link error: ' + gl.getProgramInfoLog(program));
62
+ }
63
+ gl.useProgram(program);
64
+ // Clear and draw
65
+ gl.clearColor(0, 0, 0, 0); // Transparent background
66
+ gl.clear(gl.COLOR_BUFFER_BIT);
67
+ // Enable blending for transparency
68
+ gl.enable(gl.BLEND);
69
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
70
+ helperCanvas = { canvas, gl, program };
71
+ return helperCanvas;
72
+ };
73
+ export const transformIn3d = ({ canvasWidth, canvasHeight, matrix, sourceCanvas, offsetLeft, offsetTop, }) => {
74
+ const { canvas, gl, program } = createHelperCanvas({ canvasWidth, canvasHeight });
75
+ const vertexBuffer = gl.createBuffer();
76
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
77
+ // Create a quad (two triangles) with texture coordinates
78
+ // prettier-ignore
79
+ const vertices = new Float32Array([
80
+ // Position (x, y) + TexCoord (u, v)
81
+ // First:
82
+ offsetLeft, offsetTop, 0, 0, // bottom-left
83
+ canvasWidth + offsetLeft, offsetTop, 1, 0, // bottom-right
84
+ offsetLeft, canvasHeight + offsetTop, 0, 1, // top-left
85
+ // Second:
86
+ offsetLeft, canvasHeight + offsetTop, 0, 1, // top-left
87
+ canvasWidth + offsetLeft, offsetTop, 1, 0, // bottom-right
88
+ canvasWidth + offsetLeft, canvasHeight + offsetTop, 1, 1, // top-right
89
+ ]);
90
+ gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
91
+ const aPosition = gl.getAttribLocation(program, 'aPosition');
92
+ const aTexCoord = gl.getAttribLocation(program, 'aTexCoord');
93
+ // Position attribute (2 floats, stride 4 floats, offset 0)
94
+ gl.enableVertexAttribArray(aPosition);
95
+ gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 4 * 4, 0);
96
+ // Texture coordinate attribute (2 floats, stride 4 floats, offset 2)
97
+ gl.enableVertexAttribArray(aTexCoord);
98
+ gl.vertexAttribPointer(aTexCoord, 2, gl.FLOAT, false, 4 * 4, 2 * 4);
99
+ // Create and configure texture
100
+ const texture = gl.createTexture();
101
+ gl.bindTexture(gl.TEXTURE_2D, texture);
102
+ // Set texture parameters
103
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
104
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
105
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
106
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
107
+ // Upload the source canvas as a texture
108
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, sourceCanvas);
109
+ // The transform matrix
110
+ const transformMatrix = matrix.toFloat32Array();
111
+ const zScale = 1000000000; // By default infinite in chrome
112
+ // Create orthographic projection matrix for pixel coordinates
113
+ const projectionMatrix = new Float32Array([
114
+ 2 / canvas.width,
115
+ 0,
116
+ 0,
117
+ 0,
118
+ 0,
119
+ -2 / canvas.height,
120
+ 0,
121
+ 0,
122
+ 0,
123
+ 0,
124
+ -2 / zScale,
125
+ 0,
126
+ -1,
127
+ 1,
128
+ 0,
129
+ 1,
130
+ ]);
131
+ const uTransform = gl.getUniformLocation(program, 'uTransform');
132
+ const uProjection = gl.getUniformLocation(program, 'uProjection');
133
+ const uTexture = gl.getUniformLocation(program, 'uTexture');
134
+ gl.uniformMatrix4fv(uTransform, false, transformMatrix);
135
+ gl.uniformMatrix4fv(uProjection, false, projectionMatrix);
136
+ gl.uniform1i(uTexture, 0); // Use texture unit 0
137
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
138
+ // Clean up resources to prevent leaks and ensure clean state for reuse
139
+ gl.deleteTexture(texture);
140
+ gl.deleteBuffer(vertexBuffer);
141
+ return canvas;
142
+ };