From 54affa9f1ab123d09432d2e8f14a986c205b01a5 Mon Sep 17 00:00:00 2001 From: Yannis Gravezas Date: Tue, 17 Dec 2024 22:42:28 +0000 Subject: [PATCH 1/2] enable mrt on array texture and texture3d render targets --- examples/files.json | 1 + .../webgl_rendertarget_texture3D_mrt.jpg | Bin 0 -> 24903 bytes examples/tags.json | 1 + .../webgl_rendertarget_texture3D_mrt.html | 302 ++++++++++++++++++ src/renderers/WebGL3DRenderTarget.js | 2 + src/renderers/WebGLArrayRenderTarget.js | 2 + src/renderers/WebGLRenderer.js | 10 +- src/renderers/webgl/WebGLTextures.js | 7 +- 8 files changed, 320 insertions(+), 5 deletions(-) create mode 100644 examples/screenshots/webgl_rendertarget_texture3D_mrt.jpg create mode 100644 examples/webgl_rendertarget_texture3D_mrt.html diff --git a/examples/files.json b/examples/files.json index 4690f643307c29..a977d6bd95bcc4 100644 --- a/examples/files.json +++ b/examples/files.json @@ -276,6 +276,7 @@ "webgl_multiple_rendertargets", "webgl_multisampled_renderbuffers", "webgl_rendertarget_texture2darray", + "webgl_rendertarget_texture3D_mrt", "webgl_shadowmap_csm", "webgl_shadowmap_pcss", "webgl_shadowmap_progressive", diff --git a/examples/screenshots/webgl_rendertarget_texture3D_mrt.jpg b/examples/screenshots/webgl_rendertarget_texture3D_mrt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de40e3514ab8581d489845260238b6a8042d487a GIT binary patch literal 24903 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 literal 0 HcmV?d00001 diff --git a/examples/tags.json b/examples/tags.json index b103ba8298fd06..d440012482a693 100644 --- a/examples/tags.json +++ b/examples/tags.json @@ -103,6 +103,7 @@ "webgl_materials_modified": [ "onBeforeCompile" ], "webgl_raycaster_bvh": [ "external", "query", "bounds", "tree", "accelerate", "performance", "community", "extension", "plugin", "library", "three-mesh-bvh" ], "webgl_renderer_pathtracer": [ "external", "raytracing", "pathtracing", "library", "plugin", "extension", "community", "three-gpu-pathtracer", "three-mesh-bvh" ], + "webgl_rendertarget_texture3D_mrt": [ "mrt", "renderTarget"], "webgpu_compute_particles_snow": [ "external", "webgpu", "stats-gl" ], "webgl_shadowmap_csm": [ "cascade" ], "webgl_shadowmap_pcss": [ "soft" ], diff --git a/examples/webgl_rendertarget_texture3D_mrt.html b/examples/webgl_rendertarget_texture3D_mrt.html new file mode 100644 index 00000000000000..c1866e837a9ffe --- /dev/null +++ b/examples/webgl_rendertarget_texture3D_mrt.html @@ -0,0 +1,302 @@ + + + + three.js webgl - 3D texture framebuffer attachment with MRT + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderers/WebGL3DRenderTarget.js b/src/renderers/WebGL3DRenderTarget.js index be074da600eed1..998360e71b2e7b 100644 --- a/src/renderers/WebGL3DRenderTarget.js +++ b/src/renderers/WebGL3DRenderTarget.js @@ -13,6 +13,8 @@ class WebGL3DRenderTarget extends WebGLRenderTarget { this.texture = new Data3DTexture( null, width, height, depth ); + this.textures = this.textures.map( () => this.texture ); + this.texture.isRenderTargetTexture = true; } diff --git a/src/renderers/WebGLArrayRenderTarget.js b/src/renderers/WebGLArrayRenderTarget.js index 769f9e5e0e79c8..56c929beba2644 100644 --- a/src/renderers/WebGLArrayRenderTarget.js +++ b/src/renderers/WebGLArrayRenderTarget.js @@ -13,6 +13,8 @@ class WebGLArrayRenderTarget extends WebGLRenderTarget { this.texture = new DataArrayTexture( null, width, height, depth ); + this.textures = this.textures.map( () => this.texture ); + this.texture.isRenderTargetTexture = true; } diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 05fdd5e9a249ad..fc5fc9067ca117 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -2394,9 +2394,15 @@ class WebGLRenderer { } else if ( isRenderTarget3D ) { - const textureProperties = properties.get( renderTarget.texture ); const layer = activeCubeFace || 0; - _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer ); + + const textureProperties = properties.get( renderTarget.texture ); + + for ( let i = 0; i < renderTarget.textures.length; i ++ ) { + + _gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel || 0, layer + i ); + + } } diff --git a/src/renderers/webgl/WebGLTextures.js b/src/renderers/webgl/WebGLTextures.js index b9050ccbc3b78d..1355631aa918c9 100644 --- a/src/renderers/webgl/WebGLTextures.js +++ b/src/renderers/webgl/WebGLTextures.js @@ -1717,9 +1717,10 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, const textures = renderTarget.textures; const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); + const is3DRenderTarget = ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ); const isMultipleRenderTargets = ( textures.length > 1 ); - if ( ! isMultipleRenderTargets ) { + if ( ! isMultipleRenderTargets || is3DRenderTarget ) { if ( textureProperties.__webglTexture === undefined ) { @@ -1776,7 +1777,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, } - if ( isMultipleRenderTargets ) { + if ( isMultipleRenderTargets && ! is3DRenderTarget ) { for ( let i = 0, il = textures.length; i < il; i ++ ) { @@ -1866,7 +1867,7 @@ function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, state.unbindTexture(); - } else if ( isMultipleRenderTargets ) { + } else if ( isMultipleRenderTargets && ! is3DRenderTarget ) { for ( let i = 0, il = textures.length; i < il; i ++ ) { From 945d2306dbc67ff08d4d8312377c12cf20b84982 Mon Sep 17 00:00:00 2001 From: Yannis Gravezas Date: Sun, 5 Jan 2025 18:32:31 +0000 Subject: [PATCH 2/2] update example --- .../webgl_rendertarget_texture3D_mrt.html | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/examples/webgl_rendertarget_texture3D_mrt.html b/examples/webgl_rendertarget_texture3D_mrt.html index c1866e837a9ffe..34000baf7ee98e 100644 --- a/examples/webgl_rendertarget_texture3D_mrt.html +++ b/examples/webgl_rendertarget_texture3D_mrt.html @@ -157,7 +157,7 @@ const postProcessScene = new THREE.Scene(); const postProcessCamera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); - const renderTarget = new THREE.WebGL3DRenderTarget( DIMENSIONS.width, DIMENSIONS.height, 4, { count: 4 } ); + const renderTarget = new THREE.WebGL3DRenderTarget( DIMENSIONS.width, DIMENSIONS.height, 4 ); renderTarget.texture.format = THREE.RedFormat; const postProcessMaterial = new THREE.RawShaderMaterial( { @@ -281,7 +281,27 @@ function renderTo3DTexture() { renderer.setRenderTarget( renderTarget ); + + const gl = renderer.getContext(); + const drawBuffersArray = [ gl.COLOR_ATTACHMENT0 ]; + const glTexture = renderer.properties.get( renderTarget.texture ).__webglTexture; + + for ( let i = 1; i < 4; i ++ ) { + + gl.framebufferTextureLayer( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0 + i, glTexture, 0, i ); + + drawBuffersArray.push( gl.COLOR_ATTACHMENT0 + i ); + + } + + // set draw buffers state for MRT + gl.drawBuffers( drawBuffersArray ); + renderer.render( postProcessScene, postProcessCamera ); + + // restore draw buffers state + gl.drawBuffers( [ gl.COLOR_ATTACHMENT0 ] ); + renderer.setRenderTarget( null ); }
+ + three.js + + - 3D texture framebuffer MRT color attachments +
+ + Scanned head data by + Divine Augustine
+ licensed under + CPOL +