Fix T61353: Crash converting a curve to a mesh

This was caused by curves pointing to each other
creating a cyclic dependency.

While the dependency graph detects this, generating a mesh for render
recursively generates data which cashes in this case.

Add in a check to detect cyclic links.

Note, this bug exists in 2.7x too - but only crashes on render
since 2.7x didn't use 'for_render' when converting data.
This commit is contained in:
2019-02-14 17:21:55 +11:00
parent caa8e7ff28
commit 6074f62d1a
11 changed files with 58 additions and 25 deletions

View File

@@ -27,6 +27,7 @@ struct Curve;
struct Depsgraph;
struct EditNurb;
struct GHash;
struct LinkNode;
struct ListBase;
struct Main;
struct Nurb;
@@ -119,7 +120,8 @@ void BKE_curve_bevelList_free(struct ListBase *bev);
void BKE_curve_bevelList_make(struct Object *ob, struct ListBase *nurbs, bool for_render);
void BKE_curve_bevel_make(
struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct ListBase *disp,
const bool for_render, const bool use_render_resolution);
const bool for_render, const bool use_render_resolution,
struct LinkNode *ob_cyclic_list);
void BKE_curve_forward_diff_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);
void BKE_curve_forward_diff_tangent_bezier(float q0, float q1, float q2, float q3, float *p, int it, int stride);