[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33416] trunk/blender/source/blender: Bugfix #24890

Ton Roosendaal ton at blender.org
Wed Dec 1 16:58:45 CET 2010


Revision: 33416
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33416
Author:   ton
Date:     2010-12-01 16:58:45 +0100 (Wed, 01 Dec 2010)

Log Message:
-----------
Bugfix #24890

Particle cache reading: crash when loading .blend on a different
endian system, code was dumping arrays in .blend without DNA.

General warning for devs: avoid generic write_data and dynamic
arrays in DNA.

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_boid_types.h

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-12-01 15:54:35 UTC (rev 33415)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-12-01 15:58:45 UTC (rev 33416)
@@ -2931,9 +2931,24 @@
 			if(pm->index_array)
 				pm->index_array = newdataadr(fd, pm->index_array);
 			
+			/* writedata saved array of ints */
+			if(pm->index_array && (fd->flags & FD_FLAGS_SWITCH_ENDIAN)) {
+				for(i=0; i<pm->totpoint; i++)
+					SWITCH_INT(pm->index_array[i]);
+			}
+			
 			for(i=0; i<BPHYS_TOT_DATA; i++) {
-				if(pm->data[i] && pm->data_types & (1<<i))
-					pm->data[i] = newdataadr(fd, pm->data[i]);
+				pm->data[i] = newdataadr(fd, pm->data[i]);
+				
+				/* XXX the cache saves structs and data without DNA */
+				if(pm->data[i] && (fd->flags & FD_FLAGS_SWITCH_ENDIAN)) {
+					int j, tot= (BKE_ptcache_data_size (i) * pm->totpoint)/4; /* data_size returns bytes */
+					int *poin= pm->data[i];
+					
+					/* XXX fails for boid struct, it has 2 shorts */
+					for(j= 0; j<tot; j++)
+						SWITCH_INT(poin[j]);
+				}
 			}
 		}
 	}

Modified: trunk/blender/source/blender/makesdna/DNA_boid_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_boid_types.h	2010-12-01 15:54:35 UTC (rev 33415)
+++ trunk/blender/source/blender/makesdna/DNA_boid_types.h	2010-12-01 15:58:45 UTC (rev 33416)
@@ -104,6 +104,10 @@
 	eBoidMode_Liftoff,
 	NUM_BOID_MODES
 } BoidMode;
+
+
+/* XXX WARNING!!! */
+/* BoidData is NOT in DNA, it gets saved via write_data. Do not change struct */
 typedef struct BoidData {
 	float health, acc[3];
 	short state_id, mode;





More information about the Bf-blender-cvs mailing list