[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33713] trunk/blender/source/blender/ blenloader/intern/writefile.c: Fix for [#25202] Blender crashes when opening smoke simulations made with Blender 2.55. 1 r33530
Janne Karhu
jhkarh at gmail.com
Thu Dec 16 17:09:23 CET 2010
Revision: 33713
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33713
Author: jhk
Date: 2010-12-16 17:09:23 +0100 (Thu, 16 Dec 2010)
Log Message:
-----------
Fix for [#25202] Blender crashes when opening smoke simulations made with Blender 2.55.1 r33530
* Since r33398 smoke only uses one pointcache, but old versions want two caches so save new files with a fake second pointcache.
Modified Paths:
--------------
trunk/blender/source/blender/blenloader/intern/writefile.c
Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c 2010-12-16 14:49:50 UTC (rev 33712)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c 2010-12-16 16:09:23 UTC (rev 33713)
@@ -143,6 +143,7 @@
#include "BKE_utildefines.h" // for defines
#include "BKE_modifier.h"
#include "BKE_fcurve.h"
+#include "BKE_pointcache.h"
#include "BLO_writefile.h"
#include "BLO_readfile.h"
@@ -1176,19 +1177,32 @@
if(smd->type & MOD_SMOKE_TYPE_DOMAIN)
{
+ if(smd->domain)
+ {
+ write_pointcaches(wd, &(smd->domain->ptcaches[0]));
+
+ /* create fake pointcache so that old blender versions can read it */
+ smd->domain->point_cache[1] = BKE_ptcache_add(&smd->domain->ptcaches[1]);
+ smd->domain->point_cache[1]->flag |= PTCACHE_DISK_CACHE;
+ smd->domain->point_cache[1]->step = 1;
+
+ write_pointcaches(wd, &(smd->domain->ptcaches[1]));
+ }
+
writestruct(wd, DATA, "SmokeDomainSettings", 1, smd->domain);
- writestruct(wd, DATA, "EffectorWeights", 1, smd->domain->effector_weights);
+
+ if(smd->domain) {
+ /* cleanup the fake pointcache */
+ BKE_ptcache_free_list(&smd->domain->ptcaches[1]);
+ smd->domain->point_cache[1] = NULL;
+
+ writestruct(wd, DATA, "EffectorWeights", 1, smd->domain->effector_weights);
+ }
}
else if(smd->type & MOD_SMOKE_TYPE_FLOW)
writestruct(wd, DATA, "SmokeFlowSettings", 1, smd->flow);
else if(smd->type & MOD_SMOKE_TYPE_COLL)
writestruct(wd, DATA, "SmokeCollSettings", 1, smd->coll);
-
- if((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain)
- {
- write_pointcaches(wd, &(smd->domain->ptcaches[0]));
- write_pointcaches(wd, &(smd->domain->ptcaches[1]));
- }
}
else if(md->type==eModifierType_Fluidsim) {
FluidsimModifierData *fluidmd = (FluidsimModifierData*) md;
More information about the Bf-blender-cvs
mailing list