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:
authorBastien Montagne <montagne29@wanadoo.fr>2016-03-26 00:46:19 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-03-26 02:18:00 +0300
commit2bd3acf7cd27c0c3ee77b10d56b91c3b03226d39 (patch)
treef83ff655e67443ecfb4f68fdde62e300c2264422
parent802bb422671b7c04548df954ef2ee5e77d173f05 (diff)
Fix T47902: Particle grid not using modifier stack.
Disclaimer: this is tentative fix, seems to be working but you never know with particles. If issue arise, we'll just revert this commit and hide 'use modifier stack' option for grid distribution instead. This commit also try to make choice of which dm to use during distribution more generic (deduplication of code), again hopping not to break anything. :P
-rw-r--r--source/blender/blenkernel/intern/particle_distribute.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/source/blender/blenkernel/intern/particle_distribute.c b/source/blender/blenkernel/intern/particle_distribute.c
index 2527ff5e0da..e581ac4ebb3 100644
--- a/source/blender/blenkernel/intern/particle_distribute.c
+++ b/source/blender/blenkernel/intern/particle_distribute.c
@@ -796,13 +796,23 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
}
psys_thread_context_init(ctx, sim);
-
+
+ if (psys->part->use_modifier_stack)
+ dm = finaldm;
+ else
+ dm= CDDM_from_mesh((Mesh*)ob->data);
+
+ /* BMESH ONLY, for verts we don't care about tessfaces */
+ if (from != PART_FROM_VERT) {
+ DM_ensure_tessface(dm);
+ }
+
/* First handle special cases */
if (from == PART_FROM_CHILD) {
/* Simple children */
if (part->childtype != PART_CHILD_FACES) {
BLI_srandom(31415926 + psys->seed + psys->child_seed);
- distribute_simple_children(scene, ob, finaldm, sim->psmd->dm_deformed, psys);
+ distribute_simple_children(scene, ob, dm, sim->psmd->dm_deformed, psys);
return 0;
}
}
@@ -810,10 +820,11 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
/* Grid distribution */
if (part->distr==PART_DISTR_GRID && from != PART_FROM_VERT) {
BLI_srandom(31415926 + psys->seed);
- dm= CDDM_from_mesh((Mesh*)ob->data);
- DM_ensure_tessface(dm);
- distribute_grid(dm,psys);
- dm->release(dm);
+
+ distribute_grid(dm, psys);
+
+ if (dm != finaldm) dm->release(dm);
+
return 0;
}
}
@@ -822,10 +833,6 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
if (from == PART_FROM_CHILD) {
distr=PART_DISTR_RAND;
BLI_srandom(31415926 + psys->seed + psys->child_seed);
- dm= finaldm;
-
- /* BMESH ONLY */
- DM_ensure_tessface(dm);
children=1;
@@ -846,16 +853,6 @@ static int psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
distr = part->distr;
BLI_srandom(31415926 + psys->seed);
- if (psys->part->use_modifier_stack)
- dm = finaldm;
- else
- dm= CDDM_from_mesh((Mesh*)ob->data);
-
- /* BMESH ONLY, for verts we don't care about tessfaces */
- if (from != PART_FROM_VERT) {
- DM_ensure_tessface(dm);
- }
-
/* we need orco for consistent distributions */
if (!CustomData_has_layer(&dm->vertData, CD_ORCO))
DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, BKE_mesh_orco_verts_get(ob));