Skip to content

Commit 173836f

Browse files
committed
fix #355
1 parent 32a44f1 commit 173836f

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

packages/xr/src/store.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,10 @@ export function createXRStore<T extends XRElementImplementations>(options?: XRSt
510510
const frameRequests: Array<(frame: XRFrame) => void> = []
511511
let xrManager: WebXRManager | undefined
512512

513+
const onSessionStart = () => {
514+
store.setState(bindToSession(xrManager!.getSession()!))
515+
}
516+
513517
return Object.assign(store, {
514518
addLayerEntry(layerEntry: XRLayerEntry): void {
515519
if (store.getState().session == null) {
@@ -530,7 +534,9 @@ export function createXRStore<T extends XRElementImplementations>(options?: XRSt
530534
if (xrManager === newXrManager) {
531535
return
532536
}
537+
xrManager?.removeEventListener('sessionstart', onSessionStart)
533538
xrManager = newXrManager
539+
xrManager.addEventListener('sessionstart', onSessionStart)
534540
const { foveation, bounded } = options ?? {}
535541
xrManager.setReferenceSpaceType(bounded ? 'bounded-floor' : 'local-floor')
536542
if (foveation != null) {
@@ -606,6 +612,7 @@ export function createXRStore<T extends XRElementImplementations>(options?: XRSt
606612
store.setState({ screenInput: implementation })
607613
},
608614
destroy() {
615+
xrManager?.removeEventListener('sessionstart', onSessionStart)
609616
cleanupEmulate?.()
610617
cleanupDomOverlayRoot?.()
611618
cleanupSessionGrantedListener?.()
@@ -644,10 +651,6 @@ export function createXRStore<T extends XRElementImplementations>(options?: XRSt
644651
if (xrManager != null) {
645652
updateSession(store, frame, xrManager)
646653
}
647-
if (state.session == null && referenceSpace != null && frame.session != null) {
648-
update ??= {}
649-
Object.assign(update, bindToSession(frame.session))
650-
}
651654
if (state.body != frame.body) {
652655
update ??= {}
653656
update.body = frame.body

0 commit comments

Comments
 (0)