From ceeebefeeeb4db1f9f74aa032e0c7841f478de16 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Tue, 17 Mar 2026 09:57:20 +0100 Subject: [PATCH] WebGPURenderer: Ensure render targets have consistent default depth values. (#33191) --- src/renderers/common/Renderer.js | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/renderers/common/Renderer.js b/src/renderers/common/Renderer.js index 1520dacce7cd3f..898ef9d0961146 100644 --- a/src/renderers/common/Renderer.js +++ b/src/renderers/common/Renderer.js @@ -1465,6 +1465,28 @@ class Renderer { } + // make sure a new render target has correct default depth values + + if ( renderTarget !== null && renderTarget.depthBuffer === true ) { + + const renderTargetData = this._textures.get( renderTarget ); + + if ( renderTargetData.depthInitialized !== true ) { + + // we need a single manual clear if auto clear depth is disabled + + if ( this.autoClear === false || ( this.autoClear === true && this.autoClearDepth === false ) ) { + + this.clearDepth(); + + } + + renderTargetData.depthInitialized = true; + + } + + } + // const renderContext = this._renderContexts.get( renderTarget, this._mrt, this._callDepth ); @@ -2198,7 +2220,7 @@ class Renderer { const renderTargetData = this._textures.get( renderTarget ); - renderContext = this._renderContexts.get( renderTarget ); + renderContext = this._renderContexts.get( renderTarget, null, - 1 ); // using - 1 for the call depth to get a render context for the clear operation renderContext.textures = renderTargetData.textures; renderContext.depthTexture = renderTargetData.depthTexture; renderContext.width = renderTargetData.width; @@ -2217,6 +2239,8 @@ class Renderer { renderContext.activeCubeFace = this.getActiveCubeFace(); renderContext.activeMipmapLevel = this.getActiveMipmapLevel(); + if ( renderTarget.depthBuffer === true ) renderTargetData.depthInitialized = true; + } this.backend.clear( color, depth, stencil, renderContext ); @@ -2480,7 +2504,7 @@ class Renderer { /** * Sets the output render target for the renderer. * - * @param {Object} renderTarget - The render target to set as the output target. + * @param {?RenderTarget} renderTarget - The render target to set as the output target. */ setOutputRenderTarget( renderTarget ) {