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:
authorCampbell Barton <ideasman42@gmail.com>2013-12-28 18:36:51 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-12-28 18:38:10 +0400
commita06c9c277a8577f7ef473fffaf2258d2a3a6ab80 (patch)
tree9ddd536b74fa17202ceab8866a8f01c56a02cc48 /source/blender/blenkernel/intern/anim.c
parentfa9b5d544993a619347e555ee708078913b7ec97 (diff)
Fix regression T37971: Crash setting recursive dupli-verts
Diffstat (limited to 'source/blender/blenkernel/intern/anim.c')
-rw-r--r--source/blender/blenkernel/intern/anim.c9
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 */