[Bf-blender-cvs] [9b64ebc] master: Fix T45253: Particle emitter volume mode and grid mode broken in 2.75.x

Sergey Sharybin noreply at git.blender.org
Wed Jul 1 10:34:09 CEST 2015


Commit: 9b64ebc605bafd3efa670b39dd53c100c7235cd7
Author: Sergey Sharybin
Date:   Wed Jul 1 10:32:30 2015 +0200
Branches: master
https://developer.blender.org/rB9b64ebc605bafd3efa670b39dd53c100c7235cd7

Fix T45253: Particle emitter volume mode and grid mode broken in 2.75.x

This is a regression since dced56f and root of the issue comes to the fact
that grid distribution sets UNEXIST flag during distribution, which is then
being reset in initialize_all_particles().

This commit solves the issue, but it's not really nice and some smart guy
might want to revisit it.

===================================================================

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 7aa5f1e..89db2dd 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -559,10 +559,24 @@ void initialize_particle(ParticleSimulationData *sim, ParticleData *pa)
 static void initialize_all_particles(ParticleSimulationData *sim)
 {
 	ParticleSystem *psys = sim->psys;
+	ParticleSettings *part = psys->part;
+	/* Grid distributionsets UNEXIST flag, need to take care of
+	 * it here because later this flag is being reset.
+	 *
+	 * We can't do it for any distribution, because it'll then
+	 * conflict with texture influence, which does not free
+	 * unexisting particles and only sets flag.
+	 *
+	 * It's not so bad, because only grid distribution sets
+	 * UNEXIST flag.
+	 */
+	const bool emit_from_volume_grid = (part->distr == PART_DISTR_GRID) &&
+	                                   (!ELEM(part->from, PART_FROM_VERT, PART_FROM_CHILD));
 	PARTICLE_P;
-
 	LOOP_PARTICLES {
-		initialize_particle(sim, pa);
+		if (!(emit_from_volume_grid && (pa->flag & PARS_UNEXIST) != 0)) {
+			initialize_particle(sim, pa);
+		}
 	}
 }




More information about the Bf-blender-cvs mailing list