@@ -56,6 +56,7 @@ class AScene extends AEntity {
5656 self . systems = { } ;
5757 self . systemNames = [ ] ;
5858 self . time = self . delta = 0 ;
59+ self . usedOfferSession = false ;
5960
6061 self . behaviors = { tick : [ ] , tock : [ ] } ;
6162 self . hasLoaded = false ;
@@ -270,13 +271,15 @@ class AScene extends AEntity {
270271 * @param {bool? } useAR - if true, try immersive-ar mode
271272 * @returns {Promise }
272273 */
273- enterVR ( useAR ) {
274+ enterVR ( useAR , useOfferSession ) {
274275 var self = this ;
275276 var vrDisplay ;
276277 var vrManager = self . renderer . xr ;
277278 var xrInit ;
278279
279280 // Don't enter VR if already in VR.
281+ if ( useOfferSession && ( ! navigator . xr || ! navigator . xr . offerSession ) ) { return Promise . resolve ( 'OfferSession is not supported.' ) ; }
282+ if ( self . usedOfferSession && useOfferSession ) { return Promise . resolve ( 'OfferSession was already called.' ) ; }
280283 if ( this . is ( 'vr-mode' ) ) { return Promise . resolve ( 'Already in VR.' ) ; }
281284
282285 // Has VR.
@@ -294,9 +297,16 @@ class AScene extends AEntity {
294297 var xrMode = useAR ? 'immersive-ar' : 'immersive-vr' ;
295298 xrInit = this . sceneEl . systems . webxr . sessionConfiguration ;
296299 return new Promise ( function ( resolve , reject ) {
297- navigator . xr . requestSession ( xrMode , xrInit ) . then (
300+ var requestSession = useOfferSession ? navigator . xr . offerSession . bind ( navigator . xr ) : navigator . xr . requestSession . bind ( navigator . xr ) ;
301+ self . usedOfferSession |= useOfferSession ;
302+ requestSession ( xrMode , xrInit ) . then (
298303 function requestSuccess ( xrSession ) {
299304 self . xrSession = xrSession ;
305+
306+ if ( useOfferSession ) {
307+ self . usedOfferSession = false ;
308+ }
309+
300310 vrManager . layersEnabled = xrInit . requiredFeatures . indexOf ( 'layers' ) !== - 1 ;
301311 vrManager . setSession ( xrSession ) . then ( function ( ) {
302312 vrManager . setFoveation ( rendererSystem . foveationLevel ) ;
0 commit comments