[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