Revision: 18863 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18863 Author: joeedh Date: 2009-02-08 13:41:13 +0100 (Sun, 08 Feb 2009)
Log Message: ----------- forgot that you can't simply grow an array by one, when your rotating your indexes. Modified Paths: -------------- branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h =================================================================== --- branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h 2009-02-08 12:16:35 UTC (rev 18862) +++ branches/bmesh/blender/source/blender/blenkernel/BKE_utildefines.h 2009-02-08 12:41:13 UTC (rev 18863) @@ -215,12 +215,21 @@ arr[i] = something; } V_FREE(arr); + +arrays are buffered, using double-buffering (so on each reallocation, +the array size is doubled). supposedly this should give good Big Oh +behaviour, though it may not be the best in practice. */ #define V_DECLARE(vec) int _##vec##_count=0; void *_##vec##_tmp + +/*this returns the entire size of the array, including any buffering.*/ #define V_SIZE(vec) ((vec)==NULL ? 0 : MEM_allocN_len(vec) / sizeof(*vec)) + +/*this returns the logical size of the array, not including buffering.*/ #define V_COUNT(vec) _##vec##_count -#define MSTR(s) #s + +/*grow the array by one. zeroes the new elements.*/ #define V_GROW(vec) \ V_SIZE(vec) > _##vec##_count ? _##vec##_count++ : \ ((_##vec##_tmp = MEM_callocN(sizeof(*vec)*(_##vec##_count*2+2), #vec " " __FILE__ " ")),\ @@ -229,8 +238,9 @@ (vec = _##vec##_tmp),\ _##vec##_count++) -//(vec) ? WMEM_freeN(vec), 1 : 0 #define V_FREE(vec) if (vec) MEM_freeN(vec); +/*resets the logical size of an array to zero, but doesn't + free the memory.*/ #define V_RESET(vec) _##vec##_count=0 #endif Modified: branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c =================================================================== --- branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c 2009-02-08 12:16:35 UTC (rev 18862) +++ branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c 2009-02-08 12:41:13 UTC (rev 18863) @@ -691,11 +691,14 @@ j++; } + for (j=0; j<face->len; j++) { + V_GROW(verts); + } + j = 0; for (nl=BMIter_New(&liter, bmesh, BM_LOOPS_OF_FACE, face); nl; nl=BMIter_Step(&liter)) { b = (j-a+face->len) % face->len; - V_GROW(verts); verts[b] = nl->v; j += 1; } Modified: branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c =================================================================== --- branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c 2009-02-08 12:16:35 UTC (rev 18862) +++ branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c 2009-02-08 12:41:13 UTC (rev 18863) @@ -24,10 +24,6 @@ for (i=0; i<finput->len; i++) { face = ((BMFace**)finput->data.p)[i]; - /*HACK! need to discuss with Briggs why the function takes an - externally-allocated array of vert coordinates in the first place.*/ - //if (face->len > 400) projverts = MEM_callocN(sizeof(float)*3*face->len, "projverts"); - //else projverts = projectverts; if (lastlen < face->len) { V_RESET(projectverts); for (lastlen=0; lastlen<face->len; lastlen++) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs