Browse Source

WebGLRenderer: Added setFramebuffer(). Fixes shadows in WebXR.

Mr.doob 7 years ago
parent
commit
49cf7a66f6
2 changed files with 17 additions and 6 deletions
  1. 12 2
      src/renderers/WebGLRenderer.js
  2. 5 4
      src/renderers/webvr/WebXRManager.js

+ 12 - 2
src/renderers/WebGLRenderer.js

@@ -123,6 +123,8 @@ function WebGLRenderer( parameters ) {
 
 
 		// internal state cache
 		// internal state cache
 
 
+		_framebuffer = null,
+
 		_currentRenderTarget = null,
 		_currentRenderTarget = null,
 		_currentFramebuffer = null,
 		_currentFramebuffer = null,
 		_currentMaterialId = - 1,
 		_currentMaterialId = - 1,
@@ -290,7 +292,7 @@ function WebGLRenderer( parameters ) {
 
 
 	// vr
 	// vr
 
 
-	var vr = ( 'xr' in navigator ) ? new WebXRManager( _gl ) : new WebVRManager( _this );
+	var vr = ( 'xr' in navigator ) ? new WebXRManager( _this ) : new WebVRManager( _this );
 
 
 	this.vr = vr;
 	this.vr = vr;
 
 
@@ -2396,6 +2398,14 @@ function WebGLRenderer( parameters ) {
 
 
 	}() );
 	}() );
 
 
+	//
+
+	this.setFramebuffer = function ( value ) {
+
+		_framebuffer = value;
+
+	};
+
 	this.getRenderTarget = function () {
 	this.getRenderTarget = function () {
 
 
 		return _currentRenderTarget;
 		return _currentRenderTarget;
@@ -2412,7 +2422,7 @@ function WebGLRenderer( parameters ) {
 
 
 		}
 		}
 
 
-		var framebuffer = null;
+		var framebuffer = _framebuffer;
 		var isCube = false;
 		var isCube = false;
 
 
 		if ( renderTarget ) {
 		if ( renderTarget ) {

+ 5 - 4
src/renderers/webvr/WebXRManager.js

@@ -10,10 +10,11 @@ import { ArrayCamera } from '../../cameras/ArrayCamera.js';
 import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
 import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js';
 import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
 import { WebGLAnimation } from '../webgl/WebGLAnimation.js';
 
 
-function WebXRManager( gl ) {
+function WebXRManager( renderer ) {
 
 
 	var scope = this;
 	var scope = this;
 
 
+	var gl = renderer.context;
 	var device = null;
 	var device = null;
 	var session = null;
 	var session = null;
 
 
@@ -70,7 +71,7 @@ function WebXRManager( gl ) {
 
 
 			session.addEventListener( 'end', function () {
 			session.addEventListener( 'end', function () {
 
 
-				gl.bindFramebuffer( gl.FRAMEBUFFER, null );
+				renderer.setFramebuffer( null );
 				animation.stop();
 				animation.stop();
 
 
 			} );
 			} );
@@ -81,6 +82,8 @@ function WebXRManager( gl ) {
 				frameOfRef = value;
 				frameOfRef = value;
 				isExclusive = session.exclusive;
 				isExclusive = session.exclusive;
 
 
+				renderer.setFramebuffer( session.baseLayer.framebuffer );
+
 				animation.setContext( session );
 				animation.setContext( session );
 				animation.start();
 				animation.start();
 
 
@@ -135,8 +138,6 @@ function WebXRManager( gl ) {
 
 
 		}
 		}
 
 
-		gl.bindFramebuffer( gl.FRAMEBUFFER, session.baseLayer.framebuffer );
-
 		if ( onAnimationFrameCallback ) onAnimationFrameCallback();
 		if ( onAnimationFrameCallback ) onAnimationFrameCallback();
 
 
 	}
 	}