From 6ff1d1bd7183e9f4ec75075dccb6410a605de3d6 Mon Sep 17 00:00:00 2001 From: Mugen87 Date: Tue, 24 Nov 2020 16:44:18 +0100 Subject: [PATCH] WebXRManager: Use async/await in setSession(). --- examples/jsm/webxr/ARButton.js | 4 ++-- examples/jsm/webxr/VRButton.js | 4 ++-- src/renderers/webxr/WebXRManager.js | 29 ++++++++++------------------- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/examples/jsm/webxr/ARButton.js b/examples/jsm/webxr/ARButton.js index 1dade38390f8c8..e24c432b854870 100644 --- a/examples/jsm/webxr/ARButton.js +++ b/examples/jsm/webxr/ARButton.js @@ -8,12 +8,12 @@ class ARButton { let currentSession = null; - function onSessionStarted( session ) { + async function onSessionStarted( session ) { session.addEventListener( 'end', onSessionEnded ); renderer.xr.setReferenceSpaceType( 'local' ); - renderer.xr.setSession( session ); + await renderer.xr.setSession( session ); button.textContent = 'STOP AR'; currentSession = session; diff --git a/examples/jsm/webxr/VRButton.js b/examples/jsm/webxr/VRButton.js index 182fcaf34e00a3..f40ed854865d53 100644 --- a/examples/jsm/webxr/VRButton.js +++ b/examples/jsm/webxr/VRButton.js @@ -14,11 +14,11 @@ class VRButton { let currentSession = null; - function onSessionStarted( session ) { + async function onSessionStarted( session ) { session.addEventListener( 'end', onSessionEnded ); - renderer.xr.setSession( session ); + await renderer.xr.setSession( session ); button.textContent = 'EXIT VR'; currentSession = session; diff --git a/src/renderers/webxr/WebXRManager.js b/src/renderers/webxr/WebXRManager.js index bcc08429a30709..769e0b271560dd 100644 --- a/src/renderers/webxr/WebXRManager.js +++ b/src/renderers/webxr/WebXRManager.js @@ -128,19 +128,6 @@ function WebXRManager( renderer, gl ) { } - function onRequestReferenceSpace( value ) { - - referenceSpace = value; - - animation.setContext( session ); - animation.start(); - - scope.isPresenting = true; - - scope.dispatchEvent( { type: 'sessionstart' } ); - - } - this.setFramebufferScaleFactor = function ( value ) { framebufferScaleFactor = value; @@ -177,7 +164,7 @@ function WebXRManager( renderer, gl ) { }; - this.setSession = function ( value ) { + this.setSession = async function ( value ) { session = value; @@ -190,12 +177,13 @@ function WebXRManager( renderer, gl ) { session.addEventListener( 'squeezestart', onSessionEvent ); session.addEventListener( 'squeezeend', onSessionEvent ); session.addEventListener( 'end', onSessionEnd ); + session.addEventListener( 'inputsourceschange', onInputSourcesChange ); const attributes = gl.getContextAttributes(); if ( attributes.xrCompatible !== true ) { - gl.makeXRCompatible(); + await gl.makeXRCompatible(); } @@ -212,17 +200,20 @@ function WebXRManager( renderer, gl ) { session.updateRenderState( { baseLayer: baseLayer } ); - session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace ); + referenceSpace = await session.requestReferenceSpace( referenceSpaceType ); + + animation.setContext( session ); + animation.start(); - // + scope.isPresenting = true; - session.addEventListener( 'inputsourceschange', updateInputSources ); + scope.dispatchEvent( { type: 'sessionstart' } ); } }; - function updateInputSources( event ) { + function onInputSourcesChange( event ) { const inputSources = session.inputSources;