diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js index 0d5cbb778b757c..e2ee9095e9ba63 100644 --- a/src/renderers/common/Renderer.js +++ b/src/renderers/common/Renderer.js @@ -1260,6 +1260,7 @@ class Renderer { frameBufferTarget.scissorTest = this._scissorTest; frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false; frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true; + frameBufferTarget.autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.autoAllocateDepthBuffer : false; return frameBufferTarget; diff --git a/src/renderers/common/XRManager.js b/src/renderers/common/XRManager.js index 696744780c9dce..217851c5936b7b 100644 --- a/src/renderers/common/XRManager.js +++ b/src/renderers/common/XRManager.js @@ -1021,7 +1021,7 @@ class XRManager extends EventDispatcher { session.updateRenderState( { baseLayer: glBaseLayer } ); renderer.setPixelRatio( 1 ); - renderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false ); + renderer._setXRLayerSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight ); this._xrRenderTarget = new XRRenderTarget( glBaseLayer.framebufferWidth, diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index c6f6c41233912d..58c65fdac39634 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -595,7 +595,7 @@ class WebGLBackend extends Backend { } - } else if ( resolveDepthBuffer === false ) { + } else if ( resolveDepthBuffer === false && renderTargetContextData.framebuffers ) { const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ]; state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb ); @@ -2075,7 +2075,7 @@ class WebGLBackend extends Backend { } else { - if ( hasExternalTextures && useMultisampledRTT ) { + if ( useMultisampledRTT ) { multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples ); @@ -2093,13 +2093,19 @@ class WebGLBackend extends Backend { } - if ( renderTarget.isXRRenderTarget && renderTarget.autoAllocateDepthBuffer === true ) { + const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT; + + if ( renderTarget.autoAllocateDepthBuffer === true ) { const renderbuffer = gl.createRenderbuffer(); this.textureUtils.setupRenderBufferStorage( renderbuffer, descriptor, 0, useMultisampledRTT ); renderTargetContextData.xrDepthRenderbuffer = renderbuffer; depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT ); + gl.bindRenderbuffer( gl.RENDERBUFFER, renderbuffer ); + gl.framebufferRenderbuffer( gl.FRAMEBUFFER, depthStyle, gl.RENDERBUFFER, renderbuffer ); + + } else { if ( descriptor.depthTexture !== null ) { @@ -2107,7 +2113,6 @@ class WebGLBackend extends Backend { depthInvalidationArray.push( stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT ); const textureData = this.get( descriptor.depthTexture ); - const depthStyle = stencilBuffer ? gl.DEPTH_STENCIL_ATTACHMENT : gl.DEPTH_ATTACHMENT; textureData.renderTarget = descriptor.renderTarget; textureData.cacheKey = cacheKey; // required for copyTextureToTexture() @@ -2166,7 +2171,7 @@ class WebGLBackend extends Backend { // rebind external XR textures - if ( ( isXRRenderTarget && hasExternalTextures ) || renderTarget.multiview ) { + if ( isXRRenderTarget || useMultisampledRTT || renderTarget.multiview ) { state.bindFramebuffer( gl.FRAMEBUFFER, fb );