diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2018-11-27 19:21:16 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2018-11-27 23:17:06 +0300 |
commit | b4087ea6392e051fd9e4f7ee5207d089a044e15e (patch) | |
tree | 164c0d165af06bd6257dc003e1164fe226e6ac89 /source/blender/modifiers/intern/MOD_util.c | |
parent | 4543da6ca63d227ed9ad809fbbdd765acab7aba6 (diff) |
Modifiers: Refactor `MOD_deform_mesh_eval_get()` helper a bit.
Now that function also takes expected number of vertices, and do the
checks against generated mesh internally.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_util.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_util.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c index d156f119eec..a8bb5210aad 100644 --- a/source/blender/modifiers/intern/MOD_util.c +++ b/source/blender/modifiers/intern/MOD_util.c @@ -168,11 +168,12 @@ void MOD_previous_vcos_store(ModifierData *md, float (*vertexCos)[3]) } /* returns a mesh if mesh == NULL, for deforming modifiers that need it */ -Mesh *MOD_get_mesh_eval( +Mesh *MOD_deform_mesh_eval_get( Object *ob, struct BMEditMesh *em, Mesh *mesh, - float (*vertexCos)[3], bool use_normals, bool use_orco) + float (*vertexCos)[3], const int num_verts, + const bool use_normals, const bool use_orco) { - if (mesh) { + if (mesh != NULL) { /* pass */ } else if (ob->type == OB_MESH) { @@ -207,6 +208,12 @@ Mesh *MOD_get_mesh_eval( else if (ELEM(ob->type, OB_FONT, OB_CURVE, OB_SURF)) { /* TODO(sybren): get evaluated mesh from depsgraph once that's properly generated for curves. */ mesh = BKE_mesh_new_nomain_from_curve(ob); + + /* Currently, that may not be the case everytime + * (texts e.g. tend to give issues, also when deforming curve points instead of generated curve geometry... ). */ + if (mesh != NULL && mesh->totvert != num_verts) { + BKE_id_free(NULL, mesh); + } } if (use_normals) { @@ -215,6 +222,8 @@ Mesh *MOD_get_mesh_eval( } } + BLI_assert(mesh == NULL || mesh->totvert == num_verts); + return mesh; } |