[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