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);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to