Commit: 2f96dbd3fc5e4d30b568f9278bf58ed42cecafe9
Author: Roman Pogribnyi
Date:   Tue Aug 12 22:42:23 2014 +0200
Branches: soc-2014-fluid
https://developer.blender.org/rB2f96dbd3fc5e4d30b568f9278bf58ed42cecafe9

invoking BKE_cache_write when read from cached files successful; handling 
wavelet

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

M       intern/smoke/extern/smoke_API.h
M       intern/smoke/intern/MANTA.cpp
M       intern/smoke/intern/MANTA.h
M       intern/smoke/intern/smoke_API.cpp
M       source/blender/blenkernel/intern/smoke.c

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

diff --git a/intern/smoke/extern/smoke_API.h b/intern/smoke/extern/smoke_API.h
index 7ef01cf..f49c144 100644
--- a/intern/smoke/extern/smoke_API.h
+++ b/intern/smoke/extern/smoke_API.h
@@ -114,7 +114,7 @@ void smoke_ensure_fire(struct FLUID_3D *fluid, struct 
WTURBULENCE *wt);
 void smoke_ensure_colors(struct FLUID_3D *fluid, struct WTURBULENCE *wt, float 
init_r, float init_g, float init_b);
 
 /*Mantaflow functions*/
-int smoke_mantaflow_read(struct FLUID_3D *fluid, char* name); //1:success, 0: 
no file,error
+int smoke_mantaflow_read(struct SmokeDomainSettings *sds, char* name, bool 
with_wavelets); //1:success, 0: no file,error
 void smoke_mantaflow_write_scene_file(struct Scene *s, struct 
SmokeModifierData *smd);
 void smoke_mantaflow_sim_step(struct Scene *scene, struct SmokeModifierData 
*smd);
 void smoke_mantaflow_stop_sim();
diff --git a/intern/smoke/intern/MANTA.cpp b/intern/smoke/intern/MANTA.cpp
index 9248086..4312f4e 100644
--- a/intern/smoke/intern/MANTA.cpp
+++ b/intern/smoke/intern/MANTA.cpp
@@ -1,5 +1,5 @@
 #include "MANTA.h"
-
+#include "WTURBULENCE.h"
 //#include "../../../source/blender/blenlib/BLI_fileops.h"
 //#include "../../../source/blender/python/manta_pp/pwrapper/pymain.cpp"
 
@@ -15,7 +15,18 @@ extern "C" bool manta_check_grid_size(struct FLUID_3D 
*fluid, int dimX, int dimY
        return true;
 }
 
