diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js index 51252b35786636..c08d24c0438d1d 100644 --- a/src/renderers/common/Renderer.js +++ b/src/renderers/common/Renderer.js @@ -1511,7 +1511,9 @@ class Renderer { _renderOutputLayers( quad, renderTarget ) { - if ( renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) { + const useMultiview = this.backend.isWebGLBackend === true && renderTarget.multiview === true; + + if ( useMultiview || renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) { this._renderScene( quad, quad.camera, false ); return; diff --git a/src/renderers/common/XRManager.js b/src/renderers/common/XRManager.js index 977446ccab717f..b8b00e862324ca 100644 --- a/src/renderers/common/XRManager.js +++ b/src/renderers/common/XRManager.js @@ -958,8 +958,6 @@ class XRManager extends EventDispatcher { storeMultisampledStencilBuffer: false } ); - renderTarget._autoAllocateDepthBuffer = true; - const material = new MeshBasicMaterial( { color: 0xffffff, side: FrontSide } ); material.map = renderTarget.texture; material.map.offset.y = 1; @@ -1051,8 +1049,6 @@ class XRManager extends EventDispatcher { storeMultisampledStencilBuffer: false } ); - renderTarget._autoAllocateDepthBuffer = true; - const material = new MeshBasicMaterial( { color: 0xffffff, side: BackSide } ); material.map = renderTarget.texture; material.map.offset.y = 1; diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index 5bcdf79f587b4c..67d730548b2e74 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -2886,7 +2886,8 @@ class WebGLBackend extends Backend { } - } else if ( renderTarget.storeMultisampledDepthBuffer === false && renderTargetContextData.framebuffers ) { + } else if ( this._supportsInvalidateFramebuffer === true && renderTargetContextData.framebuffers && + ( renderTarget._autoAllocateDepthBuffer === true || ( renderTarget.samples > 0 && renderTarget.storeMultisampledDepthBuffer === false ) ) ) { const fb = renderTargetContextData.framebuffers[ renderContext.getCacheKey() ]; state.bindFramebuffer( gl.DRAW_FRAMEBUFFER, fb );