[Bf-blender-cvs] [25c40007968] blender-v3.1-release: Fix T95613: remove anonymous attributes when converting object

Jacques Lucke noreply at git.blender.org
Thu Feb 10 18:03:53 CET 2022


Commit: 25c4000796833966386b125744b17ede81aa62b1
Author: Jacques Lucke
Date:   Thu Feb 10 18:03:37 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rB25c4000796833966386b125744b17ede81aa62b1

Fix T95613: remove anonymous attributes when converting object

This is the same behavior as when applying a geometry nodes modifier
that adds anonymous attributes.

===================================================================

M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_modifier.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index e1c706a82dc..376bb5c8d2e 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -327,6 +327,8 @@ void BKE_mesh_vert_coords_apply_with_mat4(struct Mesh *mesh,
                                           const float mat[4][4]);
 void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float (*vert_coords)[3]);
 
+void BKE_mesh_anonymous_attributes_remove(struct Mesh *mesh);
+
 /* *** mesh_tessellate.c *** */
 
 /**
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 73fe279552d..76a15fd0a1c 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -1922,6 +1922,14 @@ void BKE_mesh_vert_coords_apply_with_mat4(Mesh *mesh,
   BKE_mesh_normals_tag_dirty(mesh);
 }
 
+void BKE_mesh_anonymous_attributes_remove(Mesh *mesh)
+{
+  CustomData_free_layers_anonymous(&mesh->vdata, mesh->totvert);
+  CustomData_free_layers_anonymous(&mesh->edata, mesh->totedge);
+  CustomData_free_layers_anonymous(&mesh->pdata, mesh->totpoly);
+  CustomData_free_layers_anonymous(&mesh->ldata, mesh->totloop);
+}
+
 void BKE_mesh_calc_normals_split_ex(Mesh *mesh, MLoopNorSpaceArray *r_lnors_spacearr)
 {
   float(*r_loopnors)[3];
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 8a493eb0743..e9cbd7bed55 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -2930,7 +2930,10 @@ static int object_convert_exec(bContext *C, wmOperator *op)
       /* Full (edge-angle based) draw calculation should ideally be performed. */
       BKE_mesh_edges_set_draw_render(me_eval);
       BKE_object_material_from_eval_data(bmain, newob, &me_eval->id);
-      BKE_mesh_nomain_to_mesh(me_eval, newob->data, newob, &CD_MASK_MESH, true);
+      Mesh *new_mesh = (Mesh *)newob->data;
+      BKE_mesh_nomain_to_mesh(me_eval, new_mesh, newob, &CD_MASK_MESH, true);
+      /* Anonymous attributes shouldn't be available on the applied geometry. */
+      BKE_mesh_anonymous_attributes_remove(new_mesh);
       BKE_object_free_modifiers(newob, 0); /* after derivedmesh calls! */
     }
     else if (ob->type == OB_FONT) {
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 4ac2a9dca62..d8247d86e07 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -763,11 +763,8 @@ static bool modifier_apply_obdata(
       BKE_object_material_from_eval_data(bmain, ob, &mesh_applied->id);
       BKE_mesh_nomain_to_mesh(mesh_applied, me, ob, &CD_MASK_MESH, true);
 
-      /* Anonymous attributes shouldn't by available on the applied geometry. */
-      CustomData_free_layers_anonymous(&me->vdata, me->totvert);
-      CustomData_free_layers_anonymous(&me->edata, me->totedge);
-      CustomData_free_layers_anonymous(&me->pdata, me->totpoly);
-      CustomData_free_layers_anonymous(&me->ldata, me->totloop);
+      /* Anonymous attributes shouldn't be available on the applied geometry. */
+      BKE_mesh_anonymous_attributes_remove(me);
 
       if (md_eval->type == eModifierType_Multires) {
         multires_customdata_delete(me);



More information about the Bf-blender-cvs mailing list