[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15804] branches/fluidcontrol/source/ blender: Almost done with 'Phase 1': Fixed depsgraph update of modifier, fixed material index deletion, fixed face flag deletion ( using face0 now as old fluid code)

Daniel Genrich daniel.genrich at gmx.net
Sun Jul 27 14:29:14 CEST 2008


Revision: 15804
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15804
Author:   genscher
Date:     2008-07-27 14:28:34 +0200 (Sun, 27 Jul 2008)

Log Message:
-----------
Almost done with 'Phase 1': Fixed depsgraph update of modifier, fixed material index deletion, fixed face flag deletion (using face0 now as old fluid code)

Modified Paths:
--------------
    branches/fluidcontrol/source/blender/blenkernel/BKE_fluidsim.h
    branches/fluidcontrol/source/blender/blenkernel/intern/fluidsim.c
    branches/fluidcontrol/source/blender/blenkernel/intern/modifier.c
    branches/fluidcontrol/source/blender/blenloader/intern/readfile.c
    branches/fluidcontrol/source/blender/src/buttons_object.c
    branches/fluidcontrol/source/blender/src/fluidsim.c

Modified: branches/fluidcontrol/source/blender/blenkernel/BKE_fluidsim.h
===================================================================
--- branches/fluidcontrol/source/blender/blenkernel/BKE_fluidsim.h	2008-07-27 11:41:39 UTC (rev 15803)
+++ branches/fluidcontrol/source/blender/blenkernel/BKE_fluidsim.h	2008-07-27 12:28:34 UTC (rev 15804)
@@ -47,7 +47,7 @@
 void fluidsim_init(FluidsimModifierData *fluidmd);
 void fluidsim_free(FluidsimModifierData *fluidmd);
 
-DerivedMesh *fluidsim_read_cache(Object *ob, FluidsimModifierData *fluidmd, int framenr, int useRenderParams);
+DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams);
 DerivedMesh *fluidsimModifier_do(FluidsimModifierData *fluidmd, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc);
 
 void fluid_get_bb(MVert *mvert, int totvert, float obmat[][4],

Modified: branches/fluidcontrol/source/blender/blenkernel/intern/fluidsim.c
===================================================================
--- branches/fluidcontrol/source/blender/blenkernel/intern/fluidsim.c	2008-07-27 11:41:39 UTC (rev 15803)
+++ branches/fluidcontrol/source/blender/blenkernel/intern/fluidsim.c	2008-07-27 12:28:34 UTC (rev 15804)
@@ -179,9 +179,9 @@
 	// clmd->sim_parms->timescale= timescale;
 	
 	/* try to read from cache */
-	if((result = fluidsim_read_cache(ob, fluidmd, framenr, useRenderParams))) 
+	if(((fss->lastgoodframe >= framenr) || (fss->lastgoodframe < 0)) && (result = fluidsim_read_cache(ob, dm, fluidmd, framenr, useRenderParams)))
 	{
-		fss->lastgoodframe = framenr;
+		// fss->lastgoodframe = framenr; // set also in src/fluidsim.c
 		return result;
 	}
 	else
@@ -189,13 +189,20 @@
 		// display last known good frame
 		if(fss->lastgoodframe >= 0)
 		{
-			if((result = fluidsim_read_cache(ob, fluidmd, fss->lastgoodframe, useRenderParams))) 
+			if((result = fluidsim_read_cache(ob, dm, fluidmd, fss->lastgoodframe, useRenderParams))) 
 			{
 				return result;
 			}
 			
 			// it was supposed to be a valid frame but it isn't!
-			fss->lastgoodframe = -1;
+			fss->lastgoodframe = framenr - 1;
+			
+			
+			// this could be likely the case when you load an old fluidsim
+			if((result = fluidsim_read_cache(ob, dm, fluidmd, fss->lastgoodframe, useRenderParams))) 
+			{
+				return result;
+			}
 		}
 		
 		result = CDDM_copy(dm);
@@ -216,7 +223,7 @@
 	float wrf;
 	int gotBytes;
 	gzFile gzf;
-	int numverts = 0, numfaces = 0, numedges = 0;
+	int numverts = 0, numfaces = 0;
 	DerivedMesh *dm = NULL;
 	MFace *mface;
 	MVert *mvert;
@@ -364,13 +371,16 @@
 	return dm;
 }
 
