@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.
- package/dist/can-use-webfs-target.d.ts +1 -0
- package/dist/can-use-webfs-target.js +19 -0
- package/dist/compose.d.ts +6 -1
- package/dist/compose.js +31 -23
- package/dist/drawing/calculate-transforms.js +27 -8
- package/dist/drawing/draw-dom-element.d.ts +2 -0
- package/dist/drawing/draw-dom-element.js +17 -0
- package/dist/drawing/draw-element-to-canvas.d.ts +7 -3
- package/dist/drawing/draw-element-to-canvas.js +40 -48
- package/dist/drawing/draw-element.d.ts +9 -0
- package/dist/drawing/draw-element.js +50 -0
- package/dist/drawing/drawn-fn.d.ts +5 -0
- package/dist/drawing/drawn-fn.js +1 -0
- package/dist/drawing/text/apply-text-transform.d.ts +1 -0
- package/dist/drawing/text/apply-text-transform.js +12 -0
- package/dist/drawing/text/draw-text.d.ts +2 -0
- package/dist/drawing/text/draw-text.js +44 -0
- package/dist/drawing/text/handle-text-node.d.ts +7 -1
- package/dist/drawing/text/handle-text-node.js +7 -66
- package/dist/drawing/transform-in-3d.d.ts +8 -0
- package/dist/drawing/transform-in-3d.js +142 -0
- package/dist/esm/index.mjs +677 -8534
- package/dist/index.d.ts +2 -1
- package/dist/mediabunny-mappings.d.ts +1 -0
- package/dist/mediabunny-mappings.js +10 -0
- package/dist/output-target.d.ts +1 -0
- package/dist/output-target.js +1 -0
- package/dist/render-media-on-web.d.ts +6 -1
- package/dist/render-media-on-web.js +64 -24
- package/dist/render-operations-queue.d.ts +3 -0
- package/dist/render-operations-queue.js +3 -0
- package/dist/render-still-on-web.js +15 -9
- package/dist/take-screenshot.js +1 -1
- package/dist/walk-tree.d.ts +1 -0
- package/dist/walk-tree.js +14 -0
- package/dist/web-fs-target.d.ts +7 -0
- package/dist/web-fs-target.js +41 -0
- 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
|
+
};
|