diff options
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 5220d5be2ca..375792a02c2 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -458,6 +458,7 @@ static void curve_to_displist(Curve *cu, /** * \param normal_proj: Optional normal that's used to project the scanfill verts into 2d coords. * Pass this along if known since it saves time calculating the normal. + * This is also used to initialize #DispList.nors (one normal per display list). * \param flipnormal: Flip the normal (same as passing \a normal_proj negated) */ void BKE_displist_fill(ListBase *dispbase, @@ -550,6 +551,18 @@ void BKE_displist_fill(ListBase *dispbase, dlnew->index = MEM_mallocN(sizeof(int[3]) * tot, "dlindex"); dlnew->verts = MEM_mallocN(sizeof(float[3]) * totvert, "dlverts"); + if (normal_proj != NULL) { + /* Use a single normal for #DL_INDEX3. + * Counter intuitively, the normal must always be the flipped projection vector. */ + dlnew->nors = MEM_mallocN(sizeof(float[3]), "dlnors"); + if (flipnormal) { + copy_v3_v3(dlnew->nors, normal_proj); + } + else { + negate_v3_v3(dlnew->nors, normal_proj); + } + } + /* vert data */ f1 = dlnew->verts; totvert = 0; |