@@ -38,6 +38,7 @@ module.exports.AScene = registerElement('a-scene', {
3838 prototype : Object . create ( AEntity . prototype , {
3939 createdCallback : {
4040 value : function ( ) {
41+ this . clock = new THREE . Clock ( ) ;
4142 this . isIOS = isIOS ;
4243 this . isMobile = isMobile ;
4344 this . hasWebXR = isWebXRAvailable ;
@@ -265,8 +266,8 @@ module.exports.AScene = registerElement('a-scene', {
265266 // Has VR.
266267 if ( this . checkHeadsetConnected ( ) || this . isMobile ) {
267268 vrDisplay = utils . device . getVRDisplay ( ) ;
268- vrManager . setDevice ( vrDisplay ) ;
269269 vrManager . enabled = true ;
270+ vrManager . setDevice ( vrDisplay ) ;
270271
271272 if ( this . hasWebXR ) {
272273 // XR API.
@@ -286,17 +287,12 @@ module.exports.AScene = registerElement('a-scene', {
286287 enterVRSuccess ( ) ;
287288 } ) ;
288289 } else {
289- // WebVR API.
290- if ( vrDisplay . isPresenting ) {
291- enterVRSuccess ( ) ;
292- return Promise . resolve ( ) ;
293- }
294-
295290 var rendererSystem = this . getAttribute ( 'renderer' ) ;
296291 var presentationAttributes = {
297292 highRefreshRate : rendererSystem . highRefreshRate ,
298293 foveationLevel : rendererSystem . foveationLevel
299294 } ;
295+
300296 return vrDisplay . requestPresent ( [ {
301297 source : this . canvas ,
302298 attributes : presentationAttributes
@@ -326,6 +322,8 @@ module.exports.AScene = registerElement('a-scene', {
326322 if ( ! self . isMobile && ! self . checkHeadsetConnected ( ) ) {
327323 requestFullscreen ( self . canvas ) ;
328324 }
325+
326+ self . renderer . setAnimationLoop ( self . render ) ;
329327 self . resize ( ) ;
330328 }
331329
@@ -624,19 +622,23 @@ module.exports.AScene = registerElement('a-scene', {
624622 }
625623
626624 this . addEventListener ( 'loaded' , function ( ) {
625+ var renderer = this . renderer ;
626+ var vrManager = this . renderer . vr ;
627627 AEntity . prototype . play . call ( this ) ; // .play() *before* render.
628628
629629 if ( sceneEl . renderStarted ) { return ; }
630-
631630 sceneEl . resize ( ) ;
632631
633632 // Kick off render loop.
634633 if ( sceneEl . renderer ) {
635634 if ( window . performance ) { window . performance . mark ( 'render-started' ) ; }
636- sceneEl . clock = new THREE . Clock ( ) ;
637635 loadingScreen . remove ( ) ;
638- sceneEl . renderer . setAnimationLoop ( this . render ) ;
639- sceneEl . render ( ) ;
636+ if ( utils . device . getVRDisplay ( ) . isPresenting ) {
637+ vrManager . setDevice ( utils . device . getVRDisplay ( ) ) ;
638+ vrManager . enabled = true ;
639+ sceneEl . enterVR ( ) ;
640+ }
641+ renderer . setAnimationLoop ( this . render ) ;
640642 sceneEl . renderStarted = true ;
641643 sceneEl . emit ( 'renderstart' ) ;
642644 }
0 commit comments