@@ -8,7 +8,11 @@ import { uniform } from '../core/UniformNode.js';
88import { Vector2 , RenderTarget } from 'three' ;
99import QuadMesh from '../../objects/QuadMesh.js' ;
1010
11- const quadMesh = new QuadMesh ( ) ;
11+ // WebGPU: The use of a single QuadMesh for both gaussian blur passes results in a single RenderObject with a SampledTexture binding that
12+ // alternates between source textures and triggers creation of new BindGroups and BindGroupLayouts every frame.
13+
14+ const quadMesh1 = new QuadMesh ( ) ;
15+ const quadMesh2 = new QuadMesh ( ) ;
1216
1317class GaussianBlurNode extends TempNode {
1418
@@ -54,7 +58,8 @@ class GaussianBlurNode extends TempNode {
5458 const currentRenderTarget = renderer . getRenderTarget ( ) ;
5559 const currentTexture = textureNode . value ;
5660
57- quadMesh . material = this . _material ;
61+ quadMesh1 . material = this . _material ;
62+ quadMesh2 . material = this . _material ;
5863
5964 this . setSize ( map . image . width , map . image . height ) ;
6065
@@ -64,7 +69,7 @@ class GaussianBlurNode extends TempNode {
6469
6570 this . _passDirection . value . set ( 1 , 0 ) ;
6671
67- quadMesh . render ( renderer ) ;
72+ quadMesh1 . render ( renderer ) ;
6873
6974 // vertical
7075
@@ -73,7 +78,7 @@ class GaussianBlurNode extends TempNode {
7378
7479 this . _passDirection . value . set ( 0 , 1 ) ;
7580
76- quadMesh . render ( renderer ) ;
81+ quadMesh2 . render ( renderer ) ;
7782
7883 // restore
7984
0 commit comments