From 8f64329c79501bbea8a86d280fbdc20bbbebfa63 Mon Sep 17 00:00:00 2001 From: Falk David Date: Thu, 27 Jun 2024 20:39:30 +0200 Subject: [PATCH] Refactor: Use newer attribute API in `create_liquid_geometry` The `create_liquid_geometry` still used the older attributes API to write the velocities. This replaces the use of `BKE_attribute_new` with the newer attribute API. No functional changes expected. Pull Request: https://projects.blender.org/blender/blender/pulls/123854 --- source/blender/blenkernel/intern/fluid.cc | 25 +++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/source/blender/blenkernel/intern/fluid.cc b/source/blender/blenkernel/intern/fluid.cc index 7631fbb576a..f1ad15bce89 100644 --- a/source/blender/blenkernel/intern/fluid.cc +++ b/source/blender/blenkernel/intern/fluid.cc @@ -3291,14 +3291,13 @@ static Mesh *create_liquid_geometry(FluidDomainSettings *fds, /* Velocities. */ /* If needed, vertex velocities will be read too. */ bool use_speedvectors = fds->flags & FLUID_DOMAIN_USE_SPEED_VECTORS; - float(*velarray)[3] = nullptr; + bke::MutableAttributeAccessor attributes = mesh->attributes_for_write(); + SpanAttributeWriter velocities; float time_mult = fds->dx / (DT_DEFAULT * (25.0f / FPS)); if (use_speedvectors) { - AttributeOwner owner = AttributeOwner::from_id(&mesh->id); - CustomDataLayer *velocity_layer = BKE_attribute_new( - owner, "velocity", CD_PROP_FLOAT3, AttrDomain::Point, nullptr); - velarray = static_cast(velocity_layer->data); + velocities = attributes.lookup_or_add_for_write_only_span("velocity", + AttrDomain::Point); } /* Loop for vertices and normals. */ @@ -3334,23 +3333,22 @@ static Mesh *create_liquid_geometry(FluidDomainSettings *fds, # endif if (use_speedvectors) { - velarray[i][0] = manta_liquid_get_vertvel_x_at(fds->fluid, i) * time_mult; - velarray[i][1] = manta_liquid_get_vertvel_y_at(fds->fluid, i) * time_mult; - velarray[i][2] = manta_liquid_get_vertvel_z_at(fds->fluid, i) * time_mult; + velocities.span[i].x = manta_liquid_get_vertvel_x_at(fds->fluid, i) * time_mult; + velocities.span[i].y = manta_liquid_get_vertvel_y_at(fds->fluid, i) * time_mult; + velocities.span[i].z = manta_liquid_get_vertvel_z_at(fds->fluid, i) * time_mult; # ifdef DEBUG_PRINT /* Debugging: Print velocities of vertices. */ - printf("velarray[%d][0]: %f, velarray[%d][1]: %f, velarray[%d][2]: %f\n", + printf("velocities[%d].x: %f, velocities[%d].y: %f, velocities[%d].z: %f\n", i, - velarray[i][0], + velocities.span[i].x, i, - velarray[i][1], + velocities.span[i].y, i, - velarray[i][2]); + velocities.span[i].z); # endif } } - bke::MutableAttributeAccessor attributes = mesh->attributes_for_write(); bke::SpanAttributeWriter material_indices = attributes.lookup_or_add_for_write_span( "material_index", AttrDomain::Face); @@ -3373,6 +3371,7 @@ static Mesh *create_liquid_geometry(FluidDomainSettings *fds, # endif } + velocities.finish(); material_indices.finish(); mesh_calc_edges(*mesh, false, false);