diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-12-28 18:36:51 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-12-28 18:38:10 +0400 |
commit | a06c9c277a8577f7ef473fffaf2258d2a3a6ab80 (patch) | |
tree | 9ddd536b74fa17202ceab8866a8f01c56a02cc48 /source/blender/blenkernel/intern | |
parent | fa9b5d544993a619347e555ee708078913b7ec97 (diff) |
Fix regression T37971: Crash setting recursive dupli-verts
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/anim.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index 779593c2f76..80890ebb947 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -942,7 +942,8 @@ static void vertex_dupli__mapFunc(void *userData, int index, const float co[3], } } -static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, float par_space_mat[4][4], int persistent_id[MAX_DUPLI_RECUR], +static void vertex_duplilist(EvaluationContext *eval_ctx, + ListBase *lb, ID *id, Scene *scene, Object *par, float par_space_mat[4][4], int persistent_id[MAX_DUPLI_RECUR], int level, short flag) { const bool use_rotation = (par->transflag & OB_DUPLIROT) != 0; @@ -965,6 +966,8 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl /* simple preventing of too deep nested groups */ if (level > MAX_DUPLI_RECUR) return; + vdd.eval_ctx = eval_ctx; + em = BKE_editmesh_from_object(par); /* get derived mesh */ @@ -976,7 +979,7 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl dm = editbmesh_get_derived_cage(scene, par, em, dm_mask); else dm = mesh_get_derived_final(scene, par, dm_mask); - + if (flag & DUPLILIST_FOR_RENDER) vdd.orco = dm->getVertDataArray(dm, CD_ORCO); else @@ -1691,7 +1694,7 @@ static void object_duplilist_recursive(EvaluationContext *eval_ctx, } else if (ob->transflag & OB_DUPLIVERTS) { if (ob->type == OB_MESH) { - vertex_duplilist(duplilist, id, scene, ob, par_space_mat, persistent_id, level + 1, flag); + vertex_duplilist(eval_ctx, duplilist, id, scene, ob, par_space_mat, persistent_id, level + 1, flag); } else if (ob->type == OB_FONT) { if (GS(id->name) == ID_SCE) { /* TODO - support dupligroups */ |