diff options
author | Hans Goudey <h.goudey@me.com> | 2022-02-10 20:34:20 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-02-10 20:34:20 +0300 |
commit | 29674d5e7885ca1b31088ff4abeeae0ff05b980f (patch) | |
tree | 0e32b102437a098ab0f308cd4ad16d969a9da67e /source | |
parent | 22c60ac8b1583502a88a5a97d0017618cccb14df (diff) | |
parent | 88ff5e5fb9d66d3a441e325dc381754b6f9c093e (diff) |
Merge branch 'blender-v3.1-release'
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.cc | 8 | ||||
-rw-r--r-- | source/blender/editors/object/object_add.c | 5 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.c | 7 | ||||
-rw-r--r-- | source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c | 8 |
5 files changed, 20 insertions, 10 deletions
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 c1b1f62a881..4e534726922 100644 --- a/source/blender/blenkernel/intern/mesh.cc +++ b/source/blender/blenkernel/intern/mesh.cc @@ -1933,6 +1933,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 d1deb6824ea..06c505b2160 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -2918,7 +2918,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 af428512cfd..9d9e44de523 100644 --- a/source/blender/editors/object/object_modifier.c +++ b/source/blender/editors/object/object_modifier.c @@ -765,11 +765,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); diff --git a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c index 5434f7768b2..a9ec136831d 100644 --- a/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c +++ b/source/blender/gpencil_modifiers/intern/lineart/lineart_cpu.c @@ -2224,10 +2224,10 @@ static void lineart_main_load_geometries( use_mesh = use_ob->data; } else { - /* If DEG_ITER_OBJECT_FLAG_DUPLI is set, the curve objects are going to have a mesh - * equivalent already in the object list, so ignore converting the original curve in this - * case. */ - if (allow_duplicates) { + /* If DEG_ITER_OBJECT_FLAG_DUPLI is set, some curve objects may also have an evaluated mesh + * object in the list. To avoid adding duplicate geometry, ignore evaluated curve objects in + * those cases. */ + if (allow_duplicates && BKE_object_get_evaluated_mesh(ob) != NULL) { continue; } use_mesh = BKE_mesh_new_from_object(depsgraph, use_ob, true, true); |