@gnsx/react-three-fiber 10.0.3 → 10.0.4
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 +52 -8
- package/dist/index.mjs +52 -8
- package/dist/legacy.cjs +52 -8
- package/dist/legacy.mjs +52 -8
- package/dist/webgpu/index.cjs +52 -8
- package/dist/webgpu/index.mjs +52 -8
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -3453,7 +3453,7 @@ function advance(timestamp) {
|
|
|
3453
3453
|
getScheduler().step(timestamp);
|
|
3454
3454
|
}
|
|
3455
3455
|
|
|
3456
|
-
const version = "10.0.
|
|
3456
|
+
const version = "10.0.4";
|
|
3457
3457
|
const packageData = {
|
|
3458
3458
|
version: version};
|
|
3459
3459
|
|
|
@@ -15210,6 +15210,7 @@ function createRoot(canvas) {
|
|
|
15210
15210
|
let pending = null;
|
|
15211
15211
|
return {
|
|
15212
15212
|
async configure(props = {}) {
|
|
15213
|
+
if (pending) await pending;
|
|
15213
15214
|
let resolve;
|
|
15214
15215
|
pending = new Promise((_resolve) => resolve = _resolve);
|
|
15215
15216
|
const {
|
|
@@ -15506,8 +15507,10 @@ function createRoot(canvas) {
|
|
|
15506
15507
|
const unregisterCanvasTarget = scheduler.register(
|
|
15507
15508
|
() => {
|
|
15508
15509
|
const state2 = store.getState();
|
|
15510
|
+
if (!state2.internal.active) return;
|
|
15509
15511
|
if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
|
|
15510
15512
|
const renderer2 = state2.internal.actualRenderer;
|
|
15513
|
+
if (!renderer2) return;
|
|
15511
15514
|
renderer2.setCanvasTarget(state2.internal.canvasTarget);
|
|
15512
15515
|
}
|
|
15513
15516
|
},
|
|
@@ -15560,7 +15563,9 @@ function createRoot(canvas) {
|
|
|
15560
15563
|
const unregisterRender = scheduler.register(
|
|
15561
15564
|
() => {
|
|
15562
15565
|
const state2 = store.getState();
|
|
15566
|
+
if (!state2.internal.active) return;
|
|
15563
15567
|
const renderer2 = state2.internal.actualRenderer;
|
|
15568
|
+
if (!renderer2) return;
|
|
15564
15569
|
const userHandlesRender = scheduler.hasUserJobsInPhase("render", newRootId);
|
|
15565
15570
|
if (userHandlesRender || state2.internal.priority) return;
|
|
15566
15571
|
try {
|
|
@@ -15635,23 +15640,62 @@ function Provider({
|
|
|
15635
15640
|
}, []);
|
|
15636
15641
|
return /* @__PURE__ */ jsxRuntime.jsx(context.Provider, { value: store, children });
|
|
15637
15642
|
}
|
|
15643
|
+
function releaseSceneR3fLinks(scene, options) {
|
|
15644
|
+
if (!scene) return null;
|
|
15645
|
+
scene.traverse((obj) => {
|
|
15646
|
+
delete obj.__r3f;
|
|
15647
|
+
});
|
|
15648
|
+
delete scene.__r3f;
|
|
15649
|
+
{
|
|
15650
|
+
scene.clear();
|
|
15651
|
+
}
|
|
15652
|
+
return scene;
|
|
15653
|
+
}
|
|
15654
|
+
function releaseRendererRefsFromRootState(state) {
|
|
15655
|
+
const { internal } = state;
|
|
15656
|
+
const renderer = internal.actualRenderer ?? null;
|
|
15657
|
+
internal.actualRenderer = null;
|
|
15658
|
+
internal.canvasTarget = null;
|
|
15659
|
+
internal.pointerMap?.clear();
|
|
15660
|
+
internal.pointerDirty?.clear();
|
|
15661
|
+
return renderer;
|
|
15662
|
+
}
|
|
15663
|
+
function detachRootSceneFromRootState(state) {
|
|
15664
|
+
const scene = releaseSceneR3fLinks(state.scene);
|
|
15665
|
+
state.set((prev) => ({
|
|
15666
|
+
scene: null,
|
|
15667
|
+
rootScene: null,
|
|
15668
|
+
internal: { ...prev.internal, container: null }
|
|
15669
|
+
}));
|
|
15670
|
+
return scene;
|
|
15671
|
+
}
|
|
15638
15672
|
function unmountComponentAtNode(canvas, callback) {
|
|
15639
15673
|
const root = _roots.get(canvas);
|
|
15640
15674
|
const fiber = root?.fiber;
|
|
15641
15675
|
if (fiber) {
|
|
15642
15676
|
const state = root?.store.getState();
|
|
15643
|
-
|
|
15677
|
+
let rendererForCleanup = null;
|
|
15678
|
+
let canvasTargetForCleanup;
|
|
15679
|
+
let sceneForCleanup = null;
|
|
15680
|
+
if (state) {
|
|
15681
|
+
state.internal.active = false;
|
|
15682
|
+
canvasTargetForCleanup = state.internal.canvasTarget;
|
|
15683
|
+
rendererForCleanup = releaseRendererRefsFromRootState(state);
|
|
15684
|
+
const unregisterRoot = state.internal.unregisterRoot;
|
|
15685
|
+
if (unregisterRoot) {
|
|
15686
|
+
unregisterRoot();
|
|
15687
|
+
state.internal.unregisterRoot = void 0;
|
|
15688
|
+
}
|
|
15689
|
+
}
|
|
15644
15690
|
reconciler.updateContainer(null, fiber, null, () => {
|
|
15645
15691
|
if (state) {
|
|
15692
|
+
sceneForCleanup = detachRootSceneFromRootState(state);
|
|
15646
15693
|
setTimeout(() => {
|
|
15647
15694
|
try {
|
|
15648
|
-
const renderer =
|
|
15649
|
-
const unregisterRoot = state.internal.unregisterRoot;
|
|
15650
|
-
if (unregisterRoot) unregisterRoot();
|
|
15695
|
+
const renderer = rendererForCleanup;
|
|
15651
15696
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
15652
15697
|
if (unregisterPrimary) unregisterPrimary();
|
|
15653
|
-
|
|
15654
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
15698
|
+
if (canvasTargetForCleanup?.dispose) canvasTargetForCleanup.dispose();
|
|
15655
15699
|
state.events.disconnect?.();
|
|
15656
15700
|
cleanupHelperGroup(root.store);
|
|
15657
15701
|
if (state.isLegacy && renderer) {
|
|
@@ -15662,7 +15706,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
15662
15706
|
if (!state.internal.isSecondary) {
|
|
15663
15707
|
if (renderer?.xr) state.xr.disconnect();
|
|
15664
15708
|
}
|
|
15665
|
-
dispose(
|
|
15709
|
+
if (sceneForCleanup) dispose(sceneForCleanup);
|
|
15666
15710
|
_roots.delete(canvas);
|
|
15667
15711
|
if (callback) callback(canvas);
|
|
15668
15712
|
} catch {
|
package/dist/index.mjs
CHANGED
|
@@ -3432,7 +3432,7 @@ function advance(timestamp) {
|
|
|
3432
3432
|
getScheduler().step(timestamp);
|
|
3433
3433
|
}
|
|
3434
3434
|
|
|
3435
|
-
const version = "10.0.
|
|
3435
|
+
const version = "10.0.4";
|
|
3436
3436
|
const packageData = {
|
|
3437
3437
|
version: version};
|
|
3438
3438
|
|
|
@@ -15189,6 +15189,7 @@ function createRoot(canvas) {
|
|
|
15189
15189
|
let pending = null;
|
|
15190
15190
|
return {
|
|
15191
15191
|
async configure(props = {}) {
|
|
15192
|
+
if (pending) await pending;
|
|
15192
15193
|
let resolve;
|
|
15193
15194
|
pending = new Promise((_resolve) => resolve = _resolve);
|
|
15194
15195
|
const {
|
|
@@ -15485,8 +15486,10 @@ function createRoot(canvas) {
|
|
|
15485
15486
|
const unregisterCanvasTarget = scheduler.register(
|
|
15486
15487
|
() => {
|
|
15487
15488
|
const state2 = store.getState();
|
|
15489
|
+
if (!state2.internal.active) return;
|
|
15488
15490
|
if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
|
|
15489
15491
|
const renderer2 = state2.internal.actualRenderer;
|
|
15492
|
+
if (!renderer2) return;
|
|
15490
15493
|
renderer2.setCanvasTarget(state2.internal.canvasTarget);
|
|
15491
15494
|
}
|
|
15492
15495
|
},
|
|
@@ -15539,7 +15542,9 @@ function createRoot(canvas) {
|
|
|
15539
15542
|
const unregisterRender = scheduler.register(
|
|
15540
15543
|
() => {
|
|
15541
15544
|
const state2 = store.getState();
|
|
15545
|
+
if (!state2.internal.active) return;
|
|
15542
15546
|
const renderer2 = state2.internal.actualRenderer;
|
|
15547
|
+
if (!renderer2) return;
|
|
15543
15548
|
const userHandlesRender = scheduler.hasUserJobsInPhase("render", newRootId);
|
|
15544
15549
|
if (userHandlesRender || state2.internal.priority) return;
|
|
15545
15550
|
try {
|
|
@@ -15614,23 +15619,62 @@ function Provider({
|
|
|
15614
15619
|
}, []);
|
|
15615
15620
|
return /* @__PURE__ */ jsx(context.Provider, { value: store, children });
|
|
15616
15621
|
}
|
|
15622
|
+
function releaseSceneR3fLinks(scene, options) {
|
|
15623
|
+
if (!scene) return null;
|
|
15624
|
+
scene.traverse((obj) => {
|
|
15625
|
+
delete obj.__r3f;
|
|
15626
|
+
});
|
|
15627
|
+
delete scene.__r3f;
|
|
15628
|
+
{
|
|
15629
|
+
scene.clear();
|
|
15630
|
+
}
|
|
15631
|
+
return scene;
|
|
15632
|
+
}
|
|
15633
|
+
function releaseRendererRefsFromRootState(state) {
|
|
15634
|
+
const { internal } = state;
|
|
15635
|
+
const renderer = internal.actualRenderer ?? null;
|
|
15636
|
+
internal.actualRenderer = null;
|
|
15637
|
+
internal.canvasTarget = null;
|
|
15638
|
+
internal.pointerMap?.clear();
|
|
15639
|
+
internal.pointerDirty?.clear();
|
|
15640
|
+
return renderer;
|
|
15641
|
+
}
|
|
15642
|
+
function detachRootSceneFromRootState(state) {
|
|
15643
|
+
const scene = releaseSceneR3fLinks(state.scene);
|
|
15644
|
+
state.set((prev) => ({
|
|
15645
|
+
scene: null,
|
|
15646
|
+
rootScene: null,
|
|
15647
|
+
internal: { ...prev.internal, container: null }
|
|
15648
|
+
}));
|
|
15649
|
+
return scene;
|
|
15650
|
+
}
|
|
15617
15651
|
function unmountComponentAtNode(canvas, callback) {
|
|
15618
15652
|
const root = _roots.get(canvas);
|
|
15619
15653
|
const fiber = root?.fiber;
|
|
15620
15654
|
if (fiber) {
|
|
15621
15655
|
const state = root?.store.getState();
|
|
15622
|
-
|
|
15656
|
+
let rendererForCleanup = null;
|
|
15657
|
+
let canvasTargetForCleanup;
|
|
15658
|
+
let sceneForCleanup = null;
|
|
15659
|
+
if (state) {
|
|
15660
|
+
state.internal.active = false;
|
|
15661
|
+
canvasTargetForCleanup = state.internal.canvasTarget;
|
|
15662
|
+
rendererForCleanup = releaseRendererRefsFromRootState(state);
|
|
15663
|
+
const unregisterRoot = state.internal.unregisterRoot;
|
|
15664
|
+
if (unregisterRoot) {
|
|
15665
|
+
unregisterRoot();
|
|
15666
|
+
state.internal.unregisterRoot = void 0;
|
|
15667
|
+
}
|
|
15668
|
+
}
|
|
15623
15669
|
reconciler.updateContainer(null, fiber, null, () => {
|
|
15624
15670
|
if (state) {
|
|
15671
|
+
sceneForCleanup = detachRootSceneFromRootState(state);
|
|
15625
15672
|
setTimeout(() => {
|
|
15626
15673
|
try {
|
|
15627
|
-
const renderer =
|
|
15628
|
-
const unregisterRoot = state.internal.unregisterRoot;
|
|
15629
|
-
if (unregisterRoot) unregisterRoot();
|
|
15674
|
+
const renderer = rendererForCleanup;
|
|
15630
15675
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
15631
15676
|
if (unregisterPrimary) unregisterPrimary();
|
|
15632
|
-
|
|
15633
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
15677
|
+
if (canvasTargetForCleanup?.dispose) canvasTargetForCleanup.dispose();
|
|
15634
15678
|
state.events.disconnect?.();
|
|
15635
15679
|
cleanupHelperGroup(root.store);
|
|
15636
15680
|
if (state.isLegacy && renderer) {
|
|
@@ -15641,7 +15685,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
15641
15685
|
if (!state.internal.isSecondary) {
|
|
15642
15686
|
if (renderer?.xr) state.xr.disconnect();
|
|
15643
15687
|
}
|
|
15644
|
-
dispose(
|
|
15688
|
+
if (sceneForCleanup) dispose(sceneForCleanup);
|
|
15645
15689
|
_roots.delete(canvas);
|
|
15646
15690
|
if (callback) callback(canvas);
|
|
15647
15691
|
} catch {
|
package/dist/legacy.cjs
CHANGED
|
@@ -3460,7 +3460,7 @@ function advance(timestamp) {
|
|
|
3460
3460
|
getScheduler().step(timestamp);
|
|
3461
3461
|
}
|
|
3462
3462
|
|
|
3463
|
-
const version = "10.0.
|
|
3463
|
+
const version = "10.0.4";
|
|
3464
3464
|
const packageData = {
|
|
3465
3465
|
version: version};
|
|
3466
3466
|
|
|
@@ -15217,6 +15217,7 @@ function createRoot(canvas) {
|
|
|
15217
15217
|
let pending = null;
|
|
15218
15218
|
return {
|
|
15219
15219
|
async configure(props = {}) {
|
|
15220
|
+
if (pending) await pending;
|
|
15220
15221
|
let resolve;
|
|
15221
15222
|
pending = new Promise((_resolve) => resolve = _resolve);
|
|
15222
15223
|
const {
|
|
@@ -15466,8 +15467,10 @@ function createRoot(canvas) {
|
|
|
15466
15467
|
const unregisterCanvasTarget = scheduler.register(
|
|
15467
15468
|
() => {
|
|
15468
15469
|
const state2 = store.getState();
|
|
15470
|
+
if (!state2.internal.active) return;
|
|
15469
15471
|
if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
|
|
15470
15472
|
const renderer2 = state2.internal.actualRenderer;
|
|
15473
|
+
if (!renderer2) return;
|
|
15471
15474
|
renderer2.setCanvasTarget(state2.internal.canvasTarget);
|
|
15472
15475
|
}
|
|
15473
15476
|
},
|
|
@@ -15520,7 +15523,9 @@ function createRoot(canvas) {
|
|
|
15520
15523
|
const unregisterRender = scheduler.register(
|
|
15521
15524
|
() => {
|
|
15522
15525
|
const state2 = store.getState();
|
|
15526
|
+
if (!state2.internal.active) return;
|
|
15523
15527
|
const renderer2 = state2.internal.actualRenderer;
|
|
15528
|
+
if (!renderer2) return;
|
|
15524
15529
|
const userHandlesRender = scheduler.hasUserJobsInPhase("render", newRootId);
|
|
15525
15530
|
if (userHandlesRender || state2.internal.priority) return;
|
|
15526
15531
|
try {
|
|
@@ -15595,23 +15600,62 @@ function Provider({
|
|
|
15595
15600
|
}, []);
|
|
15596
15601
|
return /* @__PURE__ */ jsxRuntime.jsx(context.Provider, { value: store, children });
|
|
15597
15602
|
}
|
|
15603
|
+
function releaseSceneR3fLinks(scene, options) {
|
|
15604
|
+
if (!scene) return null;
|
|
15605
|
+
scene.traverse((obj) => {
|
|
15606
|
+
delete obj.__r3f;
|
|
15607
|
+
});
|
|
15608
|
+
delete scene.__r3f;
|
|
15609
|
+
{
|
|
15610
|
+
scene.clear();
|
|
15611
|
+
}
|
|
15612
|
+
return scene;
|
|
15613
|
+
}
|
|
15614
|
+
function releaseRendererRefsFromRootState(state) {
|
|
15615
|
+
const { internal } = state;
|
|
15616
|
+
const renderer = internal.actualRenderer ?? null;
|
|
15617
|
+
internal.actualRenderer = null;
|
|
15618
|
+
internal.canvasTarget = null;
|
|
15619
|
+
internal.pointerMap?.clear();
|
|
15620
|
+
internal.pointerDirty?.clear();
|
|
15621
|
+
return renderer;
|
|
15622
|
+
}
|
|
15623
|
+
function detachRootSceneFromRootState(state) {
|
|
15624
|
+
const scene = releaseSceneR3fLinks(state.scene);
|
|
15625
|
+
state.set((prev) => ({
|
|
15626
|
+
scene: null,
|
|
15627
|
+
rootScene: null,
|
|
15628
|
+
internal: { ...prev.internal, container: null }
|
|
15629
|
+
}));
|
|
15630
|
+
return scene;
|
|
15631
|
+
}
|
|
15598
15632
|
function unmountComponentAtNode(canvas, callback) {
|
|
15599
15633
|
const root = _roots.get(canvas);
|
|
15600
15634
|
const fiber = root?.fiber;
|
|
15601
15635
|
if (fiber) {
|
|
15602
15636
|
const state = root?.store.getState();
|
|
15603
|
-
|
|
15637
|
+
let rendererForCleanup = null;
|
|
15638
|
+
let canvasTargetForCleanup;
|
|
15639
|
+
let sceneForCleanup = null;
|
|
15640
|
+
if (state) {
|
|
15641
|
+
state.internal.active = false;
|
|
15642
|
+
canvasTargetForCleanup = state.internal.canvasTarget;
|
|
15643
|
+
rendererForCleanup = releaseRendererRefsFromRootState(state);
|
|
15644
|
+
const unregisterRoot = state.internal.unregisterRoot;
|
|
15645
|
+
if (unregisterRoot) {
|
|
15646
|
+
unregisterRoot();
|
|
15647
|
+
state.internal.unregisterRoot = void 0;
|
|
15648
|
+
}
|
|
15649
|
+
}
|
|
15604
15650
|
reconciler.updateContainer(null, fiber, null, () => {
|
|
15605
15651
|
if (state) {
|
|
15652
|
+
sceneForCleanup = detachRootSceneFromRootState(state);
|
|
15606
15653
|
setTimeout(() => {
|
|
15607
15654
|
try {
|
|
15608
|
-
const renderer =
|
|
15609
|
-
const unregisterRoot = state.internal.unregisterRoot;
|
|
15610
|
-
if (unregisterRoot) unregisterRoot();
|
|
15655
|
+
const renderer = rendererForCleanup;
|
|
15611
15656
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
15612
15657
|
if (unregisterPrimary) unregisterPrimary();
|
|
15613
|
-
|
|
15614
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
15658
|
+
if (canvasTargetForCleanup?.dispose) canvasTargetForCleanup.dispose();
|
|
15615
15659
|
state.events.disconnect?.();
|
|
15616
15660
|
cleanupHelperGroup(root.store);
|
|
15617
15661
|
if (state.isLegacy && renderer) {
|
|
@@ -15622,7 +15666,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
15622
15666
|
if (!state.internal.isSecondary) {
|
|
15623
15667
|
if (renderer?.xr) state.xr.disconnect();
|
|
15624
15668
|
}
|
|
15625
|
-
dispose(
|
|
15669
|
+
if (sceneForCleanup) dispose(sceneForCleanup);
|
|
15626
15670
|
_roots.delete(canvas);
|
|
15627
15671
|
if (callback) callback(canvas);
|
|
15628
15672
|
} catch {
|
package/dist/legacy.mjs
CHANGED
|
@@ -3439,7 +3439,7 @@ function advance(timestamp) {
|
|
|
3439
3439
|
getScheduler().step(timestamp);
|
|
3440
3440
|
}
|
|
3441
3441
|
|
|
3442
|
-
const version = "10.0.
|
|
3442
|
+
const version = "10.0.4";
|
|
3443
3443
|
const packageData = {
|
|
3444
3444
|
version: version};
|
|
3445
3445
|
|
|
@@ -15196,6 +15196,7 @@ function createRoot(canvas) {
|
|
|
15196
15196
|
let pending = null;
|
|
15197
15197
|
return {
|
|
15198
15198
|
async configure(props = {}) {
|
|
15199
|
+
if (pending) await pending;
|
|
15199
15200
|
let resolve;
|
|
15200
15201
|
pending = new Promise((_resolve) => resolve = _resolve);
|
|
15201
15202
|
const {
|
|
@@ -15445,8 +15446,10 @@ function createRoot(canvas) {
|
|
|
15445
15446
|
const unregisterCanvasTarget = scheduler.register(
|
|
15446
15447
|
() => {
|
|
15447
15448
|
const state2 = store.getState();
|
|
15449
|
+
if (!state2.internal.active) return;
|
|
15448
15450
|
if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
|
|
15449
15451
|
const renderer2 = state2.internal.actualRenderer;
|
|
15452
|
+
if (!renderer2) return;
|
|
15450
15453
|
renderer2.setCanvasTarget(state2.internal.canvasTarget);
|
|
15451
15454
|
}
|
|
15452
15455
|
},
|
|
@@ -15499,7 +15502,9 @@ function createRoot(canvas) {
|
|
|
15499
15502
|
const unregisterRender = scheduler.register(
|
|
15500
15503
|
() => {
|
|
15501
15504
|
const state2 = store.getState();
|
|
15505
|
+
if (!state2.internal.active) return;
|
|
15502
15506
|
const renderer2 = state2.internal.actualRenderer;
|
|
15507
|
+
if (!renderer2) return;
|
|
15503
15508
|
const userHandlesRender = scheduler.hasUserJobsInPhase("render", newRootId);
|
|
15504
15509
|
if (userHandlesRender || state2.internal.priority) return;
|
|
15505
15510
|
try {
|
|
@@ -15574,23 +15579,62 @@ function Provider({
|
|
|
15574
15579
|
}, []);
|
|
15575
15580
|
return /* @__PURE__ */ jsx(context.Provider, { value: store, children });
|
|
15576
15581
|
}
|
|
15582
|
+
function releaseSceneR3fLinks(scene, options) {
|
|
15583
|
+
if (!scene) return null;
|
|
15584
|
+
scene.traverse((obj) => {
|
|
15585
|
+
delete obj.__r3f;
|
|
15586
|
+
});
|
|
15587
|
+
delete scene.__r3f;
|
|
15588
|
+
{
|
|
15589
|
+
scene.clear();
|
|
15590
|
+
}
|
|
15591
|
+
return scene;
|
|
15592
|
+
}
|
|
15593
|
+
function releaseRendererRefsFromRootState(state) {
|
|
15594
|
+
const { internal } = state;
|
|
15595
|
+
const renderer = internal.actualRenderer ?? null;
|
|
15596
|
+
internal.actualRenderer = null;
|
|
15597
|
+
internal.canvasTarget = null;
|
|
15598
|
+
internal.pointerMap?.clear();
|
|
15599
|
+
internal.pointerDirty?.clear();
|
|
15600
|
+
return renderer;
|
|
15601
|
+
}
|
|
15602
|
+
function detachRootSceneFromRootState(state) {
|
|
15603
|
+
const scene = releaseSceneR3fLinks(state.scene);
|
|
15604
|
+
state.set((prev) => ({
|
|
15605
|
+
scene: null,
|
|
15606
|
+
rootScene: null,
|
|
15607
|
+
internal: { ...prev.internal, container: null }
|
|
15608
|
+
}));
|
|
15609
|
+
return scene;
|
|
15610
|
+
}
|
|
15577
15611
|
function unmountComponentAtNode(canvas, callback) {
|
|
15578
15612
|
const root = _roots.get(canvas);
|
|
15579
15613
|
const fiber = root?.fiber;
|
|
15580
15614
|
if (fiber) {
|
|
15581
15615
|
const state = root?.store.getState();
|
|
15582
|
-
|
|
15616
|
+
let rendererForCleanup = null;
|
|
15617
|
+
let canvasTargetForCleanup;
|
|
15618
|
+
let sceneForCleanup = null;
|
|
15619
|
+
if (state) {
|
|
15620
|
+
state.internal.active = false;
|
|
15621
|
+
canvasTargetForCleanup = state.internal.canvasTarget;
|
|
15622
|
+
rendererForCleanup = releaseRendererRefsFromRootState(state);
|
|
15623
|
+
const unregisterRoot = state.internal.unregisterRoot;
|
|
15624
|
+
if (unregisterRoot) {
|
|
15625
|
+
unregisterRoot();
|
|
15626
|
+
state.internal.unregisterRoot = void 0;
|
|
15627
|
+
}
|
|
15628
|
+
}
|
|
15583
15629
|
reconciler.updateContainer(null, fiber, null, () => {
|
|
15584
15630
|
if (state) {
|
|
15631
|
+
sceneForCleanup = detachRootSceneFromRootState(state);
|
|
15585
15632
|
setTimeout(() => {
|
|
15586
15633
|
try {
|
|
15587
|
-
const renderer =
|
|
15588
|
-
const unregisterRoot = state.internal.unregisterRoot;
|
|
15589
|
-
if (unregisterRoot) unregisterRoot();
|
|
15634
|
+
const renderer = rendererForCleanup;
|
|
15590
15635
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
15591
15636
|
if (unregisterPrimary) unregisterPrimary();
|
|
15592
|
-
|
|
15593
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
15637
|
+
if (canvasTargetForCleanup?.dispose) canvasTargetForCleanup.dispose();
|
|
15594
15638
|
state.events.disconnect?.();
|
|
15595
15639
|
cleanupHelperGroup(root.store);
|
|
15596
15640
|
if (state.isLegacy && renderer) {
|
|
@@ -15601,7 +15645,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
15601
15645
|
if (!state.internal.isSecondary) {
|
|
15602
15646
|
if (renderer?.xr) state.xr.disconnect();
|
|
15603
15647
|
}
|
|
15604
|
-
dispose(
|
|
15648
|
+
if (sceneForCleanup) dispose(sceneForCleanup);
|
|
15605
15649
|
_roots.delete(canvas);
|
|
15606
15650
|
if (callback) callback(canvas);
|
|
15607
15651
|
} catch {
|
package/dist/webgpu/index.cjs
CHANGED
|
@@ -3461,7 +3461,7 @@ function advance(timestamp) {
|
|
|
3461
3461
|
getScheduler().step(timestamp);
|
|
3462
3462
|
}
|
|
3463
3463
|
|
|
3464
|
-
const version = "10.0.
|
|
3464
|
+
const version = "10.0.4";
|
|
3465
3465
|
const packageData = {
|
|
3466
3466
|
version: version};
|
|
3467
3467
|
|
|
@@ -15218,6 +15218,7 @@ function createRoot(canvas) {
|
|
|
15218
15218
|
let pending = null;
|
|
15219
15219
|
return {
|
|
15220
15220
|
async configure(props = {}) {
|
|
15221
|
+
if (pending) await pending;
|
|
15221
15222
|
let resolve;
|
|
15222
15223
|
pending = new Promise((_resolve) => resolve = _resolve);
|
|
15223
15224
|
const {
|
|
@@ -15496,8 +15497,10 @@ function createRoot(canvas) {
|
|
|
15496
15497
|
const unregisterCanvasTarget = scheduler.register(
|
|
15497
15498
|
() => {
|
|
15498
15499
|
const state2 = store.getState();
|
|
15500
|
+
if (!state2.internal.active) return;
|
|
15499
15501
|
if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
|
|
15500
15502
|
const renderer2 = state2.internal.actualRenderer;
|
|
15503
|
+
if (!renderer2) return;
|
|
15501
15504
|
renderer2.setCanvasTarget(state2.internal.canvasTarget);
|
|
15502
15505
|
}
|
|
15503
15506
|
},
|
|
@@ -15550,7 +15553,9 @@ function createRoot(canvas) {
|
|
|
15550
15553
|
const unregisterRender = scheduler.register(
|
|
15551
15554
|
() => {
|
|
15552
15555
|
const state2 = store.getState();
|
|
15556
|
+
if (!state2.internal.active) return;
|
|
15553
15557
|
const renderer2 = state2.internal.actualRenderer;
|
|
15558
|
+
if (!renderer2) return;
|
|
15554
15559
|
const userHandlesRender = scheduler.hasUserJobsInPhase("render", newRootId);
|
|
15555
15560
|
if (userHandlesRender || state2.internal.priority) return;
|
|
15556
15561
|
try {
|
|
@@ -15625,23 +15630,62 @@ function Provider({
|
|
|
15625
15630
|
}, []);
|
|
15626
15631
|
return /* @__PURE__ */ jsxRuntime.jsx(context.Provider, { value: store, children });
|
|
15627
15632
|
}
|
|
15633
|
+
function releaseSceneR3fLinks(scene, options) {
|
|
15634
|
+
if (!scene) return null;
|
|
15635
|
+
scene.traverse((obj) => {
|
|
15636
|
+
delete obj.__r3f;
|
|
15637
|
+
});
|
|
15638
|
+
delete scene.__r3f;
|
|
15639
|
+
{
|
|
15640
|
+
scene.clear();
|
|
15641
|
+
}
|
|
15642
|
+
return scene;
|
|
15643
|
+
}
|
|
15644
|
+
function releaseRendererRefsFromRootState(state) {
|
|
15645
|
+
const { internal } = state;
|
|
15646
|
+
const renderer = internal.actualRenderer ?? null;
|
|
15647
|
+
internal.actualRenderer = null;
|
|
15648
|
+
internal.canvasTarget = null;
|
|
15649
|
+
internal.pointerMap?.clear();
|
|
15650
|
+
internal.pointerDirty?.clear();
|
|
15651
|
+
return renderer;
|
|
15652
|
+
}
|
|
15653
|
+
function detachRootSceneFromRootState(state) {
|
|
15654
|
+
const scene = releaseSceneR3fLinks(state.scene);
|
|
15655
|
+
state.set((prev) => ({
|
|
15656
|
+
scene: null,
|
|
15657
|
+
rootScene: null,
|
|
15658
|
+
internal: { ...prev.internal, container: null }
|
|
15659
|
+
}));
|
|
15660
|
+
return scene;
|
|
15661
|
+
}
|
|
15628
15662
|
function unmountComponentAtNode(canvas, callback) {
|
|
15629
15663
|
const root = _roots.get(canvas);
|
|
15630
15664
|
const fiber = root?.fiber;
|
|
15631
15665
|
if (fiber) {
|
|
15632
15666
|
const state = root?.store.getState();
|
|
15633
|
-
|
|
15667
|
+
let rendererForCleanup = null;
|
|
15668
|
+
let canvasTargetForCleanup;
|
|
15669
|
+
let sceneForCleanup = null;
|
|
15670
|
+
if (state) {
|
|
15671
|
+
state.internal.active = false;
|
|
15672
|
+
canvasTargetForCleanup = state.internal.canvasTarget;
|
|
15673
|
+
rendererForCleanup = releaseRendererRefsFromRootState(state);
|
|
15674
|
+
const unregisterRoot = state.internal.unregisterRoot;
|
|
15675
|
+
if (unregisterRoot) {
|
|
15676
|
+
unregisterRoot();
|
|
15677
|
+
state.internal.unregisterRoot = void 0;
|
|
15678
|
+
}
|
|
15679
|
+
}
|
|
15634
15680
|
reconciler.updateContainer(null, fiber, null, () => {
|
|
15635
15681
|
if (state) {
|
|
15682
|
+
sceneForCleanup = detachRootSceneFromRootState(state);
|
|
15636
15683
|
setTimeout(() => {
|
|
15637
15684
|
try {
|
|
15638
|
-
const renderer =
|
|
15639
|
-
const unregisterRoot = state.internal.unregisterRoot;
|
|
15640
|
-
if (unregisterRoot) unregisterRoot();
|
|
15685
|
+
const renderer = rendererForCleanup;
|
|
15641
15686
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
15642
15687
|
if (unregisterPrimary) unregisterPrimary();
|
|
15643
|
-
|
|
15644
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
15688
|
+
if (canvasTargetForCleanup?.dispose) canvasTargetForCleanup.dispose();
|
|
15645
15689
|
state.events.disconnect?.();
|
|
15646
15690
|
cleanupHelperGroup(root.store);
|
|
15647
15691
|
if (state.isLegacy && renderer) {
|
|
@@ -15652,7 +15696,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
15652
15696
|
if (!state.internal.isSecondary) {
|
|
15653
15697
|
if (renderer?.xr) state.xr.disconnect();
|
|
15654
15698
|
}
|
|
15655
|
-
dispose(
|
|
15699
|
+
if (sceneForCleanup) dispose(sceneForCleanup);
|
|
15656
15700
|
_roots.delete(canvas);
|
|
15657
15701
|
if (callback) callback(canvas);
|
|
15658
15702
|
} catch {
|
package/dist/webgpu/index.mjs
CHANGED
|
@@ -3440,7 +3440,7 @@ function advance(timestamp) {
|
|
|
3440
3440
|
getScheduler().step(timestamp);
|
|
3441
3441
|
}
|
|
3442
3442
|
|
|
3443
|
-
const version = "10.0.
|
|
3443
|
+
const version = "10.0.4";
|
|
3444
3444
|
const packageData = {
|
|
3445
3445
|
version: version};
|
|
3446
3446
|
|
|
@@ -15197,6 +15197,7 @@ function createRoot(canvas) {
|
|
|
15197
15197
|
let pending = null;
|
|
15198
15198
|
return {
|
|
15199
15199
|
async configure(props = {}) {
|
|
15200
|
+
if (pending) await pending;
|
|
15200
15201
|
let resolve;
|
|
15201
15202
|
pending = new Promise((_resolve) => resolve = _resolve);
|
|
15202
15203
|
const {
|
|
@@ -15475,8 +15476,10 @@ function createRoot(canvas) {
|
|
|
15475
15476
|
const unregisterCanvasTarget = scheduler.register(
|
|
15476
15477
|
() => {
|
|
15477
15478
|
const state2 = store.getState();
|
|
15479
|
+
if (!state2.internal.active) return;
|
|
15478
15480
|
if (state2.internal.isMultiCanvas && state2.internal.canvasTarget) {
|
|
15479
15481
|
const renderer2 = state2.internal.actualRenderer;
|
|
15482
|
+
if (!renderer2) return;
|
|
15480
15483
|
renderer2.setCanvasTarget(state2.internal.canvasTarget);
|
|
15481
15484
|
}
|
|
15482
15485
|
},
|
|
@@ -15529,7 +15532,9 @@ function createRoot(canvas) {
|
|
|
15529
15532
|
const unregisterRender = scheduler.register(
|
|
15530
15533
|
() => {
|
|
15531
15534
|
const state2 = store.getState();
|
|
15535
|
+
if (!state2.internal.active) return;
|
|
15532
15536
|
const renderer2 = state2.internal.actualRenderer;
|
|
15537
|
+
if (!renderer2) return;
|
|
15533
15538
|
const userHandlesRender = scheduler.hasUserJobsInPhase("render", newRootId);
|
|
15534
15539
|
if (userHandlesRender || state2.internal.priority) return;
|
|
15535
15540
|
try {
|
|
@@ -15604,23 +15609,62 @@ function Provider({
|
|
|
15604
15609
|
}, []);
|
|
15605
15610
|
return /* @__PURE__ */ jsx(context.Provider, { value: store, children });
|
|
15606
15611
|
}
|
|
15612
|
+
function releaseSceneR3fLinks(scene, options) {
|
|
15613
|
+
if (!scene) return null;
|
|
15614
|
+
scene.traverse((obj) => {
|
|
15615
|
+
delete obj.__r3f;
|
|
15616
|
+
});
|
|
15617
|
+
delete scene.__r3f;
|
|
15618
|
+
{
|
|
15619
|
+
scene.clear();
|
|
15620
|
+
}
|
|
15621
|
+
return scene;
|
|
15622
|
+
}
|
|
15623
|
+
function releaseRendererRefsFromRootState(state) {
|
|
15624
|
+
const { internal } = state;
|
|
15625
|
+
const renderer = internal.actualRenderer ?? null;
|
|
15626
|
+
internal.actualRenderer = null;
|
|
15627
|
+
internal.canvasTarget = null;
|
|
15628
|
+
internal.pointerMap?.clear();
|
|
15629
|
+
internal.pointerDirty?.clear();
|
|
15630
|
+
return renderer;
|
|
15631
|
+
}
|
|
15632
|
+
function detachRootSceneFromRootState(state) {
|
|
15633
|
+
const scene = releaseSceneR3fLinks(state.scene);
|
|
15634
|
+
state.set((prev) => ({
|
|
15635
|
+
scene: null,
|
|
15636
|
+
rootScene: null,
|
|
15637
|
+
internal: { ...prev.internal, container: null }
|
|
15638
|
+
}));
|
|
15639
|
+
return scene;
|
|
15640
|
+
}
|
|
15607
15641
|
function unmountComponentAtNode(canvas, callback) {
|
|
15608
15642
|
const root = _roots.get(canvas);
|
|
15609
15643
|
const fiber = root?.fiber;
|
|
15610
15644
|
if (fiber) {
|
|
15611
15645
|
const state = root?.store.getState();
|
|
15612
|
-
|
|
15646
|
+
let rendererForCleanup = null;
|
|
15647
|
+
let canvasTargetForCleanup;
|
|
15648
|
+
let sceneForCleanup = null;
|
|
15649
|
+
if (state) {
|
|
15650
|
+
state.internal.active = false;
|
|
15651
|
+
canvasTargetForCleanup = state.internal.canvasTarget;
|
|
15652
|
+
rendererForCleanup = releaseRendererRefsFromRootState(state);
|
|
15653
|
+
const unregisterRoot = state.internal.unregisterRoot;
|
|
15654
|
+
if (unregisterRoot) {
|
|
15655
|
+
unregisterRoot();
|
|
15656
|
+
state.internal.unregisterRoot = void 0;
|
|
15657
|
+
}
|
|
15658
|
+
}
|
|
15613
15659
|
reconciler.updateContainer(null, fiber, null, () => {
|
|
15614
15660
|
if (state) {
|
|
15661
|
+
sceneForCleanup = detachRootSceneFromRootState(state);
|
|
15615
15662
|
setTimeout(() => {
|
|
15616
15663
|
try {
|
|
15617
|
-
const renderer =
|
|
15618
|
-
const unregisterRoot = state.internal.unregisterRoot;
|
|
15619
|
-
if (unregisterRoot) unregisterRoot();
|
|
15664
|
+
const renderer = rendererForCleanup;
|
|
15620
15665
|
const unregisterPrimary = state.internal.unregisterPrimary;
|
|
15621
15666
|
if (unregisterPrimary) unregisterPrimary();
|
|
15622
|
-
|
|
15623
|
-
if (canvasTarget?.dispose) canvasTarget.dispose();
|
|
15667
|
+
if (canvasTargetForCleanup?.dispose) canvasTargetForCleanup.dispose();
|
|
15624
15668
|
state.events.disconnect?.();
|
|
15625
15669
|
cleanupHelperGroup(root.store);
|
|
15626
15670
|
if (state.isLegacy && renderer) {
|
|
@@ -15631,7 +15675,7 @@ function unmountComponentAtNode(canvas, callback) {
|
|
|
15631
15675
|
if (!state.internal.isSecondary) {
|
|
15632
15676
|
if (renderer?.xr) state.xr.disconnect();
|
|
15633
15677
|
}
|
|
15634
|
-
dispose(
|
|
15678
|
+
if (sceneForCleanup) dispose(sceneForCleanup);
|
|
15635
15679
|
_roots.delete(canvas);
|
|
15636
15680
|
if (callback) callback(canvas);
|
|
15637
15681
|
} catch {
|