diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-01-09 14:38:22 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-01-09 14:38:22 +0400 |
commit | ec58ff19adfc8c117a289139f3060a52277aaf47 (patch) | |
tree | 25b760a80025d281b5c5931d634b9fa009a156f7 /source/blender | |
parent | a8176a9b48e2d4f7cd6ea9bb3bf86b1a14102480 (diff) |
have add_weight_mcol_dm() set the 4th corner of a tri faces color to 0, otherwise uninitialized memory gets copied about.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index d0ef517e2ae..0ff46045f78 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -761,14 +761,28 @@ static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm, int const draw_flag) Mesh *me = ob->data; unsigned char *wtcol_v = calc_weightpaint_vert_array(ob, draw_flag, coba); unsigned char *wtcol_f = MEM_mallocN (sizeof(unsigned char) * me->totface*4*4, "weightmap_f"); + unsigned char *wtcol_f_step = wtcol_f; MFace *mf = me->mface; int i; - for (i=0; i<me->totface; i++, mf++) { + for (i=0; i<me->totface; i++, mf++, wtcol_f_step += (4 * 4)) { +#if 0 unsigned int fidx= mf->v4 ? 3:2; + +#else /* better zero out triangles 4th component. else valgrind complains when the buffer's copied */ + unsigned int fidx; + if (mf->v4) { + fidx = 3; + } + else { + fidx = 2; + *(int *)(&wtcol_f_step[3 * 4]) = 0; + } +#endif + do { - copy_v4_v4_char((char *)&wtcol_f[(4 * i + fidx) * 4], + copy_v4_v4_char((char *)&wtcol_f_step[fidx * 4], (char *)&wtcol_v[4 * (*(&mf->v1 + fidx))]); } while (fidx--); } |