diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-03-16 04:41:32 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-03-16 04:41:32 +0400 |
commit | db77fdc6ff99e25c00d73d5978f64daca5ce2b30 (patch) | |
tree | 7ee2e03653d2dae0da9ed1d1a998bcb4d3d33eb4 /source/blender/bmesh/operators/bmo_extrude.c | |
parent | 1b994dbeb0e6ea7220e636d2b828eb427065772b (diff) |
fix for own mistake in using alloca in a loop, replace with BLI_buffer
Diffstat (limited to 'source/blender/bmesh/operators/bmo_extrude.c')
-rw-r--r-- | source/blender/bmesh/operators/bmo_extrude.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c index 992123a86d5..62220510623 100644 --- a/source/blender/bmesh/operators/bmo_extrude.c +++ b/source/blender/bmesh/operators/bmo_extrude.c @@ -30,6 +30,7 @@ #include "BLI_math.h" #include "BLI_array.h" +#include "BLI_buffer.h" #include "BKE_customdata.h" @@ -612,15 +613,18 @@ static void solidify_add_thickness(BMesh *bm, const float dist) float *vert_accum = vert_angles + bm->totvert; int i, index; + BLI_buffer_declare_static(float, face_angles_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE); + BLI_buffer_declare_static(float *, verts_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE); + BM_mesh_elem_index_ensure(bm, BM_VERT); BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { if (BMO_elem_flag_test(bm, f, FACE_MARK)) { /* array for passing verts to angle_poly_v3 */ - float *face_angles = BLI_array_alloca(face_angles, f->len); + float *face_angles = BLI_buffer_resize_data(&face_angles_buf, float, f->len); /* array for receiving angles from angle_poly_v3 */ - float **verts = BLI_array_alloca(verts, f->len); + float **verts = BLI_buffer_resize_data(&verts_buf, float *, f->len); BM_ITER_ELEM_INDEX (l, &loopIter, f, BM_LOOPS_OF_FACE, i) { verts[i] = l->v->co; @@ -639,6 +643,9 @@ static void solidify_add_thickness(BMesh *bm, const float dist) } } + BLI_buffer_free(&face_angles_buf); + BLI_buffer_free(&verts_buf); + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { index = BM_elem_index_get(v); if (vert_accum[index]) { /* zero if unselected */ |