[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57227] trunk/blender/source/blender/ blenkernel/intern/subsurf_ccg.c: use vla' s if supported as replacement to BLI_array in subsurf code.
Campbell Barton
ideasman42 at gmail.com
Tue Jun 4 09:41:21 CEST 2013
Revision: 57227
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57227
Author: campbellbarton
Date: 2013-06-04 07:41:21 +0000 (Tue, 04 Jun 2013)
Log Message:
-----------
use vla's if supported as replacement to BLI_array in subsurf code.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c 2013-06-04 06:40:35 UTC (rev 57226)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c 2013-06-04 07:41:21 UTC (rev 57227)
@@ -29,6 +29,9 @@
* \ingroup bke
*/
+#if __STDC_VERSION__ >= 199901L
+# define USE_DYNSIZE
+#endif
#include <stdlib.h>
#include <string.h>
@@ -64,8 +67,11 @@
#include "BKE_editmesh.h"
#include "PIL_time.h"
-#include "BLI_array.h"
+#ifndef USE_DYNSIZE
+# include "BLI_array.h"
+#endif
+
#include "GL/glew.h"
#include "GPU_draw.h"
@@ -288,8 +294,10 @@
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 @@
/* 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 @@
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 @@
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 @@
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 @@
ccgSubSurf_processSync(ss);
+#ifndef USE_DYNSIZE
BLI_array_free(fVerts);
+#endif
}
/***/
@@ -3092,9 +3118,12 @@
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 @@
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 @@
/* 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 @@
/* 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;
More information about the Bf-blender-cvs
mailing list