From f8c2570d6d7086e484d73ea8695b3ef790a0413c Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Tue, 2 Dec 2025 17:40:13 +0000 Subject: [PATCH 1/2] WebGLRenderer: Simplify setupRenderBufferStorage multisampling logic. --- src/renderers/webgl/WebGLTextures.js | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index 8194e20243d584..8a3f9a7f6bba35 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -1575,7 +1575,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } // Setup storage for internal depth/stencil buffers and bind to correct framebuffer - function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { + function setupRenderBufferStorage( renderbuffer, renderTarget, samples ) { _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); @@ -1588,13 +1588,11 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, const glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT; // set up the attachment - const samples = getRenderTargetSamples( renderTarget ); - const isUseMultisampledRTT = useMultisampledRTT( renderTarget ); - if ( isUseMultisampledRTT ) { + if ( useMultisampledRTT( renderTarget ) ) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height ); - } else if ( isMultisample ) { + } else if ( samples > 0 ) { _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); @@ -1617,15 +1615,14 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, const glFormat = utils.convert( texture.format, texture.colorSpace ); const glType = utils.convert( texture.type ); const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace ); - const samples = getRenderTargetSamples( renderTarget ); - if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) { + if ( useMultisampledRTT( renderTarget ) ) { - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height ); - } else if ( useMultisampledRTT( renderTarget ) ) { + } else if ( samples > 0 ) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); } else { @@ -1831,7 +1828,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( renderTargetProperties.__webglDepthbuffer[ i ] === undefined ) { renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, 0 ); } else { @@ -1862,7 +1859,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( renderTargetProperties.__webglDepthbuffer === undefined ) { renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, 0 ); } else { @@ -2020,7 +2017,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( renderTarget.depthBuffer ) { renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); + setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, getRenderTargetSamples( renderTarget ) ); } From 807e25db9d0b2f6c567f6f3e578f74498e63b2c9 Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Tue, 2 Dec 2025 17:49:41 +0000 Subject: [PATCH 2/2] Clean up. --- src/renderers/webgl/WebGLTextures.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index 8a3f9a7f6bba35..49aa5ee6be3ae5 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -1575,7 +1575,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } // Setup storage for internal depth/stencil buffers and bind to correct framebuffer - function setupRenderBufferStorage( renderbuffer, renderTarget, samples ) { + function setupRenderBufferStorage( renderbuffer, renderTarget, useMultisample ) { _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); @@ -1592,9 +1592,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height ); - } else if ( samples > 0 ) { + } else if ( useMultisample ) { - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height ); } else { @@ -1620,9 +1620,9 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height ); - } else if ( samples > 0 ) { + } else if ( useMultisample ) { - _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height ); + _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, getRenderTargetSamples( renderTarget ), glInternalFormat, renderTarget.width, renderTarget.height ); } else { @@ -1828,7 +1828,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( renderTargetProperties.__webglDepthbuffer[ i ] === undefined ) { renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, 0 ); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); } else { @@ -1859,7 +1859,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( renderTargetProperties.__webglDepthbuffer === undefined ) { renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, 0 ); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); } else { @@ -2017,7 +2017,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, if ( renderTarget.depthBuffer ) { renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); - setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, getRenderTargetSamples( renderTarget ) ); + setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); }