Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2018-11-27 19:21:16 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2018-11-27 23:17:06 +0300
commitb4087ea6392e051fd9e4f7ee5207d089a044e15e (patch)
tree164c0d165af06bd6257dc003e1164fe226e6ac89 /source/blender/modifiers/intern/MOD_util.c
parent4543da6ca63d227ed9ad809fbbdd765acab7aba6 (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.c15
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;
}