[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46466] trunk/blender/source/blender: Refactor of modifiers' apply function: now use a single bit-flag parameter to pass options, instead of having one parameter per boolean flag (i.e.

Bastien Montagne montagne29 at wanadoo.fr
Wed May 9 17:00:26 CEST 2012


Revision: 46466
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46466
Author:   mont29
Date:     2012-05-09 15:00:26 +0000 (Wed, 09 May 2012)
Log Message:
-----------
Refactor of modifiers' apply function: now use a single bit-flag parameter to pass options, instead of having one parameter per boolean flag (i.e. replaces current useRenderParams and isFinalCalc by a single ModifierApplyFlag flag. ModifierApplyFlag is an enum defined in BKE_modifier.h). This way we won't anymore have to edit all modifier files when e.g. adding a new control flag!

Should have no effect over modifier behavior.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/blenkernel/intern/lattice.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/util/crazyspace.c
    trunk/blender/source/blender/modifiers/intern/MOD_armature.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c
    trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
    trunk/blender/source/blender/modifiers/intern/MOD_boolean.c
    trunk/blender/source/blender/modifiers/intern/MOD_build.c
    trunk/blender/source/blender/modifiers/intern/MOD_cast.c
    trunk/blender/source/blender/modifiers/intern/MOD_cloth.c
    trunk/blender/source/blender/modifiers/intern/MOD_collision.c
    trunk/blender/source/blender/modifiers/intern/MOD_curve.c
    trunk/blender/source/blender/modifiers/intern/MOD_decimate.c
    trunk/blender/source/blender/modifiers/intern/MOD_displace.c
    trunk/blender/source/blender/modifiers/intern/MOD_dynamicpaint.c
    trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c
    trunk/blender/source/blender/modifiers/intern/MOD_explode.c
    trunk/blender/source/blender/modifiers/intern/MOD_fluidsim.c
    trunk/blender/source/blender/modifiers/intern/MOD_hook.c
    trunk/blender/source/blender/modifiers/intern/MOD_lattice.c
    trunk/blender/source/blender/modifiers/intern/MOD_mask.c
    trunk/blender/source/blender/modifiers/intern/MOD_meshdeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_mirror.c
    trunk/blender/source/blender/modifiers/intern/MOD_multires.c
    trunk/blender/source/blender/modifiers/intern/MOD_ocean.c
    trunk/blender/source/blender/modifiers/intern/MOD_particleinstance.c
    trunk/blender/source/blender/modifiers/intern/MOD_particlesystem.c
    trunk/blender/source/blender/modifiers/intern/MOD_remesh.c
    trunk/blender/source/blender/modifiers/intern/MOD_screw.c
    trunk/blender/source/blender/modifiers/intern/MOD_shapekey.c
    trunk/blender/source/blender/modifiers/intern/MOD_shrinkwrap.c
    trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_smoke.c
    trunk/blender/source/blender/modifiers/intern/MOD_smooth.c
    trunk/blender/source/blender/modifiers/intern/MOD_softbody.c
    trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
    trunk/blender/source/blender/modifiers/intern/MOD_subsurf.c
    trunk/blender/source/blender/modifiers/intern/MOD_surface.c
    trunk/blender/source/blender/modifiers/intern/MOD_uvproject.c
    trunk/blender/source/blender/modifiers/intern/MOD_warp.c
    trunk/blender/source/blender/modifiers/intern/MOD_wave.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgedit.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgmix.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c

Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h	2012-05-09 14:58:57 UTC (rev 46465)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h	2012-05-09 15:00:26 UTC (rev 46466)
@@ -109,6 +109,12 @@
 typedef void (*IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin);
 typedef void (*TexWalkFunc)(void *userData, struct Object *ob, struct ModifierData *md, const char *propname);
 
+typedef enum ModifierApplyFlag {
+	MOD_APPLY_RENDER = 1 << 0,       /* Render time. */
+	MOD_APPLY_USECACHE = 1 << 1,     /* Last modifier in stack. */
+} ModifierApplyFlag;
+
+
 typedef struct ModifierTypeInfo {
 	/* The user visible name for this modifier */
 	char name[32];
@@ -142,7 +148,7 @@
 	void (*deformVerts)(struct ModifierData *md, struct Object *ob,
 						struct DerivedMesh *derivedData,
 						float (*vertexCos)[3], int numVerts,
-						int useRenderParams, int isFinalCalc);
+						ModifierApplyFlag flag);
 
 	/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
 	void (*deformMatrices)(
@@ -187,7 +193,7 @@
 	struct DerivedMesh *(*applyModifier)(
 								struct ModifierData *md, struct Object *ob,
 								struct DerivedMesh *derivedData,
-								int useRenderParams, int isFinalCalc);
+								ModifierApplyFlag flag);
 
 	/* Like applyModifier but called during editmode (for supporting
 	 * modifiers).

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-05-09 14:58:57 UTC (rev 46465)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2012-05-09 15:00:26 UTC (rev 46466)
@@ -814,7 +814,7 @@
 		int numVerts;
 		float (*deformedVerts)[3] = mesh_getVertexCos(me, &numVerts);
 
-		mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, 0, 0);
+		mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, 0);
 		dm = mesh_create_derived(me, ob, deformedVerts);
 
 		if (build_shapekey_layers)
@@ -828,7 +828,7 @@
 		if (build_shapekey_layers)
 			add_shapekey_layers(tdm, me, ob);
 		
-		dm = mti->applyModifier(md, ob, tdm, 0, 0);
+		dm = mti->applyModifier(md, ob, tdm, 0);
 
 		if (tdm != dm) tdm->release(tdm);
 	}
@@ -1383,6 +1383,13 @@
 	/* XXX Same as above... For now, only weights preview in WPaint mode. */
 	const int do_mod_wmcol = do_init_wmcol;
 
