[Bf-blender-cvs] [0bc6306] fracture_modifier: crash fix for particle grid emission, do not allow to re-distribute particles there...
Martin Felke
noreply at git.blender.org
Thu Jan 5 01:40:07 CET 2017
Commit: 0bc63068cec3cdbe2d380b2e6c2813a1b1b1d663
Author: Martin Felke
Date: Thu Jan 5 01:39:28 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rB0bc63068cec3cdbe2d380b2e6c2813a1b1b1d663
crash fix for particle grid emission, do not allow to re-distribute particles there...
===================================================================
M source/blender/blenkernel/intern/particle_system.c
===================================================================
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 6bc50c2..e882391 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -3850,7 +3850,8 @@ static void particles_fluid_step(ParticleSimulationData *sim, int UNUSED(cfra),
#endif // WITH_MOD_FLUID
}
-static int emit_particles(ParticleSimulationData *sim, PTCacheID *pid, float UNUSED(cfra))
+static int emit_particles(ParticleSimulationData *sim, PTCacheID *pid, float UNUSED(cfra),
+ ParticleSettings *part)
{
ParticleSystem *psys = sim->psys;
int oldtotpart = psys->totpart;
@@ -3859,8 +3860,11 @@ static int emit_particles(ParticleSimulationData *sim, PTCacheID *pid, float UNU
if (totpart != oldtotpart)
realloc_particles(sim, totpart);
- //always allow redistribution of particles !
- //return totpart - oldtotpart;
+ //always allow redistribution of particles, except on grid !
+ if (part->distr == PART_DISTR_GRID) {
+ return totpart - oldtotpart;
+ }
+
return 1;
}
@@ -3905,9 +3909,9 @@ static void system_step(ParticleSimulationData *sim, float cfra, const bool use_
/* 1. emit particles and redo particles if needed */
oldtotpart = psys->totpart;
- emitcount = emit_particles(sim, pid, cfra);
+ emitcount = emit_particles(sim, pid, cfra, part);
if (emitcount || psys->recalc & PSYS_RECALC_RESET) {
- if (distribute_particles(sim, part->from)) {
+ if (distribute_particles(sim, part->from) || part->distr == PART_DISTR_GRID) {
initialize_all_particles(sim);
/* reset only just created particles (on startframe all particles are recreated) */
reset_all_particles(sim, 0.0, cfra, oldtotpart);
@@ -4279,9 +4283,9 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys, cons
if (psys->recalc & PSYS_RECALC_RESET)
psys_reset(psys, PSYS_RESET_ALL);
- if (emit_particles(&sim, NULL, cfra) || (psys->recalc & PSYS_RECALC_RESET)) {
+ if (emit_particles(&sim, NULL, cfra, part) || (psys->recalc & PSYS_RECALC_RESET)) {
free_keyed_keys(psys);
- if (distribute_particles(&sim, part->from)) {
+ if (distribute_particles(&sim, part->from) || part->distr == PART_DISTR_GRID) {
initialize_all_particles(&sim);
}
else {
More information about the Bf-blender-cvs
mailing list