@@ -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,14 +271,15 @@ class AScene extends AEntity {
270271 * @param {bool? } useAR - if true, try immersive-ar mode
271272 * @returns {Promise }
272273 */
273- enterVR ( useAR , useOfferSession = false ) {
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.
280- if ( navigator . xr . offerSession === undefined ) { return Promise . resolve ( 'OfferSession is not supported.' ) ; }
281+ if ( useOfferSession && navigator . xr . offerSession === undefined ) { return Promise . resolve ( 'OfferSession is not supported.' ) ; }
282+ if ( self . usedOfferSession ) { return Promise . resolve ( 'OfferSession was already called.' ) ; }
281283 if ( this . is ( 'vr-mode' ) ) { return Promise . resolve ( 'Already in VR.' ) ; }
282284
283285 // Has VR.
@@ -296,9 +298,11 @@ class AScene extends AEntity {
296298 xrInit = this . sceneEl . systems . webxr . sessionConfiguration ;
297299 return new Promise ( function ( resolve , reject ) {
298300 var requestFunction = useOfferSession ? navigator . xr . offerSession . bind ( navigator . xr ) : navigator . xr . requestSession . bind ( navigator . xr ) ;
301+ self . usedOfferSession |= useOfferSession ;
299302 requestFunction ( xrMode , xrInit ) . then (
300303 function requestSuccess ( xrSession ) {
301304 self . xrSession = xrSession ;
305+ self . usedOfferSession = false ;
302306
303307 vrManager . layersEnabled = xrInit . requiredFeatures . indexOf ( 'layers' ) !== - 1 ;
304308 vrManager . setSession ( xrSession ) . then ( function ( ) {
0 commit comments