2
0
Эх сурвалжийг харах

Comply WebXRManager with WebXR API in Chrome m75

Diego Marcos 6 жил өмнө
parent
commit
e644a399a7

+ 4 - 26
examples/js/vr/WebVR.js

@@ -81,15 +81,7 @@ var WEBVR = {
 
 				if ( currentSession === null ) {
 
-					if (device) {
-
-						device.requestSession( { immersive: true, exclusive: true /* DEPRECATED */ } ).then( onSessionStarted );
-
-					} else {
-
-						navigator.xr.requestSession( { mode: 'immersive-vr' } ).then( onSessionStarted );
-
-					}
+					navigator.xr.requestSession( { mode: 'immersive-vr' } ).then( onSessionStarted );
 
 				} else {
 
@@ -150,23 +142,9 @@ var WEBVR = {
 
 			stylizeElement( button );
 
-			if (navigator.xr.supportsSessionMode) {
-
-				navigator.xr.supportsSessionMode( 'immersive-vr' ).then( function () {
-					showEnterXR( );
-				});
-
-			} else {
-
-				navigator.xr.requestDevice().then( function ( device ) {
-
-					device.supportsSession( { immersive: true, exclusive: true /* DEPRECATED */ } )
-						.then( function () { showEnterXR( device ); } )
-						.catch( showVRNotFound );
-
-				} ).catch( showVRNotFound );
-
-			}
+			navigator.xr.supportsSessionMode( 'immersive-vr' ).then( function () {
+				showEnterXR( );
+			});
 
 			return button;
 

+ 2 - 1
src/renderers/WebGLRenderer.js

@@ -2419,9 +2419,10 @@ function WebGLRenderer( parameters ) {
 	}
 
 	//
-
 	this.setFramebuffer = function ( value ) {
 
+		if (_framebuffer !== value ) _gl.bindFramebuffer( _gl.FRAMEBUFFER, value );
+
 		_framebuffer = value;
 
 	};

+ 12 - 60
src/renderers/webvr/WebXRManager.js

@@ -78,19 +78,6 @@ function WebXRManager( renderer ) {
 	this.setDevice = function ( value ) {
 
 		if ( value !== undefined ) device = value;
-		if ( value instanceof XRDevice ) {
-
-			if ( gl.setCompatibleXRDevice !== undefined ) {
-
-				gl.setCompatibleXRDevice( value );
-
-			} else {
-
-				gl.makeXRCompatible();
-
-			}
-
-		}
 
 	};
 
@@ -115,11 +102,6 @@ function WebXRManager( renderer ) {
 
 		frameOfReference = value;
 
-		if ( session.baseLayer && session.baseLayer.framebuffer ) {
-
-			renderer.setFramebuffer( session.baseLayer.framebuffer );
-
-		}
 		animation.setContext( session );
 		animation.start();
 
@@ -148,28 +130,9 @@ function WebXRManager( renderer ) {
 			session.addEventListener( 'selectend', onSessionEvent );
 			session.addEventListener( 'end', onSessionEnd );
 
-			if ( session.updateRenderState !== undefined ) {
-
-				session.updateRenderState( {  baseLayer:  new XRWebGLLayer( session, gl ) } );
-
-			} else {
-
-				session.baseLayer =  new XRWebGLLayer( session, gl, {  framebufferScaleFactor: framebufferScaleFactor } );
-
-			}
-
-			if ( session.requestFrameOfReference !== undefined ) {
-
-				session.requestFrameOfReference( frameOfReferenceType ).then( onRequestFrameOfReference );
-
-			} else {
+			session.updateRenderState( {  baseLayer:  new XRWebGLLayer( session, gl ) } );
 
-				session.requestReferenceSpace( {
-					type: 'stationary',
-					subtype: 'eye-level'
-				} ).then( onRequestFrameOfReference );
-
-			}
+			session.requestReferenceSpace( { type: 'stationary', subtype: 'eye-level' } ).then( onRequestFrameOfReference );
 
 			//
 
@@ -254,24 +217,22 @@ function WebXRManager( renderer ) {
 
 	function onAnimationFrame( time, frame ) {
 
-		pose = frame.getDevicePose !== undefined ? frame.getDevicePose( frameOfReference ) : frame.getViewerPose( frameOfReference );
-
-		if ( pose !== null ) {
+		let session = frame.session;
 
-			var layer = 'renderState' in session ? session.renderState.baseLayer : session.baseLayer;
-			var views = frame.views || pose.views;
+		pose = frame.getViewerPose( frameOfReference );
 
-			if ( 'renderState' in session ) {
+		if ( pose !== null ) {
 
-				renderer.setFramebuffer( session.renderState.baseLayer.framebuffer );
+			var layer = session.renderState.baseLayer;
+			var views = pose.views;
 
-			}
+			renderer.setFramebuffer( session.renderState.baseLayer.framebuffer );
 
 			for ( var i = 0; i < views.length; i ++ ) {
 
 				var view = views[ i ];
 				var viewport = layer.getViewport( view );
-				var viewMatrix = view.viewMatrix || pose.getViewMatrix( view );
+				var viewMatrix = view.transform.inverse().matrix;
 
 				var camera = cameraVR.cameras[ i ];
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
@@ -298,21 +259,12 @@ function WebXRManager( renderer ) {
 
 			if ( inputSource ) {
 
-				var inputPose = frame.getInputPose( inputSource, frameOfReference );
+				var inputPose = frame.getPose( inputSource.targetRaySpace, frameOfReference );
 
 				if ( inputPose !== null ) {
 
-					if ( 'targetRay' in inputPose ) {
-
-						controller.matrix.elements = inputPose.targetRay.transformMatrix;
-
-					} else if ( 'pointerMatrix' in inputPose ) {
-
-						// DEPRECATED
-
-						controller.matrix.elements = inputPose.pointerMatrix;
-
-					}
+					let targetRay = new XRRay(inputPose.transform);
+					controller.matrix.elements = targetRay.matrix;
 
 					controller.matrix.decompose( controller.position, controller.rotation, controller.scale );
 					controller.visible = true;