From 49cf7a66f65c85cafb7690a344148e4adb6f062e Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Thu, 24 May 2018 12:29:56 -0400 Subject: [PATCH] WebGLRenderer: Added setFramebuffer(). Fixes shadows in WebXR. --- src/renderers/WebGLRenderer.js | 14 ++++++++++++-- src/renderers/webvr/WebXRManager.js | 9 +++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 2de215108d..891c8e43b5 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -123,6 +123,8 @@ function WebGLRenderer( parameters ) { // internal state cache + _framebuffer = null, + _currentRenderTarget = null, _currentFramebuffer = null, _currentMaterialId = - 1, @@ -290,7 +292,7 @@ function WebGLRenderer( parameters ) { // 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; @@ -2396,6 +2398,14 @@ function WebGLRenderer( parameters ) { }() ); + // + + this.setFramebuffer = function ( value ) { + + _framebuffer = value; + + }; + this.getRenderTarget = function () { return _currentRenderTarget; @@ -2412,7 +2422,7 @@ function WebGLRenderer( parameters ) { } - var framebuffer = null; + var framebuffer = _framebuffer; var isCube = false; if ( renderTarget ) { diff --git a/src/renderers/webvr/WebXRManager.js b/src/renderers/webvr/WebXRManager.js index 208fbe32f9..77ddc78a67 100644 --- a/src/renderers/webvr/WebXRManager.js +++ b/src/renderers/webvr/WebXRManager.js @@ -10,10 +10,11 @@ import { ArrayCamera } from '../../cameras/ArrayCamera.js'; import { PerspectiveCamera } from '../../cameras/PerspectiveCamera.js'; import { WebGLAnimation } from '../webgl/WebGLAnimation.js'; -function WebXRManager( gl ) { +function WebXRManager( renderer ) { var scope = this; + var gl = renderer.context; var device = null; var session = null; @@ -70,7 +71,7 @@ function WebXRManager( gl ) { session.addEventListener( 'end', function () { - gl.bindFramebuffer( gl.FRAMEBUFFER, null ); + renderer.setFramebuffer( null ); animation.stop(); } ); @@ -81,6 +82,8 @@ function WebXRManager( gl ) { frameOfRef = value; isExclusive = session.exclusive; + renderer.setFramebuffer( session.baseLayer.framebuffer ); + animation.setContext( session ); animation.start(); @@ -135,8 +138,6 @@ function WebXRManager( gl ) { } - gl.bindFramebuffer( gl.FRAMEBUFFER, session.baseLayer.framebuffer ); - if ( onAnimationFrameCallback ) onAnimationFrameCallback(); } -- GitLab