Skip to content

Commit 843eb32

Browse files
committed
Fix water plane writable uniform set
1 parent 2fc0497 commit 843eb32

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

compute/texture/water_plane/water_plane.gd

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,15 @@ var pipeline: RID
141141
# - One that contains the last frame rendered
142142
# - One for the frame before that
143143
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()]
145145

146-
func _create_uniform_set(texture_rd: RID) -> RID:
146+
func _create_uniform_set(texture_rd: RID, writable: bool) -> RID:
147147
var uniform := RDUniform.new()
148148
uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE
149149
uniform.binding = 0
150150
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)
153153

154154

155155
func _initialize_compute_code(init_with_texture_size: Vector2i) -> void:
@@ -188,7 +188,9 @@ func _initialize_compute_code(init_with_texture_size: Vector2i) -> void:
188188
rd.texture_clear(texture_rds[i], Color(0, 0, 0, 0), 0, 1, 0, 1)
189189

190190
# 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)
192194

193195

194196
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
215217
@warning_ignore("integer_division")
216218
var y_groups := (tex_size.y - 1) / 8 + 1
217219

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]
221223

222224
# Run our compute shader.
223225
var compute_list := rd.compute_list_begin()

0 commit comments

Comments
 (0)