@remotion/three 4.0.344 → 4.0.345
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.
|
@@ -5,14 +5,15 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const remotion_1 = require("remotion");
|
|
7
7
|
const Unblocker = () => {
|
|
8
|
+
const { delayRender, continueRender } = (0, remotion_1.useDelayRender)();
|
|
8
9
|
if (typeof document !== 'undefined') {
|
|
9
10
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
10
11
|
(0, react_1.useLayoutEffect)(() => {
|
|
11
|
-
const handle =
|
|
12
|
+
const handle = delayRender(`Waiting for <Suspense /> of <ThreeCanvas /> to resolve`);
|
|
12
13
|
return () => {
|
|
13
|
-
|
|
14
|
+
continueRender(handle);
|
|
14
15
|
};
|
|
15
|
-
}, []);
|
|
16
|
+
}, [continueRender, delayRender]);
|
|
16
17
|
}
|
|
17
18
|
return null;
|
|
18
19
|
};
|
package/dist/cjs/ThreeCanvas.js
CHANGED
|
@@ -34,7 +34,8 @@ const ThreeCanvas = (props) => {
|
|
|
34
34
|
// https://r3f.docs.pmnd.rs/advanced/scaling-performance#on-demand-rendering
|
|
35
35
|
const shouldUseFrameloopDemand = isRendering;
|
|
36
36
|
const { children, width, height, style, onCreated, ...rest } = props;
|
|
37
|
-
const
|
|
37
|
+
const { delayRender, continueRender } = (0, remotion_1.useDelayRender)();
|
|
38
|
+
const [waitForCreated] = (0, react_1.useState)(() => delayRender('Waiting for <ThreeCanvas/> to be created'));
|
|
38
39
|
(0, validate_1.validateDimension)(width, 'width', 'of the <ThreeCanvas /> component');
|
|
39
40
|
(0, validate_1.validateDimension)(height, 'height', 'of the <ThreeCanvas /> component');
|
|
40
41
|
const contexts = remotion_1.Internals.useRemotionContexts();
|
|
@@ -44,9 +45,9 @@ const ThreeCanvas = (props) => {
|
|
|
44
45
|
...(style !== null && style !== void 0 ? style : {}),
|
|
45
46
|
};
|
|
46
47
|
const remotion_onCreated = (0, react_1.useCallback)((state) => {
|
|
47
|
-
|
|
48
|
+
continueRender(waitForCreated);
|
|
48
49
|
onCreated === null || onCreated === void 0 ? void 0 : onCreated(state);
|
|
49
|
-
}, [onCreated, waitForCreated]);
|
|
50
|
+
}, [onCreated, waitForCreated, continueRender]);
|
|
50
51
|
return ((0, jsx_runtime_1.jsx)(SuspenseLoader_1.SuspenseLoader, { children: (0, jsx_runtime_1.jsxs)(fiber_1.Canvas, { style: actualStyle, ...rest, frameloop: shouldUseFrameloopDemand ? 'demand' : 'always', onCreated: remotion_onCreated, children: [(0, jsx_runtime_1.jsx)(Scale, { width: width, height: height }), (0, jsx_runtime_1.jsxs)(remotion_1.Internals.RemotionContextProvider, { contexts: contexts, children: [shouldUseFrameloopDemand && (0, jsx_runtime_1.jsx)(FiberFrameInvalidator, {}), children] })] }) }));
|
|
51
52
|
};
|
|
52
53
|
exports.ThreeCanvas = ThreeCanvas;
|
|
@@ -59,8 +59,9 @@ const useInnerVideoTexture = ({ playbackRate, src, transparent, toneMapped, dela
|
|
|
59
59
|
}, [toneMapped, currentTime, src, transparent]);
|
|
60
60
|
const [textLoaderPromise] = (0, react_1.useState)(() => Promise.resolve().then(() => __importStar(require('three/src/loaders/TextureLoader.js'))));
|
|
61
61
|
const [imageTexture, setImageTexture] = (0, react_1.useState)(null);
|
|
62
|
+
const { delayRender, continueRender } = (0, remotion_1.useDelayRender)();
|
|
62
63
|
const fetchTexture = (0, react_1.useCallback)(() => {
|
|
63
|
-
const imageTextureHandle =
|
|
64
|
+
const imageTextureHandle = delayRender('fetch offthread video frame', {
|
|
64
65
|
retries: delayRenderRetries !== null && delayRenderRetries !== void 0 ? delayRenderRetries : undefined,
|
|
65
66
|
timeoutInMilliseconds: delayRenderTimeoutInMilliseconds !== null && delayRenderTimeoutInMilliseconds !== void 0 ? delayRenderTimeoutInMilliseconds : undefined,
|
|
66
67
|
});
|
|
@@ -75,7 +76,7 @@ const useInnerVideoTexture = ({ playbackRate, src, transparent, toneMapped, dela
|
|
|
75
76
|
return;
|
|
76
77
|
}
|
|
77
78
|
setImageTexture(texture);
|
|
78
|
-
|
|
79
|
+
continueRender(imageTextureHandle);
|
|
79
80
|
})
|
|
80
81
|
.catch((err) => {
|
|
81
82
|
(0, remotion_1.cancelRender)(err);
|
|
@@ -84,13 +85,15 @@ const useInnerVideoTexture = ({ playbackRate, src, transparent, toneMapped, dela
|
|
|
84
85
|
return () => {
|
|
85
86
|
cleanedUp = true;
|
|
86
87
|
textureLoaded === null || textureLoaded === void 0 ? void 0 : textureLoaded.dispose();
|
|
87
|
-
|
|
88
|
+
continueRender(imageTextureHandle);
|
|
88
89
|
};
|
|
89
90
|
}, [
|
|
90
91
|
offthreadVideoFrameSrc,
|
|
91
92
|
textLoaderPromise,
|
|
92
93
|
delayRenderRetries,
|
|
93
94
|
delayRenderTimeoutInMilliseconds,
|
|
95
|
+
continueRender,
|
|
96
|
+
delayRender,
|
|
94
97
|
]);
|
|
95
98
|
(0, react_1.useLayoutEffect)(() => {
|
|
96
99
|
const cleanup = fetchTexture();
|
|
@@ -50,11 +50,12 @@ const warnAboutRequestVideoFrameCallback = () => {
|
|
|
50
50
|
* @see [Documentation](https://www.remotion.dev/docs/use-video-texture)
|
|
51
51
|
*/
|
|
52
52
|
const useVideoTexture = (videoRef) => {
|
|
53
|
+
const { delayRender, continueRender } = (0, remotion_1.useDelayRender)();
|
|
53
54
|
const [loaded] = (0, react_1.useState)(() => {
|
|
54
55
|
if (typeof document === 'undefined') {
|
|
55
56
|
return 0;
|
|
56
57
|
}
|
|
57
|
-
return
|
|
58
|
+
return delayRender(`Waiting for texture in useVideoTexture() to be loaded`);
|
|
58
59
|
});
|
|
59
60
|
const [videoTexture, setVideoTexture] = (0, react_1.useState)(null);
|
|
60
61
|
const [vidText] = (0, react_1.useState)(() => Promise.resolve().then(() => __importStar(require('three/src/textures/VideoTexture.js'))));
|
|
@@ -69,12 +70,12 @@ const useVideoTexture = (videoRef) => {
|
|
|
69
70
|
videoRef.current.width = videoRef.current.videoWidth;
|
|
70
71
|
videoRef.current.height = videoRef.current.videoHeight;
|
|
71
72
|
setVideoTexture(vt);
|
|
72
|
-
|
|
73
|
+
continueRender(loaded);
|
|
73
74
|
})
|
|
74
75
|
.catch((err) => {
|
|
75
76
|
(0, remotion_1.cancelRender)(err);
|
|
76
77
|
});
|
|
77
|
-
}, [loaded, vidText, videoRef]);
|
|
78
|
+
}, [loaded, vidText, videoRef, continueRender]);
|
|
78
79
|
react_1.default.useLayoutEffect(() => {
|
|
79
80
|
if (!videoRef.current) {
|
|
80
81
|
return;
|
|
@@ -105,12 +106,12 @@ const useVideoTexture = (videoRef) => {
|
|
|
105
106
|
(0, react_1.useEffect)(() => {
|
|
106
107
|
// Clean up on unmount
|
|
107
108
|
return () => {
|
|
108
|
-
|
|
109
|
+
continueRender(loaded);
|
|
109
110
|
};
|
|
110
|
-
}, [loaded]);
|
|
111
|
+
}, [loaded, continueRender]);
|
|
111
112
|
if (typeof HTMLVideoElement === 'undefined' ||
|
|
112
113
|
!HTMLVideoElement.prototype.requestVideoFrameCallback) {
|
|
113
|
-
|
|
114
|
+
continueRender(loaded);
|
|
114
115
|
return null;
|
|
115
116
|
}
|
|
116
117
|
return videoTexture;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -27,24 +27,24 @@ import { Canvas, useThree } from "@react-three/fiber";
|
|
|
27
27
|
import { useCallback, useEffect, useLayoutEffect as useLayoutEffect2, useState } from "react";
|
|
28
28
|
import {
|
|
29
29
|
Internals,
|
|
30
|
-
continueRender as continueRender2,
|
|
31
|
-
delayRender as delayRender2,
|
|
32
30
|
useCurrentFrame,
|
|
31
|
+
useDelayRender as useDelayRender2,
|
|
33
32
|
useRemotionEnvironment
|
|
34
33
|
} from "remotion";
|
|
35
34
|
|
|
36
35
|
// src/SuspenseLoader.tsx
|
|
37
36
|
import { Suspense, useLayoutEffect } from "react";
|
|
38
|
-
import {
|
|
37
|
+
import { useDelayRender } from "remotion";
|
|
39
38
|
import { jsx } from "react/jsx-runtime";
|
|
40
39
|
var Unblocker = () => {
|
|
40
|
+
const { delayRender, continueRender } = useDelayRender();
|
|
41
41
|
if (typeof document !== "undefined") {
|
|
42
42
|
useLayoutEffect(() => {
|
|
43
43
|
const handle = delayRender(`Waiting for <Suspense /> of <ThreeCanvas /> to resolve`);
|
|
44
44
|
return () => {
|
|
45
45
|
continueRender(handle);
|
|
46
46
|
};
|
|
47
|
-
}, []);
|
|
47
|
+
}, [continueRender, delayRender]);
|
|
48
48
|
}
|
|
49
49
|
return null;
|
|
50
50
|
};
|
|
@@ -86,7 +86,8 @@ var ThreeCanvas = (props) => {
|
|
|
86
86
|
const { isRendering } = useRemotionEnvironment();
|
|
87
87
|
const shouldUseFrameloopDemand = isRendering;
|
|
88
88
|
const { children, width, height, style, onCreated, ...rest } = props;
|
|
89
|
-
const
|
|
89
|
+
const { delayRender, continueRender } = useDelayRender2();
|
|
90
|
+
const [waitForCreated] = useState(() => delayRender("Waiting for <ThreeCanvas/> to be created"));
|
|
90
91
|
validateDimension(width, "width", "of the <ThreeCanvas /> component");
|
|
91
92
|
validateDimension(height, "height", "of the <ThreeCanvas /> component");
|
|
92
93
|
const contexts = Internals.useRemotionContexts();
|
|
@@ -96,9 +97,9 @@ var ThreeCanvas = (props) => {
|
|
|
96
97
|
...style ?? {}
|
|
97
98
|
};
|
|
98
99
|
const remotion_onCreated = useCallback((state) => {
|
|
99
|
-
|
|
100
|
+
continueRender(waitForCreated);
|
|
100
101
|
onCreated?.(state);
|
|
101
|
-
}, [onCreated, waitForCreated]);
|
|
102
|
+
}, [onCreated, waitForCreated, continueRender]);
|
|
102
103
|
return /* @__PURE__ */ jsx2(SuspenseLoader, {
|
|
103
104
|
children: /* @__PURE__ */ jsxs(Canvas, {
|
|
104
105
|
style: actualStyle,
|
|
@@ -126,9 +127,8 @@ import { useCallback as useCallback2, useLayoutEffect as useLayoutEffect3, useMe
|
|
|
126
127
|
import {
|
|
127
128
|
Internals as Internals2,
|
|
128
129
|
cancelRender,
|
|
129
|
-
continueRender as continueRender3,
|
|
130
|
-
delayRender as delayRender3,
|
|
131
130
|
useCurrentFrame as useCurrentFrame2,
|
|
131
|
+
useDelayRender as useDelayRender3,
|
|
132
132
|
useRemotionEnvironment as useRemotionEnvironment2,
|
|
133
133
|
useVideoConfig
|
|
134
134
|
} from "remotion";
|
|
@@ -161,8 +161,9 @@ var useInnerVideoTexture = ({
|
|
|
161
161
|
}, [toneMapped, currentTime, src, transparent]);
|
|
162
162
|
const [textLoaderPromise] = useState2(() => import("three/src/loaders/TextureLoader.js"));
|
|
163
163
|
const [imageTexture, setImageTexture] = useState2(null);
|
|
164
|
+
const { delayRender, continueRender } = useDelayRender3();
|
|
164
165
|
const fetchTexture = useCallback2(() => {
|
|
165
|
-
const imageTextureHandle =
|
|
166
|
+
const imageTextureHandle = delayRender("fetch offthread video frame", {
|
|
166
167
|
retries: delayRenderRetries ?? undefined,
|
|
167
168
|
timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
|
|
168
169
|
});
|
|
@@ -175,7 +176,7 @@ var useInnerVideoTexture = ({
|
|
|
175
176
|
return;
|
|
176
177
|
}
|
|
177
178
|
setImageTexture(texture);
|
|
178
|
-
|
|
179
|
+
continueRender(imageTextureHandle);
|
|
179
180
|
}).catch((err) => {
|
|
180
181
|
cancelRender(err);
|
|
181
182
|
});
|
|
@@ -183,13 +184,15 @@ var useInnerVideoTexture = ({
|
|
|
183
184
|
return () => {
|
|
184
185
|
cleanedUp = true;
|
|
185
186
|
textureLoaded?.dispose();
|
|
186
|
-
|
|
187
|
+
continueRender(imageTextureHandle);
|
|
187
188
|
};
|
|
188
189
|
}, [
|
|
189
190
|
offthreadVideoFrameSrc,
|
|
190
191
|
textLoaderPromise,
|
|
191
192
|
delayRenderRetries,
|
|
192
|
-
delayRenderTimeoutInMilliseconds
|
|
193
|
+
delayRenderTimeoutInMilliseconds,
|
|
194
|
+
continueRender,
|
|
195
|
+
delayRender
|
|
193
196
|
]);
|
|
194
197
|
useLayoutEffect3(() => {
|
|
195
198
|
const cleanup = fetchTexture();
|
|
@@ -226,12 +229,7 @@ function useOffthreadVideoTexture({
|
|
|
226
229
|
}
|
|
227
230
|
// src/use-video-texture.ts
|
|
228
231
|
import React3, { useCallback as useCallback3, useEffect as useEffect2, useState as useState3 } from "react";
|
|
229
|
-
import {
|
|
230
|
-
cancelRender as cancelRender2,
|
|
231
|
-
continueRender as continueRender4,
|
|
232
|
-
delayRender as delayRender4,
|
|
233
|
-
useCurrentFrame as useCurrentFrame3
|
|
234
|
-
} from "remotion";
|
|
232
|
+
import { cancelRender as cancelRender2, useCurrentFrame as useCurrentFrame3, useDelayRender as useDelayRender4 } from "remotion";
|
|
235
233
|
var warned = false;
|
|
236
234
|
var warnAboutRequestVideoFrameCallback = () => {
|
|
237
235
|
if (warned) {
|
|
@@ -241,11 +239,12 @@ var warnAboutRequestVideoFrameCallback = () => {
|
|
|
241
239
|
console.warn("Browser does not support requestVideoFrameCallback. Cannot display video.");
|
|
242
240
|
};
|
|
243
241
|
var useVideoTexture = (videoRef) => {
|
|
242
|
+
const { delayRender, continueRender } = useDelayRender4();
|
|
244
243
|
const [loaded] = useState3(() => {
|
|
245
244
|
if (typeof document === "undefined") {
|
|
246
245
|
return 0;
|
|
247
246
|
}
|
|
248
|
-
return
|
|
247
|
+
return delayRender(`Waiting for texture in useVideoTexture() to be loaded`);
|
|
249
248
|
});
|
|
250
249
|
const [videoTexture, setVideoTexture] = useState3(null);
|
|
251
250
|
const [vidText] = useState3(() => import("three/src/textures/VideoTexture.js"));
|
|
@@ -259,11 +258,11 @@ var useVideoTexture = (videoRef) => {
|
|
|
259
258
|
videoRef.current.width = videoRef.current.videoWidth;
|
|
260
259
|
videoRef.current.height = videoRef.current.videoHeight;
|
|
261
260
|
setVideoTexture(vt);
|
|
262
|
-
|
|
261
|
+
continueRender(loaded);
|
|
263
262
|
}).catch((err) => {
|
|
264
263
|
cancelRender2(err);
|
|
265
264
|
});
|
|
266
|
-
}, [loaded, vidText, videoRef]);
|
|
265
|
+
}, [loaded, vidText, videoRef, continueRender]);
|
|
267
266
|
React3.useLayoutEffect(() => {
|
|
268
267
|
if (!videoRef.current) {
|
|
269
268
|
return;
|
|
@@ -290,11 +289,11 @@ var useVideoTexture = (videoRef) => {
|
|
|
290
289
|
}, [frame, loaded, videoRef]);
|
|
291
290
|
useEffect2(() => {
|
|
292
291
|
return () => {
|
|
293
|
-
|
|
292
|
+
continueRender(loaded);
|
|
294
293
|
};
|
|
295
|
-
}, [loaded]);
|
|
294
|
+
}, [loaded, continueRender]);
|
|
296
295
|
if (typeof HTMLVideoElement === "undefined" || !HTMLVideoElement.prototype.requestVideoFrameCallback) {
|
|
297
|
-
|
|
296
|
+
continueRender(loaded);
|
|
298
297
|
return null;
|
|
299
298
|
}
|
|
300
299
|
return videoTexture;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/three"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/three",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.345",
|
|
7
7
|
"description": "Include React Three Fiber components in a Remotion video",
|
|
8
8
|
"main": "dist/cjs/index.js",
|
|
9
9
|
"types": "dist/cjs/index.d.ts",
|
|
@@ -16,14 +16,14 @@
|
|
|
16
16
|
"url": "https://github.com/remotion-dev/remotion/issues"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"remotion": "4.0.
|
|
19
|
+
"remotion": "4.0.345"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"@react-three/fiber": ">=8.0.0",
|
|
23
23
|
"react": ">=16.8.0",
|
|
24
24
|
"react-dom": ">=16.8.0",
|
|
25
25
|
"three": ">=0.137.0",
|
|
26
|
-
"remotion": "4.0.
|
|
26
|
+
"remotion": "4.0.345"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@react-three/fiber": "9.2.0",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"react-dom": "19.0.0",
|
|
35
35
|
"three": "0.178.0",
|
|
36
36
|
"eslint": "9.19.0",
|
|
37
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
38
|
-
"remotion": "4.0.
|
|
37
|
+
"@remotion/eslint-config-internal": "4.0.345",
|
|
38
|
+
"remotion": "4.0.345"
|
|
39
39
|
},
|
|
40
40
|
"keywords": [
|
|
41
41
|
"remotion",
|