|
@@ -11,34 +11,35 @@
|
|
|
|
|
|
THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
- var vrHMD;
|
|
|
- var isDeprecatedAPI = false;
|
|
|
+ var isWebVR1 = true;
|
|
|
+
|
|
|
+ var vrDisplay;
|
|
|
var eyeTranslationL = new THREE.Vector3();
|
|
|
var eyeTranslationR = new THREE.Vector3();
|
|
|
var renderRectL, renderRectR;
|
|
|
var eyeFOVL, eyeFOVR;
|
|
|
|
|
|
- function gotVRDevices( devices ) {
|
|
|
+ function gotVRDisplays( displays ) {
|
|
|
|
|
|
- for ( var i = 0; i < devices.length; i ++ ) {
|
|
|
+ for ( var i = 0; i < displays.length; i ++ ) {
|
|
|
|
|
|
- if ( 'VRDisplay' in window && devices[ i ] instanceof VRDisplay ) {
|
|
|
+ if ( 'VRDisplay' in window && displays[ i ] instanceof VRDisplay ) {
|
|
|
|
|
|
- vrHMD = devices[ i ];
|
|
|
- isDeprecatedAPI = false;
|
|
|
+ vrDisplay = displays[ i ];
|
|
|
+ isWebVR1 = true;
|
|
|
break; // We keep the first we encounter
|
|
|
|
|
|
- } else if ( 'HMDVRDevice' in window && devices[ i ] instanceof HMDVRDevice ) {
|
|
|
+ } else if ( 'HMDVRDevice' in window && displays[ i ] instanceof HMDVRDevice ) {
|
|
|
|
|
|
- vrHMD = devices[ i ];
|
|
|
- isDeprecatedAPI = true;
|
|
|
+ vrDisplay = displays[ i ];
|
|
|
+ isWebVR1 = false;
|
|
|
break; // We keep the first we encounter
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( vrHMD === undefined ) {
|
|
|
+ if ( vrDisplay === undefined ) {
|
|
|
|
|
|
if ( onError ) onError( 'HMD not available' );
|
|
|
|
|
@@ -48,12 +49,12 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
if ( navigator.getVRDisplays ) {
|
|
|
|
|
|
- navigator.getVRDisplays().then( gotVRDevices );
|
|
|
+ navigator.getVRDisplays().then( gotVRDisplays );
|
|
|
|
|
|
} else if ( navigator.getVRDevices ) {
|
|
|
|
|
|
// Deprecated API.
|
|
|
- navigator.getVRDevices().then( gotVRDevices );
|
|
|
+ navigator.getVRDevices().then( gotVRDisplays );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -69,7 +70,7 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
this.getVRDisplay = function () {
|
|
|
|
|
|
- return vrHMD;
|
|
|
+ return vrDisplay;
|
|
|
|
|
|
};
|
|
|
|
|
@@ -79,20 +80,19 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
if ( scope.isPresenting ) {
|
|
|
|
|
|
- var eyeParamsL = vrHMD.getEyeParameters( 'left' );
|
|
|
+ var eyeParamsL = vrDisplay.getEyeParameters( 'left' );
|
|
|
renderer.setPixelRatio( 1 );
|
|
|
|
|
|
- if ( isDeprecatedAPI ) {
|
|
|
+ if ( isWebVR1 ) {
|
|
|
|
|
|
- renderer.setSize( eyeParamsL.renderRect.width * 2, eyeParamsL.renderRect.height, false );
|
|
|
+ renderer.setSize( eyeParamsL.renderWidth * 2, eyeParamsL.renderHeight, false );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- renderer.setSize( eyeParamsL.renderWidth * 2, eyeParamsL.renderHeight, false );
|
|
|
+ renderer.setSize( eyeParamsL.renderRect.width * 2, eyeParamsL.renderRect.height, false );
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
} else {
|
|
|
|
|
|
renderer.setPixelRatio( rendererPixelRatio );
|
|
@@ -112,7 +112,7 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
function onFullscreenChange () {
|
|
|
|
|
|
var wasPresenting = scope.isPresenting;
|
|
|
- scope.isPresenting = vrHMD !== undefined && ( vrHMD.isPresenting || ( isDeprecatedAPI && document[ fullscreenElement ] instanceof window.HTMLElement ) );
|
|
|
+ scope.isPresenting = vrDisplay !== undefined && ( vrDisplay.isPresenting || ( ! isWebVR1 && document[ fullscreenElement ] instanceof window.HTMLElement ) );
|
|
|
|
|
|
if ( wasPresenting === scope.isPresenting ) {
|
|
|
|
|
@@ -125,18 +125,18 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
rendererPixelRatio = renderer.getPixelRatio();
|
|
|
rendererSize = renderer.getSize();
|
|
|
|
|
|
- var eyeParamsL = vrHMD.getEyeParameters( 'left' );
|
|
|
+ var eyeParamsL = vrDisplay.getEyeParameters( 'left' );
|
|
|
var eyeWidth, eyeHeight;
|
|
|
|
|
|
- if ( isDeprecatedAPI ) {
|
|
|
+ if ( isWebVR1 ) {
|
|
|
|
|
|
- eyeWidth = eyeParamsL.renderRect.width;
|
|
|
- eyeHeight = eyeParamsL.renderRect.height;
|
|
|
+ eyeWidth = eyeParamsL.renderWidth;
|
|
|
+ eyeHeight = eyeParamsL.renderHeight;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- eyeWidth = eyeParamsL.renderWidth;
|
|
|
- eyeHeight = eyeParamsL.renderHeight;
|
|
|
+ eyeWidth = eyeParamsL.renderRect.width;
|
|
|
+ eyeHeight = eyeParamsL.renderRect.height;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -181,7 +181,7 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
return new Promise( function ( resolve, reject ) {
|
|
|
|
|
|
- if ( vrHMD === undefined ) {
|
|
|
+ if ( vrDisplay === undefined ) {
|
|
|
|
|
|
reject( new Error( 'No VR hardware found.' ) );
|
|
|
return;
|
|
@@ -195,15 +195,15 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( ! isDeprecatedAPI ) {
|
|
|
+ if ( isWebVR1 ) {
|
|
|
|
|
|
if ( boolean ) {
|
|
|
|
|
|
- resolve( vrHMD.requestPresent( [ { source: canvas } ] ) );
|
|
|
+ resolve( vrDisplay.requestPresent( [ { source: canvas } ] ) );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- resolve( vrHMD.exitPresent() );
|
|
|
+ resolve( vrDisplay.exitPresent() );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -211,7 +211,7 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
if ( canvas[ requestFullscreen ] ) {
|
|
|
|
|
|
- canvas[ boolean ? requestFullscreen : exitFullscreen ]( { vrDisplay: vrHMD } );
|
|
|
+ canvas[ boolean ? requestFullscreen : exitFullscreen ]( { vrDisplay: vrDisplay } );
|
|
|
resolve();
|
|
|
|
|
|
} else {
|
|
@@ -241,9 +241,9 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
this.requestAnimationFrame = function ( f ) {
|
|
|
|
|
|
- if ( ! isDeprecatedAPI && vrHMD !== undefined ) {
|
|
|
+ if ( isWebVR1 && vrDisplay !== undefined ) {
|
|
|
|
|
|
- vrHMD.requestAnimationFrame( f );
|
|
|
+ vrDisplay.requestAnimationFrame( f );
|
|
|
|
|
|
} else {
|
|
|
|
|
@@ -263,7 +263,7 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
this.render = function ( scene, camera, renderTarget, forceClear ) {
|
|
|
|
|
|
- if ( vrHMD && scope.isPresenting ) {
|
|
|
+ if ( vrDisplay && scope.isPresenting ) {
|
|
|
|
|
|
var autoUpdate = scene.autoUpdate;
|
|
|
|
|
@@ -274,10 +274,10 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- var eyeParamsL = vrHMD.getEyeParameters( 'left' );
|
|
|
- var eyeParamsR = vrHMD.getEyeParameters( 'right' );
|
|
|
+ var eyeParamsL = vrDisplay.getEyeParameters( 'left' );
|
|
|
+ var eyeParamsR = vrDisplay.getEyeParameters( 'right' );
|
|
|
|
|
|
- if ( ! isDeprecatedAPI ) {
|
|
|
+ if ( isWebVR1 ) {
|
|
|
|
|
|
eyeTranslationL.fromArray( eyeParamsL.offset );
|
|
|
eyeTranslationR.fromArray( eyeParamsR.offset );
|
|
@@ -307,6 +307,7 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
renderRectR = { x: size.width / 2, y: 0, width: size.width / 2, height: size.height };
|
|
|
|
|
|
renderer.setScissorTest( true );
|
|
|
+
|
|
|
if ( renderer.autoClear ) renderer.clear();
|
|
|
|
|
|
if ( camera.parent === null ) camera.updateMatrixWorld();
|
|
@@ -340,9 +341,9 @@ THREE.VREffect = function ( renderer, onError ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( ! isDeprecatedAPI ) {
|
|
|
+ if ( isWebVR1 ) {
|
|
|
|
|
|
- vrHMD.submitFrame();
|
|
|
+ vrDisplay.submitFrame();
|
|
|
|
|
|
}
|
|
|
|