@@ -8,7 +8,11 @@ import { uniform } from '../core/UniformNode.js';
8
8
import { Vector2 , RenderTarget } from 'three' ;
9
9
import QuadMesh from '../../objects/QuadMesh.js' ;
10
10
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 ( ) ;
12
16
13
17
class GaussianBlurNode extends TempNode {
14
18
@@ -54,7 +58,8 @@ class GaussianBlurNode extends TempNode {
54
58
const currentRenderTarget = renderer . getRenderTarget ( ) ;
55
59
const currentTexture = textureNode . value ;
56
60
57
- quadMesh . material = this . _material ;
61
+ quadMesh1 . material = this . _material ;
62
+ quadMesh2 . material = this . _material ;
58
63
59
64
this . setSize ( map . image . width , map . image . height ) ;
60
65
@@ -64,7 +69,7 @@ class GaussianBlurNode extends TempNode {
64
69
65
70
this . _passDirection . value . set ( 1 , 0 ) ;
66
71
67
- quadMesh . render ( renderer ) ;
72
+ quadMesh1 . render ( renderer ) ;
68
73
69
74
// vertical
70
75
@@ -73,7 +78,7 @@ class GaussianBlurNode extends TempNode {
73
78
74
79
this . _passDirection . value . set ( 0 , 1 ) ;
75
80
76
- quadMesh . render ( renderer ) ;
81
+ quadMesh2 . render ( renderer ) ;
77
82
78
83
// restore
79
84
0 commit comments