[Bf-blender-cvs] [fe1befcadfa] blender2.8: Modifier: remove derived mesh call for bind

Campbell Barton noreply at git.blender.org
Fri Oct 12 09:40:10 CEST 2018


Commit: fe1befcadfa44d012561e8dc697470b2a5cc5f36
Author: Campbell Barton
Date:   Fri Oct 12 18:39:24 2018 +1100
Branches: blender2.8
https://developer.blender.org/rBfe1befcadfa44d012561e8dc697470b2a5cc5f36

Modifier: remove derived mesh call for bind

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

M	source/blender/editors/object/object_modifier.c

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

diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index cfd50b0dba6..2b5b5a078a6 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -98,6 +98,23 @@ static void modifier_skin_customdata_delete(struct Object *ob);
 
 /******************************** API ****************************/
 
+static void object_force_modifier_update_for_bind(Depsgraph *depsgraph, Scene *scene, Object *ob)
+{
+	if (ob->type == OB_MESH) {
+		Mesh *me_eval = mesh_create_eval_final_view(depsgraph, scene, ob, 0);
+		BKE_id_free(NULL, me_eval);
+	}
+	else if (ob->type == OB_LATTICE) {
+		BKE_lattice_modifiers_calc(depsgraph, scene, ob);
+	}
+	else if (ob->type == OB_MBALL) {
+		BKE_displist_make_mball(depsgraph, scene, ob);
+	}
+	else if (ELEM(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
+		BKE_displist_make_curveTypes(depsgraph, scene, ob, 0);
+	}
+}
+
 ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *scene, Object *ob, const char *name, int type)
 {
 	ModifierData *md = NULL, *new_md = NULL;
@@ -2269,27 +2286,13 @@ static int laplaciandeform_bind_exec(bContext *C, wmOperator *op)
 		lmd->flag &= ~MOD_LAPLACIANDEFORM_BIND;
 	}
 	else {
-		DerivedMesh *dm;
 		int mode = lmd->modifier.mode;
 
 		/* Force modifier to run, it will call binding routine. */
-		/* TODO(Sybren): deduplicate the code below, it's used multiple times here. */
 		lmd->modifier.mode |= eModifierMode_Realtime;
 		lmd->flag |= MOD_LAPLACIANDEFORM_BIND;
 
-		if (ob->type == OB_MESH) {
-			dm = mesh_create_derived_view(depsgraph, scene, ob, 0);
-			dm->release(dm);
-		}
-		else if (ob->type == OB_LATTICE) {
-			BKE_lattice_modifiers_calc(depsgraph, scene, ob);
-		}
-		else if (ob->type == OB_MBALL) {
-			BKE_displist_make_mball(depsgraph, scene, ob);
-		}
-		else if (ELEM(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
-			BKE_displist_make_curveTypes(depsgraph, scene, ob, 0);
-		}
+		object_force_modifier_update_for_bind(depsgraph, scene, ob);
 
 		lmd->modifier.mode = mode;
 	}
@@ -2340,39 +2343,24 @@ static int surfacedeform_bind_exec(bContext *C, wmOperator *op)
 
 	if (!smd)
 		return OPERATOR_CANCELLED;
-
 	if (smd->flags & MOD_SDEF_BIND) {
 		/* Un-binding happens inside the modifier when it's evaluated. */
 		smd->flags &= ~MOD_SDEF_BIND;
 	}
 	else if (smd->target) {
-		DerivedMesh *dm;
 		int mode = smd->modifier.mode;
 
 		/* Force modifier to run, it will call binding routine. */
 		smd->modifier.mode |= eModifierMode_Realtime;
 		smd->flags |= MOD_SDEF_BIND;
 
-		if (ob->type == OB_MESH) {
-			dm = mesh_create_derived_view(depsgraph, scene, ob, 0);
-			dm->release(dm);
-		}
-		else if (ob->type == OB_LATTICE) {
-			BKE_lattice_modifiers_calc(depsgraph, scene, ob);
-		}
-		else if (ob->type == OB_MBALL) {
-			BKE_displist_make_mball(depsgraph, scene, ob);
-		}
-		else if (ELEM(ob->type, OB_CURVE, OB_SURF, OB_FONT)) {
-			BKE_displist_make_curveTypes(depsgraph, scene, ob, 0);
-		}
+		object_force_modifier_update_for_bind(depsgraph, scene, ob);
 
 		smd->modifier.mode = mode;
 	}
 
 	DEG_id_tag_update(&ob->id, OB_RECALC_DATA);
 	WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
-
 	return OPERATOR_FINISHED;
 }



More information about the Bf-blender-cvs mailing list