Cleanup: Use reference argument for BKE_mesh_copy_for_eval

This commit is contained in:
Hans Goudey
2024-05-20 13:18:24 -04:00
parent 5025c57679
commit c4fc19f064
22 changed files with 50 additions and 51 deletions
+2 -3
View File
@@ -125,10 +125,9 @@ Mesh *BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src,
CustomData_MeshMasks mask);
/**
* Performs copy for use during evaluation,
* optional referencing original arrays to reduce memory.
* Performs copy for use during evaluation.
*/
Mesh *BKE_mesh_copy_for_eval(const Mesh *source);
Mesh *BKE_mesh_copy_for_eval(const Mesh &source);
/**
* These functions construct a new Mesh,
+1 -1
View File
@@ -1162,7 +1162,7 @@ static void cloth_update_verts(Object *ob, ClothModifierData *clmd, Mesh *mesh)
static Mesh *cloth_make_rest_mesh(ClothModifierData *clmd, Mesh *mesh)
{
using namespace blender;
Mesh *new_mesh = BKE_mesh_copy_for_eval(mesh);
Mesh *new_mesh = BKE_mesh_copy_for_eval(*mesh);
ClothVertex *verts = clmd->clothObject->verts;
MutableSpan<float3> positions = mesh->vert_positions_for_write();
@@ -372,7 +372,7 @@ int BKE_sculpt_get_first_deform_matrices(Depsgraph *depsgraph,
if (deformmats.is_empty()) {
/* NOTE: Evaluated object is re-set to its original un-deformed state. */
Mesh *mesh = static_cast<Mesh *>(object_eval.data);
mesh_eval = BKE_mesh_copy_for_eval(mesh);
mesh_eval = BKE_mesh_copy_for_eval(*mesh);
deformcos = mesh->vert_positions();
deformmats.reinitialize(mesh->verts_num);
deformmats.fill(blender::float3x3::identity());
@@ -456,7 +456,7 @@ void BKE_crazyspace_build_sculpt(Depsgraph *depsgraph,
}
if (mesh_eval == nullptr) {
mesh_eval = BKE_mesh_copy_for_eval(mesh);
mesh_eval = BKE_mesh_copy_for_eval(*mesh);
}
mti->deform_verts(md, &mectx, mesh_eval, deformedVerts);
@@ -1916,7 +1916,7 @@ static void dynamic_paint_apply_surface_wave_cb(void *__restrict userdata,
*/
static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object *ob, Mesh *mesh)
{
Mesh *result = BKE_mesh_copy_for_eval(mesh);
Mesh *result = BKE_mesh_copy_for_eval(*mesh);
if (pmd->canvas && !(pmd->canvas->flags & MOD_DPAINT_BAKING) &&
pmd->type == MOD_DYNAMICPAINT_TYPE_CANVAS)
@@ -2069,7 +2069,7 @@ static Mesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData *pmd, Object *
if (runtime_data->brush_mesh != nullptr) {
BKE_id_free(nullptr, runtime_data->brush_mesh);
}
runtime_data->brush_mesh = BKE_mesh_copy_for_eval(result);
runtime_data->brush_mesh = BKE_mesh_copy_for_eval(*result);
}
return result;
@@ -2090,7 +2090,7 @@ static void canvas_copyMesh(DynamicPaintCanvasSettings *canvas, Mesh *mesh)
BKE_id_free(nullptr, runtime->canvas_mesh);
}
runtime->canvas_mesh = BKE_mesh_copy_for_eval(mesh);
runtime->canvas_mesh = BKE_mesh_copy_for_eval(*mesh);
}
/*
@@ -3827,7 +3827,7 @@ static void dynamicPaint_brushMeshCalculateVelocity(Depsgraph *depsgraph,
SUBFRAME_RECURSION,
BKE_scene_ctime_get(scene),
eModifierType_DynamicPaint);
mesh_p = BKE_mesh_copy_for_eval(dynamicPaint_brush_mesh_get(brush));
mesh_p = BKE_mesh_copy_for_eval(*dynamicPaint_brush_mesh_get(brush));
numOfVerts_p = mesh_p->verts_num;
float(*positions_p)[3] = reinterpret_cast<float(*)[3]>(
@@ -4319,7 +4319,7 @@ static bool dynamicPaint_paintMesh(Depsgraph *depsgraph,
Bounds3D mesh_bb = {{0}};
DynamicPaintVolumeGrid *grid = bData->grid;
mesh = BKE_mesh_copy_for_eval(brush_mesh);
mesh = BKE_mesh_copy_for_eval(*brush_mesh);
blender::MutableSpan<blender::float3> positions = mesh->vert_positions_for_write();
const blender::Span<blender::float3> vert_normals = mesh->vert_normals();
const blender::Span<int> corner_verts = mesh->corner_verts();
+6 -6
View File
@@ -1015,7 +1015,7 @@ static void obstacles_from_mesh(Object *coll_ob,
float *vert_vel = nullptr;
bool has_velocity = false;
Mesh *mesh = BKE_mesh_copy_for_eval(fes->mesh);
Mesh *mesh = BKE_mesh_copy_for_eval(*fes->mesh);
blender::MutableSpan<blender::float3> positions = mesh->vert_positions_for_write();
int min[3], max[3], res[3];
@@ -2080,7 +2080,7 @@ static void emit_from_mesh(
/* Copy mesh for thread safety as we modify it.
* Main issue is its VertArray being modified, then replaced and freed. */
Mesh *mesh = BKE_mesh_copy_for_eval(ffs->mesh);
Mesh *mesh = BKE_mesh_copy_for_eval(*ffs->mesh);
blender::MutableSpan<blender::float3> positions = mesh->vert_positions_for_write();
const blender::Span<int> corner_verts = mesh->corner_verts();
@@ -3396,7 +3396,7 @@ static Mesh *create_smoke_geometry(FluidDomainSettings *fds, Mesh *orgmesh, Obje
/* Just copy existing mesh if there is no content or if the adaptive domain is not being used. */
if (fds->total_cells <= 1 || (fds->flags & FLUID_DOMAIN_USE_ADAPTIVE_DOMAIN) == 0) {
return BKE_mesh_copy_for_eval(orgmesh);
return BKE_mesh_copy_for_eval(*orgmesh);
}
result = BKE_mesh_new_nomain(num_verts, 0, num_faces, num_faces * 4);
@@ -3622,7 +3622,7 @@ static void fluid_modifier_processFlow(FluidModifierData *fmd,
if (fmd->flow->mesh) {
BKE_id_free(nullptr, fmd->flow->mesh);
}
fmd->flow->mesh = BKE_mesh_copy_for_eval(mesh);
fmd->flow->mesh = BKE_mesh_copy_for_eval(*mesh);
}
if (scene_framenr > fmd->time) {
@@ -3649,7 +3649,7 @@ static void fluid_modifier_processEffector(FluidModifierData *fmd,
if (fmd->effector->mesh) {
BKE_id_free(nullptr, fmd->effector->mesh);
}
fmd->effector->mesh = BKE_mesh_copy_for_eval(mesh);
fmd->effector->mesh = BKE_mesh_copy_for_eval(*mesh);
}
if (scene_framenr > fmd->time) {
@@ -4161,7 +4161,7 @@ Mesh *BKE_fluid_modifier_do(
}
if (!result) {
result = BKE_mesh_copy_for_eval(mesh);
result = BKE_mesh_copy_for_eval(*mesh);
}
else {
BKE_mesh_copy_parameters_for_eval(result, mesh);
@@ -42,7 +42,7 @@ GeometryComponentPtr MeshComponent::copy() const
{
MeshComponent *new_component = new MeshComponent();
if (mesh_ != nullptr) {
new_component->mesh_ = BKE_mesh_copy_for_eval(mesh_);
new_component->mesh_ = BKE_mesh_copy_for_eval(*mesh_);
new_component->ownership_ = GeometryOwnershipType::Owned;
}
return GeometryComponentPtr(new_component);
@@ -89,7 +89,7 @@ Mesh *MeshComponent::get_for_write()
{
BLI_assert(this->is_mutable());
if (ownership_ == GeometryOwnershipType::ReadOnly) {
mesh_ = BKE_mesh_copy_for_eval(mesh_);
mesh_ = BKE_mesh_copy_for_eval(*mesh_);
ownership_ = GeometryOwnershipType::Owned;
}
return mesh_;
@@ -110,7 +110,7 @@ void MeshComponent::ensure_owns_direct_data()
BLI_assert(this->is_mutable());
if (ownership_ != GeometryOwnershipType::Owned) {
if (mesh_) {
mesh_ = BKE_mesh_copy_for_eval(mesh_);
mesh_ = BKE_mesh_copy_for_eval(*mesh_);
}
ownership_ = GeometryOwnershipType::Owned;
}
+2 -2
View File
@@ -842,10 +842,10 @@ Mesh *BKE_mesh_new_nomain_from_template(const Mesh *me_src,
me_src, verts_num, edges_num, 0, faces_num, corners_num, CD_MASK_EVERYTHING);
}
Mesh *BKE_mesh_copy_for_eval(const Mesh *source)
Mesh *BKE_mesh_copy_for_eval(const Mesh &source)
{
return reinterpret_cast<Mesh *>(
BKE_id_copy_ex(nullptr, &source->id, nullptr, LIB_ID_COPY_LOCALIZE));
BKE_id_copy_ex(nullptr, &source.id, nullptr, LIB_ID_COPY_LOCALIZE));
}
BMesh *BKE_mesh_to_bmesh_ex(const Mesh *mesh,
@@ -706,7 +706,7 @@ static const Curves *get_evaluated_curves_from_object(const Object *object)
static Mesh *mesh_new_from_evaluated_curve_type_object(const Object *evaluated_object)
{
if (const Mesh *mesh = BKE_object_get_evaluated_mesh(evaluated_object)) {
return BKE_mesh_copy_for_eval(mesh);
return BKE_mesh_copy_for_eval(*mesh);
}
if (const Curves *curves = get_evaluated_curves_from_object(evaluated_object)) {
const blender::bke::AnonymousAttributePropagationInfo propagation_info;
@@ -765,7 +765,7 @@ static Mesh *mesh_new_from_mball_object(Object *object)
return (Mesh *)BKE_id_new_nomain(ID_ME, ((ID *)object->data)->name + 2);
}
return BKE_mesh_copy_for_eval(mesh_eval);
return BKE_mesh_copy_for_eval(*mesh_eval);
}
static Mesh *mesh_new_from_mesh(Object *object, const Mesh *mesh)
@@ -158,7 +158,7 @@ static Mesh *create_orco_mesh(const Object &ob,
BKE_mesh_ensure_default_orig_index_customdata(orco_mesh);
}
else {
orco_mesh = BKE_mesh_copy_for_eval(&mesh);
orco_mesh = BKE_mesh_copy_for_eval(mesh);
}
Array<float3> storage;
@@ -372,7 +372,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
if (ob.modifier_flag & OB_MODIFIER_FLAG_ADD_REST_POSITION) {
if (mesh_final == nullptr) {
mesh_final = BKE_mesh_copy_for_eval(&mesh_input);
mesh_final = BKE_mesh_copy_for_eval(mesh_input);
ASSERT_IS_VALID_MESH(mesh_final);
}
set_rest_position(*mesh_final);
@@ -390,7 +390,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
if (mti->type == ModifierTypeType::OnlyDeform && !sculpt_dyntopo) {
ScopedModifierTimer modifier_timer{*md};
if (!mesh_final) {
mesh_final = BKE_mesh_copy_for_eval(&mesh_input);
mesh_final = BKE_mesh_copy_for_eval(mesh_input);
ASSERT_IS_VALID_MESH(mesh_final);
}
@@ -413,7 +413,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
* places that wish to use the original mesh but with deformed
* coordinates (like vertex paint). */
if (r_deform) {
mesh_deform = BKE_mesh_copy_for_eval(mesh_final ? mesh_final : &mesh_input);
mesh_deform = BKE_mesh_copy_for_eval(mesh_final ? *mesh_final : mesh_input);
}
}
@@ -485,7 +485,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
if (mti->type == ModifierTypeType::OnlyDeform) {
if (!mesh_final) {
mesh_final = BKE_mesh_copy_for_eval(&mesh_input);
mesh_final = BKE_mesh_copy_for_eval(mesh_input);
ASSERT_IS_VALID_MESH(mesh_final);
}
BKE_modifier_deform_verts(md, &mectx, mesh_final, mesh_final->vert_positions_for_write());
@@ -500,7 +500,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
}
}
else {
mesh_final = BKE_mesh_copy_for_eval(&mesh_input);
mesh_final = BKE_mesh_copy_for_eval(mesh_input);
ASSERT_IS_VALID_MESH(mesh_final);
check_for_needs_mapping = true;
}
@@ -665,7 +665,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
mesh_final = &mesh_input;
}
else {
mesh_final = BKE_mesh_copy_for_eval(&mesh_input);
mesh_final = BKE_mesh_copy_for_eval(mesh_input);
}
}
@@ -709,7 +709,7 @@ static void mesh_calc_modifiers(Depsgraph &depsgraph,
/* Not yet finalized by any instance, do it now
* Isolate since computing normals is multithreaded and we are holding a lock. */
threading::isolate_task([&] {
mesh_final = BKE_mesh_copy_for_eval(&mesh_input);
mesh_final = BKE_mesh_copy_for_eval(mesh_input);
mesh_calc_finalize(mesh_input, *mesh_final);
runtime->mesh_eval = mesh_final;
});
@@ -860,7 +860,7 @@ static void editbmesh_calc_modifiers(Depsgraph &depsgraph,
/* If the cage mesh has already been assigned, we have passed the cage index in the modifier
* list. If the cage and final meshes are still the same, duplicate the final mesh so the
* cage mesh isn't modified anymore. */
mesh_final = BKE_mesh_copy_for_eval(mesh_final);
mesh_final = BKE_mesh_copy_for_eval(*mesh_final);
if (mesh_cage->runtime->edit_mesh) {
mesh_final->runtime->edit_mesh = mesh_cage->runtime->edit_mesh;
mesh_final->runtime->is_original_bmesh = true;
+1 -1
View File
@@ -236,7 +236,7 @@ Mesh *BKE_multires_create_mesh(Depsgraph *depsgraph, Object *object, MultiresMod
Mesh *result = mti->modify_mesh(&mmd->modifier, &modifier_ctx, deformed_mesh);
if (result == deformed_mesh) {
result = BKE_mesh_copy_for_eval(deformed_mesh);
result = BKE_mesh_copy_for_eval(*deformed_mesh);
}
return result;
}
@@ -187,11 +187,11 @@ static bke::GeometrySet get_original_geometry_eval_copy(Object &object)
if (std::shared_ptr<BMEditMesh> &em = mesh->runtime->edit_mesh) {
Mesh *mesh_copy = BKE_mesh_wrapper_from_editmesh(em, nullptr, mesh);
BKE_mesh_wrapper_ensure_mdata(mesh_copy);
Mesh *final_copy = BKE_mesh_copy_for_eval(mesh_copy);
Mesh *final_copy = BKE_mesh_copy_for_eval(*mesh_copy);
BKE_id_free(nullptr, mesh_copy);
return bke::GeometrySet::from_mesh(final_copy);
}
return bke::GeometrySet::from_mesh(BKE_mesh_copy_for_eval(mesh));
return bke::GeometrySet::from_mesh(BKE_mesh_copy_for_eval(*mesh));
}
default:
return {};
+2 -2
View File
@@ -3401,7 +3401,7 @@ static int object_convert_exec(bContext *C, wmOperator *op)
*/
const Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob);
const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob_eval);
Mesh *new_mesh = mesh_eval ? BKE_mesh_copy_for_eval(mesh_eval) :
Mesh *new_mesh = mesh_eval ? BKE_mesh_copy_for_eval(*mesh_eval) :
BKE_mesh_new_nomain(0, 0, 0, 0);
BKE_object_material_from_eval_data(bmain, newob, &new_mesh->id);
/* Anonymous attributes shouldn't be available on the applied geometry. */
@@ -3634,7 +3634,7 @@ static int object_convert_exec(bContext *C, wmOperator *op)
newob->type = OB_MESH;
if (const Mesh *mesh_eval = geometry.get_mesh()) {
BKE_mesh_nomain_to_mesh(BKE_mesh_copy_for_eval(mesh_eval), new_mesh, newob);
BKE_mesh_nomain_to_mesh(BKE_mesh_copy_for_eval(*mesh_eval), new_mesh, newob);
BKE_object_material_from_eval_data(bmain, newob, &mesh_eval->id);
new_mesh->attributes_for_write().remove_anonymous();
}
@@ -759,7 +759,7 @@ static Mesh *remesh_symmetry_bisect(Mesh *mesh, eSymmetryAxes symmetry_axes)
mmd.tolerance = QUADRIFLOW_MIRROR_BISECT_TOLERANCE;
Mesh *mesh_bisect, *mesh_bisect_temp;
mesh_bisect = BKE_mesh_copy_for_eval(mesh);
mesh_bisect = BKE_mesh_copy_for_eval(*mesh);
int axis;
float plane_co[3], plane_no[3];
@@ -841,7 +841,7 @@ static void quadriflow_start_job(void *customdata, wmJobWorkerStatus *worker_sta
/* Run Quadriflow bisect operations on a copy of the mesh to keep the code readable without
* freeing the original ID */
bisect_mesh = BKE_mesh_copy_for_eval(mesh);
bisect_mesh = BKE_mesh_copy_for_eval(*mesh);
/* Bisect the input mesh using the paint symmetry settings */
bisect_mesh = remesh_symmetry_bisect(bisect_mesh, qj->symmetry_axes);
@@ -1075,7 +1075,7 @@ static Mesh *mesh_boolean_float(Span<const Mesh *> meshes,
if (meshes.size() == 1) {
/* The float solver doesn't do self union. Just return nullptr, which will
* cause geometry nodes to leave the input as is. */
return BKE_mesh_copy_for_eval(meshes[0]);
return BKE_mesh_copy_for_eval(*meshes[0]);
}
Array<std::array<BMLoop *, 3>> looptris;
+1 -1
View File
@@ -242,7 +242,7 @@ Mesh *reorder_mesh(const Mesh &src_mesh,
bke::AttrDomain domain,
const bke::AnonymousAttributePropagationInfo &propagation_info)
{
Mesh *dst_mesh = BKE_mesh_copy_for_eval(&src_mesh);
Mesh *dst_mesh = BKE_mesh_copy_for_eval(src_mesh);
clean_unused_attributes(propagation_info, dst_mesh->attributes_for_write());
reorder_mesh_exec(src_mesh, old_by_new_map, domain, *dst_mesh);
return dst_mesh;
+1 -1
View File
@@ -282,7 +282,7 @@ Mesh *bc_get_mesh_copy(BlenderContext &blender_context,
tmpmesh = (Mesh *)ob->data;
}
Mesh *mesh = BKE_mesh_copy_for_eval(tmpmesh);
Mesh *mesh = BKE_mesh_copy_for_eval(*tmpmesh);
if (triangulate) {
bc_triangulate_mesh(mesh);
@@ -505,7 +505,7 @@ Mesh *get_shape_key_basis_mesh(Object *obj)
}
/* Make a copy of the mesh so we can update the verts to the basis shape. */
Mesh *temp_mesh = BKE_mesh_copy_for_eval(mesh);
Mesh *temp_mesh = BKE_mesh_copy_for_eval(*mesh);
/* Update the verts. */
BKE_keyblock_convert_to_mesh(
+1 -1
View File
@@ -384,7 +384,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
Mesh *start_cap_mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(start_cap_ob);
if (start_cap_mesh) {
BKE_mesh_wrapper_ensure_mdata(start_cap_mesh);
return BKE_mesh_copy_for_eval(start_cap_mesh);
return BKE_mesh_copy_for_eval(*start_cap_mesh);
}
}
return mesh;
@@ -141,7 +141,7 @@ static void deform_verts(ModifierData *md,
}
/* make new mesh */
psmd->mesh_final = BKE_mesh_copy_for_eval(mesh);
psmd->mesh_final = BKE_mesh_copy_for_eval(*mesh);
psmd->mesh_final->vert_positions_for_write().copy_from(positions);
psmd->mesh_final->tag_positions_changed();
@@ -173,7 +173,7 @@ static void deform_verts(ModifierData *md,
/* Make a persistent copy of the mesh. We don't actually need
* all this data, just some topology for remapping. Could be
* optimized once. */
psmd->mesh_original = BKE_mesh_copy_for_eval(mesh_original);
psmd->mesh_original = BKE_mesh_copy_for_eval(*mesh_original);
}
BKE_mesh_tessface_ensure(psmd->mesh_original);
@@ -98,7 +98,7 @@ static void deform_verts(ModifierData *md,
}
if (mesh) {
surmd->runtime.mesh = BKE_mesh_copy_for_eval(mesh);
surmd->runtime.mesh = BKE_mesh_copy_for_eval(*mesh);
}
if (!ctx->object->pd) {
@@ -120,7 +120,7 @@ static Mesh *mesh_subsurf_calc(const Mesh *mesh,
/* Due to the "BKE_subdiv" API, the crease layers must be on the input mesh. But in this node
* they are provided as separate inputs, not as custom data layers. When needed, retrieve the
* mesh with write access and store the new crease values there. */
mesh_copy = BKE_mesh_copy_for_eval(mesh);
mesh_copy = BKE_mesh_copy_for_eval(*mesh);
write_vert_creases(*mesh_copy, vert_creases);
write_edge_creases(*mesh_copy, edge_creases);
mesh = mesh_copy;
+2 -2
View File
@@ -579,7 +579,7 @@ bool RE_bake_pixels_populate_from_objects(Mesh *me_low,
blender::Array<BVHTreeFromMesh> treeData(tot_highpoly);
if (!is_cage) {
me_eval_low = BKE_mesh_copy_for_eval(me_low);
me_eval_low = BKE_mesh_copy_for_eval(*me_low);
tris_low = mesh_calc_tri_tessface(me_low, true, me_eval_low);
}
else if (is_custom_cage) {
@@ -862,7 +862,7 @@ void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
TriTessFace *triangles;
Mesh *mesh_eval = BKE_mesh_copy_for_eval(mesh);
Mesh *mesh_eval = BKE_mesh_copy_for_eval(*mesh);
triangles = mesh_calc_tri_tessface(mesh, true, mesh_eval);