Browse Source

Accomodate additional WebXR changes

Diego Marcos 6 years ago
parent
commit
b4734f2dad
3 changed files with 51 additions and 11 deletions
  1. 29 7
      examples/js/vr/WebVR.js
  2. 2 1
      src/renderers/WebGLRenderer.js
  3. 20 3
      src/renderers/webvr/WebXRManager.js

+ 29 - 7
examples/js/vr/WebVR.js

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

+ 2 - 1
src/renderers/WebGLRenderer.js

@@ -189,7 +189,8 @@ function WebGLRenderer( parameters ) {
 			antialias: _antialias,
 			premultipliedAlpha: _premultipliedAlpha,
 			preserveDrawingBuffer: _preserveDrawingBuffer,
-			powerPreference: _powerPreference
+			powerPreference: _powerPreference,
+			xrCompatible: true
 		};
 
 		// event listeners must be registered before WebGL context is created, see #12753

+ 20 - 3
src/renderers/webvr/WebXRManager.js

@@ -115,8 +115,11 @@ function WebXRManager( renderer ) {
 
 		frameOfReference = value;
 
-		renderer.setFramebuffer( session.baseLayer.framebuffer );
+		if ( session.baseLayer && session.baseLayer.framebuffer ) {
 
+			renderer.setFramebuffer( session.baseLayer.framebuffer );
+
+		}
 		animation.setContext( session );
 		animation.start();
 
@@ -145,7 +148,15 @@ function WebXRManager( renderer ) {
 			session.addEventListener( 'selectend', onSessionEvent );
 			session.addEventListener( 'end', onSessionEnd );
 
-			session.baseLayer = new XRWebGLLayer( session, gl, { framebufferScaleFactor: framebufferScaleFactor } );
+			if ( session.updateRenderState !== undefined ) {
+
+				session.updateRenderState( {  baseLayer:  new XRWebGLLayer( session, gl ) } );
+
+			} else {
+
+				session.baseLayer =  new XRWebGLLayer( session, gl, {  framebufferScaleFactor: framebufferScaleFactor } );
+
+			}
 
 			if ( session.requestFrameOfReference !== undefined ) {
 
@@ -247,9 +258,15 @@ function WebXRManager( renderer ) {
 
 		if ( pose !== null ) {
 
-			var layer = session.baseLayer;
+			var layer = 'renderState' in session ? session.renderState.baseLayer : session.baseLayer;
 			var views = frame.views || pose.views;
 
+			if ( 'renderState' in session ) {
+
+				renderer.setFramebuffer( session.renderState.baseLayer.framebuffer );
+
+			}
+
 			for ( var i = 0; i < views.length; i ++ ) {
 
 				var view = views[ i ];