@@ -141,15 +141,15 @@ var pipeline: RID
141
141
# - One that contains the last frame rendered
142
142
# - One for the frame before that
143
143
var texture_rds : Array [RID ] = [RID (), RID (), RID ()]
144
- var texture_sets : Array [RID ] = [RID (), RID (), RID ()]
144
+ var texture_sets : Array [RID ] = [RID (), RID (), RID (), RID (), RID (), RID () ]
145
145
146
- func _create_uniform_set (texture_rd : RID ) -> RID :
146
+ func _create_uniform_set (texture_rd : RID , writable : bool ) -> RID :
147
147
var uniform := RDUniform .new ()
148
148
uniform .uniform_type = RenderingDevice .UNIFORM_TYPE_IMAGE
149
149
uniform .binding = 0
150
150
uniform .add_id (texture_rd )
151
- # Even though we're using 3 sets, they are identical, so we're kinda cheating.
152
- return rd .uniform_set_create ([uniform ], shader , 0 )
151
+ # Even though we're using 3 sets, set 0 and set 1 are identical, set 2 is writable , so we're kinda cheating.
152
+ return rd .uniform_set_create ([uniform ], shader , 2 if writable else 0 )
153
153
154
154
155
155
func _initialize_compute_code (init_with_texture_size : Vector2i ) -> void :
@@ -188,7 +188,9 @@ func _initialize_compute_code(init_with_texture_size: Vector2i) -> void:
188
188
rd .texture_clear (texture_rds [i ], Color (0 , 0 , 0 , 0 ), 0 , 1 , 0 , 1 )
189
189
190
190
# Now create our uniform set so we can use these textures in our shader.
191
- texture_sets [i ] = _create_uniform_set (texture_rds [i ])
191
+ texture_sets [i ] = _create_uniform_set (texture_rds [i ], false )
192
+ # Create writable uniform set.
193
+ texture_sets [i + 3 ] = _create_uniform_set (texture_rds [i ], true )
192
194
193
195
194
196
func _render_process (with_next_texture : int , wave_point : Vector4 , tex_size : Vector2i , p_damp : float ) -> void :
@@ -215,9 +217,9 @@ func _render_process(with_next_texture: int, wave_point: Vector4, tex_size: Vect
215
217
@warning_ignore ("integer_division" )
216
218
var y_groups := (tex_size .y - 1 ) / 8 + 1
217
219
218
- var next_set := texture_sets [with_next_texture ]
219
- var current_set := texture_sets [(with_next_texture - 1 ) % 3 ]
220
- var previous_set := texture_sets [( with_next_texture - 2 ) % 3 ]
220
+ var next_set := texture_sets [( with_next_texture + 2 ) % 3 + 3 ] # Writable.
221
+ var current_set := texture_sets [(with_next_texture + 1 ) % 3 ]
222
+ var previous_set := texture_sets [with_next_texture ]
221
223
222
224
# Run our compute shader.
223
225
var compute_list := rd .compute_list_begin ()
0 commit comments