From f17b7e696324849b54208a70bcaf4b53fba9349c Mon Sep 17 00:00:00 2001 From: vizerb <44100946+vizerb@users.noreply.github.com> Date: Tue, 5 May 2026 23:48:25 +0200 Subject: [PATCH] WebGLRenderer: Fix stale scratch framebuffers after context restore (#33533) Co-authored-by: Michael Herzog --- src/renderers/WebGLRenderer.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index ab28669f542ae7..3a743390c0271a 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -295,6 +295,10 @@ class WebGLRenderer { let _isContextLost = false; let _nodesHandler = null; + let _scratchFramebuffer = null; + let _srcFramebuffer = null; + let _dstFramebuffer = null; + // internal state cache this._outputColorSpace = SRGBColorSpace; @@ -438,6 +442,10 @@ class WebGLRenderer { } + _scratchFramebuffer = _gl.createFramebuffer(); + _srcFramebuffer = _gl.createFramebuffer(); + _dstFramebuffer = _gl.createFramebuffer(); + info = new WebGLInfo( _gl ); properties = new WebGLProperties(); textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); @@ -2870,8 +2878,6 @@ class WebGLRenderer { }; - const _scratchFrameBuffer = _gl.createFramebuffer(); - /** * Sets the active rendertarget. * @@ -3004,7 +3010,7 @@ class WebGLRenderer { // being bound that are different sizes. if ( activeMipmapLevel !== 0 ) { - framebuffer = _scratchFrameBuffer; + framebuffer = _scratchFramebuffer; } @@ -3247,8 +3253,6 @@ class WebGLRenderer { }; - const _srcFramebuffer = _gl.createFramebuffer(); - const _dstFramebuffer = _gl.createFramebuffer(); /** * Copies data of the given source texture into a destination texture.