1- var bind = require ( '../utils/bind' ) ;
21var constants = require ( '../constants/' ) ;
32var registerSystem = require ( '../core/system' ) . registerSystem ;
43
@@ -12,10 +11,18 @@ var DEFAULT_CAMERA_ATTR = 'data-aframe-default-camera';
1211module . exports . System = registerSystem ( 'camera' , {
1312 init : function ( ) {
1413 this . activeCameraEl = null ;
14+ this . bindMethods ( ) ;
1515 // Wait for all entities to fully load before checking for existence of camera.
1616 // Since entities wait for <a-assets> to load, any cameras attaching to the scene
1717 // will do so asynchronously.
18- this . sceneEl . addEventListener ( 'loaded' , bind ( this . setupDefaultCamera , this ) ) ;
18+ this . sceneEl . addEventListener ( 'loaded' , this . setupDefaultCamera ) ;
19+ } ,
20+
21+ bindMethods : function ( ) {
22+ this . setupDefaultCamera = this . setupDefaultCamera . bind ( this ) ;
23+ this . wrapRender = this . wrapRender . bind ( this ) ;
24+ this . unwrapRender = this . unwrapRender . bind ( this ) ;
25+ this . render = this . render . bind ( this ) ;
1926 } ,
2027
2128 /**
@@ -131,6 +138,10 @@ module.exports.System = registerSystem('camera', {
131138 }
132139
133140 spectatorCameraEl = this . spectatorCameraEl = newCameraEl ;
141+
142+ sceneEl . addEventListener ( 'enter-vr' , this . wrapRender ) ;
143+ sceneEl . addEventListener ( 'exit-vr' , this . unwrapRender ) ;
144+
134145 spectatorCameraEl . setAttribute ( 'camera' , 'active' , false ) ;
135146 spectatorCameraEl . play ( ) ;
136147
@@ -144,14 +155,31 @@ module.exports.System = registerSystem('camera', {
144155 this . spectatorCameraEl = undefined ;
145156 } ,
146157
147- tock : function ( ) {
158+ /**
159+ * Wrap the render method of the renderer to render
160+ * the spectator camera after vrDisplay.submitFrame.
161+ */
162+ wrapRender : function ( ) {
163+ if ( ! this . spectatorCameraEl ) { return ; }
164+ this . originalRender = this . sceneEl . renderer . render ;
165+ this . sceneEl . renderer . render = this . render ;
166+ } ,
167+
168+ unwrapRender : function ( ) {
169+ if ( ! this . originalRender ) { return ; }
170+ this . sceneEl . renderer . render = this . originalRender ;
171+ this . originalRender = undefined ;
172+ } ,
173+
174+ render : function ( scene , camera , renderTarget ) {
148175 var spectatorCamera ;
149176 var sceneEl = this . sceneEl ;
150177 var isVREnabled = sceneEl . renderer . vr . enabled ;
151- if ( ! this . spectatorCameraEl || sceneEl . isMobile ) { return ; }
178+ this . originalRender . call ( sceneEl . renderer , scene , camera , renderTarget ) ;
179+ if ( ! this . spectatorCameraEl || sceneEl . isMobile || ! isVREnabled ) { return ; }
152180 spectatorCamera = this . spectatorCameraEl . components . camera . camera ;
153181 sceneEl . renderer . vr . enabled = false ;
154- sceneEl . renderer . render ( sceneEl . object3D , spectatorCamera ) ;
182+ this . originalRender . call ( sceneEl . renderer , scene , spectatorCamera ) ;
155183 sceneEl . renderer . vr . enabled = isVREnabled ;
156184 }
157185} ) ;
0 commit comments