From acc8bd143b2908f6e92248479fb740111593bf44 Mon Sep 17 00:00:00 2001 From: Sergii Sopin Date: Thu, 19 Mar 2026 14:52:57 -0400 Subject: [PATCH] WebGLRenderer: Save/restore textureUnits on render state stack (#33217) --- src/renderers/WebGLRenderer.js | 3 +++ src/renderers/webgl/WebGLRenderStates.js | 3 ++- src/renderers/webgl/WebGLTextures.js | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index a3cb34e35704a2..34f879df657140 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -1652,6 +1652,7 @@ class WebGLRenderer { currentRenderState = renderStates.get( scene, renderStateStack.length ); currentRenderState.init( camera ); + currentRenderState.state.textureUnits = textures.getTextureUnits(); renderStateStack.push( currentRenderState ); _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); @@ -1797,6 +1798,8 @@ class WebGLRenderer { currentRenderState = renderStateStack[ renderStateStack.length - 1 ]; + textures.setTextureUnits( currentRenderState.state.textureUnits ); + if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera ); } else { diff --git a/src/renderers/webgl/WebGLRenderStates.js b/src/renderers/webgl/WebGLRenderStates.js index 5cc7363554e735..84e768098eb8a9 100644 --- a/src/renderers/webgl/WebGLRenderStates.js +++ b/src/renderers/webgl/WebGLRenderStates.js @@ -48,7 +48,8 @@ function WebGLRenderState( extensions ) { lights: lights, - transmissionRenderTarget: {} + transmissionRenderTarget: {}, + textureUnits: 0 }; return { diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index 85c2bcad042999..e243ce3fd53cd2 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -468,6 +468,18 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } + function getTextureUnits() { + + return textureUnits; + + } + + function setTextureUnits( value ) { + + textureUnits = value; + + } + function allocateTextureUnit() { const textureUnit = textureUnits; @@ -2386,6 +2398,8 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, this.allocateTextureUnit = allocateTextureUnit; this.resetTextureUnits = resetTextureUnits; + this.getTextureUnits = getTextureUnits; + this.setTextureUnits = setTextureUnits; this.setTexture2D = setTexture2D; this.setTexture2DArray = setTexture2DArray;