-extern "C" int read_mantaflow_sim(struct FLUID_3D *fluid, char *name)
+extern "C" bool manta_check_wavelets_size(struct WTURBULENCE *wt, int dimX, 
int dimY, int dimZ)
+{
+       if (!(dimX == wt->_xResBig && dimY == wt->_yResBig && dimZ == 
wt->_zResBig)) {
+               for (int cnt(0); cnt < wt->_totalCellsBig; cnt++)
+                       wt->_densityBig[cnt] = 0.0f;
+               return false;
+       }
+       return true;
+}
+
+//PR need SMD data here for wavelets 
+extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, 
bool reading_wavelets)
 {
     /*! legacy headers for reading old files */
        typedef struct {
@@ -39,40 +50,63 @@ extern "C" int read_mantaflow_sim(struct FLUID_3D *fluid, 
char *name)
 #      if NO_ZLIB!=1
     gzFile gzf = gzopen(name, "rb");
     if (!gzf) {
-               for (int cnt(0); cnt < fluid->_totalCells; cnt++)
-                       fluid->_density[cnt] = 0.0f;
+               if(reading_wavelets){
+                       for (int cnt(0); cnt < sds->wt->_totalCellsBig; cnt++)
+                               sds->wt->_densityBig[cnt] = 0.0f;
+               }
+               else{
+                       for (int cnt(0); cnt < sds->fluid->_totalCells; cnt++)
+                               sds->fluid->_density[cnt] = 0.0f;
+               }
                return 0;
        }
        
     char ID[5] = {0,0,0,0,0};
        gzread(gzf, ID, 4);
-       
        /* legacy file format */
     if (!strcmp(ID, "DDF2")) {
         UniLegacyHeader head;
                gzread(gzf, &head, sizeof(UniLegacyHeader));
-               if (!manta_check_grid_size(fluid, head.dimX, head.dimY, 
head.dimZ))     return 0;
         int numEl = head.dimX*head.dimY*head.dimZ;
         gzseek(gzf, numEl, SEEK_CUR);
         /* actual grid read */
-        gzread(gzf, fluid->_density, sizeof(float)*numEl);
-    } 
+        if ( ! reading_wavelets){
+                       if (!manta_check_grid_size(sds->fluid, head.dimX, 
head.dimY, head.dimZ))        return 0;
+                       gzread(gzf, sds->fluid->_density, sizeof(float)*numEl);
+               }
+               else {
+                       if (!manta_check_wavelets_size(sds->wt, head.dimX, 
head.dimY, head.dimZ))       return 0;
+                       gzread(gzf, sds->wt->_densityBig, sizeof(float)*numEl);
+       } 
+       }
        /* legacy file format 2 */
     else if (!strcmp(ID, "MNT1")) {
         UniLegacyHeader2 head;
         gzread(gzf, &head, sizeof(UniLegacyHeader2));
-               if (!manta_check_grid_size(fluid, head.dimX, head.dimY, 
head.dimZ))     return 0;
-        /* actual grid read*/
-        gzread(gzf, fluid->_density, 
sizeof(float)*head.dimX*head.dimY*head.dimZ);
-    }
+               /* actual grid read*/
+        if ( ! reading_wavelets){
+                       if (!manta_check_grid_size(sds->fluid, head.dimX, 
head.dimY, head.dimZ))        return 0;
+               gzread(gzf, sds->fluid->_density, 
sizeof(float)*head.dimX*head.dimY*head.dimZ);
+       }
+               else{
+                       if (!manta_check_wavelets_size(sds->wt, head.dimX, 
head.dimY, head.dimZ))       return 0;
+               gzread(gzf, sds->wt->_densityBig, 
sizeof(float)*head.dimX*head.dimY*head.dimZ);
+       }
+       }
        /* current file format*/
     else if (!strcmp(ID, "MNT2")) {
         UniHeader head;
         gzread(gzf, &head, sizeof(UniHeader));
-               if (!manta_check_grid_size(fluid, head.dimX, head.dimY, 
head.dimZ))     return 0;
                /* actual grid read */
-        gzread(gzf,fluid->_density, 
sizeof(float)*head.dimX*head.dimY*head.dimZ);
-    }
+        if ( ! reading_wavelets){
+                       if (!manta_check_grid_size(sds->fluid, head.dimX, 
head.dimY, head.dimZ))        return 0;
+                       gzread(gzf,sds->fluid->_density, 
sizeof(float)*head.dimX*head.dimY*head.dimZ);
+       }
+               else{
+                       if (!manta_check_wavelets_size(sds->wt, head.dimX, 
head.dimY, head.dimZ))       return 0;
+                       gzread(gzf,sds->wt->_densityBig, 
sizeof(float)*head.dimX*head.dimY*head.dimZ);
+               }
+       }
     gzclose(gzf);
        return 1;
 #      endif   /*zlib*/
@@ -446,6 +480,7 @@ void generate_manta_sim_file(Scene *scene, 
SmokeModifierData *smd)
                ss << "    advectSemiLagrange(flags=xl_flags, vel=xl_vel, 
grid=xl_density, order=2)  \n";
                ss << "  if (applyInflow): \n";
                ss << "    densityInflowMesh( flags=xl_flags, 
density=xl_density, noise=xl_noise, mesh=xl_source, scale=1, sigma=0.5 ) \n";
+               ss << "  xl_density.save('densityXl_%04d.uni' % t)\n";
                //ss << "    densityInflow( flags=xl_flags, density=xl_density, 
noise=xl_noise, shape=xl_source, scale=1, sigma=0.5 ) \n";
 //             ss << "  xl.step()   \n";
        }
diff --git a/intern/smoke/intern/MANTA.h b/intern/smoke/intern/MANTA.h
index a04916d..a70b449 100644
--- a/intern/smoke/intern/MANTA.h
+++ b/intern/smoke/intern/MANTA.h
@@ -29,7 +29,7 @@ void runMantaScript(vector<string>& args);//defined in 
manta_pp/pwrapper/pymain.
 
 extern "C" bool manta_check_grid_size(struct FLUID_3D *fluid, int dimX, int 
dimY, int dimZ);
 
-extern "C" int read_mantaflow_sim(struct FLUID_3D *fluid, char *name);
+extern "C" int read_mantaflow_sim(struct SmokeDomainSettings *sds, char *name, 
bool read_wavelets);
 
 void indent_ss(stringstream& ss, int indent);
 
diff --git a/intern/smoke/intern/smoke_API.cpp 
b/intern/smoke/intern/smoke_API.cpp
index 7eb2150..5cce068 100644
--- a/intern/smoke/intern/smoke_API.cpp
+++ b/intern/smoke/intern/smoke_API.cpp
@@ -501,9 +501,9 @@ extern "C" void smoke_ensure_colors(FLUID_3D *fluid, 
WTURBULENCE *wt, float init
 }
 
 /*MantaFlow funcs*/
-extern "C" int smoke_mantaflow_read(struct FLUID_3D *fluid, char* name)
+extern "C" int smoke_mantaflow_read(struct SmokeDomainSettings *sds, char* 
name, bool with_wavelets)
 {
-       return read_mantaflow_sim(fluid, name);
+       return read_mantaflow_sim(sds, name, with_wavelets);
 }
 
 extern "C" void smoke_mantaflow_write_scene_file(struct Scene *s, struct 
SmokeModifierData *smd)
diff --git a/source/blender/blenkernel/intern/smoke.c 
b/source/blender/blenkernel/intern/smoke.c
index 512de1b..46c8263 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -2769,12 +2769,23 @@ static void smokeModifier_process(SmokeModifierData 
*smd, Scene *scene, Object *
                
                if(smd->domain->flags & MOD_SMOKE_USE_MANTA)    /*load manta 
sim data into fluid object*/
                {
+                       const char *density_name_format = "./den%04d.uni";
+                       const char *wavelets_name_format = 
"./densityXL_%04d.uni";
                        char buff[100];
                        if(smd->domain->manta_start_frame > scene->r.cfra)
                                return;
-                       sprintf(buff, "./den%04d.uni", scene->r.cfra - 
smd->domain->manta_start_frame);
-                       if (smoke_mantaflow_read(smd->domain->fluid, buff))
-                       {       BKE_ptcache_write(&pid, framenr);
+                       sprintf(buff, density_name_format, scene->r.cfra - 
smd->domain->manta_start_frame);
+                       bool read_density = smoke_mantaflow_read(smd->domain, 
buff, 0);
+                       bool read_wavelets = 1;
+                       if (smd->domain->flags & MOD_SMOKE_HIGHRES)
+                       {
+                       /*highdres*/
+                               sprintf(buff, wavelets_name_format, 
scene->r.cfra - smd->domain->manta_start_frame);
+                               read_wavelets = 
smoke_mantaflow_read(smd->domain, buff, 1);     
+                       }
+                       if(read_density && read_wavelets)
+                       {       
+                               BKE_ptcache_write(&pid, framenr);
                        }
                }

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

Reply via email to