diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-04 11:41:21 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-04 11:41:21 +0400 |
commit | ec2c6038ee19d3b3a9b477b8ff68d0f86ef7a6ea (patch) | |
tree | c5d8c67c7c3f3b7987f9eef0af205b0545581ad7 /source/blender/blenkernel/intern/subsurf_ccg.c | |
parent | 84a651c7faf4a8809d3f0c6601721c1835e24c44 (diff) |
use vla's if supported as replacement to BLI_array in subsurf code.
Diffstat (limited to 'source/blender/blenkernel/intern/subsurf_ccg.c')
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index ed968bfd23d..6915fd59984 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -29,6 +29,9 @@ * \ingroup bke */ +#if __STDC_VERSION__ >= 199901L +# define USE_DYNSIZE +#endif #include <stdlib.h> #include <string.h> @@ -64,7 +67,10 @@ #include "BKE_editmesh.h" #include "PIL_time.h" -#include "BLI_array.h" + +#ifndef USE_DYNSIZE +# include "BLI_array.h" +#endif #include "GL/glew.h" @@ -288,8 +294,10 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm, UvMapVert *v; UvVertMap *vmap; float limit[2]; +#ifndef USE_DYNSIZE CCGVertHDL *fverts = NULL; BLI_array_declare(fverts); +#endif EdgeHash *ehash; float creaseFactor = (float)ccgSubSurf_getSubdivisionLevels(ss); float uv[3] = {0.0f, 0.0f, 0.0f}; /* only first 2 values are written into */ @@ -335,8 +343,12 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm, /* unsigned int *fv = &mp->v1; */ MLoop *ml = mloop + mp->loopstart; +#ifdef USE_DYNSIZE + CCGVertHDL fverts[nverts]; +#else BLI_array_empty(fverts); BLI_array_grow_items(fverts, nverts); +#endif get_face_uv_map_vert(vmap, mpoly, ml, i, fverts); @@ -371,14 +383,20 @@ static int ss_sync_from_uv(CCGSubSurf *ss, CCGSubSurf *origss, DerivedMesh *dm, int nverts = mp->totloop; CCGFace *f; +#ifdef USE_DYNSIZE + CCGVertHDL fverts[nverts]; +#else BLI_array_empty(fverts); BLI_array_grow_items(fverts, nverts); +#endif get_face_uv_map_vert(vmap, mpoly, ml, i, fverts); ccgSubSurf_syncFace(ss, SET_INT_IN_POINTER(i), nverts, fverts, &f); } +#ifndef USE_DYNSIZE BLI_array_free(fverts); +#endif BKE_mesh_uv_vert_map_free(vmap); ccgSubSurf_processSync(ss); @@ -552,8 +570,10 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, float (*vertexCos)[3], int useFlatSubdiv) { float creaseFactor = (float) ccgSubSurf_getSubdivisionLevels(ss); +#ifndef USE_DYNSIZE CCGVertHDL *fVerts = NULL; BLI_array_declare(fVerts); +#endif MVert *mvert = dm->getVertArray(dm); MEdge *medge = dm->getEdgeArray(dm); /* MFace *mface = dm->getTessFaceArray(dm); */ /* UNUSED */ @@ -606,8 +626,12 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, for (i = 0; i < dm->numPolyData; i++, mp++) { CCGFace *f; +#ifdef USE_DYNSIZE + CCGVertHDL fVerts[mp->totloop]; +#else BLI_array_empty(fVerts); BLI_array_grow_items(fVerts, mp->totloop); +#endif ml = mloop + mp->loopstart; for (j = 0; j < mp->totloop; j++, ml++) { @@ -638,7 +662,9 @@ static void ss_sync_from_derivedmesh(CCGSubSurf *ss, DerivedMesh *dm, ccgSubSurf_processSync(ss); +#ifndef USE_DYNSIZE BLI_array_free(fVerts); +#endif } /***/ @@ -3092,9 +3118,12 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, int *vertOrigIndex, *faceOrigIndex, *polyOrigIndex, *base_polyOrigIndex; /* *edgeOrigIndex - as yet, unused */ short *edgeFlags; DMFlagMat *faceFlags; - int *loopidx = NULL, *vertidx = NULL, *polyidx = NULL; + int *polyidx = NULL; +#ifndef USE_DYNSIZE + int *loopidx = NULL, *vertidx = NULL; BLI_array_declare(loopidx); BLI_array_declare(vertidx); +#endif int loopindex, loopindex2; int edgeSize, has_edge_origindex; int gridSize; @@ -3293,7 +3322,10 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, int g2_wid = gridCuts + 2; float *w, *w2; int s, x, y; - +#ifdef USE_DYNSIZE + int loopidx[numVerts], vertidx[numVerts]; +#endif + w = get_ss_weights(&wtable, gridCuts, numVerts); ccgdm->faceMap[index].startVert = vertNum; @@ -3307,14 +3339,18 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, /* set the face base vert */ *((int *)ccgSubSurf_getFaceUserData(ss, f)) = vertNum; +#ifndef USE_DYNSIZE BLI_array_empty(loopidx); BLI_array_grow_items(loopidx, numVerts); +#endif for (s = 0; s < numVerts; s++) { loopidx[s] = loopindex++; } - + +#ifndef USE_DYNSIZE BLI_array_empty(vertidx); BLI_array_grow_items(vertidx, numVerts); +#endif for (s = 0; s < numVerts; s++) { CCGVert *v = ccgSubSurf_getFaceVert(f, s); vertidx[s] = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v)); @@ -3512,8 +3548,10 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss, /* All tessellated CD layers were updated! */ ccgdm->dm.dirty &= ~DM_DIRTY_TESS_CDLAYERS; +#ifndef USE_DYNSIZE BLI_array_free(vertidx); BLI_array_free(loopidx); +#endif free_ss_weights(&wtable); return ccgdm; |