diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js index 388407d9cee9e0..53047b524f785e 100644 --- a/src/renderers/common/Renderer.js +++ b/src/renderers/common/Renderer.js @@ -1419,7 +1419,11 @@ class Renderer { } + const currentXREnabled = this.xr.enabled; + + this.xr.enabled = false; this._renderScene( quad, quad.camera, false ); + this.xr.enabled = currentXREnabled; } @@ -2017,7 +2021,7 @@ class Renderer { */ get currentToneMapping() { - return this._renderTarget !== null ? NoToneMapping : this.toneMapping; + return ( this._renderTarget !== null && this._renderTarget.isXRRenderTarget !== true ) ? NoToneMapping : this.toneMapping; } @@ -2029,7 +2033,7 @@ class Renderer { */ get currentColorSpace() { - return this._renderTarget !== null ? LinearSRGBColorSpace : this.outputColorSpace; + return ( this._renderTarget !== null && this._renderTarget.isXRRenderTarget !== true ) ? LinearSRGBColorSpace : this.outputColorSpace; } diff --git a/src/renderers/common/XRManager.js b/src/renderers/common/XRManager.js index 40b8462334a97f..c6395b53f7c2f1 100644 --- a/src/renderers/common/XRManager.js +++ b/src/renderers/common/XRManager.js @@ -545,6 +545,11 @@ class XRManager extends EventDispatcher { } + foveateBoundTexture( ) { + + if ( this._glBinding && this._glBinding.foveateBoundTexture ) this._glBinding.foveateBoundTexture( this._renderer.getContext().TEXTURE_2D, this.getFoveation() ); + + } /** * After a XR session has been requested usually with one of the `*Button` modules, it * is injected into the renderer with this method. This method triggers the start of diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index fb98912824d2fd..7044bb33049711 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -1963,6 +1963,9 @@ class WebGLBackend extends Backend { if ( useMultisampledRTT ) { + state.bindTexture( gl.TEXTURE_2D, textureData.textureGPU ); + this.renderer.xr.foveateBoundTexture(); + multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples ); } else { @@ -2034,7 +2037,7 @@ class WebGLBackend extends Backend { const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT; - if ( renderTarget.autoAllocateDepthBuffer === true ) { + if ( ( renderTarget.autoAllocateDepthBuffer === true ) && !useMultisampledRTT ) { const renderbuffer = renderTargetContextData.xrDepthRenderbuffer; gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer );