Commit: 03742faf431e39887acd42dfd46de99ae49e6bb3
Author: Sebastián Barschkis
Date:   Thu Jun 29 14:42:33 2017 +0200
Branches: fluid-mantaflow
https://developer.blender.org/rB03742faf431e39887acd42dfd46de99ae49e6bb3

added guards in pointcache read/write functions

if we want to use ptcache format for liquids, first make sure not to access 
smoke fields.

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

M       source/blender/blenkernel/intern/pointcache.c

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

diff --git a/source/blender/blenkernel/intern/pointcache.c 
b/source/blender/blenkernel/intern/pointcache.c
index 58da1525c44..9ba1dace233 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -608,17 +608,19 @@ static int ptcache_smoke_write(PTCacheFile *pf, void 
*smoke_v)
 
                smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, 
&fuel, &heat, &vx, &vy, &vz, &r, &g, &b, &obstacles);
 
-               ptcache_file_compressed_write(pf, (unsigned char *)sds->shadow, 
in_len, out, mode);
-               ptcache_file_compressed_write(pf, (unsigned char *)dens, 
in_len, out, mode);
-               if (fluid_fields & SM_ACTIVE_HEAT) {
+               if (dens) {
+                       ptcache_file_compressed_write(pf, (unsigned char 
*)sds->shadow, in_len, out, mode);
+                       ptcache_file_compressed_write(pf, (unsigned char 
*)dens, in_len, out, mode);
+               }
+               if (heat && fluid_fields & SM_ACTIVE_HEAT) {
                        ptcache_file_compressed_write(pf, (unsigned char 
*)heat, in_len, out, mode);
                }
-               if (fluid_fields & SM_ACTIVE_FIRE) {
+               if (flame && fluid_fields & SM_ACTIVE_FIRE) {
                        ptcache_file_compressed_write(pf, (unsigned char 
*)flame, in_len, out, mode);
                        ptcache_file_compressed_write(pf, (unsigned char 
*)fuel, in_len, out, mode);
                        ptcache_file_compressed_write(pf, (unsigned char 
*)react, in_len, out, mode);
                }
-               if (fluid_fields & SM_ACTIVE_COLORS) {
+               if (r && fluid_fields & SM_ACTIVE_COLORS) {
                        ptcache_file_compressed_write(pf, (unsigned char *)r, 
in_len, out, mode);
                        ptcache_file_compressed_write(pf, (unsigned char *)g, 
in_len, out, mode);
                        ptcache_file_compressed_write(pf, (unsigned char *)b, 
in_len, out, mode);
@@ -658,16 +660,17 @@ static int ptcache_smoke_write(PTCacheFile *pf, void 
*smoke_v)
                smoke_turbulence_get_res(sds->fluid, res_big_array);
 
                res_big = res_big_array[0]*res_big_array[1]*res_big_array[2];
+               in_len_big = sizeof(float) * (unsigned int)res_big;
+               out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len_big), 
"pointcache_lzo_buffer");
                //mode =  res_big >= 1000000 ? 2 : 1;
                mode = 1;       // light
                if (sds->cache_high_comp == SM_CACHE_HEAVY) mode=2;     // heavy
 
-               in_len_big = sizeof(float) * (unsigned int)res_big;
-
                smoke_turbulence_export(sds->fluid, &dens, &react, &flame, 
&fuel, &r, &g, &b, &tcu, &tcv, &tcw, &tcu2, &tcv2, &tcw2);
 
-               out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len_big), 
"pointcache_lzo_buffer");
-               ptcache_file_compressed_write(pf, (unsigned char *)dens, 
in_len_big, out, mode);
+               if (dens) {
+                       ptcache_file_compressed_write(pf, (unsigned char 
*)dens, in_len_big, out, mode);
+               }
                if (fluid_fields & SM_ACTIVE_FIRE) {
                        ptcache_file_compressed_write(pf, (unsigned char 
*)flame, in_len_big, out, mode);
                        ptcache_file_compressed_write(pf, (unsigned char 
*)fuel, in_len_big, out, mode);
@@ -681,13 +684,16 @@ static int ptcache_smoke_write(PTCacheFile *pf, void 
*smoke_v)
                MEM_freeN(out);
 
                out = (unsigned char *)MEM_callocN(LZO_OUT_LEN(in_len), 
"pointcache_lzo_buffer");
-               ptcache_file_compressed_write(pf, (unsigned char *)tcu, in_len, 
out, mode);
-               ptcache_file_compressed_write(pf, (unsigned char *)tcv, in_len, 
out, mode);
-               ptcache_file_compressed_write(pf, (unsigned char *)tcw, in_len, 
out, mode);
-               
-               ptcache_file_compressed_write(pf, (unsigned char *)tcu2, 
in_len, out, mode);
-               ptcache_file_compressed_write(pf, (unsigned char *)tcv2, 
in_len, out, mode);
-               ptcache_file_compressed_write(pf, (unsigned char *)tcw2, 
in_len, out, mode);
+               if (tcu) {
+                       ptcache_file_compressed_write(pf, (unsigned char *)tcu, 
in_len, out, mode);
+                       ptcache_file_compressed_write(pf, (unsigned char *)tcv, 
in_len, out, mode);
+                       ptcache_file_compressed_write(pf, (unsigned char *)tcw, 
in_len, out, mode);
+               }
+               if (tcu2) {
+                       ptcache_file_compressed_write(pf, (unsigned char 
*)tcu2, in_len, out, mode);
+                       ptcache_file_compressed_write(pf, (unsigned char 
*)tcv2, in_len, out, mode);
+                       ptcache_file_compressed_write(pf, (unsigned char 
*)tcw2, in_len, out, mode);
+               }
 
                MEM_freeN(out);
                
@@ -847,17 +853,19 @@ static int ptcache_smoke_read(PTCacheFile *pf, void 
*smoke_v)
                
                smoke_export(sds->fluid, &dt, &dx, &dens, &react, &flame, 
&fuel, &heat, &vx, &vy, &vz, &r, &g, &b, &obstacles);
 
-               ptcache_file_compressed_read(pf, (unsigned char *)sds->shadow, 
out_len);
-               ptcache_file_compressed_read(pf, (unsigned char *)dens, 
out_len);
-               if (cache_fields & SM_ACTIVE_HEAT) {
+               if (dens) {
+                       ptcache_file_compressed_read(pf, (unsigned char 
*)sds->shadow, out_len);
+                       ptcache_file_compressed_read(pf, (unsigned char *)dens, 
out_len);
+               }
+               if (heat && cache_fields & SM_ACTIVE_HEAT) {
                        ptcache_file_compressed_read(pf, (unsigned char *)heat, 
out_len);
                }
-               if (cache_fields & SM_ACTIVE_FIRE) {
+               if (flame && cache_fields & SM_ACTIVE_FIRE) {
                        ptcache_file_compressed_read(pf, (unsigned char 
*)flame, out_len);
                        ptcache_file_compressed_read(pf, (unsigned char *)fuel, 
out_len);
                        ptcache_file_compressed_read(pf, (unsigned char 
*)react, out_len);
                }
-               if (cache_fields & SM_ACTIVE_COLORS) {
+               if (r && cache_fields & SM_ACTIVE_COLORS) {
                        ptcache_file_compressed_read(pf, (unsigned char *)r, 
out_len);
                        ptcache_file_compressed_read(pf, (unsigned char *)g, 
out_len);
                        ptcache_file_compressed_read(pf, (unsigned char *)b, 
out_len);
@@ -894,25 +902,29 @@ static int ptcache_smoke_read(PTCacheFile *pf, void 
*smoke_v)
 
                smoke_turbulence_export(sds->fluid, &dens, &react, &flame, 
&fuel, &r, &g, &b, &tcu, &tcv, &tcw, &tcu2, &tcv2, &tcw2);
 
-               ptcache_file_compressed_read(pf, (unsigned char *)dens, 
out_len_big);
-               if (cache_fields & SM_ACTIVE_FIRE) {
+               if (dens) {
+                       ptcache_file_compressed_read(pf, (unsigned char *)dens, 
out_len_big);
+               }
+               if (flame && cache_fields & SM_ACTIVE_FIRE) {
                        ptcache_file_compressed_read(pf, (unsigned char 
*)flame, out_len_big);
                        ptcache_file_compressed_read(pf, (unsigned char *)fuel, 
out_len_big);
                        ptcache_file_compressed_read(pf, (unsigned char 
*)react, out_len_big);
                }
-               if (cache_fields & SM_ACTIVE_COLORS) {
+               if (r && cache_fields & SM_ACTIVE_COLORS) {
                        ptcache_file_compressed_read(pf, (unsigned char *)r, 
out_len_big);
                        ptcache_file_compressed_read(pf, (unsigned char *)g, 
out_len_big);
                        ptcache_file_compressed_read(pf, (unsigned char *)b, 
out_len_big);
                }
-
-               ptcache_file_compressed_read(pf, (unsigned char *)tcu, out_len);
-               ptcache_file_compressed_read(pf, (unsigned char *)tcv, out_len);
-               ptcache_file_compressed_read(pf, (unsigned char *)tcw, out_len);
-               
-               ptcache_file_compressed_read(pf, (unsigned char *)tcu2, 
out_len);
-               ptcache_file_compressed_read(pf, (unsigned char *)tcv2, 
out_len);
-               ptcache_file_compressed_read(pf, (unsigned char *)tcw2, 
out_len);
+               if (tcu) {
+                       ptcache_file_compressed_read(pf, (unsigned char *)tcu, 
out_len);
+                       ptcache_file_compressed_read(pf, (unsigned char *)tcv, 
out_len);
+                       ptcache_file_compressed_read(pf, (unsigned char *)tcw, 
out_len);
+               }
+               if (tcu2) {
+                       ptcache_file_compressed_read(pf, (unsigned char *)tcu2, 
out_len);
+                       ptcache_file_compressed_read(pf, (unsigned char *)tcv2, 
out_len);
+                       ptcache_file_compressed_read(pf, (unsigned char *)tcw2, 
out_len);
+               }
        }
 
        return 1;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to