Commit: e97db72ae40652501fb2486913a23f0b9625f75e
Author: Bastien Montagne
Date:   Tue Mar 29 17:45:56 2016 +0200
Branches: blender-v2.77-release
https://developer.blender.org/rBe97db72ae40652501fb2486913a23f0b9625f75e

Fix T47902: Particle grid not using modifier stack, Take II.

Now only fix correct handling of use_modifier_stack for grid distribution,
fixing it globally breaks all existing edited hair systems. :/

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

M       source/blender/blenkernel/intern/particle_distribute.c

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

diff --git a/source/blender/blenkernel/intern/particle_distribute.c 
b/source/blender/blenkernel/intern/particle_distribute.c
index 1c4099f..0e45f6b 100644
--- a/source/blender/blenkernel/intern/particle_distribute.c
+++ b/source/blender/blenkernel/intern/particle_distribute.c
@@ -795,6 +795,11 @@ static int 
psys_thread_context_init_distribute(ParticleThreadContext *ctx, Parti
                return 0;
        }
        
+       /* XXX This distribution code is totally broken in case from == 
PART_FROM_CHILD, it's always using finaldm
+        *     even if use_modifier_stack is unset... But making things 
consistent here break all existing edited
+        *     hair systems, so better wait for complete rewrite.
+        */
+
        psys_thread_context_init(ctx, sim);
        
        /* First handle special cases */
@@ -810,10 +815,20 @@ 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);
+
+                       if (psys->part->use_modifier_stack) {
+                               dm = finaldm;
+                       }
+                       else {
+                               dm = CDDM_from_mesh((Mesh*)ob->data);
+                       }
+
                        distribute_grid(dm,psys);
-                       dm->release(dm);
+
+                       if (dm != finaldm) {
+                               dm->release(dm);
+                       }
+
                        return 0;
                }
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to