Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-07-01 11:32:30 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-07-01 11:34:52 +0300
commitcb1777d3b6b37670c3522791d7b36c58029cf58d (patch)
tree30ec79da31c507ca9f14a5d6a3bce5d62e06db3d
parenta8355471b92fee025cfa3785c8ea45ef3f3badef (diff)
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.
-rw-r--r--source/blender/blenkernel/intern/particle_system.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 3a19ca7304c..1495e914ad1 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -558,10 +558,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);
+ }
}
}