diff --git a/examples/js/effects/VREffect.js b/examples/js/effects/VREffect.js index 9cee30fa39402fff59d61c4cdc86e60998bdf1c0..d6895031af639252dee734a8f961c24eedc4432e 100644 --- a/examples/js/effects/VREffect.js +++ b/examples/js/effects/VREffect.js @@ -94,10 +94,10 @@ THREE.VREffect = function ( renderer, onError ) { var requestFullscreen; var exitFullscreen; var fullscreenElement; - var leftBounds = [ 0.0, 0.0, 0.5, 1.0 ]; - var rightBounds = [ 0.5, 0.0, 0.5, 1.0 ]; + var defaultLeftBounds = [ 0.0, 0.0, 0.5, 1.0 ]; + var defaultRightBounds = [ 0.5, 0.0, 0.5, 1.0 ]; - function onFullscreenChange() { + function onVRDisplayPresentChange() { var wasPresenting = scope.isPresenting; scope.isPresenting = vrDisplay !== undefined && vrDisplay.isPresenting; @@ -108,16 +108,6 @@ THREE.VREffect = function ( renderer, onError ) { var eyeWidth = eyeParamsL.renderWidth; var eyeHeight = eyeParamsL.renderHeight; - var layers = vrDisplay.getLayers(); - if ( layers.length ) { - - var layer = layers[0]; - - leftBounds = layer.leftBounds !== null && layer.leftBounds.length === 4 ? layer.leftBounds : [ 0.0, 0.0, 0.5, 1.0 ]; - rightBounds = layer.rightBounds !== null && layer.rightBounds.length === 4 ? layer.rightBounds : [ 0.5, 0.0, 0.5, 1.0 ]; - - } - if ( !wasPresenting ) { rendererPixelRatio = renderer.getPixelRatio(); @@ -137,7 +127,7 @@ THREE.VREffect = function ( renderer, onError ) { } - window.addEventListener( 'vrdisplaypresentchange', onFullscreenChange, false ); + window.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false ); this.setFullScreen = function ( boolean ) { @@ -260,17 +250,36 @@ THREE.VREffect = function ( renderer, onError ) { // When rendering we don't care what the recommended size is, only what the actual size // of the backbuffer is. var size = renderer.getSize(); + var layers = vrDisplay.getLayers(); + var leftBounds; + var rightBounds; + + if ( layers.length ) { + + var layer = layers[ 0 ]; + + leftBounds = layer.leftBounds !== null && layer.leftBounds.length === 4 ? layer.leftBounds : defaultLeftBounds; + rightBounds = layer.rightBounds !== null && layer.rightBounds.length === 4 ? layer.rightBounds : defaultRightBounds; + + } else { + + leftBounds = defaultLeftBounds; + rightBounds = defaultRightBounds; + + } + + renderRectL = { x: Math.round( size.width * leftBounds[ 0 ] ), y: Math.round( size.height * leftBounds[ 1 ] ), width: Math.round( size.width * leftBounds[ 2 ] ), - height: Math.round(size.height * leftBounds[ 3 ] ) + height: Math.round(size.height * leftBounds[ 3 ] ) }; renderRectR = { x: Math.round( size.width * rightBounds[ 0 ] ), y: Math.round( size.height * rightBounds[ 1 ] ), width: Math.round( size.width * rightBounds[ 2 ] ), - height: Math.round(size.height * rightBounds[ 3 ] ) + height: Math.round(size.height * rightBounds[ 3 ] ) }; if ( renderTarget ) { @@ -278,7 +287,7 @@ THREE.VREffect = function ( renderer, onError ) { renderer.setRenderTarget( renderTarget ); renderTarget.scissorTest = true; - } else { + } else { renderer.setRenderTarget( null ); renderer.setScissorTest( true ); @@ -311,7 +320,6 @@ THREE.VREffect = function ( renderer, onError ) { cameraL.projectionMatrix = fovToProjection( eyeParamsL.fieldOfView, true, camera.near, camera.far ); cameraR.projectionMatrix = fovToProjection( eyeParamsR.fieldOfView, true, camera.near, camera.far ); - } // render left eye