From 707f95ae5d72bdd7b2bf707132c745b38c3049e9 Mon Sep 17 00:00:00 2001 From: Ed Preston Date: Tue, 28 Nov 2023 16:39:15 +1100 Subject: [PATCH] remove WEBGL_multisampled_render_to_texture Used for occulus quest and pico devices. https://github.com/KhronosGroup/WebGL/pull/3342 --- .../renderers/dist/renderers.esm-bundler.js | 10 +- packages/renderers/src/WebGLRenderer.js | 17 +-- packages/webgl/dist/webgl.esm-bundler.js | 121 +++++------------ packages/webgl/src/WebGLExtensions.js | 8 +- packages/webgl/src/WebGLTextures.js | 122 ++++-------------- .../webgl/tests/WebGLTextures.unit.test.js | 4 - 6 files changed, 62 insertions(+), 220 deletions(-) diff --git a/packages/renderers/dist/renderers.esm-bundler.js b/packages/renderers/dist/renderers.esm-bundler.js index 91cc95fe..5c6c384f 100644 --- a/packages/renderers/dist/renderers.esm-bundler.js +++ b/packages/renderers/dist/renderers.esm-bundler.js @@ -1132,14 +1132,6 @@ class WebGLRenderer { renderTargetProperties.__hasExternalTextures = true; if (renderTargetProperties.__hasExternalTextures) { renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === void 0; - if (!renderTargetProperties.__autoAllocateDepthBuffer) { - if (extensions.has("WEBGL_multisampled_render_to_texture") === true) { - console.warn( - "WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided" - ); - renderTargetProperties.__useRenderToTexture = false; - } - } } }; this.setRenderTargetFramebuffer = (renderTarget, defaultFramebuffer) => { @@ -1181,7 +1173,7 @@ class WebGLRenderer { framebuffer = __webglFramebuffer[activeCubeFace]; } isCube = true; - } else if (renderTarget.samples > 0 && textures.useMultisampledRTT(renderTarget) === false) { + } else if (renderTarget.samples > 0) { framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer; } else { if (Array.isArray(__webglFramebuffer)) { diff --git a/packages/renderers/src/WebGLRenderer.js b/packages/renderers/src/WebGLRenderer.js index 8405ab4d..e05394ff 100644 --- a/packages/renderers/src/WebGLRenderer.js +++ b/packages/renderers/src/WebGLRenderer.js @@ -5,7 +5,6 @@ import { Vector4, Color, Vector2, - floorPowerOfTwo, ColorManagement } from '@renderlayer/math'; import { @@ -1775,17 +1774,6 @@ class WebGLRenderer { if (renderTargetProperties.__hasExternalTextures) { renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined; - - if (!renderTargetProperties.__autoAllocateDepthBuffer) { - // The multisample_render_to_texture extension doesn't work properly if there - // are mid-frame flushes and an external depth buffer. Disable use of the extension. - if (extensions.has('WEBGL_multisampled_render_to_texture') === true) { - console.warn( - 'WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' - ); - renderTargetProperties.__useRenderToTexture = false; - } - } } }; @@ -1843,10 +1831,7 @@ class WebGLRenderer { } isCube = true; - } else if ( - renderTarget.samples > 0 && - textures.useMultisampledRTT(renderTarget) === false - ) { + } else if (renderTarget.samples > 0) { framebuffer = properties.get(renderTarget).__webglMultisampledFramebuffer; } else { if (Array.isArray(__webglFramebuffer)) { diff --git a/packages/webgl/dist/webgl.esm-bundler.js b/packages/webgl/dist/webgl.esm-bundler.js index 2f124ab7..69cb1b8d 100644 --- a/packages/webgl/dist/webgl.esm-bundler.js +++ b/packages/webgl/dist/webgl.esm-bundler.js @@ -949,7 +949,6 @@ function WebGLExtensions(gl) { getExtension("EXT_color_buffer_float"); getExtension("OES_texture_float_linear"); getExtension("EXT_color_buffer_half_float"); - getExtension("WEBGL_multisampled_render_to_texture"); }, get(name) { const extension = getExtension(name); @@ -4999,7 +4998,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, const maxCubemapSize = capabilities.maxCubemapSize; const maxTextureSize = capabilities.maxTextureSize; const maxSamples = capabilities.maxSamples; - const multisampledRTTExt = extensions.has("WEBGL_multisampled_render_to_texture") ? extensions.get("WEBGL_multisampled_render_to_texture") : null; + extensions.has("WEBGL_multisampled_render_to_texture") ? extensions.get("WEBGL_multisampled_render_to_texture") : null; const supportsInvalidateFramebuffer = typeof navigator === "undefined" ? false : /OculusBrowser/g.test(navigator.userAgent); const _videoTextures = /* @__PURE__ */ new WeakMap(); let _canvas; @@ -6141,16 +6140,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } } state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT( - _gl.FRAMEBUFFER, - attachment, - textureTarget, - properties.get(texture).__webglTexture, - 0, - getRenderTargetSamples(renderTarget) - ); - } else if (textureTarget === _gl.TEXTURE_2D || textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z) { + if (textureTarget === _gl.TEXTURE_2D || textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z) { _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, @@ -6165,7 +6155,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, _gl.bindRenderbuffer(_gl.RENDERBUFFER, renderbuffer); if (renderTarget.depthBuffer && !renderTarget.stencilBuffer) { let glInternalFormat = _gl.DEPTH_COMPONENT32F; - if (isMultisample || useMultisampledRTT(renderTarget)) { + if (isMultisample) { const depthTexture = renderTarget.depthTexture; if (depthTexture && depthTexture.isDepthTexture) { if (depthTexture.type === FloatType) { @@ -6175,23 +6165,13 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } } const samples = getRenderTargetSamples(renderTarget); - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( - _gl.RENDERBUFFER, - samples, - glInternalFormat, - renderTarget.width, - renderTarget.height - ); - } else { - _gl.renderbufferStorageMultisample( - _gl.RENDERBUFFER, - samples, - glInternalFormat, - renderTarget.width, - renderTarget.height - ); - } + _gl.renderbufferStorageMultisample( + _gl.RENDERBUFFER, + samples, + glInternalFormat, + renderTarget.width, + renderTarget.height + ); } else { _gl.renderbufferStorage( _gl.RENDERBUFFER, @@ -6208,7 +6188,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, ); } else if (renderTarget.depthBuffer && renderTarget.stencilBuffer) { const samples = getRenderTargetSamples(renderTarget); - if (isMultisample && useMultisampledRTT(renderTarget) === false) { + if (isMultisample) { _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, @@ -6216,14 +6196,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, renderTarget.width, renderTarget.height ); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( - _gl.RENDERBUFFER, - samples, - _gl.DEPTH24_STENCIL8, - renderTarget.width, - renderTarget.height - ); } else { _gl.renderbufferStorage( _gl.RENDERBUFFER, @@ -6250,7 +6222,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, texture.colorSpace ); const samples = getRenderTargetSamples(renderTarget); - if (isMultisample && useMultisampledRTT(renderTarget) === false) { + if (isMultisample) { _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, @@ -6258,14 +6230,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, renderTarget.width, renderTarget.height ); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( - _gl.RENDERBUFFER, - samples, - glInternalFormat, - renderTarget.width, - renderTarget.height - ); } else { _gl.renderbufferStorage( _gl.RENDERBUFFER, @@ -6293,45 +6257,23 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } setTexture2D(renderTarget.depthTexture, 0); const webglDepthTexture = properties.get(renderTarget.depthTexture).__webglTexture; - const samples = getRenderTargetSamples(renderTarget); + getRenderTargetSamples(renderTarget); if (renderTarget.depthTexture.format === DepthFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT( - _gl.FRAMEBUFFER, - _gl.DEPTH_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0, - samples - ); - } else { - _gl.framebufferTexture2D( - _gl.FRAMEBUFFER, - _gl.DEPTH_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0 - ); - } + _gl.framebufferTexture2D( + _gl.FRAMEBUFFER, + _gl.DEPTH_ATTACHMENT, + _gl.TEXTURE_2D, + webglDepthTexture, + 0 + ); } else if (renderTarget.depthTexture.format === DepthStencilFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT( - _gl.FRAMEBUFFER, - _gl.DEPTH_STENCIL_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0, - samples - ); - } else { - _gl.framebufferTexture2D( - _gl.FRAMEBUFFER, - _gl.DEPTH_STENCIL_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0 - ); - } + _gl.framebufferTexture2D( + _gl.FRAMEBUFFER, + _gl.DEPTH_STENCIL_ATTACHMENT, + _gl.TEXTURE_2D, + webglDepthTexture, + 0 + ); } else { throw new Error("Unknown depthTexture format"); } @@ -6431,7 +6373,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, ); } } - if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { + if (renderTarget.samples > 0) { const textures = isMultipleRenderTargets ? texture : [texture]; renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); renderTargetProperties.__webglColorRenderbuffer = []; @@ -6584,7 +6526,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } } function updateMultisampleRenderTarget(renderTarget) { - if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { + if (renderTarget.samples > 0) { const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [renderTarget.texture]; const width = renderTarget.width; const height = renderTarget.height; @@ -6693,10 +6635,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, function getRenderTargetSamples(renderTarget) { return Math.min(maxSamples, renderTarget.samples); } - function useMultisampledRTT(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - return renderTarget.samples > 0 && extensions.has("WEBGL_multisampled_render_to_texture") === true && renderTargetProperties.__useRenderToTexture !== false; - } function updateVideoTexture(texture) { const frame = info.render.frame; if (_videoTextures.get(texture) !== frame) { @@ -6735,7 +6673,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; this.setupDepthRenderbuffer = setupDepthRenderbuffer; this.setupFrameBufferTexture = setupFrameBufferTexture; - this.useMultisampledRTT = useMultisampledRTT; } function WebGLUniformsGroups(gl, info, capabilities, state) { diff --git a/packages/webgl/src/WebGLExtensions.js b/packages/webgl/src/WebGLExtensions.js index a8306322..2b52c254 100644 --- a/packages/webgl/src/WebGLExtensions.js +++ b/packages/webgl/src/WebGLExtensions.js @@ -31,10 +31,10 @@ function WebGLExtensions(gl) { init(capabilities) { // EP: some extensions need to be initialised by a query to function - getExtension('EXT_color_buffer_float'); - getExtension('OES_texture_float_linear'); - getExtension('EXT_color_buffer_half_float'); - getExtension('WEBGL_multisampled_render_to_texture'); + // Browser support percentages sourced from https://web3dsurvey.com/webgl2 + getExtension('EXT_color_buffer_float'); // 99.8% + getExtension('OES_texture_float_linear'); // 86.31% + getExtension('EXT_color_buffer_half_float'); // 92.2% }, get(name) { diff --git a/packages/webgl/src/WebGLTextures.js b/packages/webgl/src/WebGLTextures.js index d7519a88..3970397c 100644 --- a/packages/webgl/src/WebGLTextures.js +++ b/packages/webgl/src/WebGLTextures.js @@ -1501,16 +1501,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, state.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer); - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT( - _gl.FRAMEBUFFER, - attachment, - textureTarget, - properties.get(texture).__webglTexture, - 0, - getRenderTargetSamples(renderTarget) - ); - } else if ( + if ( textureTarget === _gl.TEXTURE_2D || (textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z) @@ -1536,7 +1527,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, if (renderTarget.depthBuffer && !renderTarget.stencilBuffer) { let glInternalFormat = _gl.DEPTH_COMPONENT32F; - if (isMultisample || useMultisampledRTT(renderTarget)) { + if (isMultisample) { const depthTexture = renderTarget.depthTexture; if (depthTexture && depthTexture.isDepthTexture) { @@ -1549,23 +1540,13 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, const samples = getRenderTargetSamples(renderTarget); - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( - _gl.RENDERBUFFER, - samples, - glInternalFormat, - renderTarget.width, - renderTarget.height - ); - } else { - _gl.renderbufferStorageMultisample( - _gl.RENDERBUFFER, - samples, - glInternalFormat, - renderTarget.width, - renderTarget.height - ); - } + _gl.renderbufferStorageMultisample( + _gl.RENDERBUFFER, + samples, + glInternalFormat, + renderTarget.width, + renderTarget.height + ); } else { _gl.renderbufferStorage( _gl.RENDERBUFFER, @@ -1584,7 +1565,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } else if (renderTarget.depthBuffer && renderTarget.stencilBuffer) { const samples = getRenderTargetSamples(renderTarget); - if (isMultisample && useMultisampledRTT(renderTarget) === false) { + if (isMultisample) { _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, @@ -1592,14 +1573,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, renderTarget.width, renderTarget.height ); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( - _gl.RENDERBUFFER, - samples, - _gl.DEPTH24_STENCIL8, - renderTarget.width, - renderTarget.height - ); } else { _gl.renderbufferStorage( _gl.RENDERBUFFER, @@ -1632,7 +1605,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, ); const samples = getRenderTargetSamples(renderTarget); - if (isMultisample && useMultisampledRTT(renderTarget) === false) { + if (isMultisample) { _gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, @@ -1640,14 +1613,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, renderTarget.width, renderTarget.height ); - } else if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.renderbufferStorageMultisampleEXT( - _gl.RENDERBUFFER, - samples, - glInternalFormat, - renderTarget.width, - renderTarget.height - ); } else { _gl.renderbufferStorage( _gl.RENDERBUFFER, @@ -1690,43 +1655,21 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, const samples = getRenderTargetSamples(renderTarget); if (renderTarget.depthTexture.format === DepthFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT( - _gl.FRAMEBUFFER, - _gl.DEPTH_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0, - samples - ); - } else { - _gl.framebufferTexture2D( - _gl.FRAMEBUFFER, - _gl.DEPTH_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0 - ); - } + _gl.framebufferTexture2D( + _gl.FRAMEBUFFER, + _gl.DEPTH_ATTACHMENT, + _gl.TEXTURE_2D, + webglDepthTexture, + 0 + ); } else if (renderTarget.depthTexture.format === DepthStencilFormat) { - if (useMultisampledRTT(renderTarget)) { - multisampledRTTExt.framebufferTexture2DMultisampleEXT( - _gl.FRAMEBUFFER, - _gl.DEPTH_STENCIL_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0, - samples - ); - } else { - _gl.framebufferTexture2D( - _gl.FRAMEBUFFER, - _gl.DEPTH_STENCIL_ATTACHMENT, - _gl.TEXTURE_2D, - webglDepthTexture, - 0 - ); - } + _gl.framebufferTexture2D( + _gl.FRAMEBUFFER, + _gl.DEPTH_STENCIL_ATTACHMENT, + _gl.TEXTURE_2D, + webglDepthTexture, + 0 + ); } else { throw new Error('Unknown depthTexture format'); } @@ -1854,7 +1797,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } } - if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { + if (renderTarget.samples > 0) { const textures = isMultipleRenderTargets ? texture : [texture]; renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); @@ -2043,7 +1986,7 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, } function updateMultisampleRenderTarget(renderTarget) { - if (renderTarget.samples > 0 && useMultisampledRTT(renderTarget) === false) { + if (renderTarget.samples > 0) { const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [renderTarget.texture]; const width = renderTarget.width; @@ -2176,16 +2119,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, return Math.min(maxSamples, renderTarget.samples); } - function useMultisampledRTT(renderTarget) { - const renderTargetProperties = properties.get(renderTarget); - - return ( - renderTarget.samples > 0 && - extensions.has('WEBGL_multisampled_render_to_texture') === true && - renderTargetProperties.__useRenderToTexture !== false - ); - } - function updateVideoTexture(texture) { const frame = info.render.frame; @@ -2243,7 +2176,6 @@ function WebGLTextures(_gl, extensions, state, properties, capabilities, utils, this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; this.setupDepthRenderbuffer = setupDepthRenderbuffer; this.setupFrameBufferTexture = setupFrameBufferTexture; - this.useMultisampledRTT = useMultisampledRTT; } export { WebGLTextures }; diff --git a/packages/webgl/tests/WebGLTextures.unit.test.js b/packages/webgl/tests/WebGLTextures.unit.test.js index f7ea0c7e..7812f014 100644 --- a/packages/webgl/tests/WebGLTextures.unit.test.js +++ b/packages/webgl/tests/WebGLTextures.unit.test.js @@ -59,9 +59,5 @@ describe('WebGL', () => { test.todo('setupFrameBufferTexture', () => { // implement }); - - test.todo('useMultisampledRTT', () => { - // implement - }); }); });