diff --git a/compute/texture/water_plane/water_plane.gd b/compute/texture/water_plane/water_plane.gd index 9bcb925f..c55e7e3e 100644 --- a/compute/texture/water_plane/water_plane.gd +++ b/compute/texture/water_plane/water_plane.gd @@ -143,13 +143,13 @@ var pipeline: RID var texture_rds: Array[RID] = [RID(), RID(), RID()] var texture_sets: Array[RID] = [RID(), RID(), RID()] -func _create_uniform_set(texture_rd: RID) -> RID: +func _create_uniform_set(texture_rd: RID, uniform_set: int) -> RID: var uniform := RDUniform.new() uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE uniform.binding = 0 uniform.add_id(texture_rd) # Even though we're using 3 sets, they are identical, so we're kinda cheating. - return rd.uniform_set_create([uniform], shader, 0) + return rd.uniform_set_create([uniform], shader, uniform_set) func _initialize_compute_code(init_with_texture_size: Vector2i) -> void: @@ -173,11 +173,9 @@ func _initialize_compute_code(init_with_texture_size: Vector2i) -> void: tf.array_layers = 1 tf.mipmaps = 1 tf.usage_bits = ( - RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT | - RenderingDevice.TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | - RenderingDevice.TEXTURE_USAGE_STORAGE_BIT | - RenderingDevice.TEXTURE_USAGE_CAN_UPDATE_BIT | - RenderingDevice.TEXTURE_USAGE_CAN_COPY_TO_BIT + RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT | + RenderingDevice.TEXTURE_USAGE_STORAGE_BIT | + RenderingDevice.TEXTURE_USAGE_CAN_COPY_TO_BIT ) for i in 3: @@ -187,9 +185,6 @@ func _initialize_compute_code(init_with_texture_size: Vector2i) -> void: # Make sure our textures are cleared. rd.texture_clear(texture_rds[i], Color(0, 0, 0, 0), 0, 1, 0, 1) - # Now create our uniform set so we can use these textures in our shader. - texture_sets[i] = _create_uniform_set(texture_rds[i]) - func _render_process(with_next_texture: int, wave_point: Vector4, tex_size: Vector2i, p_damp: float) -> void: # We don't have structures (yet) so we need to build our push constant @@ -215,9 +210,15 @@ func _render_process(with_next_texture: int, wave_point: Vector4, tex_size: Vect @warning_ignore("integer_division") var y_groups := (tex_size.y - 1) / 8 + 1 - var next_set := texture_sets[with_next_texture] - var current_set := texture_sets[(with_next_texture - 1) % 3] - var previous_set := texture_sets[(with_next_texture - 2) % 3] + # Figure out which texture to assign to which set. + var current_texture_rd := texture_rds[(with_next_texture - 1) % 3] + var previous_texture_rd := texture_rds[(with_next_texture - 2) % 3] + var next_texture_rd := texture_rds[with_next_texture] + + # Create our uniform sets so we can use these textures in our shader. + var current_set := _create_uniform_set(current_texture_rd, 0) + var previous_set := _create_uniform_set(previous_texture_rd, 1) + var next_set := _create_uniform_set(next_texture_rd, 2) # Run our compute shader. var compute_list := rd.compute_list_begin()