-DerivedMesh *fluidsim_read_cache(Object *ob, FluidsimModifierData *fluidmd, int framenr, int useRenderParams)
+DerivedMesh *fluidsim_read_cache(Object *ob, DerivedMesh *orgdm, FluidsimModifierData *fluidmd, int framenr, int useRenderParams)
 {
 	int displaymode = 0;
 	int curFrame = framenr - 1 /*G.scene->r.sfra*/; /* start with 0 at start frame */
 	char targetDir[FILE_MAXFILE+FILE_MAXDIR], targetFile[FILE_MAXFILE+FILE_MAXDIR];
 	FluidsimSettings *fss = fluidmd->fss;
 	DerivedMesh *dm = NULL;
+	MFace *mface;
+	int numfaces;
+	int mat_nr, flag, i;
 	
 	if(!useRenderParams) {
 		displaymode = fss->guiDisplayMode;
@@ -421,6 +431,19 @@
 		// display org. object upon failure which is in dm
 		return NULL;
 	}
+	
+	// assign material + flags to new dm
+	mface = orgdm->getFaceArray(orgdm);
+	mat_nr = mface[0].mat_nr;
+	flag = mface[0].flag;
+	
+	mface = dm->getFaceArray(dm);
+	numfaces = dm->getNumFaces(dm);
+	for(i=0; i<numfaces; i++) 
+	{
+		mface[i].mat_nr = mat_nr;
+		mface[i].flag = flag;
+	}
 
 	// load vertex velocities, if they exist...
 	// TODO? use generate flag as loading flag as well?

Modified: branches/fluidcontrol/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/fluidcontrol/source/blender/blenkernel/intern/modifier.c	2008-07-27 11:41:39 UTC (rev 15803)
+++ branches/fluidcontrol/source/blender/blenkernel/intern/modifier.c	2008-07-27 12:28:34 UTC (rev 15804)
@@ -6932,6 +6932,36 @@
 	return derivedData;
 }
 
+static void fluidsimModifier_updateDepgraph(
+		ModifierData *md, DagForest *forest,
+      Object *ob, DagNode *obNode)
+{
+	FluidsimModifierData *fluidmd= (FluidsimModifierData*) md;
+	Base *base;
+
+	if(fluidmd && fluidmd->fss)
+	{
+		if(fluidmd->fss->type == OB_FLUIDSIM_DOMAIN)
+		{
+			for(base = G.scene->base.first; base; base= base->next) 
+			{
+				Object *ob1= base->object;
+				if(ob1 != ob)
+				{
+					FluidsimModifierData *fluidmdtmp = (FluidsimModifierData *)modifiers_findByType(ob1, eModifierType_Fluidsim);
+					
+					// only put dependancies from NON-DOMAIN fluids in here
+					if(fluidmdtmp && fluidmdtmp->fss && (fluidmdtmp->fss->type!=OB_FLUIDSIM_DOMAIN))
+					{
+						DagNode *curNode = dag_get_node(forest, ob1);
+						dag_add_relation(forest, curNode, obNode, DAG_RL_DATA_DATA|DAG_RL_OB_DATA, "Fluidsim Object");
+					}
+				}
+			}
+		}
+	}
+}
+
 static int fluidsimModifier_dependsOnTime(ModifierData *md) 
 {
 	return 1;
@@ -7577,6 +7607,7 @@
 		mti->freeData = fluidsimModifier_freeData;
 		mti->dependsOnTime = fluidsimModifier_dependsOnTime;
 		mti->applyModifier = fluidsimModifier_applyModifier;
+		mti->updateDepgraph = fluidsimModifier_updateDepgraph;
 
 		typeArrInit = 0;
 #undef INIT_TYPE

Modified: branches/fluidcontrol/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/fluidcontrol/source/blender/blenloader/intern/readfile.c	2008-07-27 11:41:39 UTC (rev 15803)
+++ branches/fluidcontrol/source/blender/blenloader/intern/readfile.c	2008-07-27 12:28:34 UTC (rev 15804)
@@ -7745,6 +7745,8 @@
 				fluidmd->fss = MEM_dupallocN(ob->fluidsimSettings);
 				fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo);
 				MEM_freeN(ob->fluidsimSettings);
+				
+				fluidmd->fss->lastgoodframe = INT_MAX;
 			}
 		}
 	}

Modified: branches/fluidcontrol/source/blender/src/buttons_object.c
===================================================================
--- branches/fluidcontrol/source/blender/src/buttons_object.c	2008-07-27 11:41:39 UTC (rev 15803)
+++ branches/fluidcontrol/source/blender/src/buttons_object.c	2008-07-27 12:28:34 UTC (rev 15804)
@@ -5041,7 +5041,6 @@
 		{
 			const int maxRes = 512;
 			char memString[32];
-			int i;
 			Mesh *mesh = ob->data;
 		
 			// use mesh bounding box and object scaling

Modified: branches/fluidcontrol/source/blender/src/fluidsim.c
===================================================================
--- branches/fluidcontrol/source/blender/src/fluidsim.c	2008-07-27 11:41:39 UTC (rev 15803)
+++ branches/fluidcontrol/source/blender/src/fluidsim.c	2008-07-27 12:28:34 UTC (rev 15804)
@@ -1038,6 +1038,10 @@
 					if(event == ESCKEY) {
 						// abort...
 						SDL_mutexP(globalBakeLock);
+						
+						if(domainSettings)
+							domainSettings->lastgoodframe = startFrame+globalBakeFrame;
+						
 						done = -1;
 						globalBakeFrame = 0;
 						globalBakeState = -1;
@@ -1078,6 +1082,13 @@
 
 	// go back to "current" blender time
 	waitcursor(0);
+	
+	if(globalBakeState >= 0)
+	{
+		if(domainSettings)
+			domainSettings->lastgoodframe = startFrame+globalBakeFrame;
+	}
+	
   G.scene->r.cfra = origFrame;
   scene_update_for_newframe(G.scene, G.scene->lay);
 	allqueue(REDRAWVIEW3D, 0);





More information about the Bf-blender-cvs mailing list