+	ModifierApplyFlag app_flags = useRenderParams ? MOD_APPLY_RENDER : 0;
+	ModifierApplyFlag deform_app_flags = app_flags;
+    if (useCache)
+		app_flags |= MOD_APPLY_USECACHE;
+    if (useDeform)
+		deform_app_flags |= MOD_APPLY_USECACHE;
+
 	if (mmd && !mmd->sculptlvl)
 		has_multires = 0;
 
@@ -1434,7 +1441,7 @@
 				if (!deformedVerts)
 					deformedVerts = mesh_getVertexCos(me, &numVerts);
 
-				mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, useRenderParams, useDeform);
+				mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, deform_app_flags);
 			}
 			else {
 				break;
@@ -1547,7 +1554,7 @@
 				}
 			}
 
-			mti->deformVerts(md, ob, dm, deformedVerts, numVerts, useRenderParams, useDeform);
+			mti->deformVerts(md, ob, dm, deformedVerts, numVerts, deform_app_flags);
 		}
 		else {
 			DerivedMesh *ndm;
@@ -1622,7 +1629,7 @@
 				}
 			}
 
-			ndm = mti->applyModifier(md, ob, dm, useRenderParams, useCache);
+			ndm = mti->applyModifier(md, ob, dm, app_flags);
 
 			if (ndm) {
 				/* if the modifier returned a new dm, release the old one */
@@ -1645,7 +1652,7 @@
 
 				nextmask &= ~CD_MASK_ORCO;
 				DM_set_only_copy(orcodm, nextmask | CD_MASK_ORIGINDEX);
-				ndm = mti->applyModifier(md, ob, orcodm, useRenderParams, 0);
+				ndm = mti->applyModifier(md, ob, orcodm, app_flags & ~MOD_APPLY_USECACHE);
 
 				if (ndm) {
 					/* if the modifier returned a new dm, release the old one */
@@ -1661,7 +1668,7 @@
 
 				nextmask &= ~CD_MASK_CLOTH_ORCO;
 				DM_set_only_copy(clothorcodm, nextmask | CD_MASK_ORIGINDEX);
-				ndm = mti->applyModifier(md, ob, clothorcodm, useRenderParams, 0);
+				ndm = mti->applyModifier(md, ob, clothorcodm, app_flags & ~MOD_APPLY_USECACHE);
 
 				if (ndm) {
 					/* if the modifier returned a new dm, release the old one */
@@ -1928,7 +1935,8 @@
 
 			if (mti->deformVertsEM)
 				mti->deformVertsEM(md, ob, em, dm, deformedVerts, numVerts);
-			else mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0, 0);
+			else
+				mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0);
 		}
 		else {
 			DerivedMesh *ndm;
@@ -1971,7 +1979,7 @@
 				if (mti->applyModifierEM)
 					ndm = mti->applyModifierEM(md, ob, em, orcodm);
 				else
-					ndm = mti->applyModifier(md, ob, orcodm, 0, 0);
+					ndm = mti->applyModifier(md, ob, orcodm, 0);
 
 				if (ndm) {
 					/* if the modifier returned a new dm, release the old one */
@@ -1995,7 +2003,7 @@
 			if (mti->applyModifierEM)
 				ndm = mti->applyModifierEM(md, ob, em, dm);
 			else
-				ndm = mti->applyModifier(md, ob, dm, 0, 0);
+				ndm = mti->applyModifier(md, ob, dm, 0);
 
 			if (ndm) {
 				if (dm && dm != ndm)

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2012-05-09 14:58:57 UTC (rev 46465)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2012-05-09 15:00:26 UTC (rev 46466)
@@ -752,14 +752,19 @@
 	Curve *cu = ob->data;
 	ListBase *nurb = BKE_curve_nurbs_get(cu);
 	int numVerts = 0;
-	int editmode = (!forRender && cu->editnurb);
+	const int editmode = (!forRender && cu->editnurb);
+	ModifierApplyFlag app_flag = 0;
 	float (*originalVerts)[3] = NULL;
 	float (*deformedVerts)[3] = NULL;
 	float *keyVerts = NULL;
 	int required_mode;
 
-	if (forRender)
+	if (editmode)
+		app_flag |= MOD_APPLY_USECACHE;
+	if (forRender) {
+		app_flag |= MOD_APPLY_RENDER;
 		required_mode = eModifierMode_Render;
+	}
 	else
 		required_mode = eModifierMode_Realtime;
 
@@ -800,7 +805,7 @@
 				originalVerts = MEM_dupallocN(deformedVerts);
 			}
 
-			mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, forRender, editmode);
+			mti->deformVerts(md, ob, NULL, deformedVerts, numVerts, app_flag);
 
 			if (md == pretessellatePoint)
 				break;
@@ -866,9 +871,12 @@
 	DerivedMesh *dm = NULL, *ndm;
 	float (*vertCos)[3] = NULL;
 	int useCache = !forRender;
+	ModifierApplyFlag app_flag = 0;
 
-	if (forRender)
+	if (forRender) {
+		app_flag |= MOD_APPLY_RENDER;
 		required_mode = eModifierMode_Render;
+	}
 	else
 		required_mode = eModifierMode_Realtime;
 
@@ -887,6 +895,7 @@
 
 	for (; md; md = md->next) {
 		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+		ModifierApplyFlag appf = app_flag;
 
 		md->scene = scene;
 
@@ -897,6 +906,8 @@
 
 		if (mti->type == eModifierTypeType_OnlyDeform ||
 		    (mti->type == eModifierTypeType_DeformOrConstruct && !dm)) {
+			if (editmode)
+				appf |= MOD_APPLY_USECACHE;
 			if (dm) {
 				if (!vertCos) {
 					totvert = dm->getNumVerts(dm);
@@ -904,14 +915,14 @@
 					dm->getVertCos(dm, vertCos);
 				}
 
-				mti->deformVerts(md, ob, dm, vertCos, totvert, forRender, editmode);
+				mti->deformVerts(md, ob, dm, vertCos, totvert, appf);
 			}
 			else {
 				if (!vertCos) {
 					vertCos = displist_get_allverts(dispbase, &totvert);
 				}
 
-				mti->deformVerts(md, ob, NULL, vertCos, totvert, forRender, editmode);
+				mti->deformVerts(md, ob, NULL, vertCos, totvert, appf);
 			}
 		}
 		else {
@@ -953,7 +964,9 @@
 				vertCos = NULL;
 			}
 
-			ndm = mti->applyModifier(md, ob, dm, forRender, useCache);
+			if (useCache)
+				appf |= MOD_APPLY_USECACHE;
+			ndm = mti->applyModifier(md, ob, dm, appf);
 
 			if (ndm) {
 				/* Modifier returned a new derived mesh */
@@ -1084,6 +1097,7 @@
 	int required_mode;
 	int editmode = (!forRender && cu->editnurb);
 	DerivedMesh *ndm, *orcodm = NULL;
+	const ModifierApplyFlag app_flag = forRender ? MOD_APPLY_RENDER : 0;
 
 	if (forRender)
 		required_mode = eModifierMode_Render;
@@ -1114,7 +1128,7 @@
 		if (!orcodm)
 			orcodm = create_orco_dm(scene, ob);
 
-		ndm = mti->applyModifier(md, ob, orcodm, forRender, 0);
+		ndm = mti->applyModifier(md, ob, orcodm, app_flag);
 
 		if (ndm) {
 			/* if the modifier returned a new dm, release the old one */

Modified: trunk/blender/source/blender/blenkernel/intern/lattice.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/lattice.c	2012-05-09 14:58:57 UTC (rev 46465)
+++ trunk/blender/source/blender/blenkernel/intern/lattice.c	2012-05-09 15:00:26 UTC (rev 46466)
@@ -976,7 +976,7 @@
 		if (mti->type != eModifierTypeType_OnlyDeform) continue;
 
 		if (!vertexCos) vertexCos = BKE_lattice_vertexcos_get(ob, &numVerts);
-		mti->deformVerts(md, ob, NULL, vertexCos, numVerts, 0, 0);
+		mti->deformVerts(md, ob, NULL, vertexCos, numVerts, 0);
 	}
 
 	/* always displist to make this work like derivedmesh */

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2012-05-09 14:58:57 UTC (rev 46465)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2012-05-09 15:00:26 UTC (rev 46466)
@@ -279,7 +279,7 @@
 	DerivedMesh *tdm = mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
 	DerivedMesh *dm;
 
-	dm = mti->applyModifier(md, ob, tdm, 0, 1);
+	dm = mti->applyModifier(md, ob, tdm, MOD_APPLY_USECACHE);
 	if (dm == tdm) {
 		dm = CDDM_copy(tdm);
 	}
@@ -438,7 +438,7 @@
 	deformedVerts = MEM_callocN(sizeof(float) * numVerts * 3, "multiresReshape_deformVerts");
 
 	dm->getVertCos(dm, deformedVerts);
-	mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0, 0);
+	mti->deformVerts(md, ob, dm, deformedVerts, numVerts, 0);
 
 	ndm = CDDM_copy(dm);
 	CDDM_apply_vert_coords(ndm, deformedVerts);

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2012-05-09 14:58:57 UTC (rev 46465)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2012-05-09 15:00:26 UTC (rev 46466)
@@ -545,7 +545,7 @@
 		BKE_report(reports, RPT_INFO, "Applied modifier only changed CV points, not tessellated/bevel vertices");
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list