Removing ParticleSystem->frand arrays to avoid memory corruption issues
authorLukas Tönne <lukas.toenne@gmail.com>
Fri, 7 Mar 2014 09:25:56 +0000 (10:25 +0100)
committerLukas Tönne <lukas.toenne@gmail.com>
Fri, 7 Mar 2014 10:20:45 +0000 (11:20 +0100)
commit08444518e62b4c7154c1428c33adab842774aa30
tree17a55f7dae3b1b877e3f6a2d3c0a6d6cdd213c46
parent98abc80dcf52e6711d20f7e5738e5a8797567f24
Removing ParticleSystem->frand arrays to avoid memory corruption issues
in threaded depgraph updates and effector list construction.

Gathering effectors during depgraph updates will call the
psys_check_enabled function. This in turn contained a DNA alloc call
for the psys->frand RNG arrays, which is really bad because data must be
immutable during these effector constructions.

To avoid such allocs the frand array is now global for all particle
systems. To avoid correlation of pseudo-random numbers the psys->seed
value is complemented with random offset and multiplier for the actual
float array. This is not ideal, but work sufficiently well (given that
random numbers were already really limited and show repetition quite
easily for particle counts > PSYS_FRAND_COUNT).
source/blender/blenkernel/BKE_particle.h
source/blender/blenkernel/intern/boids.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/particle.c
source/blender/blenkernel/intern/particle_system.c
source/blender/blenloader/intern/readfile.c
source/blender/editors/space_view3d/drawobject.c
source/blender/makesdna/DNA_particle_types.h
source/blender/render/intern/source/convertblender.c
source/creator/creator.c