From 31c56edf2173c366ca2e588b354c751f90a27ca4 Mon Sep 17 00:00:00 2001 From: Michael Herzog Date: Thu, 30 Apr 2026 16:16:38 +0200 Subject: [PATCH 1/2] WebGPURenderer: Restore framebuffer after clear. (#33512) --- src/renderers/webgl-fallback/WebGLBackend.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index 1ef89923d982d8..707c12022bf3f4 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -832,6 +832,14 @@ class WebGLBackend extends Backend { if ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor ); + // Restore the framebuffer of the active render pass when clearing an unrelated + // render target, so subsequent draws in the pass don't bind to the cleared target. + if ( setFrameBuffer && this._currentContext !== null && this._currentContext !== descriptor ) { + + this._setFramebuffer( this._currentContext ); + + } + } } From f614aaa24812a1d8c7f9ed6d8aecd364abaf4a56 Mon Sep 17 00:00:00 2001 From: Shota Matsuda Date: Thu, 30 Apr 2026 23:34:03 +0900 Subject: [PATCH 2/2] CSMShadowNode: Fix inconsistency in frustum split (#33510) --- examples/jsm/csm/CSMFrustum.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/jsm/csm/CSMFrustum.js b/examples/jsm/csm/CSMFrustum.js index f34d26ff577428..a4b6f7507589b2 100644 --- a/examples/jsm/csm/CSMFrustum.js +++ b/examples/jsm/csm/CSMFrustum.js @@ -145,6 +145,9 @@ class CSMFrustum { target.length = breaks.length; + const near = this.vertices.near[ 0 ].z; + const far = this.vertices.far[ 0 ].z; + for ( let i = 0; i < breaks.length; i ++ ) { const cascade = target[ i ]; @@ -159,9 +162,11 @@ class CSMFrustum { } else { + const alpha = ( breaks[ i - 1 ] * far - near ) / ( far - near ); + for ( let j = 0; j < 4; j ++ ) { - cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i - 1 ] ); + cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], alpha ); } @@ -177,9 +182,11 @@ class CSMFrustum { } else { + const alpha = ( breaks[ i ] * far - near ) / ( far - near ); + for ( let j = 0; j < 4; j ++ ) { - cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i ] ); + cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], alpha ); }