Browse Source

Accomodate Chrome m73 WebXR API changes. Function renaming.

Diego Marcos 6 years ago
parent
commit
eca1b949f6
1 changed files with 36 additions and 10 deletions
  1. 36 10
      src/renderers/webvr/WebXRManager.js

+ 36 - 10
src/renderers/webvr/WebXRManager.js

@@ -78,7 +78,19 @@ function WebXRManager( renderer ) {
 	this.setDevice = function ( value ) {
 	this.setDevice = function ( value ) {
 
 
 		if ( value !== undefined ) device = value;
 		if ( value !== undefined ) device = value;
-		if ( value instanceof XRDevice ) gl.setCompatibleXRDevice( value );
+		if ( value instanceof XRDevice ) {
+
+			if ( gl.setCompatibleXRDevice !== undefined ) {
+
+				gl.setCompatibleXRDevice( value );
+
+			} else {
+
+				gl.makeXRCompatible();
+
+			}
+
+		}
 
 
 	};
 	};
 
 
@@ -99,6 +111,17 @@ function WebXRManager( renderer ) {
 
 
 	}
 	}
 
 
+	function onRequestFrameOfReference( value ) {
+
+		frameOfReference = value;
+
+		renderer.setFramebuffer( session.baseLayer.framebuffer );
+
+		animation.setContext( session );
+		animation.start();
+
+	}
+
 	this.setFramebufferScaleFactor = function ( value ) {
 	this.setFramebufferScaleFactor = function ( value ) {
 
 
 		framebufferScaleFactor = value;
 		framebufferScaleFactor = value;
@@ -123,16 +146,19 @@ function WebXRManager( renderer ) {
 			session.addEventListener( 'end', onSessionEnd );
 			session.addEventListener( 'end', onSessionEnd );
 
 
 			session.baseLayer = new XRWebGLLayer( session, gl, { framebufferScaleFactor: framebufferScaleFactor } );
 			session.baseLayer = new XRWebGLLayer( session, gl, { framebufferScaleFactor: framebufferScaleFactor } );
-			session.requestFrameOfReference( frameOfReferenceType ).then( function ( value ) {
 
 
-				frameOfReference = value;
+			if ( session.requestFrameOfReference !== undefined ) {
 
 
-				renderer.setFramebuffer( session.baseLayer.framebuffer );
+				session.requestFrameOfReference( frameOfReferenceType ).then( onRequestFrameOfReference );
 
 
-				animation.setContext( session );
-				animation.start();
+			} else {
 
 
-			} );
+				session.requestReferenceSpace( {
+					type: 'stationary',
+					subtype: 'eye-level'
+				} ).then( onRequestFrameOfReference );
+
+			}
 
 
 			//
 			//
 
 
@@ -217,18 +243,18 @@ function WebXRManager( renderer ) {
 
 
 	function onAnimationFrame( time, frame ) {
 	function onAnimationFrame( time, frame ) {
 
 
-		pose = frame.getDevicePose( frameOfReference );
+		pose = frame.getDevicePose !== undefined ? frame.getDevicePose( frameOfReference ) : frame.getViewerPose( frameOfReference );
 
 
 		if ( pose !== null ) {
 		if ( pose !== null ) {
 
 
 			var layer = session.baseLayer;
 			var layer = session.baseLayer;
-			var views = frame.views;
+			var views = frame.views || pose.views;
 
 
 			for ( var i = 0; i < views.length; i ++ ) {
 			for ( var i = 0; i < views.length; i ++ ) {
 
 
 				var view = views[ i ];
 				var view = views[ i ];
 				var viewport = layer.getViewport( view );
 				var viewport = layer.getViewport( view );
-				var viewMatrix = pose.getViewMatrix( view );
+				var viewMatrix = view.viewMatrix || pose.getViewMatrix( view );
 
 
 				var camera = cameraVR.cameras[ i ];
 				var camera = cameraVR.cameras[ i ];
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );
 				camera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );