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