@@ -39,6 +39,7 @@ module.exports.AScene = registerElement('a-scene', {
3939 prototype : Object . create ( AEntity . prototype , {
4040 createdCallback : {
4141 value : function ( ) {
42+ this . clock = new THREE . Clock ( ) ;
4243 this . isIOS = isIOS ;
4344 this . isMobile = isMobile ;
4445 this . hasWebXR = isWebXRAvailable ;
@@ -267,8 +268,8 @@ module.exports.AScene = registerElement('a-scene', {
267268 // Has VR.
268269 if ( this . checkHeadsetConnected ( ) || this . isMobile ) {
269270 vrDisplay = utils . device . getVRDisplay ( ) ;
270- vrManager . setDevice ( vrDisplay ) ;
271271 vrManager . enabled = true ;
272+ vrManager . setDevice ( vrDisplay ) ;
272273
273274 if ( this . hasWebXR ) {
274275 // XR API.
@@ -288,14 +289,16 @@ module.exports.AScene = registerElement('a-scene', {
288289 enterVRSuccess ( ) ;
289290 } ) ;
290291 } else {
291- // WebVR API.
292- if ( vrDisplay . isPresenting ) {
293- enterVRSuccess ( ) ;
294- return Promise . resolve ( ) ;
295- }
292+ var rendererSystem = this . getAttribute ( 'renderer' ) ;
293+ var presentationAttributes = {
294+ highRefreshRate : rendererSystem . highRefreshRate ,
295+ foveationLevel : rendererSystem . foveationLevel ,
296+ multiview : vrManager . multiview
297+ } ;
298+
296299 return vrDisplay . requestPresent ( [ {
297300 source : this . canvas ,
298- attributes : { highRefreshRate : this . highRefreshRate , multiview : vrManager . multiview }
301+ attributes : presentationAttributes
299302 } ] ) . then ( enterVRSuccess , enterVRFailure ) ;
300303 }
301304 return Promise . resolve ( ) ;
@@ -322,6 +325,8 @@ module.exports.AScene = registerElement('a-scene', {
322325 if ( ! self . isMobile && ! self . checkHeadsetConnected ( ) ) {
323326 requestFullscreen ( self . canvas ) ;
324327 }
328+
329+ self . renderer . setAnimationLoop ( self . render ) ;
325330 self . resize ( ) ;
326331 }
327332
@@ -709,19 +714,23 @@ module.exports.AScene = registerElement('a-scene', {
709714 }
710715
711716 this . addEventListener ( 'loaded' , function ( ) {
717+ var renderer = this . renderer ;
718+ var vrManager = this . renderer . vr ;
712719 AEntity . prototype . play . call ( this ) ; // .play() *before* render.
713720
714721 if ( sceneEl . renderStarted ) { return ; }
715-
716722 sceneEl . resize ( ) ;
717723
718724 // Kick off render loop.
719725 if ( sceneEl . renderer ) {
720726 if ( window . performance ) { window . performance . mark ( 'render-started' ) ; }
721- sceneEl . clock = new THREE . Clock ( ) ;
722727 loadingScreen . remove ( ) ;
723- sceneEl . renderer . setAnimationLoop ( this . render ) ;
724- sceneEl . render ( ) ;
728+ if ( utils . device . getVRDisplay ( ) . isPresenting ) {
729+ vrManager . setDevice ( utils . device . getVRDisplay ( ) ) ;
730+ vrManager . enabled = true ;
731+ sceneEl . enterVR ( ) ;
732+ }
733+ renderer . setAnimationLoop ( this . render ) ;
725734 sceneEl . renderStarted = true ;
726735 sceneEl . emit ( 'renderstart' ) ;
727736 }
0 commit comments