@react-three/fiber 10.0.0-canary.07c4f9d → 10.0.0-canary.0ea97c0
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/index.cjs +19 -15
- package/dist/index.d.cts +137 -17
- package/dist/index.d.mts +137 -17
- package/dist/index.d.ts +137 -17
- package/dist/index.mjs +19 -15
- package/dist/legacy.cjs +16 -11
- package/dist/legacy.d.cts +137 -17
- package/dist/legacy.d.mts +137 -17
- package/dist/legacy.d.ts +137 -17
- package/dist/legacy.mjs +16 -11
- package/dist/webgpu/index.cjs +33 -28
- package/dist/webgpu/index.d.cts +141 -33
- package/dist/webgpu/index.d.mts +141 -33
- package/dist/webgpu/index.d.ts +141 -33
- package/dist/webgpu/index.mjs +33 -28
- package/package.json +1 -1
package/dist/webgpu/index.mjs
CHANGED
|
@@ -612,7 +612,12 @@ function diffProps(instance, newProps) {
|
|
|
612
612
|
const changedProps = {};
|
|
613
613
|
for (const prop in newProps) {
|
|
614
614
|
if (RESERVED_PROPS.includes(prop)) continue;
|
|
615
|
-
if (is.equ(newProps[prop], instance.props[prop]))
|
|
615
|
+
if (is.equ(newProps[prop], instance.props[prop])) {
|
|
616
|
+
const value = newProps[prop];
|
|
617
|
+
if (!isCopyable(value)) continue;
|
|
618
|
+
const { target } = resolve(instance.object, prop);
|
|
619
|
+
if (!isCopyable(target) || target.constructor !== value.constructor) continue;
|
|
620
|
+
}
|
|
616
621
|
changedProps[prop] = newProps[prop];
|
|
617
622
|
for (const other in newProps) {
|
|
618
623
|
if (other.startsWith(`${prop}-`)) changedProps[other] = newProps[other];
|
|
@@ -1058,7 +1063,8 @@ const createStore = (invalidate, advance) => {
|
|
|
1058
1063
|
const resizeTarget = canvasTarget ?? actualRenderer;
|
|
1059
1064
|
if (viewport.dpr > 0) resizeTarget.setPixelRatio(viewport.dpr);
|
|
1060
1065
|
resizeTarget.setSize(size.width, size.height, false);
|
|
1061
|
-
|
|
1066
|
+
const activeTarget = actualRenderer.getCanvasTarget?.();
|
|
1067
|
+
if (!canvasTarget || activeTarget !== canvasTarget) internal.canvasTargetSizeDirty = true;
|
|
1062
1068
|
}
|
|
1063
1069
|
if (camera !== oldCamera) {
|
|
1064
1070
|
oldCamera = camera;
|
|
@@ -14220,9 +14226,8 @@ function createRoot(canvas) {
|
|
|
14220
14226
|
if (!renderer.hasInitialized?.()) {
|
|
14221
14227
|
const size2 = computeInitialSize(canvas, propsSize);
|
|
14222
14228
|
if (size2.width > 0 && size2.height > 0) {
|
|
14223
|
-
|
|
14224
|
-
|
|
14225
|
-
canvas.height = size2.height * pixelRatio;
|
|
14229
|
+
renderer.setPixelRatio(calculateDpr(dpr));
|
|
14230
|
+
renderer.setSize(size2.width, size2.height, false);
|
|
14226
14231
|
}
|
|
14227
14232
|
await renderer.init();
|
|
14228
14233
|
}
|
|
@@ -14231,7 +14236,7 @@ function createRoot(canvas) {
|
|
|
14231
14236
|
state.internal.actualRenderer = renderer;
|
|
14232
14237
|
state.set({ webGPUSupported: isWebGPUBackend, renderer, primaryStore: store });
|
|
14233
14238
|
if (canvasId && !state.internal.isSecondary) {
|
|
14234
|
-
const canvasTarget =
|
|
14239
|
+
const canvasTarget = renderer.getCanvasTarget?.();
|
|
14235
14240
|
const unregisterPrimary = registerPrimary(canvasId, renderer, store);
|
|
14236
14241
|
state.set((prev) => ({
|
|
14237
14242
|
internal: {
|
|
@@ -14444,9 +14449,10 @@ function createRoot(canvas) {
|
|
|
14444
14449
|
const unregisterCanvasTarget = scheduler.register(
|
|
14445
14450
|
() => {
|
|
14446
14451
|
const state2 = store.getState();
|
|
14447
|
-
|
|
14452
|
+
const canvasTarget = state2.internal.canvasTarget;
|
|
14453
|
+
if (canvasTarget) {
|
|
14448
14454
|
const renderer2 = state2.internal.actualRenderer;
|
|
14449
|
-
renderer2.setCanvasTarget(
|
|
14455
|
+
if (renderer2.getCanvasTarget() !== canvasTarget) renderer2.setCanvasTarget(canvasTarget);
|
|
14450
14456
|
if (state2.internal.canvasTargetSizeDirty) {
|
|
14451
14457
|
state2.internal.canvasTargetSizeDirty = false;
|
|
14452
14458
|
renderer2.backend?.updateSize?.();
|
|
@@ -14610,7 +14616,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
14610
14616
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
14611
14617
|
if (unregisterPrimary) unregisterPrimary();
|
|
14612
14618
|
const canvasTarget = state.internal.canvasTarget;
|
|
14613
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
14619
|
+
if (state.internal.isSecondary && canvasTarget?.dispose) canvasTarget.dispose();
|
|
14614
14620
|
state.events.disconnect?.();
|
|
14615
14621
|
cleanupHelperGroup(root.store);
|
|
14616
14622
|
if (state.isLegacy && renderer) {
|
|
@@ -15151,9 +15157,9 @@ function CanvasImpl({
|
|
|
15151
15157
|
React.useMemo(() => extend(THREE), []);
|
|
15152
15158
|
const Bridge = useBridge();
|
|
15153
15159
|
const backgroundProps = React.useMemo(() => parseBackground(background), [background]);
|
|
15154
|
-
const
|
|
15160
|
+
const [hasInitialSize, setHasInitialSize] = React.useState(false);
|
|
15155
15161
|
const measureConfig = React.useMemo(() => {
|
|
15156
|
-
if (!
|
|
15162
|
+
if (!hasInitialSize) {
|
|
15157
15163
|
return {
|
|
15158
15164
|
...resize,
|
|
15159
15165
|
scroll: resize?.scroll ?? true,
|
|
@@ -15165,7 +15171,7 @@ function CanvasImpl({
|
|
|
15165
15171
|
debounce: { scroll: 50, resize: 0 },
|
|
15166
15172
|
...resize
|
|
15167
15173
|
};
|
|
15168
|
-
}, [
|
|
15174
|
+
}, [hasInitialSize, resize]);
|
|
15169
15175
|
const [containerRef, containerRect] = useMeasure(measureConfig);
|
|
15170
15176
|
const effectiveSize = React.useMemo(() => {
|
|
15171
15177
|
let w = width ?? containerRect.width;
|
|
@@ -15181,9 +15187,7 @@ function CanvasImpl({
|
|
|
15181
15187
|
left: containerRect.left
|
|
15182
15188
|
};
|
|
15183
15189
|
}, [width, height, containerRect, forceEven]);
|
|
15184
|
-
if (!
|
|
15185
|
-
hasInitialSizeRef.current = true;
|
|
15186
|
-
}
|
|
15190
|
+
if (!hasInitialSize && effectiveSize.width > 0 && effectiveSize.height > 0) setHasInitialSize(true);
|
|
15187
15191
|
const canvasRef = React.useRef(null);
|
|
15188
15192
|
const divRef = React.useRef(null);
|
|
15189
15193
|
React.useImperativeHandle(ref, () => canvasRef.current);
|
|
@@ -16042,7 +16046,7 @@ function useRenderPipeline(mainCB, setupCB) {
|
|
|
16042
16046
|
renderPipeline: null,
|
|
16043
16047
|
passes: {}
|
|
16044
16048
|
});
|
|
16045
|
-
scenePassCacheRef.current?.scenePass
|
|
16049
|
+
scenePassCacheRef.current?.scenePass.dispose();
|
|
16046
16050
|
callbacksRanRef.current = false;
|
|
16047
16051
|
scenePassCacheRef.current = null;
|
|
16048
16052
|
forceScenePassRebuildRef.current = false;
|
|
@@ -16057,6 +16061,9 @@ function useRenderPipeline(mainCB, setupCB) {
|
|
|
16057
16061
|
throw new Error("useRenderPipeline is only available with WebGPU renderer. Set renderer prop on Canvas.");
|
|
16058
16062
|
}
|
|
16059
16063
|
if (!renderer || !scene || !camera) return;
|
|
16064
|
+
if (!("isWebGPURenderer" in renderer)) {
|
|
16065
|
+
throw new Error("useRenderPipeline: renderer is not a WebGPURenderer but isLegacy is false.");
|
|
16066
|
+
}
|
|
16060
16067
|
const state = store.getState();
|
|
16061
16068
|
const set = store.setState;
|
|
16062
16069
|
try {
|
|
@@ -16090,7 +16097,9 @@ function useRenderPipeline(mainCB, setupCB) {
|
|
|
16090
16097
|
if (setupCBRef.current) {
|
|
16091
16098
|
const freshState = Object.assign({}, store.getState(), {
|
|
16092
16099
|
renderPipeline: pipeline,
|
|
16093
|
-
passes: currentPasses
|
|
16100
|
+
passes: { ...currentPasses, scenePass },
|
|
16101
|
+
renderer,
|
|
16102
|
+
isLegacy: false
|
|
16094
16103
|
});
|
|
16095
16104
|
const setupResult = setupCBRef.current(freshState);
|
|
16096
16105
|
if (setupResult && typeof setupResult === "object") {
|
|
@@ -16101,7 +16110,9 @@ function useRenderPipeline(mainCB, setupCB) {
|
|
|
16101
16110
|
if (mainCBRef.current) {
|
|
16102
16111
|
const freshState = Object.assign({}, store.getState(), {
|
|
16103
16112
|
renderPipeline: pipeline,
|
|
16104
|
-
passes: currentPasses
|
|
16113
|
+
passes: { ...currentPasses, scenePass },
|
|
16114
|
+
renderer,
|
|
16115
|
+
isLegacy: false
|
|
16105
16116
|
});
|
|
16106
16117
|
const mainResult = mainCBRef.current(freshState);
|
|
16107
16118
|
if (mainResult && typeof mainResult === "object") {
|
|
@@ -16113,22 +16124,16 @@ function useRenderPipeline(mainCB, setupCB) {
|
|
|
16113
16124
|
callbacksRanRef.current = true;
|
|
16114
16125
|
}
|
|
16115
16126
|
if (outputNodeChanged) pipeline.needsUpdate = true;
|
|
16116
|
-
if (outgoingScenePass && outgoingScenePass !== scenePass) outgoingScenePass.dispose
|
|
16127
|
+
if (outgoingScenePass && outgoingScenePass !== scenePass) outgoingScenePass.dispose();
|
|
16117
16128
|
} catch (error) {
|
|
16118
16129
|
console.warn("[useRenderPipeline] Setup failed; the render pipeline was not configured:", error);
|
|
16119
16130
|
}
|
|
16120
16131
|
}, [store, renderer, scene, camera, isLegacy, rebuildVersion]);
|
|
16121
16132
|
const passes = useThree$1((s) => s.passes);
|
|
16122
16133
|
const renderPipeline = useThree$1((s) => s.renderPipeline);
|
|
16123
|
-
|
|
16124
|
-
|
|
16125
|
-
|
|
16126
|
-
clearPasses,
|
|
16127
|
-
reset,
|
|
16128
|
-
rebuild,
|
|
16129
|
-
// isReady indicates if RenderPipeline is configured and ready for rendering
|
|
16130
|
-
isReady: renderPipeline !== null
|
|
16131
|
-
};
|
|
16134
|
+
const actions = { passes, clearPasses, reset, rebuild };
|
|
16135
|
+
if (renderPipeline) return { ...actions, isReady: true, renderPipeline };
|
|
16136
|
+
return { ...actions, isReady: false, renderPipeline: null };
|
|
16132
16137
|
}
|
|
16133
16138
|
|
|
16134
16139
|
extend(THREE);
|