[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59876] branches/soc-2013-depsgraph_mt/ source/blender: Smoke modifier is now expected to use proper render flags

Sergey Sharybin sergey.vfx at gmail.com
Fri Sep 6 13:35:59 CEST 2013


Revision: 59876
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59876
Author:   nazgul
Date:     2013-09-06 11:35:59 +0000 (Fri, 06 Sep 2013)
Log Message:
-----------
Smoke modifier is now expected to use proper render flags

Not so much up to using smoke simulations, only did quick
tests. Would be nice to have some more intense testing some
day later.

Modified Paths:
--------------
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_smoke.h
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/smoke.c
    branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c
    branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_smoke.c

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_smoke.h
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_smoke.h	2013-09-06 11:18:31 UTC (rev 59875)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_smoke.h	2013-09-06 11:35:59 UTC (rev 59876)
@@ -35,7 +35,7 @@
 
 typedef float (*bresenham_callback)(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
 
-struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm);
+struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, bool for_render);
 
 void smoke_reallocate_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
 void smoke_reallocate_highres_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/smoke.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/smoke.c	2013-09-06 11:18:31 UTC (rev 59875)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/smoke.c	2013-09-06 11:35:59 UTC (rev 59876)
@@ -942,7 +942,7 @@
 	BLI_freelistN(&pidlist);
 }
 
-static int subframe_updateObject(Scene *scene, Object *ob, int update_mesh, int parent_recursion, float frame)
+static int subframe_updateObject(Scene *scene, Object *ob, int update_mesh, int parent_recursion, float frame, bool for_render)
 {
 	SmokeModifierData *smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
 	bConstraint *con;
@@ -955,8 +955,8 @@
 	if (parent_recursion) {
 		int recursion = parent_recursion - 1;
 		int is_domain = 0;
-		if (ob->parent) is_domain += subframe_updateObject(scene, ob->parent, 0, recursion, frame);
-		if (ob->track) is_domain += subframe_updateObject(scene, ob->track, 0, recursion, frame);
+		if (ob->parent) is_domain += subframe_updateObject(scene, ob->parent, 0, recursion, frame, for_render);
+		if (ob->track) is_domain += subframe_updateObject(scene, ob->track, 0, recursion, frame, for_render);
 
 		/* skip subframe if object is parented
 		 *  to vertex of a dynamic paint canvas */
@@ -973,7 +973,7 @@
 				cti->get_constraint_targets(con, &targets);
 				for (ct = targets.first; ct; ct = ct->next) {
 					if (ct->tar)
-						subframe_updateObject(scene, ct->tar, 0, recursion, frame);
+						subframe_updateObject(scene, ct->tar, 0, recursion, frame, for_render);
 				}
 				/* free temp targets */
 				if (cti->flush_constraint_targets)
@@ -986,9 +986,8 @@
 	ob->recalc |= OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME;
 	BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, frame, ADT_RECALC_ANIM);
 	if (update_mesh) {
-		/* TODO(sergey): Just for now! It shall be passed from modifier stack! */
 		EvaluationContext evaluation_context;
-		evaluation_context.for_render = false;
+		evaluation_context.for_render = for_render;
 		/* ignore cache clear during subframe updates
 		 *  to not mess up cache validity */
 		object_cacheIgnoreClear(ob, 1);
@@ -2037,7 +2036,7 @@
 	}
 }
 
-static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt)
+static void update_flowsfluids(Scene *scene, Object *ob, SmokeDomainSettings *sds, float dt, bool for_render)
 {
 	Object **flowobjs = NULL;
 	EmissionMap *emaps = NULL;
@@ -2140,7 +2139,7 @@
 					}
 					else { /* MOD_SMOKE_FLOW_SOURCE_MESH */
 						/* update flow object frame */
-						subframe_updateObject(scene, collob, 1, 5, BKE_scene_frame_get(scene));
+						subframe_updateObject(scene, collob, 1, 5, BKE_scene_frame_get(scene), for_render);
 
 						/* apply flow */
 						emit_from_derivedmesh(collob, sds, sfs, &em_temp, sdt);
@@ -2449,7 +2448,7 @@
 	pdEndEffectors(&effectors);
 }
 
-static void step(Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *domain_dm, float fps)
+static void step(Scene *scene, Object *ob, SmokeModifierData *smd, DerivedMesh *domain_dm, float fps, bool for_render)
 {
 	SmokeDomainSettings *sds = smd->domain;
 	/* stability values copied from wturbulence.cpp */
@@ -2519,7 +2518,7 @@
 	for (substep = 0; substep < totalSubsteps; substep++)
 	{
 		// calc animated obstacle velocities
-		update_flowsfluids(scene, ob, sds, dtSubdiv);
+		update_flowsfluids(scene, ob, sds, dtSubdiv, for_render);
 		update_obstacles(scene, ob, sds, dtSubdiv, substep, totalSubsteps);
 
 		if (sds->total_cells > 1) {
@@ -2616,7 +2615,7 @@
 	return result;
 }
 
-static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm)
+static void smokeModifier_process(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm, bool for_render)
 {
 	if ((smd->type & MOD_SMOKE_TYPE_FLOW))
 	{
@@ -2738,7 +2737,7 @@
 
 			}
 
-			step(scene, ob, smd, dm, scene->r.frs_sec / scene->r.frs_sec_base);
+			step(scene, ob, smd, dm, scene->r.frs_sec / scene->r.frs_sec_base, for_render);
 		}
 
 		// create shadows before writing cache so they get stored
@@ -2758,13 +2757,13 @@
 	}
 }
 
-struct DerivedMesh *smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm)
+struct DerivedMesh *smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm, bool for_render)
 {
 	/* lock so preview render does not read smoke data while it gets modified */
 	if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
 		BLI_rw_mutex_lock(smd->domain->fluid_mutex, THREAD_LOCK_WRITE);
 
-	smokeModifier_process(smd, scene, ob, dm);
+	smokeModifier_process(smd, scene, ob, dm, for_render);
 
 	if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
 		BLI_rw_mutex_unlock(smd->domain->fluid_mutex);

Modified: branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c	2013-09-06 11:18:31 UTC (rev 59875)
+++ branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c	2013-09-06 11:35:59 UTC (rev 59876)
@@ -120,7 +120,7 @@
 {
 	DerivedMesh *dm = derivedData;
 	CustomDataMask dataMask = requiredDataMask(ob, md);
-	bool forRender = flag & MOD_APPLY_RENDER;
+	bool forRender = (flag & MOD_APPLY_RENDER) != 0;
 
 	/* ensure we get a CDDM with applied vertex coords */
 	if (dataMask) {

Modified: branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_smoke.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_smoke.c	2013-09-06 11:18:31 UTC (rev 59875)
+++ branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_smoke.c	2013-09-06 11:35:59 UTC (rev 59876)
@@ -101,11 +101,12 @@
 
 static DerivedMesh *applyModifier(ModifierData *md, Object *ob, 
                                   DerivedMesh *dm,
-                                  ModifierApplyFlag UNUSED(flag))
+                                  ModifierApplyFlag flag)
 {
 	SmokeModifierData *smd = (SmokeModifierData *) md;
+	bool for_render = (flag & MOD_APPLY_RENDER) != 0;
 
-	return smokeModifier_do(smd, md->scene, ob, dm);
+	return smokeModifier_do(smd, md->scene, ob, dm, for_render);
 }
 
 static bool dependsOnTime(ModifierData *UNUSED(md))




More information about the Bf-blender-cvs mailing list