diff options
Diffstat (limited to 'source/blender/blenkernel/intern/CCGSubSurf.c')
-rw-r--r-- | source/blender/blenkernel/intern/CCGSubSurf.c | 1507 |
1 files changed, 860 insertions, 647 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c index 3ab52a7c17b..8f0d5e2e79c 100644 --- a/source/blender/blenkernel/intern/CCGSubSurf.c +++ b/source/blender/blenkernel/intern/CCGSubSurf.c @@ -13,9 +13,9 @@ #include "BLO_sys_types.h" // for intptr_t support #ifdef _MSC_VER -#define CCG_INLINE __inline +# define CCG_INLINE __inline #else -#define CCG_INLINE inline +# define CCG_INLINE inline #endif /* copied from BKE_utildefines.h ugh */ @@ -59,22 +59,24 @@ typedef struct _EHash { #define EHASH_hash(eh, item) (((uintptr_t) (item))%((unsigned int) (eh)->curSize)) -static EHash *_ehash_new(int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator) { +static EHash *_ehash_new(int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator) +{ EHash *eh = allocatorIFC->alloc(allocator, sizeof(*eh)); eh->allocatorIFC = *allocatorIFC; eh->allocator = allocator; eh->numEntries = 0; eh->curSizeIdx = 0; - while (kHashSizes[eh->curSizeIdx]<estimatedNumEntries) + while (kHashSizes[eh->curSizeIdx] < estimatedNumEntries) eh->curSizeIdx++; eh->curSize = kHashSizes[eh->curSizeIdx]; - eh->buckets = EHASH_alloc(eh, eh->curSize*sizeof(*eh->buckets)); - memset(eh->buckets, 0, eh->curSize*sizeof(*eh->buckets)); + eh->buckets = EHASH_alloc(eh, eh->curSize * sizeof(*eh->buckets)); + memset(eh->buckets, 0, eh->curSize * sizeof(*eh->buckets)); return eh; } typedef void (*EHEntryFreeFP)(EHEntry *, void *); -static void _ehash_free(EHash *eh, EHEntryFreeFP freeEntry, void *userData) { +static void _ehash_free(EHash *eh, EHEntryFreeFP freeEntry, void *userData) +{ int numBuckets = eh->curSize; while (numBuckets--) { @@ -93,19 +95,20 @@ static void _ehash_free(EHash *eh, EHEntryFreeFP freeEntry, void *userData) { EHASH_free(eh, eh); } -static void _ehash_insert(EHash *eh, EHEntry *entry) { +static void _ehash_insert(EHash *eh, EHEntry *entry) +{ int numBuckets = eh->curSize; int hash = EHASH_hash(eh, entry->key); entry->next = eh->buckets[hash]; eh->buckets[hash] = entry; eh->numEntries++; - if (eh->numEntries > (numBuckets*3)) { + if (eh->numEntries > (numBuckets * 3)) { EHEntry **oldBuckets = eh->buckets; eh->curSize = kHashSizes[++eh->curSizeIdx]; - eh->buckets = EHASH_alloc(eh, eh->curSize*sizeof(*eh->buckets)); - memset(eh->buckets, 0, eh->curSize*sizeof(*eh->buckets)); + eh->buckets = EHASH_alloc(eh, eh->curSize * sizeof(*eh->buckets)); + memset(eh->buckets, 0, eh->curSize * sizeof(*eh->buckets)); while (numBuckets--) { for (entry = oldBuckets[numBuckets]; entry;) { @@ -123,13 +126,14 @@ static void _ehash_insert(EHash *eh, EHEntry *entry) { } } -static void *_ehash_lookupWithPrev(EHash *eh, void *key, void ***prevp_r) { +static void *_ehash_lookupWithPrev(EHash *eh, void *key, void ***prevp_r) +{ int hash = EHASH_hash(eh, key); void **prevp = (void**) &eh->buckets[hash]; EHEntry *entry; for (; (entry = *prevp); prevp = (void**) &entry->next) { - if (entry->key==key) { + if (entry->key == key) { *prevp_r = (void**) prevp; return entry; } @@ -138,12 +142,13 @@ static void *_ehash_lookupWithPrev(EHash *eh, void *key, void ***prevp_r) { return NULL; } -static void *_ehash_lookup(EHash *eh, void *key) { +static void *_ehash_lookup(EHash *eh, void *key) +{ int hash = EHASH_hash(eh, key); EHEntry *entry; for (entry = eh->buckets[hash]; entry; entry = entry->next) - if (entry->key==key) + if (entry->key == key) break; return entry; @@ -157,55 +162,64 @@ typedef struct _EHashIterator { EHEntry *curEntry; } EHashIterator; -static EHashIterator *_ehashIterator_new(EHash *eh) { +static EHashIterator *_ehashIterator_new(EHash *eh) +{ EHashIterator *ehi = EHASH_alloc(eh, sizeof(*ehi)); ehi->eh = eh; ehi->curEntry = NULL; ehi->curBucket = -1; while (!ehi->curEntry) { ehi->curBucket++; - if (ehi->curBucket==ehi->eh->curSize) + if (ehi->curBucket == ehi->eh->curSize) break; ehi->curEntry = ehi->eh->buckets[ehi->curBucket]; } return ehi; } -static void _ehashIterator_free(EHashIterator *ehi) { +static void _ehashIterator_free(EHashIterator *ehi) +{ EHASH_free(ehi->eh, ehi); } -static void *_ehashIterator_getCurrent(EHashIterator *ehi) { +static void *_ehashIterator_getCurrent(EHashIterator *ehi) +{ return ehi->curEntry; } -static void _ehashIterator_next(EHashIterator *ehi) { +static void _ehashIterator_next(EHashIterator *ehi) +{ if (ehi->curEntry) { ehi->curEntry = ehi->curEntry->next; while (!ehi->curEntry) { ehi->curBucket++; - if (ehi->curBucket==ehi->eh->curSize) + if (ehi->curBucket == ehi->eh->curSize) break; ehi->curEntry = ehi->eh->buckets[ehi->curBucket]; } } } -static int _ehashIterator_isStopped(EHashIterator *ehi) { +static int _ehashIterator_isStopped(EHashIterator *ehi) +{ return !ehi->curEntry; } /***/ -static void *_stdAllocator_alloc(CCGAllocatorHDL UNUSED(a), int numBytes) { +static void *_stdAllocator_alloc(CCGAllocatorHDL UNUSED(a), int numBytes) +{ return malloc(numBytes); } -static void *_stdAllocator_realloc(CCGAllocatorHDL UNUSED(a), void *ptr, int newSize, int UNUSED(oldSize)) { +static void *_stdAllocator_realloc(CCGAllocatorHDL UNUSED(a), void *ptr, int newSize, int UNUSED(oldSize)) +{ return realloc(ptr, newSize); } -static void _stdAllocator_free(CCGAllocatorHDL UNUSED(a), void *ptr) { +static void _stdAllocator_free(CCGAllocatorHDL UNUSED(a), void *ptr) +{ free(ptr); } -static CCGAllocatorIFC *_getStandardAllocatorIFC(void) { +static CCGAllocatorIFC *_getStandardAllocatorIFC(void) +{ static CCGAllocatorIFC ifc; ifc.alloc = _stdAllocator_alloc; @@ -218,24 +232,25 @@ static CCGAllocatorIFC *_getStandardAllocatorIFC(void) { /***/ -static int VertDataEqual(const float *a, const float *b) { - return a[0]==b[0] && a[1]==b[1] && a[2]==b[2]; +static int VertDataEqual(const float *a, const float *b) +{ + return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]; } -#define VertDataZero(av) { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; } -#define VertDataCopy(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; } -#define VertDataAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; } -#define VertDataSub(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]-=_b[0]; _a[1]-=_b[1]; _a[2]-=_b[2]; } -#define VertDataMulN(av, n) { float *_a = (float*) av; _a[0]*=n; _a[1]*=n; _a[2]*=n; } +#define VertDataZero(av) { float *_a = (float *)av; _a[0] = _a[1] = _a[2] = 0.0f; } +#define VertDataCopy(av, bv) { float *_a = (float *)av, *_b = (float *) bv; _a[0] = _b[0]; _a[1] = _b[1]; _a[2] = _b[2]; } +#define VertDataAdd(av, bv) { float *_a = (float *)av, *_b = (float *) bv; _a[0] += _b[0]; _a[1] += _b[1]; _a[2] += _b[2]; } +#define VertDataSub(av, bv) { float *_a = (float *)av, *_b = (float *) bv; _a[0] -= _b[0]; _a[1] -= _b[1]; _a[2] -= _b[2]; } +#define VertDataMulN(av, n) { float *_a = (float *)av; _a[0]*=n; _a[1]*=n; _a[2] *=n; } #define VertDataAvg4(tv, av, bv, cv, dv) \ { \ - float *_t = (float*) tv, *_a = (float*) av, *_b = (float*) bv, *_c = (float*) cv, *_d = (float*) dv; \ - _t[0] = (_a[0]+_b[0]+_c[0]+_d[0])*.25f; \ - _t[1] = (_a[1]+_b[1]+_c[1]+_d[1])*.25f; \ - _t[2] = (_a[2]+_b[2]+_c[2]+_d[2])*.25f; \ + float *_t = (float *) tv, *_a = (float *) av, *_b = (float *) bv, *_c = (float *) cv, *_d = (float *) dv; \ + _t[0] = (_a[0] + _b[0] + _c[0] + _d[0]) * 0.25f; \ + _t[1] = (_a[1] + _b[1] + _c[1] + _d[1]) * 0.25f; \ + _t[2] = (_a[2] + _b[2] + _c[2] + _d[2]) * 0.25f; \ } -#define NormZero(av) { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; } -#define NormCopy(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; } -#define NormAdd(av, bv) { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; } +#define NormZero(av) { float *_a = (float *) av; _a[0] = _a[1] = _a[2] = 0.0f; } +#define NormCopy(av, bv) { float *_a = (float *) av, *_b = (float *) bv; _a[0] = _b[0]; _a[1] = _b[1]; _a[2] = _b[2]; } +#define NormAdd(av, bv) { float *_a = (float *) av, *_b = (float *) bv; _a[0] += _b[0]; _a[1] += _b[1]; _a[2] += _b[2]; } static int _edge_isBoundary(const CCGEdge *e); @@ -243,15 +258,15 @@ static int _edge_isBoundary(const CCGEdge *e); /***/ enum { - Vert_eEffected= (1<<0), - Vert_eChanged= (1<<1), - Vert_eSeam= (1<<2), + Vert_eEffected = (1 << 0), + Vert_eChanged = (1 << 1), + Vert_eSeam = (1 << 2) } /*VertFlags*/; enum { - Edge_eEffected= (1<<0), + Edge_eEffected = (1 << 0) } /*CCGEdgeFlags*/; enum { - Face_eEffected= (1<<0), + Face_eEffected = (1 << 0) } /*FaceFlags*/; struct _CCGVert { @@ -265,7 +280,7 @@ struct _CCGVert { // byte *levelData; // byte *userData; }; -#define VERT_getLevelData(v) ((byte*) &(v)[1]) +#define VERT_getLevelData(v) ((byte *) &(v)[1]) struct _CCGEdge { CCGEdge *next; /* EHData.next */ @@ -280,7 +295,7 @@ struct _CCGEdge { // byte *levelData; // byte *userData; }; -#define EDGE_getLevelData(e) ((byte*) &(e)[1]) +#define EDGE_getLevelData(e) ((byte *) &(e)[1]) struct _CCGFace { CCGFace *next; /* EHData.next */ @@ -296,14 +311,14 @@ struct _CCGFace { }; #define FACE_getVerts(f) ((CCGVert**) &(f)[1]) #define FACE_getEdges(f) ((CCGEdge**) &(FACE_getVerts(f)[(f)->numVerts])) -#define FACE_getCenterData(f) ((byte*) &(FACE_getEdges(f)[(f)->numVerts])) +#define FACE_getCenterData(f) ((byte *) &(FACE_getEdges(f)[(f)->numVerts])) typedef enum { eSyncState_None = 0, eSyncState_Vert, eSyncState_Edge, eSyncState_Face, - eSyncState_Partial, + eSyncState_Partial } SyncState; struct _CCGSubSurf { @@ -350,8 +365,9 @@ struct _CCGSubSurf { /***/ -static CCGVert *_vert_new(CCGVertHDL vHDL, CCGSubSurf *ss) { - CCGVert *v = CCGSUBSURF_alloc(ss, sizeof(CCGVert) + ss->meshIFC.vertDataSize * (ss->subdivLevels+1) + ss->meshIFC.vertUserSize); +static CCGVert *_vert_new(CCGVertHDL vHDL, CCGSubSurf *ss) +{ + CCGVert *v = CCGSUBSURF_alloc(ss, sizeof(CCGVert) + ss->meshIFC.vertDataSize * (ss->subdivLevels + 1) + ss->meshIFC.vertUserSize); byte *userData; v->vHDL = vHDL; @@ -366,71 +382,87 @@ static CCGVert *_vert_new(CCGVertHDL vHDL, CCGSubSurf *ss) { return v; } -static void _vert_remEdge(CCGVert *v, CCGEdge *e) { +static void _vert_remEdge(CCGVert *v, CCGEdge *e) +{ int i; - for (i=0; i<v->numEdges; i++) { - if (v->edges[i]==e) { + for (i = 0; i < v->numEdges; i++) { + if (v->edges[i] == e) { v->edges[i] = v->edges[--v->numEdges]; break; } } } -static void _vert_remFace(CCGVert *v, CCGFace *f) { +static void _vert_remFace(CCGVert *v, CCGFace *f) +{ int i; - for (i=0; i<v->numFaces; i++) { - if (v->faces[i]==f) { + for (i = 0; i < v->numFaces; i++) { + if (v->faces[i] == f) { v->faces[i] = v->faces[--v->numFaces]; break; } } } -static void _vert_addEdge(CCGVert *v, CCGEdge *e, CCGSubSurf *ss) { - v->edges = CCGSUBSURF_realloc(ss, v->edges, (v->numEdges+1)*sizeof(*v->edges), v->numEdges*sizeof(*v->edges)); +static void _vert_addEdge(CCGVert *v, CCGEdge *e, CCGSubSurf *ss) +{ + v->edges = CCGSUBSURF_realloc(ss, v->edges, (v->numEdges + 1) * sizeof(*v->edges), v->numEdges * sizeof(*v->edges)); v->edges[v->numEdges++] = e; } -static void _vert_addFace(CCGVert *v, CCGFace *f, CCGSubSurf *ss) { - v->faces = CCGSUBSURF_realloc(ss, v->faces, (v->numFaces+1)*sizeof(*v->faces), v->numFaces*sizeof(*v->faces)); +static void _vert_addFace(CCGVert *v, CCGFace *f, CCGSubSurf *ss) +{ + v->faces = CCGSUBSURF_realloc(ss, v->faces, (v->numFaces + 1) * sizeof(*v->faces), v->numFaces * sizeof(*v->faces)); v->faces[v->numFaces++] = f; } -static CCGEdge *_vert_findEdgeTo(const CCGVert *v, const CCGVert *vQ) { +static CCGEdge *_vert_findEdgeTo(const CCGVert *v, const CCGVert *vQ) +{ int i; - for (i=0; i<v->numEdges; i++) { - CCGEdge *e = v->edges[v->numEdges-1-i]; // XXX, note reverse - if ( (e->v0==v && e->v1==vQ) || - (e->v1==v && e->v0==vQ)) + for (i = 0; i < v->numEdges; i++) { + CCGEdge *e = v->edges[v->numEdges - 1 - i]; // XXX, note reverse + if ((e->v0 == v && e->v1 == vQ) || + (e->v1 == v && e->v0 == vQ)) + { return e; + } } return NULL; } -static int _vert_isBoundary(const CCGVert *v) { +static int _vert_isBoundary(const CCGVert *v) +{ int i; - for (i=0; i<v->numEdges; i++) + for (i = 0; i < v->numEdges; i++) if (_edge_isBoundary(v->edges[i])) return 1; return 0; } -static void *_vert_getCo(CCGVert *v, int lvl, int dataSize) { - return &VERT_getLevelData(v)[lvl*dataSize]; +static void *_vert_getCo(CCGVert *v, int lvl, int dataSize) +{ + return &VERT_getLevelData(v)[lvl * dataSize]; } -static float *_vert_getNo(CCGVert *v, int lvl, int dataSize, int normalDataOffset) { - return (float*) &VERT_getLevelData(v)[lvl*dataSize + normalDataOffset]; +static float *_vert_getNo(CCGVert *v, int lvl, int dataSize, int normalDataOffset) +{ + return (float *) &VERT_getLevelData(v)[lvl * dataSize + normalDataOffset]; } -static void _vert_free(CCGVert *v, CCGSubSurf *ss) { +static void _vert_free(CCGVert *v, CCGSubSurf *ss) +{ CCGSUBSURF_free(ss, v->edges); CCGSUBSURF_free(ss, v->faces); CCGSUBSURF_free(ss, v); } -static int VERT_seam(const CCGVert *v) { +static int VERT_seam(const CCGVert *v) +{ return ((v->flags & Vert_eSeam) != 0); } /***/ -static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, CCGSubSurf *ss) { - CCGEdge *e = CCGSUBSURF_alloc(ss, sizeof(CCGEdge) + ss->meshIFC.vertDataSize *((ss->subdivLevels+1) + (1<<(ss->subdivLevels+1))-1) + ss->meshIFC.edgeUserSize); +static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, CCGSubSurf *ss) +{ + CCGEdge *e = CCGSUBSURF_alloc(ss, + sizeof(CCGEdge) + + ss->meshIFC.vertDataSize * ((ss->subdivLevels + 1) + (1 << (ss->subdivLevels + 1)) - 1) + + ss->meshIFC.edgeUserSize); byte *userData; e->eHDL = eHDL; @@ -449,53 +481,64 @@ static CCGEdge *_edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float creas return e; } -static void _edge_remFace(CCGEdge *e, CCGFace *f) { +static void _edge_remFace(CCGEdge *e, CCGFace *f) +{ int i; - for (i=0; i<e->numFaces; i++) { - if (e->faces[i]==f) { + for (i = 0; i < e->numFaces; i++) { + if (e->faces[i] == f) { e->faces[i] = e->faces[--e->numFaces]; break; } } } -static void _edge_addFace(CCGEdge *e, CCGFace *f, CCGSubSurf *ss) { - e->faces = CCGSUBSURF_realloc(ss, e->faces, (e->numFaces+1)*sizeof(*e->faces), e->numFaces*sizeof(*e->faces)); +static void _edge_addFace(CCGEdge *e, CCGFace *f, CCGSubSurf *ss) +{ + e->faces = CCGSUBSURF_realloc(ss, e->faces, (e->numFaces + 1) * sizeof(*e->faces), e->numFaces * sizeof(*e->faces)); e->faces[e->numFaces++] = f; } -static int _edge_isBoundary(const CCGEdge *e) { +static int _edge_isBoundary(const CCGEdge *e) +{ return e->numFaces<2; } -static CCGVert *_edge_getOtherVert(CCGEdge *e, CCGVert *vQ) { - if (vQ==e->v0) { +static CCGVert *_edge_getOtherVert(CCGEdge *e, CCGVert *vQ) +{ + if (vQ == e->v0) { return e->v1; - } else { + } + else { return e->v0; } } -static void *_edge_getCo(CCGEdge *e, int lvl, int x, int dataSize) { - int levelBase = lvl + (1<<lvl) - 1; - return &EDGE_getLevelData(e)[dataSize*(levelBase + x)]; +static void *_edge_getCo(CCGEdge *e, int lvl, int x, int dataSize) +{ + int levelBase = lvl + (1 << lvl) - 1; + return &EDGE_getLevelData(e)[dataSize * (levelBase + x)]; } -static float *_edge_getNo(CCGEdge *e, int lvl, int x, int dataSize, int normalDataOffset) { - int levelBase = lvl + (1<<lvl) - 1; - return (float*) &EDGE_getLevelData(e)[dataSize*(levelBase + x) + normalDataOffset]; +static float *_edge_getNo(CCGEdge *e, int lvl, int x, int dataSize, int normalDataOffset) +{ + int levelBase = lvl + (1 << lvl) - 1; + return (float *) &EDGE_getLevelData(e)[dataSize * (levelBase + x) + normalDataOffset]; } -static void *_edge_getCoVert(CCGEdge *e, CCGVert *v, int lvl, int x, int dataSize) { - int levelBase = lvl + (1<<lvl) - 1; - if (v==e->v0) { - return &EDGE_getLevelData(e)[dataSize*(levelBase + x)]; - } else { - return &EDGE_getLevelData(e)[dataSize*(levelBase + (1<<lvl) - x)]; +static void *_edge_getCoVert(CCGEdge *e, CCGVert *v, int lvl, int x, int dataSize) +{ + int levelBase = lvl + (1 << lvl) - 1; + if (v == e->v0) { + return &EDGE_getLevelData(e)[dataSize * (levelBase + x)]; + } + else { + return &EDGE_getLevelData(e)[dataSize * (levelBase + (1 << lvl) - x)]; } } -static void _edge_free(CCGEdge *e, CCGSubSurf *ss) { +static void _edge_free(CCGEdge *e, CCGSubSurf *ss) +{ CCGSUBSURF_free(ss, e->faces); CCGSUBSURF_free(ss, e); } -static void _edge_unlinkMarkAndFree(CCGEdge *e, CCGSubSurf *ss) { +static void _edge_unlinkMarkAndFree(CCGEdge *e, CCGSubSurf *ss) +{ _vert_remEdge(e->v0, e); _vert_remEdge(e->v1, e); e->v0->flags |= Vert_eEffected; @@ -503,7 +546,8 @@ static void _edge_unlinkMarkAndFree(CCGEdge *e, CCGSubSurf *ss) { _edge_free(e, ss); } -static float EDGE_getSharpness(CCGEdge *e, int lvl) { +static float EDGE_getSharpness(CCGEdge *e, int lvl) +{ if (!lvl) return e->crease; else if (!e->crease) @@ -514,9 +558,15 @@ static float EDGE_getSharpness(CCGEdge *e, int lvl) { return e->crease - lvl; } -static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int numVerts, CCGSubSurf *ss) { - int maxGridSize = 1 + (1<<(ss->subdivLevels-1)); - CCGFace *f = CCGSUBSURF_alloc(ss, sizeof(CCGFace) + sizeof(CCGVert*)*numVerts + sizeof(CCGEdge*)*numVerts + ss->meshIFC.vertDataSize *(1 + numVerts*maxGridSize + numVerts*maxGridSize*maxGridSize) + ss->meshIFC.faceUserSize); +static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int numVerts, CCGSubSurf *ss) +{ + int maxGridSize = 1 + (1 << (ss->subdivLevels - 1)); + CCGFace *f = CCGSUBSURF_alloc(ss, + sizeof(CCGFace) + + sizeof(CCGVert*) * numVerts + + sizeof(CCGEdge*) * numVerts + + ss->meshIFC.vertDataSize * (1 + numVerts * maxGridSize + numVerts * maxGridSize * maxGridSize) + + ss->meshIFC.faceUserSize); byte *userData; int i; @@ -524,7 +574,7 @@ static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int f->fHDL = fHDL; f->flags = 0; - for (i=0; i<numVerts; i++) { + for (i = 0; i < numVerts; i++) { FACE_getVerts(f)[i] = verts[i]; FACE_getEdges(f)[i] = edges[i]; _vert_addFace(verts[i], f, ss); @@ -538,102 +588,115 @@ static CCGFace *_face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int return f; } -static CCG_INLINE void *_face_getIECo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize) { - int maxGridSize = 1 + (1<<(levels-1)); - int spacing = 1<<(levels-lvl); - byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); - return &gridBase[dataSize*x*spacing]; +static CCG_INLINE void *_face_getIECo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize) +{ + int maxGridSize = 1 + (1 << (levels - 1)); + int spacing = 1 << (levels - lvl); + byte *gridBase = FACE_getCenterData(f) + dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize)); + return &gridBase[dataSize * x * spacing]; } -static CCG_INLINE void *_face_getIENo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize, int normalDataOffset) { - int maxGridSize = 1 + (1<<(levels-1)); - int spacing = 1<<(levels-lvl); - byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); - return &gridBase[dataSize*x*spacing + normalDataOffset]; +static CCG_INLINE void *_face_getIENo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize, int normalDataOffset) +{ + int maxGridSize = 1 + (1 << (levels - 1)); + int spacing = 1 << (levels - lvl); + byte *gridBase = FACE_getCenterData(f) + dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize)); + return &gridBase[dataSize * x * spacing + normalDataOffset]; } -static CCG_INLINE void *_face_getIFCo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize) { - int maxGridSize = 1 + (1<<(levels-1)); - int spacing = 1<<(levels-lvl); - byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); - return &gridBase[dataSize*(maxGridSize + (y*maxGridSize + x)*spacing)]; +static CCG_INLINE void *_face_getIFCo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize) +{ + int maxGridSize = 1 + (1 << (levels - 1)); + int spacing = 1 << (levels - lvl); + byte *gridBase = FACE_getCenterData(f) + dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize)); + return &gridBase[dataSize * (maxGridSize + (y * maxGridSize + x) * spacing)]; } -static CCG_INLINE float *_face_getIFNo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize, int normalDataOffset) { - int maxGridSize = 1 + (1<<(levels-1)); - int spacing = 1<<(levels-lvl); - byte *gridBase = FACE_getCenterData(f) + dataSize*(1 + S*(maxGridSize + maxGridSize*maxGridSize)); - return (float*) &gridBase[dataSize*(maxGridSize + (y*maxGridSize + x)*spacing) + normalDataOffset]; +static CCG_INLINE float *_face_getIFNo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize, int normalDataOffset) +{ + int maxGridSize = 1 + (1 << (levels - 1)); + int spacing = 1 << (levels - lvl); + byte *gridBase = FACE_getCenterData(f) + dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize)); + return (float *) &gridBase[dataSize * (maxGridSize + (y * maxGridSize + x) * spacing) + normalDataOffset]; } -static int _face_getVertIndex(CCGFace *f, CCGVert *v) { +static int _face_getVertIndex(CCGFace *f, CCGVert *v) +{ int i; - for (i=0; i<f->numVerts; i++) - if (FACE_getVerts(f)[i]==v) + for (i = 0; i < f->numVerts; i++) + if (FACE_getVerts(f)[i] == v) return i; return -1; } -static CCG_INLINE void *_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize) { - int maxGridSize = 1 + (1<<(levels-1)); - int spacing = 1<<(levels-lvl); +static CCG_INLINE void *_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize) +{ + int maxGridSize = 1 + (1 << (levels - 1)); + int spacing = 1 << (levels - lvl); int S, x, y, cx, cy; - for (S=0; S<f->numVerts; S++) - if (FACE_getEdges(f)[S]==e) + for (S = 0; S < f->numVerts; S++) + if (FACE_getEdges(f)[S] == e) break; - eX = eX*spacing; - eY = eY*spacing; + eX = eX * spacing; + eY = eY * spacing; if (e->v0!=FACE_getVerts(f)[S]) { - eX = (maxGridSize*2 - 1)-1 - eX; + eX = (maxGridSize * 2 - 1) - 1 - eX; } y = maxGridSize - 1 - eX; x = maxGridSize - 1 - eY; if (x<0) { - S = (S+f->numVerts-1)%f->numVerts; + S = (S + f->numVerts - 1) % f->numVerts; cx = y; cy = -x; - } else if (y<0) { - S = (S+1)%f->numVerts; + } + else if (y < 0) { + S = (S + 1) % f->numVerts; cx = -y; cy = x; - } else { + } + else { cx = x; cy = y; } return _face_getIFCo(f, levels, S, cx, cy, levels, dataSize); } -static float *_face_getIFNoEdge(CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize, int normalDataOffset) { - return (float*) ((byte*) _face_getIFCoEdge(f, e, lvl, eX, eY, levels, dataSize) + normalDataOffset); +static float *_face_getIFNoEdge(CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize, int normalDataOffset) +{ + return (float *) ((byte *) _face_getIFCoEdge(f, e, lvl, eX, eY, levels, dataSize) + normalDataOffset); } -static void _face_calcIFNo(CCGFace *f, int lvl, int S, int x, int y, float *no, int levels, int dataSize) { - float *a = _face_getIFCo(f, lvl, S, x+0, y+0, levels, dataSize); - float *b = _face_getIFCo(f, lvl, S, x+1, y+0, levels, dataSize); - float *c = _face_getIFCo(f, lvl, S, x+1, y+1, levels, dataSize); - float *d = _face_getIFCo(f, lvl, S, x+0, y+1, levels, dataSize); +static void _face_calcIFNo(CCGFace *f, int lvl, int S, int x, int y, float *no, int levels, int dataSize) +{ + float *a = _face_getIFCo(f, lvl, S, x + 0, y + 0, levels, dataSize); + float *b = _face_getIFCo(f, lvl, S, x + 1, y + 0, levels, dataSize); + float *c = _face_getIFCo(f, lvl, S, x + 1, y + 1, levels, dataSize); + float *d = _face_getIFCo(f, lvl, S, x + 0, y + 1, levels, dataSize); float a_cX = c[0]-a[0], a_cY = c[1]-a[1], a_cZ = c[2]-a[2]; float b_dX = d[0]-b[0], b_dY = d[1]-b[1], b_dZ = d[2]-b[2]; float length; - no[0] = b_dY*a_cZ - b_dZ*a_cY; - no[1] = b_dZ*a_cX - b_dX*a_cZ; - no[2] = b_dX*a_cY - b_dY*a_cX; + no[0] = b_dY * a_cZ - b_dZ * a_cY; + no[1] = b_dZ * a_cX - b_dX * a_cZ; + no[2] = b_dX * a_cY - b_dY * a_cX; - length = sqrt(no[0]*no[0] + no[1]*no[1] + no[2]*no[2]); + length = sqrt(no[0] * no[0] + no[1] * no[1] + no[2] * no[2]); - if (length>EPSILON) { + if (length > EPSILON) { float invLength = 1.f/length; no[0] *= invLength; no[1] *= invLength; no[2] *= invLength; - } else { + } + else { NormZero(no); } } -static void _face_free(CCGFace *f, CCGSubSurf *ss) { +static void _face_free(CCGFace *f, CCGSubSurf *ss) +{ CCGSUBSURF_free(ss, f); } -static void _face_unlinkMarkAndFree(CCGFace *f, CCGSubSurf *ss) { +static void _face_unlinkMarkAndFree(CCGFace *f, CCGSubSurf *ss) +{ int j; - for (j=0; j<f->numVerts; j++) { + for (j = 0; j < f->numVerts; j++) { _vert_remFace(FACE_getVerts(f)[j], f); _edge_remFace(FACE_getEdges(f)[j], f); FACE_getVerts(f)[j]->flags |= Vert_eEffected; @@ -643,7 +706,8 @@ static void _face_unlinkMarkAndFree(CCGFace *f, CCGSubSurf *ss) { /***/ -CCGSubSurf *ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator) { +CCGSubSurf *ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator) +{ if (!allocatorIFC) { allocatorIFC = _getStandardAllocatorIFC(); allocator = NULL; @@ -651,7 +715,8 @@ CCGSubSurf *ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *a if (subdivLevels<1) { return NULL; - } else { + } + else { CCGSubSurf *ss = allocatorIFC->alloc(allocator, sizeof(*ss)); ss->allocatorIFC = *allocatorIFC; @@ -691,7 +756,8 @@ CCGSubSurf *ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *a } } -void ccgSubSurf_free(CCGSubSurf *ss) { +void ccgSubSurf_free(CCGSubSurf *ss) +{ CCGAllocatorIFC allocatorIFC = ss->allocatorIFC; CCGAllocatorHDL allocator = ss->allocator; @@ -719,7 +785,8 @@ void ccgSubSurf_free(CCGSubSurf *ss) { } } -CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData) { +CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData) +{ if (ss->defaultEdgeUserData) { CCGSUBSURF_free(ss, ss->defaultEdgeUserData); } @@ -730,13 +797,15 @@ CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, if (defaultUserData) { memcpy(ss->defaultEdgeUserData, defaultUserData, ss->meshIFC.edgeUserSize); - } else { + } + else { memset(ss->defaultEdgeUserData, 0, ss->meshIFC.edgeUserSize); } return eCCGError_None; } -void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r) { +void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r) +{ if (allowEdgeCreation_r) *allowEdgeCreation_r = ss->allowEdgeCreation; if (ss->allowEdgeCreation) { if (defaultCreaseValue_r) *defaultCreaseValue_r = ss->defaultCreaseValue; @@ -744,10 +813,12 @@ void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, f } } -CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels) { +CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels) +{ if (subdivisionLevels<=0) { return eCCGError_InvalidValue; - } else if (subdivisionLevels!=ss->subdivLevels) { + } + else if (subdivisionLevels!=ss->subdivLevels) { ss->numGrids = 0; ss->subdivLevels = subdivisionLevels; _ehash_free(ss->vMap, (EHEntryFreeFP) _vert_free, ss); @@ -770,19 +841,23 @@ void ccgSubSurf_getUseAgeCounts(CCGSubSurf *ss, int *useAgeCounts_r, int *vertUs if (faceUserOffset_r) *faceUserOffset_r = ss->faceUserAgeOffset; } -CCGError ccgSubSurf_setUseAgeCounts(CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset) { +CCGError ccgSubSurf_setUseAgeCounts(CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset) +{ if (useAgeCounts) { - if ( (vertUserOffset+4>ss->meshIFC.vertUserSize) || - (edgeUserOffset+4>ss->meshIFC.edgeUserSize) || - (faceUserOffset+4>ss->meshIFC.faceUserSize)) { + if ((vertUserOffset + 4 > ss->meshIFC.vertUserSize) || + (edgeUserOffset + 4 > ss->meshIFC.edgeUserSize) || + (faceUserOffset + 4 > ss->meshIFC.faceUserSize)) + { return eCCGError_InvalidValue; - } else { + } + else { ss->useAgeCounts = 1; ss->vertUserAgeOffset = vertUserOffset; ss->edgeUserAgeOffset = edgeUserOffset; ss->faceUserAgeOffset = faceUserOffset; } - } else { + } + else { ss->useAgeCounts = 0; ss->vertUserAgeOffset = ss->edgeUserAgeOffset = ss->faceUserAgeOffset = 0; } @@ -790,15 +865,18 @@ CCGError ccgSubSurf_setUseAgeCounts(CCGSubSurf *ss, int useAgeCounts, int vertUs return eCCGError_None; } -CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset) { +CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset) +{ if (useVertNormals) { - if (normalDataOffset<0 || normalDataOffset+12>ss->meshIFC.vertDataSize) { + if (normalDataOffset<0 || normalDataOffset + 12>ss->meshIFC.vertDataSize) { return eCCGError_InvalidValue; - } else { + } + else { ss->calcVertNormals = 1; ss->normalDataOffset = normalDataOffset; } - } else { + } + else { ss->calcVertNormals = 0; ss->normalDataOffset = 0; } @@ -808,7 +886,8 @@ CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int /***/ -CCGError ccgSubSurf_initFullSync(CCGSubSurf *ss) { +CCGError ccgSubSurf_initFullSync(CCGSubSurf *ss) +{ if (ss->syncState!=eSyncState_None) { return eCCGError_InvalidSyncState; } @@ -826,15 +905,16 @@ CCGError ccgSubSurf_initFullSync(CCGSubSurf *ss) { ss->numGrids = 0; ss->lenTempArrays = 12; - ss->tempVerts = MEM_mallocN(sizeof(*ss->tempVerts)*ss->lenTempArrays, "CCGSubsurf tempVerts"); - ss->tempEdges = MEM_mallocN(sizeof(*ss->tempEdges)*ss->lenTempArrays, "CCGSubsurf tempEdges"); + ss->tempVerts = MEM_mallocN(sizeof(*ss->tempVerts) * ss->lenTempArrays, "CCGSubsurf tempVerts"); + ss->tempEdges = MEM_mallocN(sizeof(*ss->tempEdges) * ss->lenTempArrays, "CCGSubsurf tempEdges"); ss->syncState = eSyncState_Vert; return eCCGError_None; } -CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss) { +CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss) +{ if (ss->syncState!=eSyncState_None) { return eCCGError_InvalidSyncState; } @@ -846,16 +926,19 @@ CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss) { return eCCGError_None; } -CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL) { +CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL) +{ if (ss->syncState!=eSyncState_Partial) { return eCCGError_InvalidSyncState; - } else { + } + else { void **prevp; CCGVert *v = _ehash_lookupWithPrev(ss->vMap, vHDL, &prevp); if (!v || v->numFaces || v->numEdges) { return eCCGError_InvalidValue; - } else { + } + else { *prevp = v->next; _vert_free(v, ss); } @@ -864,16 +947,19 @@ CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL) { return eCCGError_None; } -CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL) { +CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL) +{ if (ss->syncState!=eSyncState_Partial) { return eCCGError_InvalidSyncState; - } else { + } + else { void **prevp; CCGEdge *e = _ehash_lookupWithPrev(ss->eMap, eHDL, &prevp); if (!e || e->numFaces) { return eCCGError_InvalidValue; - } else { + } + else { *prevp = e->next; _edge_unlinkMarkAndFree(e, ss); } @@ -882,16 +968,19 @@ CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL) { return eCCGError_None; } -CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL) { +CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL) +{ if (ss->syncState!=eSyncState_Partial) { return eCCGError_InvalidSyncState; - } else { + } + else { void **prevp; CCGFace *f = _ehash_lookupWithPrev(ss->fMap, fHDL, &prevp); if (!f) { return eCCGError_InvalidValue; - } else { + } + else { *prevp = f->next; _face_unlinkMarkAndFree(f, ss); } @@ -900,37 +989,40 @@ CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL) { return eCCGError_None; } -CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r) { +CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r) +{ void **prevp; CCGVert *v = NULL; short seamflag = (seam)? Vert_eSeam: 0; - if (ss->syncState==eSyncState_Partial) { + if (ss->syncState == eSyncState_Partial) { v = _ehash_lookupWithPrev(ss->vMap, vHDL, &prevp); if (!v) { v = _vert_new(vHDL, ss); VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData); _ehash_insert(ss->vMap, (EHEntry*) v); v->flags = Vert_eEffected|seamflag; - } else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize)) || ((v->flags & Vert_eSeam) != seamflag)) { + } + else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize)) || ((v->flags & Vert_eSeam) != seamflag)) { int i, j; VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData); v->flags = Vert_eEffected|seamflag; - for (i=0; i<v->numEdges; i++) { + for (i = 0; i < v->numEdges; i++) { CCGEdge *e = v->edges[i]; e->v0->flags |= Vert_eEffected; e->v1->flags |= Vert_eEffected; } - for (i=0; i<v->numFaces; i++) { + for (i = 0; i < v->numFaces; i++) { CCGFace *f = v->faces[i]; - for (j=0; j<f->numVerts; j++) { + for (j = 0; j < f->numVerts; j++) { FACE_getVerts(f)[j]->flags |= Vert_eEffected; } } } - } else { + } + else { if (ss->syncState!=eSyncState_Vert) { return eCCGError_InvalidSyncState; } @@ -941,12 +1033,14 @@ CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertDa VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData); _ehash_insert(ss->vMap, (EHEntry*) v); v->flags = Vert_eEffected|seamflag; - } else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize)) || ((v->flags & Vert_eSeam) != seamflag)) { + } + else if (!VertDataEqual(vertData, _vert_getCo(v, 0, ss->meshIFC.vertDataSize)) || ((v->flags & Vert_eSeam) != seamflag)) { *prevp = v->next; _ehash_insert(ss->vMap, (EHEntry*) v); VertDataCopy(_vert_getCo(v,0,ss->meshIFC.vertDataSize), vertData); v->flags = Vert_eEffected|Vert_eChanged|seamflag; - } else { + } + else { *prevp = v->next; _ehash_insert(ss->vMap, (EHEntry*) v); v->flags = 0; @@ -957,11 +1051,12 @@ CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertDa return eCCGError_None; } -CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r) { +CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r) +{ void **prevp; CCGEdge *e = NULL, *eNew; - if (ss->syncState==eSyncState_Partial) { + if (ss->syncState == eSyncState_Partial) { e = _ehash_lookupWithPrev(ss->eMap, eHDL, &prevp); if (!e || e->v0->vHDL!=e_vHDL0 || e->v1->vHDL!=e_vHDL1 || crease!=e->crease) { CCGVert *v0 = _ehash_lookup(ss->vMap, e_vHDL0); @@ -974,17 +1069,20 @@ CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0 eNew->next = e->next; _edge_unlinkMarkAndFree(e, ss); - } else { + } + else { _ehash_insert(ss->eMap, (EHEntry*) eNew); } eNew->v0->flags |= Vert_eEffected; eNew->v1->flags |= Vert_eEffected; } - } else { - if (ss->syncState==eSyncState_Vert) { + } + else { + if (ss->syncState == eSyncState_Vert) { ss->syncState = eSyncState_Edge; - } else if (ss->syncState!=eSyncState_Edge) { + } + else if (ss->syncState!=eSyncState_Edge) { return eCCGError_InvalidSyncState; } @@ -996,7 +1094,8 @@ CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0 _ehash_insert(ss->eMap, (EHEntry*) e); e->v0->flags |= Vert_eEffected; e->v1->flags |= Vert_eEffected; - } else { + } + else { *prevp = e->next; _ehash_insert(ss->eMap, (EHEntry*) e); e->flags = 0; @@ -1011,31 +1110,32 @@ CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0 return eCCGError_None; } -CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r) { +CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r) +{ void **prevp; CCGFace *f = NULL, *fNew; int j, k, topologyChanged = 0; - if (numVerts>ss->lenTempArrays) { - ss->lenTempArrays = (numVerts<ss->lenTempArrays*2)?ss->lenTempArrays*2:numVerts; - ss->tempVerts = MEM_reallocN(ss->tempVerts, sizeof(*ss->tempVerts)*ss->lenTempArrays); - ss->tempEdges = MEM_reallocN(ss->tempEdges, sizeof(*ss->tempEdges)*ss->lenTempArrays); + if (numVerts > ss->lenTempArrays) { + ss->lenTempArrays = (numVerts < ss->lenTempArrays * 2) ? ss->lenTempArrays * 2 : numVerts; + ss->tempVerts = MEM_reallocN(ss->tempVerts, sizeof(*ss->tempVerts) * ss->lenTempArrays); + ss->tempEdges = MEM_reallocN(ss->tempEdges, sizeof(*ss->tempEdges) * ss->lenTempArrays); } - if (ss->syncState==eSyncState_Partial) { + if (ss->syncState == eSyncState_Partial) { f = _ehash_lookupWithPrev(ss->fMap, fHDL, &prevp); - for (k=0; k<numVerts; k++) { + for (k = 0; k < numVerts; k++) { ss->tempVerts[k] = _ehash_lookup(ss->vMap, vHDLs[k]); } - for (k=0; k<numVerts; k++) { - ss->tempEdges[k] = _vert_findEdgeTo(ss->tempVerts[k], ss->tempVerts[(k+1)%numVerts]); + for (k = 0; k < numVerts; k++) { + ss->tempEdges[k] = _vert_findEdgeTo(ss->tempVerts[k], ss->tempVerts[(k + 1) % numVerts]); } if (f) { if ( f->numVerts!=numVerts || - memcmp(FACE_getVerts(f), ss->tempVerts, sizeof(*ss->tempVerts)*numVerts) || - memcmp(FACE_getEdges(f), ss->tempEdges, sizeof(*ss->tempEdges)*numVerts)) + memcmp(FACE_getVerts(f), ss->tempVerts, sizeof(*ss->tempVerts) * numVerts) || + memcmp(FACE_getEdges(f), ss->tempEdges, sizeof(*ss->tempEdges) * numVerts)) topologyChanged = 1; } @@ -1049,42 +1149,46 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV fNew->next = f->next; _face_unlinkMarkAndFree(f, ss); - } else { + } + else { ss->numGrids += numVerts; _ehash_insert(ss->fMap, (EHEntry*) fNew); } - for (k=0; k<numVerts; k++) + for (k = 0; k < numVerts; k++) FACE_getVerts(fNew)[k]->flags |= Vert_eEffected; } - } else { - if (ss->syncState==eSyncState_Vert || ss->syncState==eSyncState_Edge) { + } + else { + if (ss->syncState == eSyncState_Vert || ss->syncState == eSyncState_Edge) { ss->syncState = eSyncState_Face; - } else if (ss->syncState!=eSyncState_Face) { + } + else if (ss->syncState!=eSyncState_Face) { return eCCGError_InvalidSyncState; } f = _ehash_lookupWithPrev(ss->oldFMap, fHDL, &prevp); - for (k=0; k<numVerts; k++) { + for (k = 0; k < numVerts; k++) { ss->tempVerts[k] = _ehash_lookup(ss->vMap, vHDLs[k]); if (!ss->tempVerts[k]) return eCCGError_InvalidValue; } - for (k=0; k<numVerts; k++) { - ss->tempEdges[k] = _vert_findEdgeTo(ss->tempVerts[k], ss->tempVerts[(k+1)%numVerts]); + for (k = 0; k < numVerts; k++) { + ss->tempEdges[k] = _vert_findEdgeTo(ss->tempVerts[k], ss->tempVerts[(k + 1) % numVerts]); if (!ss->tempEdges[k]) { if (ss->allowEdgeCreation) { - CCGEdge *e = ss->tempEdges[k] = _edge_new((CCGEdgeHDL) -1, ss->tempVerts[k], ss->tempVerts[(k+1)%numVerts], ss->defaultCreaseValue, ss); + CCGEdge *e = ss->tempEdges[k] = _edge_new((CCGEdgeHDL) -1, ss->tempVerts[k], ss->tempVerts[(k + 1) % numVerts], ss->defaultCreaseValue, ss); _ehash_insert(ss->eMap, (EHEntry*) e); e->v0->flags |= Vert_eEffected; e->v1->flags |= Vert_eEffected; if (ss->meshIFC.edgeUserSize) { memcpy(ccgSubSurf_getEdgeUserData(ss, e), ss->defaultEdgeUserData, ss->meshIFC.edgeUserSize); } - } else { + } + else { return eCCGError_InvalidValue; } } @@ -1092,8 +1196,8 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV if (f) { if ( f->numVerts!=numVerts || - memcmp(FACE_getVerts(f), ss->tempVerts, sizeof(*ss->tempVerts)*numVerts) || - memcmp(FACE_getEdges(f), ss->tempEdges, sizeof(*ss->tempEdges)*numVerts)) + memcmp(FACE_getVerts(f), ss->tempVerts, sizeof(*ss->tempVerts) * numVerts) || + memcmp(FACE_getEdges(f), ss->tempEdges, sizeof(*ss->tempEdges) * numVerts)) topologyChanged = 1; } @@ -1102,17 +1206,18 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV _ehash_insert(ss->fMap, (EHEntry*) f); ss->numGrids += numVerts; - for (k=0; k<numVerts; k++) + for (k = 0; k < numVerts; k++) FACE_getVerts(f)[k]->flags |= Vert_eEffected; - } else { + } + else { *prevp = f->next; _ehash_insert(ss->fMap, (EHEntry*) f); f->flags = 0; ss->numGrids += f->numVerts; - for (j=0; j<f->numVerts; j++) { - if (FACE_getVerts(f)[j]->flags&Vert_eChanged) { - for (k=0; k<f->numVerts; k++) + for (j = 0; j < f->numVerts; j++) { + if (FACE_getVerts(f)[j]->flags & Vert_eChanged) { + for (k = 0; k < f->numVerts; k++) FACE_getVerts(f)[k]->flags |= Vert_eEffected; break; } @@ -1125,12 +1230,14 @@ CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGV } static void ccgSubSurf__sync(CCGSubSurf *ss); -CCGError ccgSubSurf_processSync(CCGSubSurf *ss) { - if (ss->syncState==eSyncState_Partial) { +CCGError ccgSubSurf_processSync(CCGSubSurf *ss) +{ + if (ss->syncState == eSyncState_Partial) { ss->syncState = eSyncState_None; ccgSubSurf__sync(ss); - } else if (ss->syncState) { + } + else if (ss->syncState) { _ehash_free(ss->oldFMap, (EHEntryFreeFP) _face_unlinkMarkAndFree, ss); _ehash_free(ss->oldEMap, (EHEntryFreeFP) _edge_unlinkMarkAndFree, ss); _ehash_free(ss->oldVMap, (EHEntryFreeFP) _vert_free, ss); @@ -1146,7 +1253,8 @@ CCGError ccgSubSurf_processSync(CCGSubSurf *ss) { ss->syncState = eSyncState_None; ccgSubSurf__sync(ss); - } else { + } + else { return eCCGError_InvalidSyncState; } @@ -1164,130 +1272,133 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss, int i,ptrIdx; int subdivLevels = ss->subdivLevels; int lvl = ss->subdivLevels; - int edgeSize = 1 + (1<<lvl); - int gridSize = 1 + (1<<(lvl-1)); + int edgeSize = 1 + (1 << lvl); + int gridSize = 1 + (1 << (lvl - 1)); int normalDataOffset = ss->normalDataOffset; int vertDataSize = ss->meshIFC.vertDataSize; - #pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT) - for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) { + #pragma omp parallel for private(ptrIdx) if (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT) + for (ptrIdx = 0; ptrIdx < numEffectedF; ptrIdx++) { CCGFace *f = (CCGFace*) effectedF[ptrIdx]; int S, x, y; float no[3]; - for (S=0; S<f->numVerts; S++) { - for (y=0; y<gridSize-1; y++) - for (x=0; x<gridSize-1; x++) + for (S = 0; S < f->numVerts; S++) { + for (y = 0; y < gridSize - 1; y++) + for (x = 0; x < gridSize - 1; x++) NormZero(FACE_getIFNo(f, lvl, S, x, y)); - if (FACE_getEdges(f)[(S-1+f->numVerts)%f->numVerts]->flags&Edge_eEffected) - for (x=0; x<gridSize-1; x++) - NormZero(FACE_getIFNo(f, lvl, S, x, gridSize-1)); + if (FACE_getEdges(f)[(S - 1+f->numVerts)%f->numVerts]->flags&Edge_eEffected) + for (x = 0; x < gridSize - 1; x++) + NormZero(FACE_getIFNo(f, lvl, S, x, gridSize - 1)); if (FACE_getEdges(f)[S]->flags&Edge_eEffected) - for (y=0; y<gridSize-1; y++) - NormZero(FACE_getIFNo(f, lvl, S, gridSize-1, y)); + for (y = 0; y < gridSize - 1; y++) + NormZero(FACE_getIFNo(f, lvl, S, gridSize - 1, y)); if (FACE_getVerts(f)[S]->flags&Vert_eEffected) - NormZero(FACE_getIFNo(f, lvl, S, gridSize-1, gridSize-1)); + NormZero(FACE_getIFNo(f, lvl, S, gridSize - 1, gridSize - 1)); } - for (S=0; S<f->numVerts; S++) { - int yLimit = !(FACE_getEdges(f)[(S-1+f->numVerts)%f->numVerts]->flags&Edge_eEffected); + for (S = 0; S < f->numVerts; S++) { + int yLimit = !(FACE_getEdges(f)[(S - 1 + f->numVerts) % f->numVerts]->flags & Edge_eEffected); int xLimit = !(FACE_getEdges(f)[S]->flags&Edge_eEffected); int yLimitNext = xLimit; int xLimitPrev = yLimit; - for (y=0; y<gridSize - 1; y++) { - for (x=0; x<gridSize - 1; x++) { - int xPlusOk = (!xLimit || x<gridSize-2); - int yPlusOk = (!yLimit || y<gridSize-2); + for (y = 0; y < gridSize - 1; y++) { + for (x = 0; x < gridSize - 1; x++) { + int xPlusOk = (!xLimit || x < gridSize - 2); + int yPlusOk = (!yLimit || y < gridSize - 2); FACE_calcIFNo(f, lvl, S, x, y, no); - NormAdd(FACE_getIFNo(f, lvl, S, x+0, y+0), no); + NormAdd(FACE_getIFNo(f, lvl, S, x + 0, y + 0), no); if (xPlusOk) - NormAdd(FACE_getIFNo(f, lvl, S, x+1, y+0), no); + NormAdd(FACE_getIFNo(f, lvl, S, x + 1, y + 0), no); if (yPlusOk) - NormAdd(FACE_getIFNo(f, lvl, S, x+0, y+1), no); + NormAdd(FACE_getIFNo(f, lvl, S, x + 0, y + 1), no); if (xPlusOk && yPlusOk) { - if (x<gridSize-2 || y<gridSize-2 || FACE_getVerts(f)[S]->flags&Vert_eEffected) { - NormAdd(FACE_getIFNo(f, lvl, S, x+1, y+1), no); + if (x < gridSize - 2 || y < gridSize - 2 || FACE_getVerts(f)[S]->flags & Vert_eEffected) { + NormAdd(FACE_getIFNo(f, lvl, S, x + 1, y + 1), no); } } - if (x==0 && y==0) { + if (x == 0 && y == 0) { int K; - if (!yLimitNext || 1<gridSize-1) - NormAdd(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, 1), no); - if (!xLimitPrev || 1<gridSize-1) - NormAdd(FACE_getIFNo(f, lvl, (S-1+f->numVerts)%f->numVerts, 1, 0), no); + if (!yLimitNext || 1<gridSize - 1) + NormAdd(FACE_getIFNo(f, lvl, (S + 1) % f->numVerts, 0, 1), no); + if (!xLimitPrev || 1<gridSize - 1) + NormAdd(FACE_getIFNo(f, lvl, (S - 1 + f->numVerts) % f->numVerts, 1, 0), no); - for (K=0; K<f->numVerts; K++) { + for (K = 0; K < f->numVerts; K++) { if (K!=S) { NormAdd(FACE_getIFNo(f, lvl, K, 0, 0), no); } } - } else if (y==0) { - NormAdd(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, x), no); - if (!yLimitNext || x<gridSize-2) - NormAdd(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, x+1), no); - } else if (x==0) { - NormAdd(FACE_getIFNo(f, lvl, (S-1+f->numVerts)%f->numVerts, y, 0), no); - if (!xLimitPrev || y<gridSize-2) - NormAdd(FACE_getIFNo(f, lvl, (S-1+f->numVerts)%f->numVerts, y+1, 0), no); + } + else if (y == 0) { + NormAdd(FACE_getIFNo(f, lvl, (S + 1) % f->numVerts, 0, x), no); + if (!yLimitNext || x < gridSize - 2) + NormAdd(FACE_getIFNo(f, lvl, (S + 1) % f->numVerts, 0, x + 1), no); + } + else if (x == 0) { + NormAdd(FACE_getIFNo(f, lvl, (S - 1 + f->numVerts) % f->numVerts, y, 0), no); + if (!xLimitPrev || y < gridSize - 2) + NormAdd(FACE_getIFNo(f, lvl, (S - 1 + f->numVerts) % f->numVerts, y + 1, 0), no); } } } } } // XXX can I reduce the number of normalisations here? - for (ptrIdx=0; ptrIdx<numEffectedV; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) { CCGVert *v = (CCGVert*) effectedV[ptrIdx]; float length, *no = _vert_getNo(v, lvl, vertDataSize, normalDataOffset); NormZero(no); - for (i=0; i<v->numFaces; i++) { + for (i = 0; i < v->numFaces; i++) { CCGFace *f = v->faces[i]; - NormAdd(no, FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize-1, gridSize-1)); + NormAdd(no, FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize - 1, gridSize - 1)); } - length = sqrt(no[0]*no[0] + no[1]*no[1] + no[2]*no[2]); + length = sqrt(no[0] * no[0] + no[1] * no[1] + no[2] * no[2]); - if (length>EPSILON) { + if (length > EPSILON) { float invLength = 1.0f/length; no[0] *= invLength; no[1] *= invLength; no[2] *= invLength; - } else { + } + else { NormZero(no); } - for (i=0; i<v->numFaces; i++) { + for (i = 0; i < v->numFaces; i++) { CCGFace *f = v->faces[i]; - NormCopy(FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize-1, gridSize-1), no); + NormCopy(FACE_getIFNo(f, lvl, _face_getVertIndex(f,v), gridSize - 1, gridSize - 1), no); } } - for (ptrIdx=0; ptrIdx<numEffectedE; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) { CCGEdge *e = (CCGEdge*) effectedE[ptrIdx]; if (e->numFaces) { - CCGFace *fLast = e->faces[e->numFaces-1]; + CCGFace *fLast = e->faces[e->numFaces - 1]; int x; - for (i=0; i<e->numFaces-1; i++) { + for (i = 0; i < e->numFaces - 1; i++) { CCGFace *f = e->faces[i]; - for (x=1; x<edgeSize-1; x++) { + for (x = 1; x < edgeSize - 1; x++) { NormAdd(_face_getIFNoEdge(fLast, e, lvl, x, 0, subdivLevels, vertDataSize, normalDataOffset), _face_getIFNoEdge(f, e, lvl, x, 0, subdivLevels, vertDataSize, normalDataOffset)); } } - for (i=0; i<e->numFaces-1; i++) { + for (i = 0; i < e->numFaces - 1; i++) { CCGFace *f = e->faces[i]; - for (x=1; x<edgeSize-1; x++) { + for (x = 1; x < edgeSize - 1; x++) { NormCopy(_face_getIFNoEdge(f, e, lvl, x, 0, subdivLevels, vertDataSize, normalDataOffset), _face_getIFNoEdge(fLast, e, lvl, x, 0, subdivLevels, vertDataSize, normalDataOffset)); } @@ -1295,50 +1406,51 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss, } } - #pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT) - for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) { + #pragma omp parallel for private(ptrIdx) if (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT) + for (ptrIdx = 0; ptrIdx < numEffectedF; ptrIdx++) { CCGFace *f = (CCGFace*) effectedF[ptrIdx]; int S, x, y; - for (S=0; S<f->numVerts; S++) { - NormCopy(FACE_getIFNo(f, lvl, (S+1)%f->numVerts, 0, gridSize-1), - FACE_getIFNo(f, lvl, S, gridSize-1, 0)); + for (S = 0; S < f->numVerts; S++) { + NormCopy(FACE_getIFNo(f, lvl, (S + 1) % f->numVerts, 0, gridSize - 1), + FACE_getIFNo(f, lvl, S, gridSize - 1, 0)); } - for (S=0; S<f->numVerts; S++) { - for (y=0; y<gridSize; y++) { - for (x=0; x<gridSize; x++) { + for (S = 0; S < f->numVerts; S++) { + for (y = 0; y < gridSize; y++) { + for (x = 0; x < gridSize; x++) { float *no = FACE_getIFNo(f, lvl, S, x, y); - float length = sqrt(no[0]*no[0] + no[1]*no[1] + no[2]*no[2]); + float length = sqrt(no[0] * no[0] + no[1] * no[1] + no[2] * no[2]); - if (length>EPSILON) { + if (length > EPSILON) { float invLength = 1.0f/length; no[0] *= invLength; no[1] *= invLength; no[2] *= invLength; - } else { + } + else { NormZero(no); } } } - VertDataCopy((float*)((byte*)FACE_getCenterData(f) + normalDataOffset), + VertDataCopy((float *)((byte *)FACE_getCenterData(f) + normalDataOffset), FACE_getIFNo(f, lvl, S, 0, 0)); - for (x=1; x<gridSize-1; x++) + for (x = 1; x < gridSize - 1; x++) NormCopy(FACE_getIENo(f, lvl, S, x), FACE_getIFNo(f, lvl, S, x, 0)); } } - for (ptrIdx=0; ptrIdx<numEffectedE; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) { CCGEdge *e = (CCGEdge*) effectedE[ptrIdx]; if (e->numFaces) { CCGFace *f = e->faces[0]; int x; - for (x=0; x<edgeSize; x++) + for (x = 0; x < edgeSize; x++) NormCopy(EDGE_getNo(e, lvl, x), _face_getIFNoEdge(f, e, lvl, x, 0, subdivLevels, vertDataSize, normalDataOffset)); } @@ -1349,7 +1461,7 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss, * most likely not used so just zero out. */ int x; - for (x=0; x<edgeSize; x++) { + for (x = 0; x < edgeSize; x++) { NormZero(EDGE_getNo(e, lvl, x)); } } @@ -1361,34 +1473,36 @@ static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss, #define EDGE_getCo(e, lvl, x) _edge_getCo(e, lvl, x, vertDataSize) #define FACE_getIECo(f, lvl, S, x) _face_getIECo(f, lvl, S, x, subdivLevels, vertDataSize) #define FACE_getIFCo(f, lvl, S, x, y) _face_getIFCo(f, lvl, S, x, y, subdivLevels, vertDataSize) + static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, - CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, - int numEffectedV, int numEffectedE, int numEffectedF, int curLvl) { + CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, + int numEffectedV, int numEffectedE, int numEffectedF, int curLvl) +{ int subdivLevels = ss->subdivLevels; - int edgeSize = 1 + (1<<curLvl); - int gridSize = 1 + (1<<(curLvl-1)); - int nextLvl = curLvl+1; + int edgeSize = 1 + (1 << curLvl); + int gridSize = 1 + (1 << (curLvl - 1)); + int nextLvl = curLvl + 1; int ptrIdx, cornerIdx, i; int vertDataSize = ss->meshIFC.vertDataSize; void *q = ss->q, *r = ss->r; - #pragma omp parallel for private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT) - for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) { + #pragma omp parallel for private(ptrIdx) if (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT) + for (ptrIdx = 0; ptrIdx < numEffectedF; ptrIdx++) { CCGFace *f = (CCGFace*) effectedF[ptrIdx]; int S, x, y; /* interior face midpoints * o old interior face points */ - for (S=0; S<f->numVerts; S++) { - for (y=0; y<gridSize-1; y++) { - for (x=0; x<gridSize-1; x++) { + for (S = 0; S < f->numVerts; S++) { + for (y = 0; y < gridSize - 1; y++) { + for (x = 0; x < gridSize - 1; x++) { int fx = 1 + 2*x; int fy = 1 + 2*y; - void *co0 = FACE_getIFCo(f, curLvl, S, x+0, y+0); - void *co1 = FACE_getIFCo(f, curLvl, S, x+1, y+0); - void *co2 = FACE_getIFCo(f, curLvl, S, x+1, y+1); - void *co3 = FACE_getIFCo(f, curLvl, S, x+0, y+1); + void *co0 = FACE_getIFCo(f, curLvl, S, x + 0, y + 0); + void *co1 = FACE_getIFCo(f, curLvl, S, x + 1, y + 0); + void *co2 = FACE_getIFCo(f, curLvl, S, x + 1, y + 1); + void *co3 = FACE_getIFCo(f, curLvl, S, x + 0, y + 1); void *co = FACE_getIFCo(f, nextLvl, S, fx, fy); VertDataAvg4(co, co0, co1, co2, co3); @@ -1400,14 +1514,14 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, * o old interior edge points * o new interior face midpoints */ - for (S=0; S<f->numVerts; S++) { - for (x=0; x<gridSize-1; x++) { - int fx = x*2 + 1; - void *co0 = FACE_getIECo(f, curLvl, S, x+0); - void *co1 = FACE_getIECo(f, curLvl, S, x+1); - void *co2 = FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx); + for (S = 0; S < f->numVerts; S++) { + for (x = 0; x < gridSize - 1; x++) { + int fx = x * 2 + 1; + void *co0 = FACE_getIECo(f, curLvl, S, x + 0); + void *co1 = FACE_getIECo(f, curLvl, S, x + 1); + void *co2 = FACE_getIFCo(f, nextLvl, (S + 1) % f->numVerts, 1, fx); void *co3 = FACE_getIFCo(f, nextLvl, S, fx, 1); - void *co = FACE_getIECo(f, nextLvl, S, fx); + void *co = FACE_getIECo(f, nextLvl, S, fx); VertDataAvg4(co, co0, co1, co2, co3); } @@ -1418,30 +1532,30 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, */ /* vertical */ - for (x=1; x<gridSize-1; x++) { - for (y=0; y<gridSize-1; y++) { - int fx = x*2; - int fy = y*2+1; - void *co0 = FACE_getIFCo(f, curLvl, S, x, y+0); - void *co1 = FACE_getIFCo(f, curLvl, S, x, y+1); - void *co2 = FACE_getIFCo(f, nextLvl, S, fx-1, fy); - void *co3 = FACE_getIFCo(f, nextLvl, S, fx+1, fy); - void *co = FACE_getIFCo(f, nextLvl, S, fx, fy); + for (x = 1; x < gridSize - 1; x++) { + for (y = 0; y < gridSize - 1; y++) { + int fx = x * 2; + int fy = y * 2 + 1; + void *co0 = FACE_getIFCo(f, curLvl, S, x, y + 0); + void *co1 = FACE_getIFCo(f, curLvl, S, x, y + 1); + void *co2 = FACE_getIFCo(f, nextLvl, S, fx - 1, fy); + void *co3 = FACE_getIFCo(f, nextLvl, S, fx + 1, fy); + void *co = FACE_getIFCo(f, nextLvl, S, fx, fy); VertDataAvg4(co, co0, co1, co2, co3); } } /* horizontal */ - for (y=1; y<gridSize-1; y++) { - for (x=0; x<gridSize-1; x++) { - int fx = x*2+1; - int fy = y*2; - void *co0 = FACE_getIFCo(f, curLvl, S, x+0, y); - void *co1 = FACE_getIFCo(f, curLvl, S, x+1, y); - void *co2 = FACE_getIFCo(f, nextLvl, S, fx, fy-1); - void *co3 = FACE_getIFCo(f, nextLvl, S, fx, fy+1); - void *co = FACE_getIFCo(f, nextLvl, S, fx, fy); + for (y = 1; y < gridSize - 1; y++) { + for (x = 0; x < gridSize - 1; x++) { + int fx = x * 2 + 1; + int fy = y * 2; + void *co0 = FACE_getIFCo(f, curLvl, S, x + 0, y); + void *co1 = FACE_getIFCo(f, curLvl, S, x + 1, y); + void *co2 = FACE_getIFCo(f, nextLvl, S, fx, fy - 1); + void *co3 = FACE_getIFCo(f, nextLvl, S, fx, fy + 1); + void *co = FACE_getIFCo(f, nextLvl, S, fx, fy); VertDataAvg4(co, co0, co1, co2, co3); } @@ -1453,40 +1567,41 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, * o old exterior edge points * o new interior face midpoints */ - for (ptrIdx=0; ptrIdx<numEffectedE; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) { CCGEdge *e = (CCGEdge*) effectedE[ptrIdx]; float sharpness = EDGE_getSharpness(e, curLvl); int x, j; if (_edge_isBoundary(e) || sharpness > 1.0f) { - for (x=0; x<edgeSize-1; x++) { - int fx = x*2 + 1; - void *co0 = EDGE_getCo(e, curLvl, x+0); - void *co1 = EDGE_getCo(e, curLvl, x+1); - void *co = EDGE_getCo(e, nextLvl, fx); + for (x = 0; x < edgeSize - 1; x++) { + int fx = x * 2 + 1; + void *co0 = EDGE_getCo(e, curLvl, x + 0); + void *co1 = EDGE_getCo(e, curLvl, x + 1); + void *co = EDGE_getCo(e, nextLvl, fx); VertDataCopy(co, co0); VertDataAdd(co, co1); VertDataMulN(co, 0.5f); } - } else { - for (x=0; x<edgeSize-1; x++) { - int fx = x*2 + 1; - void *co0 = EDGE_getCo(e, curLvl, x+0); - void *co1 = EDGE_getCo(e, curLvl, x+1); - void *co = EDGE_getCo(e, nextLvl, fx); + } + else { + for (x = 0; x < edgeSize - 1; x++) { + int fx = x * 2 + 1; + void *co0 = EDGE_getCo(e, curLvl, x + 0); + void *co1 = EDGE_getCo(e, curLvl, x + 1); + void *co = EDGE_getCo(e, nextLvl, fx); int numFaces = 0; VertDataCopy(q, co0); VertDataAdd(q, co1); - for (j=0; j<e->numFaces; j++) { + for (j = 0; j < e->numFaces; j++) { CCGFace *f = e->faces[j]; VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx, 1, subdivLevels, vertDataSize)); numFaces++; } - VertDataMulN(q, 1.0f/(2.0f+numFaces)); + VertDataMulN(q, 1.0f / (2.0f + numFaces)); VertDataCopy(r, co0); VertDataAdd(r, co1); @@ -1505,7 +1620,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, * o old exterior edge points * o new interior face midpoints */ - for (ptrIdx=0; ptrIdx<numEffectedV; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) { CCGVert *v = (CCGVert*) effectedV[ptrIdx]; void *co = VERT_getCo(v, curLvl); void *nCo = VERT_getCo(v, nextLvl); @@ -1513,7 +1628,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, float avgSharpness = 0.0; int j, seam = VERT_seam(v), seamEdges = 0; - for (j=0; j<v->numEdges; j++) { + for (j = 0; j < v->numEdges; j++) { CCGEdge *e = v->edges[j]; float sharpness = EDGE_getSharpness(e, curLvl); @@ -1523,12 +1638,13 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, if (sharpness!=0.0f) { sharpCount++; avgSharpness += sharpness; - } else { + } + else { allSharp = 0; } } - if(sharpCount) { + if (sharpCount) { avgSharpness /= sharpCount; if (avgSharpness > 1.0f) { avgSharpness = 1.0f; @@ -1540,11 +1656,12 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, if (!v->numEdges) { VertDataCopy(nCo, co); - } else if (_vert_isBoundary(v)) { + } + else if (_vert_isBoundary(v)) { int numBoundary = 0; VertDataZero(r); - for (j=0; j<v->numEdges; j++) { + for (j = 0; j < v->numEdges; j++) { CCGEdge *e = v->edges[j]; if (_edge_isBoundary(e)) { VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); @@ -1556,19 +1673,20 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, VertDataMulN(nCo, 0.75f); VertDataMulN(r, 0.25f/numBoundary); VertDataAdd(nCo, r); - } else { - int cornerIdx = (1 + (1<<(curLvl))) - 2; + } + else { + int cornerIdx = (1 + (1 << (curLvl))) - 2; int numEdges = 0, numFaces = 0; VertDataZero(q); - for (j=0; j<v->numFaces; j++) { + for (j = 0; j < v->numFaces; j++) { CCGFace *f = v->faces[j]; VertDataAdd(q, FACE_getIFCo(f, nextLvl, _face_getVertIndex(f,v), cornerIdx, cornerIdx)); numFaces++; } VertDataMulN(q, 1.0f/numFaces); VertDataZero(r); - for (j=0; j<v->numEdges; j++) { + for (j = 0; j < v->numEdges; j++) { CCGEdge *e = v->edges[j]; VertDataAdd(r, _edge_getCoVert(e, v, curLvl, 1,vertDataSize)); numEdges++; @@ -1576,7 +1694,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, VertDataMulN(r, 1.0f/numEdges); VertDataCopy(nCo, co); - VertDataMulN(nCo, numEdges-2.0f); + VertDataMulN(nCo, numEdges - 2.0f); VertDataAdd(nCo, q); VertDataAdd(nCo, r); VertDataMulN(nCo, 1.0f/numEdges); @@ -1591,14 +1709,15 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, allSharp = 1; } - for (j=0; j<v->numEdges; j++) { + for (j = 0; j < v->numEdges; j++) { CCGEdge *e = v->edges[j]; float sharpness = EDGE_getSharpness(e, curLvl); if (seam) { if (_edge_isBoundary(e)) VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); - } else if (sharpness != 0.0f) { + } + else if (sharpness != 0.0f) { VertDataAdd(q, _edge_getCoVert(e, v, curLvl, 1, vertDataSize)); } } @@ -1606,7 +1725,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, VertDataMulN(q, (float) 1/sharpCount); if (sharpCount!=2 || allSharp) { - // q = q + (co-q)*avgSharpness + // q = q + (co-q) * avgSharpness VertDataCopy(r, co); VertDataSub(r, q); VertDataMulN(r, avgSharpness); @@ -1619,7 +1738,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, VertDataMulN(q, .25f); VertDataAdd(r, q); - // nCo = nCo + (r-nCo)*avgSharpness + // nCo = nCo + (r-nCo) * avgSharpness VertDataSub(r, nCo); VertDataMulN(r, avgSharpness); VertDataAdd(nCo, r); @@ -1631,7 +1750,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, * o old exterior edge midpoints * o new interior face midpoints */ - for (ptrIdx=0; ptrIdx<numEffectedE; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) { CCGEdge *e = (CCGEdge*) effectedE[ptrIdx]; float sharpness = EDGE_getSharpness(e, curLvl); int sharpCount = 0; @@ -1645,57 +1764,59 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, if (avgSharpness > 1.0f) { avgSharpness = 1.0f; } - } else { + } + else { sharpCount = 0; avgSharpness = 0; } if (_edge_isBoundary(e) && (!e->numFaces || sharpCount<2)) { - for (x=1; x<edgeSize-1; x++) { - int fx = x*2; + for (x = 1; x < edgeSize - 1; x++) { + int fx = x * 2; void *co = EDGE_getCo(e, curLvl, x); void *nCo = EDGE_getCo(e, nextLvl, fx); - VertDataCopy(r, EDGE_getCo(e, curLvl, x-1)); - VertDataAdd(r, EDGE_getCo(e, curLvl, x+1)); + VertDataCopy(r, EDGE_getCo(e, curLvl, x - 1)); + VertDataAdd(r, EDGE_getCo(e, curLvl, x + 1)); VertDataMulN(r, 0.5f); VertDataCopy(nCo, co); VertDataMulN(nCo, 0.75f); VertDataMulN(r, 0.25f); VertDataAdd(nCo, r); } - } else { - for (x=1; x<edgeSize-1; x++) { - int fx = x*2; + } + else { + for (x = 1; x < edgeSize - 1; x++) { + int fx = x * 2; void *co = EDGE_getCo(e, curLvl, x); void *nCo = EDGE_getCo(e, nextLvl, fx); int numFaces = 0; VertDataZero(q); VertDataZero(r); - VertDataAdd(r, EDGE_getCo(e, curLvl, x-1)); - VertDataAdd(r, EDGE_getCo(e, curLvl, x+1)); - for (j=0; j<e->numFaces; j++) { + VertDataAdd(r, EDGE_getCo(e, curLvl, x - 1)); + VertDataAdd(r, EDGE_getCo(e, curLvl, x + 1)); + for (j = 0; j < e->numFaces; j++) { CCGFace *f = e->faces[j]; - VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx-1, 1, subdivLevels, vertDataSize)); - VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx+1, 1, subdivLevels, vertDataSize)); + VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx - 1, 1, subdivLevels, vertDataSize)); + VertDataAdd(q, _face_getIFCoEdge(f, e, nextLvl, fx + 1, 1, subdivLevels, vertDataSize)); VertDataAdd(r, _face_getIFCoEdge(f, e, curLvl, x, 1, subdivLevels, vertDataSize)); numFaces++; } - VertDataMulN(q, 1.0f/(numFaces*2.0f)); - VertDataMulN(r, 1.0f/(2.0f + numFaces)); + VertDataMulN(q, 1.0f / (numFaces * 2.0f)); + VertDataMulN(r, 1.0f / (2.0f + numFaces)); VertDataCopy(nCo, co); VertDataMulN(nCo, (float) numFaces); VertDataAdd(nCo, q); VertDataAdd(nCo, r); - VertDataMulN(nCo, 1.0f/(2+numFaces)); + VertDataMulN(nCo, 1.0f / (2 + numFaces)); - if (sharpCount==2) { + if (sharpCount == 2) { VertDataCopy(q, co); VertDataMulN(q, 6.0f); - VertDataAdd(q, EDGE_getCo(e, curLvl, x-1)); - VertDataAdd(q, EDGE_getCo(e, curLvl, x+1)); + VertDataAdd(q, EDGE_getCo(e, curLvl, x - 1)); + VertDataAdd(q, EDGE_getCo(e, curLvl, x + 1)); VertDataMulN(q, 1/8.0f); VertDataSub(q, nCo); @@ -1706,7 +1827,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, } } - #pragma omp parallel private(ptrIdx) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT) + #pragma omp parallel private(ptrIdx) if (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT) { void *q, *r; @@ -1717,7 +1838,7 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, } #pragma omp for schedule(static) - for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedF; ptrIdx++) { CCGFace *f = (CCGFace*) effectedF[ptrIdx]; int S, x, y; @@ -1727,43 +1848,45 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, * o new interior face midpoints */ VertDataZero(q); - for (S=0; S<f->numVerts; S++) { + for (S = 0; S < f->numVerts; S++) { VertDataAdd(q, FACE_getIFCo(f, nextLvl, S, 1, 1)); } VertDataMulN(q, 1.0f/f->numVerts); VertDataZero(r); - for (S=0; S<f->numVerts; S++) { + for (S = 0; S < f->numVerts; S++) { VertDataAdd(r, FACE_getIECo(f, curLvl, S, 1)); } VertDataMulN(r, 1.0f/f->numVerts); - VertDataMulN(FACE_getCenterData(f), f->numVerts-2.0f); + VertDataMulN(FACE_getCenterData(f), f->numVerts - 2.0f); VertDataAdd(FACE_getCenterData(f), q); VertDataAdd(FACE_getCenterData(f), r); VertDataMulN(FACE_getCenterData(f), 1.0f/f->numVerts); - for (S=0; S<f->numVerts; S++) { + for (S = 0; S < f->numVerts; S++) { /* interior face shift * o old interior face point (shifting) * o new interior edge midpoints * o new interior face midpoints */ - for (x=1; x<gridSize-1; x++) { - for (y=1; y<gridSize-1; y++) { - int fx = x*2; - int fy = y*2; + for (x = 1; x < gridSize - 1; x++) { + for (y = 1; y < gridSize - 1; y++) { + int fx = x * 2; + int fy = y * 2; void *co = FACE_getIFCo(f, curLvl, S, x, y); void *nCo = FACE_getIFCo(f, nextLvl, S, fx, fy); - VertDataAvg4(q, FACE_getIFCo(f, nextLvl, S, fx-1, fy-1), - FACE_getIFCo(f, nextLvl, S, fx+1, fy-1), - FACE_getIFCo(f, nextLvl, S, fx+1, fy+1), - FACE_getIFCo(f, nextLvl, S, fx-1, fy+1)); - - VertDataAvg4(r, FACE_getIFCo(f, nextLvl, S, fx-1, fy+0), - FACE_getIFCo(f, nextLvl, S, fx+1, fy+0), - FACE_getIFCo(f, nextLvl, S, fx+0, fy-1), - FACE_getIFCo(f, nextLvl, S, fx+0, fy+1)); + VertDataAvg4(q, + FACE_getIFCo(f, nextLvl, S, fx - 1, fy - 1), + FACE_getIFCo(f, nextLvl, S, fx + 1, fy - 1), + FACE_getIFCo(f, nextLvl, S, fx + 1, fy + 1), + FACE_getIFCo(f, nextLvl, S, fx - 1, fy + 1)); + + VertDataAvg4(r, + FACE_getIFCo(f, nextLvl, S, fx - 1, fy + 0), + FACE_getIFCo(f, nextLvl, S, fx + 1, fy + 0), + FACE_getIFCo(f, nextLvl, S, fx + 0, fy - 1), + FACE_getIFCo(f, nextLvl, S, fx + 0, fy + 1)); VertDataCopy(nCo, co); VertDataSub(nCo, q); @@ -1777,20 +1900,22 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, * o new interior edge midpoints * o new interior face midpoints */ - for (x=1; x<gridSize-1; x++) { - int fx = x*2; + for (x = 1; x < gridSize - 1; x++) { + int fx = x * 2; void *co = FACE_getIECo(f, curLvl, S, x); void *nCo = FACE_getIECo(f, nextLvl, S, fx); - VertDataAvg4(q, FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx-1), - FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx+1), - FACE_getIFCo(f, nextLvl, S, fx+1, +1), - FACE_getIFCo(f, nextLvl, S, fx-1, +1)); - - VertDataAvg4(r, FACE_getIECo(f, nextLvl, S, fx-1), - FACE_getIECo(f, nextLvl, S, fx+1), - FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 1, fx), - FACE_getIFCo(f, nextLvl, S, fx, 1)); + VertDataAvg4(q, + FACE_getIFCo(f, nextLvl, (S + 1) % f->numVerts, 1, fx - 1), + FACE_getIFCo(f, nextLvl, (S + 1) % f->numVerts, 1, fx + 1), + FACE_getIFCo(f, nextLvl, S, fx + 1, + 1), + FACE_getIFCo(f, nextLvl, S, fx - 1, + 1)); + + VertDataAvg4(r, + FACE_getIECo(f, nextLvl, S, fx - 1), + FACE_getIECo(f, nextLvl, S, fx + 1), + FACE_getIFCo(f, nextLvl, (S + 1) % f->numVerts, 1, fx), + FACE_getIFCo(f, nextLvl, S, fx, 1)); VertDataCopy(nCo, co); VertDataSub(nCo, q); @@ -1808,37 +1933,37 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, } /* copy down */ - edgeSize = 1 + (1<<(nextLvl)); - gridSize = 1 + (1<<((nextLvl)-1)); - cornerIdx = gridSize-1; + edgeSize = 1 + (1 << (nextLvl)); + gridSize = 1 + (1 << ((nextLvl)-1)); + cornerIdx = gridSize - 1; - #pragma omp parallel for private(i) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT) - for (i=0; i<numEffectedE; i++) { + #pragma omp parallel for private(i) if (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT) + for (i = 0; i < numEffectedE; i++) { CCGEdge *e = effectedE[i]; VertDataCopy(EDGE_getCo(e, nextLvl, 0), VERT_getCo(e->v0, nextLvl)); - VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize-1), VERT_getCo(e->v1, nextLvl)); + VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize - 1), VERT_getCo(e->v1, nextLvl)); } - #pragma omp parallel for private(i) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT) - for (i=0; i<numEffectedF; i++) { + #pragma omp parallel for private(i) if (numEffectedF * edgeSize * edgeSize * 4 >= CCG_OMP_LIMIT) + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; int S, x; - for (S=0; S<f->numVerts; S++) { + for (S = 0; S < f->numVerts; S++) { CCGEdge *e = FACE_getEdges(f)[S]; - CCGEdge *prevE = FACE_getEdges(f)[(S+f->numVerts-1)%f->numVerts]; + CCGEdge *prevE = FACE_getEdges(f)[(S + f->numVerts - 1) % f->numVerts]; VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), FACE_getCenterData(f)); VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), FACE_getCenterData(f)); VertDataCopy(FACE_getIFCo(f, nextLvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], nextLvl)); VertDataCopy(FACE_getIECo(f, nextLvl, S, cornerIdx), EDGE_getCo(FACE_getEdges(f)[S], nextLvl, cornerIdx)); - for (x=1; x<gridSize-1; x++) { + for (x = 1; x < gridSize - 1; x++) { void *co = FACE_getIECo(f, nextLvl, S, x); VertDataCopy(FACE_getIFCo(f, nextLvl, S, x, 0), co); - VertDataCopy(FACE_getIFCo(f, nextLvl, (S+1)%f->numVerts, 0, x), co); + VertDataCopy(FACE_getIFCo(f, nextLvl, (S + 1) % f->numVerts, 0, x), co); } - for (x=0; x<gridSize-1; x++) { - int eI = gridSize-1-x; + for (x = 0; x < gridSize - 1; x++) { + int eI = gridSize - 1 - x; VertDataCopy(FACE_getIFCo(f, nextLvl, S, cornerIdx, x), _edge_getCoVert(e, FACE_getVerts(f)[S], nextLvl, eI,vertDataSize)); VertDataCopy(FACE_getIFCo(f, nextLvl, S, x, cornerIdx), _edge_getCoVert(prevE, FACE_getVerts(f)[S], nextLvl, eI,vertDataSize)); } @@ -1847,7 +1972,8 @@ static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, } -static void ccgSubSurf__sync(CCGSubSurf *ss) { +static void ccgSubSurf__sync(CCGSubSurf *ss) +{ CCGVert **effectedV; CCGEdge **effectedE; CCGFace **effectedF; @@ -1858,17 +1984,17 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { int curLvl, nextLvl; void *q = ss->q, *r = ss->r; - effectedV = MEM_mallocN(sizeof(*effectedV)*ss->vMap->numEntries, "CCGSubsurf effectedV"); - effectedE = MEM_mallocN(sizeof(*effectedE)*ss->eMap->numEntries, "CCGSubsurf effectedE"); - effectedF = MEM_mallocN(sizeof(*effectedF)*ss->fMap->numEntries, "CCGSubsurf effectedF"); + effectedV = MEM_mallocN(sizeof(*effectedV) * ss->vMap->numEntries, "CCGSubsurf effectedV"); + effectedE = MEM_mallocN(sizeof(*effectedE) * ss->eMap->numEntries, "CCGSubsurf effectedE"); + effectedF = MEM_mallocN(sizeof(*effectedF) * ss->fMap->numEntries, "CCGSubsurf effectedF"); numEffectedV = numEffectedE = numEffectedF = 0; - for (i=0; i<ss->vMap->curSize; i++) { + for (i = 0; i < ss->vMap->curSize; i++) { CCGVert *v = (CCGVert*) ss->vMap->buckets[i]; for (; v; v = v->next) { if (v->flags&Vert_eEffected) { effectedV[numEffectedV++] = v; - for (j=0; j<v->numEdges; j++) { + for (j = 0; j < v->numEdges; j++) { CCGEdge *e = v->edges[j]; if (!(e->flags&Edge_eEffected)) { effectedE[numEffectedE++] = e; @@ -1876,7 +2002,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { } } - for (j=0; j<v->numFaces; j++) { + for (j = 0; j < v->numFaces; j++) { CCGFace *f = v->faces[j]; if (!(f->flags&Face_eEffected)) { effectedF[numEffectedF++] = f; @@ -1888,20 +2014,20 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { } curLvl = 0; - nextLvl = curLvl+1; + nextLvl = curLvl + 1; - for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedF; ptrIdx++) { CCGFace *f = effectedF[ptrIdx]; void *co = FACE_getCenterData(f); VertDataZero(co); - for (i=0; i<f->numVerts; i++) { + for (i = 0; i < f->numVerts; i++) { VertDataAdd(co, VERT_getCo(FACE_getVerts(f)[i], curLvl)); } VertDataMulN(co, 1.0f/f->numVerts); f->flags = 0; } - for (ptrIdx=0; ptrIdx<numEffectedE; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) { CCGEdge *e = effectedE[ptrIdx]; void *co = EDGE_getCo(e, nextLvl, 1); float sharpness = EDGE_getSharpness(e, curLvl); @@ -1910,16 +2036,17 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { VertDataCopy(co, VERT_getCo(e->v0, curLvl)); VertDataAdd(co, VERT_getCo(e->v1, curLvl)); VertDataMulN(co, 0.5f); - } else { + } + else { int numFaces = 0; VertDataCopy(q, VERT_getCo(e->v0, curLvl)); VertDataAdd(q, VERT_getCo(e->v1, curLvl)); - for (i=0; i<e->numFaces; i++) { + for (i = 0; i < e->numFaces; i++) { CCGFace *f = e->faces[i]; VertDataAdd(q, FACE_getCenterData(f)); numFaces++; } - VertDataMulN(q, 1.0f/(2.0f+numFaces)); + VertDataMulN(q, 1.0f / (2.0f + numFaces)); VertDataCopy(r, VERT_getCo(e->v0, curLvl)); VertDataAdd(r, VERT_getCo(e->v1, curLvl)); @@ -1933,7 +2060,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { // edge flags cleared later } - for (ptrIdx=0; ptrIdx<numEffectedV; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) { CCGVert *v = effectedV[ptrIdx]; void *co = VERT_getCo(v, curLvl); void *nCo = VERT_getCo(v, nextLvl); @@ -1941,7 +2068,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { float avgSharpness = 0.0; int seam = VERT_seam(v), seamEdges = 0; - for (i=0; i<v->numEdges; i++) { + for (i = 0; i < v->numEdges; i++) { CCGEdge *e = v->edges[i]; float sharpness = EDGE_getSharpness(e, curLvl); @@ -1951,12 +2078,13 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { if (sharpness!=0.0f) { sharpCount++; avgSharpness += sharpness; - } else { + } + else { allSharp = 0; } } - if(sharpCount) { + if (sharpCount) { avgSharpness /= sharpCount; if (avgSharpness > 1.0f) { avgSharpness = 1.0f; @@ -1968,11 +2096,12 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { if (!v->numEdges) { VertDataCopy(nCo, co); - } else if (_vert_isBoundary(v)) { + } + else if (_vert_isBoundary(v)) { int numBoundary = 0; VertDataZero(r); - for (i=0; i<v->numEdges; i++) { + for (i = 0; i < v->numEdges; i++) { CCGEdge *e = v->edges[i]; if (_edge_isBoundary(e)) { VertDataAdd(r, VERT_getCo(_edge_getOtherVert(e, v), curLvl)); @@ -1983,18 +2112,19 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { VertDataMulN(nCo, 0.75f); VertDataMulN(r, 0.25f/numBoundary); VertDataAdd(nCo, r); - } else { + } + else { int numEdges = 0, numFaces = 0; VertDataZero(q); - for (i=0; i<v->numFaces; i++) { + for (i = 0; i < v->numFaces; i++) { CCGFace *f = v->faces[i]; VertDataAdd(q, FACE_getCenterData(f)); numFaces++; } VertDataMulN(q, 1.0f/numFaces); VertDataZero(r); - for (i=0; i<v->numEdges; i++) { + for (i = 0; i < v->numEdges; i++) { CCGEdge *e = v->edges[i]; VertDataAdd(r, VERT_getCo(_edge_getOtherVert(e, v), curLvl)); numEdges++; @@ -2002,7 +2132,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { VertDataMulN(r, 1.0f/numEdges); VertDataCopy(nCo, co); - VertDataMulN(nCo, numEdges-2.0f); + VertDataMulN(nCo, numEdges - 2.0f); VertDataAdd(nCo, q); VertDataAdd(nCo, r); VertDataMulN(nCo, 1.0f/numEdges); @@ -2017,7 +2147,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { allSharp = 1; } - for (i=0; i<v->numEdges; i++) { + for (i = 0; i < v->numEdges; i++) { CCGEdge *e = v->edges[i]; float sharpness = EDGE_getSharpness(e, curLvl); @@ -2026,7 +2156,8 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { CCGVert *oV = _edge_getOtherVert(e, v); VertDataAdd(q, VERT_getCo(oV, curLvl)); } - } else if (sharpness != 0.0f) { + } + else if (sharpness != 0.0f) { CCGVert *oV = _edge_getOtherVert(e, v); VertDataAdd(q, VERT_getCo(oV, curLvl)); } @@ -2035,7 +2166,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { VertDataMulN(q, (float) 1/sharpCount); if (sharpCount!=2 || allSharp) { - // q = q + (co-q)*avgSharpness + // q = q + (co-q) * avgSharpness VertDataCopy(r, co); VertDataSub(r, q); VertDataMulN(r, avgSharpness); @@ -2048,7 +2179,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { VertDataMulN(q, 0.25f); VertDataAdd(r, q); - // nCo = nCo + (r-nCo)*avgSharpness + // nCo = nCo + (r-nCo) * avgSharpness VertDataSub(r, nCo); VertDataMulN(r, avgSharpness); VertDataAdd(nCo, r); @@ -2058,35 +2189,35 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { } if (ss->useAgeCounts) { - for (i=0; i<numEffectedV; i++) { + for (i = 0; i < numEffectedV; i++) { CCGVert *v = effectedV[i]; byte *userData = ccgSubSurf_getVertUserData(ss, v); *((int*) &userData[ss->vertUserAgeOffset]) = ss->currentAge; } - for (i=0; i<numEffectedE; i++) { + for (i = 0; i < numEffectedE; i++) { CCGEdge *e = effectedE[i]; byte *userData = ccgSubSurf_getEdgeUserData(ss, e); *((int*) &userData[ss->edgeUserAgeOffset]) = ss->currentAge; } - for (i=0; i<numEffectedF; i++) { + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; byte *userData = ccgSubSurf_getFaceUserData(ss, f); *((int*) &userData[ss->faceUserAgeOffset]) = ss->currentAge; } } - for (i=0; i<numEffectedE; i++) { + for (i = 0; i < numEffectedE; i++) { CCGEdge *e = effectedE[i]; VertDataCopy(EDGE_getCo(e, nextLvl, 0), VERT_getCo(e->v0, nextLvl)); VertDataCopy(EDGE_getCo(e, nextLvl, 2), VERT_getCo(e->v1, nextLvl)); } - for (i=0; i<numEffectedF; i++) { + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; - for (S=0; S<f->numVerts; S++) { + for (S = 0; S < f->numVerts; S++) { CCGEdge *e = FACE_getEdges(f)[S]; - CCGEdge *prevE = FACE_getEdges(f)[(S+f->numVerts-1)%f->numVerts]; + CCGEdge *prevE = FACE_getEdges(f)[(S + f->numVerts - 1) % f->numVerts]; VertDataCopy(FACE_getIFCo(f, nextLvl, S, 0, 0), FACE_getCenterData(f)); VertDataCopy(FACE_getIECo(f, nextLvl, S, 0), FACE_getCenterData(f)); @@ -2098,7 +2229,7 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { } } - for (curLvl=1; curLvl<subdivLevels; curLvl++) { + for (curLvl = 1; curLvl < subdivLevels; curLvl++) { ccgSubSurf__calcSubdivLevel(ss, effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF, curLvl); @@ -2109,11 +2240,11 @@ static void ccgSubSurf__sync(CCGSubSurf *ss) { effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF); - for (ptrIdx=0; ptrIdx<numEffectedV; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) { CCGVert *v = effectedV[ptrIdx]; v->flags = 0; } - for (ptrIdx=0; ptrIdx<numEffectedE; ptrIdx++) { + for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) { CCGEdge *e = effectedE[ptrIdx]; e->flags = 0; } @@ -2128,10 +2259,10 @@ static void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces CCGFace **array; int i, num; - if(!*faces) { - array = MEM_mallocN(sizeof(*array)*ss->fMap->numEntries, "CCGSubsurf allFaces"); + if (!*faces) { + array = MEM_mallocN(sizeof(*array) * ss->fMap->numEntries, "CCGSubsurf allFaces"); num = 0; - for (i=0; i<ss->fMap->curSize; i++) { + for (i = 0; i < ss->fMap->curSize; i++) { CCGFace *f = (CCGFace*) ss->fMap->buckets[i]; for (; f; f = f->next) @@ -2140,10 +2271,11 @@ static void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces *faces = array; *numFaces = num; - *freeFaces= 1; + *freeFaces = 1; + } + else { + *freeFaces = 0; } - else - *freeFaces= 0; } static void ccgSubSurf__effectedFaceNeighbours(CCGSubSurf *ss, CCGFace **faces, int numFaces, CCGVert ***verts, int *numVerts, CCGEdge ***edges, int *numEdges) @@ -2152,39 +2284,39 @@ static void ccgSubSurf__effectedFaceNeighbours(CCGSubSurf *ss, CCGFace **faces, CCGEdge **arrayE; int numV, numE, i, j; - arrayV = MEM_mallocN(sizeof(*arrayV)*ss->vMap->numEntries, "CCGSubsurf arrayV"); - arrayE = MEM_mallocN(sizeof(*arrayE)*ss->eMap->numEntries, "CCGSubsurf arrayV"); + arrayV = MEM_mallocN(sizeof(*arrayV) * ss->vMap->numEntries, "CCGSubsurf arrayV"); + arrayE = MEM_mallocN(sizeof(*arrayE) * ss->eMap->numEntries, "CCGSubsurf arrayV"); numV = numE = 0; - for (i=0; i<numFaces; i++) { + for (i = 0; i < numFaces; i++) { CCGFace *f = faces[i]; f->flags |= Face_eEffected; } - for (i=0; i<ss->vMap->curSize; i++) { + for (i = 0; i < ss->vMap->curSize; i++) { CCGVert *v = (CCGVert*) ss->vMap->buckets[i]; for (; v; v = v->next) { - for(j=0; j<v->numFaces; j++) - if(!(v->faces[j]->flags & Face_eEffected)) + for (j = 0; j < v->numFaces; j++) + if (!(v->faces[j]->flags & Face_eEffected)) break; - if(j == v->numFaces) { + if (j == v->numFaces) { arrayV[numV++] = v; v->flags |= Vert_eEffected; } } } - for (i=0; i<ss->eMap->curSize; i++) { + for (i = 0; i < ss->eMap->curSize; i++) { CCGEdge *e = (CCGEdge*) ss->eMap->buckets[i]; for (; e; e = e->next) { - for(j=0; j<e->numFaces; j++) - if(!(e->faces[j]->flags & Face_eEffected)) + for (j = 0; j < e->numFaces; j++) + if (!(e->faces[j]->flags & Face_eEffected)) break; - if(j == e->numFaces) { + if (j == e->numFaces) { e->flags |= Edge_eEffected; arrayE[numE++] = e; } @@ -2205,33 +2337,33 @@ CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF subdivLevels = ss->subdivLevels; lvl = (lvl)? lvl: subdivLevels; - gridSize = 1 + (1<<(lvl-1)); - cornerIdx = gridSize-1; + gridSize = 1 + (1 << (lvl - 1)); + cornerIdx = gridSize - 1; ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); - for (i=0; i<numEffectedF; i++) { + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; - for (S=0; S<f->numVerts; S++) { + for (S = 0; S < f->numVerts; S++) { CCGEdge *e = FACE_getEdges(f)[S]; - CCGEdge *prevE = FACE_getEdges(f)[(S+f->numVerts-1)%f->numVerts]; + CCGEdge *prevE = FACE_getEdges(f)[(S + f->numVerts - 1) % f->numVerts]; VertDataCopy(FACE_getCenterData(f), FACE_getIFCo(f, lvl, S, 0, 0)); VertDataCopy(VERT_getCo(FACE_getVerts(f)[S], lvl), FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx)); - for (x=0; x<gridSize; x++) + for (x = 0; x < gridSize; x++) VertDataCopy(FACE_getIECo(f, lvl, S, x), FACE_getIFCo(f, lvl, S, x, 0)); - for (x=0; x<gridSize; x++) { - int eI = gridSize-1-x; + for (x = 0; x < gridSize; x++) { + int eI = gridSize - 1 - x; VertDataCopy(_edge_getCoVert(e, FACE_getVerts(f)[S], lvl, eI,vertDataSize), FACE_getIFCo(f, lvl, S, cornerIdx, x)); VertDataCopy(_edge_getCoVert(prevE, FACE_getVerts(f)[S], lvl, eI,vertDataSize), FACE_getIFCo(f, lvl, S, x, cornerIdx)); } } } - if(freeF) MEM_freeN(effectedF); + if (freeF) MEM_freeN(effectedF); return eCCGError_None; } @@ -2244,26 +2376,26 @@ CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, subdivLevels = ss->subdivLevels; lvl = (lvl)? lvl: subdivLevels; - gridSize = 1 + (1<<(lvl-1)); - cornerIdx = gridSize-1; + gridSize = 1 + (1 << (lvl - 1)); + cornerIdx = gridSize - 1; ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); - for (i=0; i<numEffectedF; i++) { + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; - for (S=0; S<f->numVerts; S++) { - int prevS = (S+f->numVerts-1)%f->numVerts; + for (S = 0; S < f->numVerts; S++) { + int prevS = (S + f->numVerts - 1) % f->numVerts; CCGEdge *e = FACE_getEdges(f)[S]; CCGEdge *prevE = FACE_getEdges(f)[prevS]; - for (x=0; x<gridSize; x++) { - int eI = gridSize-1-x; + for (x = 0; x < gridSize; x++) { + int eI = gridSize - 1 - x; VertDataCopy(FACE_getIFCo(f, lvl, S, cornerIdx, x), _edge_getCoVert(e, FACE_getVerts(f)[S], lvl, eI,vertDataSize)); VertDataCopy(FACE_getIFCo(f, lvl, S, x, cornerIdx), _edge_getCoVert(prevE, FACE_getVerts(f)[S], lvl, eI,vertDataSize)); } - for (x=1; x<gridSize-1; x++) { + for (x = 1; x < gridSize - 1; x++) { VertDataCopy(FACE_getIFCo(f, lvl, S, 0, x), FACE_getIECo(f, lvl, prevS, x)); VertDataCopy(FACE_getIFCo(f, lvl, S, x, 0), FACE_getIECo(f, lvl, S, x)); } @@ -2273,7 +2405,7 @@ CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, } } - if(freeF) MEM_freeN(effectedF); + if (freeF) MEM_freeN(effectedF); return eCCGError_None; } @@ -2290,41 +2422,41 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in subdivLevels = ss->subdivLevels; lvl = (lvl)? lvl: subdivLevels; - gridSize = 1 + (1<<(lvl-1)); - edgeSize = 1 + (1<<lvl); - cornerIdx = gridSize-1; + gridSize = 1 + (1 << (lvl - 1)); + edgeSize = 1 + (1 << lvl); + cornerIdx = gridSize - 1; ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF); ccgSubSurf__effectedFaceNeighbours(ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE); /* zero */ - for (i=0; i<numEffectedV; i++) { + for (i = 0; i < numEffectedV; i++) { CCGVert *v = effectedV[i]; - if(v->numFaces) + if (v->numFaces) VertDataZero(VERT_getCo(v, lvl)); } - for (i=0; i<numEffectedE; i++) { + for (i = 0; i < numEffectedE; i++) { CCGEdge *e = effectedE[i]; - if(e->numFaces) - for (x=0; x<edgeSize; x++) + if (e->numFaces) + for (x = 0; x < edgeSize; x++) VertDataZero(EDGE_getCo(e, lvl, x)); } /* add */ - for (i=0; i<numEffectedF; i++) { + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; VertDataZero(FACE_getCenterData(f)); - for (S=0; S<f->numVerts; S++) - for (x=0; x<gridSize; x++) + for (S = 0; S < f->numVerts; S++) + for (x = 0; x < gridSize; x++) VertDataZero(FACE_getIECo(f, lvl, S, x)); - for (S=0; S<f->numVerts; S++) { - int prevS = (S+f->numVerts-1)%f->numVerts; + for (S = 0; S < f->numVerts; S++) { + int prevS = (S + f->numVerts - 1) % f->numVerts; CCGEdge *e = FACE_getEdges(f)[S]; CCGEdge *prevE = FACE_getEdges(f)[prevS]; @@ -2332,90 +2464,91 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in if (FACE_getVerts(f)[S]->flags&Vert_eEffected) VertDataAdd(VERT_getCo(FACE_getVerts(f)[S], lvl), FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx)); - for (x=1; x<gridSize-1; x++) { + for (x = 1; x < gridSize - 1; x++) { VertDataAdd(FACE_getIECo(f, lvl, S, x), FACE_getIFCo(f, lvl, S, x, 0)); VertDataAdd(FACE_getIECo(f, lvl, prevS, x), FACE_getIFCo(f, lvl, S, 0, x)); } - for (x=0; x<gridSize-1; x++) { - int eI = gridSize-1-x; + for (x = 0; x < gridSize - 1; x++) { + int eI = gridSize - 1 - x; if (FACE_getEdges(f)[S]->flags&Edge_eEffected) VertDataAdd(_edge_getCoVert(e, FACE_getVerts(f)[S], lvl, eI,vertDataSize), FACE_getIFCo(f, lvl, S, cornerIdx, x)); if (FACE_getEdges(f)[prevS]->flags&Edge_eEffected) - if(x != 0) + if (x != 0) VertDataAdd(_edge_getCoVert(prevE, FACE_getVerts(f)[S], lvl, eI,vertDataSize), FACE_getIFCo(f, lvl, S, x, cornerIdx)); } } } /* average */ - for (i=0; i<numEffectedV; i++) { + for (i = 0; i < numEffectedV; i++) { CCGVert *v = effectedV[i]; - if(v->numFaces) + if (v->numFaces) VertDataMulN(VERT_getCo(v, lvl), 1.0f/v->numFaces); } - for (i=0; i<numEffectedE; i++) { + for (i = 0; i < numEffectedE; i++) { CCGEdge *e = effectedE[i]; VertDataCopy(EDGE_getCo(e, lvl, 0), VERT_getCo(e->v0, lvl)); - VertDataCopy(EDGE_getCo(e, lvl, edgeSize-1), VERT_getCo(e->v1, lvl)); + VertDataCopy(EDGE_getCo(e, lvl, edgeSize - 1), VERT_getCo(e->v1, lvl)); - if(e->numFaces) - for (x=1; x<edgeSize-1; x++) + if (e->numFaces) + for (x = 1; x < edgeSize - 1; x++) VertDataMulN(EDGE_getCo(e, lvl, x), 1.0f/e->numFaces); } /* copy */ - for (i=0; i<numEffectedF; i++) { + for (i = 0; i < numEffectedF; i++) { CCGFace *f = effectedF[i]; VertDataMulN(FACE_getCenterData(f), 1.0f/f->numVerts); - for (S=0; S<f->numVerts; S++) - for (x=1; x<gridSize-1; x++) + for (S = 0; S < f->numVerts; S++) + for (x = 1; x < gridSize - 1; x++) VertDataMulN(FACE_getIECo(f, lvl, S, x), 0.5f); - for (S=0; S<f->numVerts; S++) { - int prevS = (S+f->numVerts-1)%f->numVerts; + for (S = 0; S < f->numVerts; S++) { + int prevS = (S + f->numVerts - 1) % f->numVerts; CCGEdge *e = FACE_getEdges(f)[S]; CCGEdge *prevE = FACE_getEdges(f)[prevS]; VertDataCopy(FACE_getIFCo(f, lvl, S, 0, 0), FACE_getCenterData(f)); VertDataCopy(FACE_getIFCo(f, lvl, S, cornerIdx, cornerIdx), VERT_getCo(FACE_getVerts(f)[S], lvl)); - for (x=1; x<gridSize-1; x++) { + for (x = 1; x < gridSize - 1; x++) { VertDataCopy(FACE_getIFCo(f, lvl, S, x, 0), FACE_getIECo(f, lvl, S, x)); VertDataCopy(FACE_getIFCo(f, lvl, S, 0, x), FACE_getIECo(f, lvl, prevS, x)); } - for (x=0; x<gridSize-1; x++) { - int eI = gridSize-1-x; + for (x = 0; x < gridSize - 1; x++) { + int eI = gridSize - 1 - x; VertDataCopy(FACE_getIFCo(f, lvl, S, cornerIdx, x), _edge_getCoVert(e, FACE_getVerts(f)[S], lvl, eI,vertDataSize)); VertDataCopy(FACE_getIFCo(f, lvl, S, x, cornerIdx), _edge_getCoVert(prevE, FACE_getVerts(f)[S], lvl, eI,vertDataSize)); } VertDataCopy(FACE_getIECo(f, lvl, S, 0), FACE_getCenterData(f)); - VertDataCopy(FACE_getIECo(f, lvl, S, gridSize-1), FACE_getIFCo(f, lvl, S, gridSize-1, 0)); + VertDataCopy(FACE_getIECo(f, lvl, S, gridSize - 1), FACE_getIFCo(f, lvl, S, gridSize - 1, 0)); } } - for (i=0; i<numEffectedV; i++) + for (i = 0; i < numEffectedV; i++) effectedV[i]->flags = 0; - for (i=0; i<numEffectedE; i++) + for (i = 0; i < numEffectedE; i++) effectedE[i]->flags = 0; - for (i=0; i<numEffectedF; i++) + for (i = 0; i < numEffectedF; i++) effectedF[i]->flags = 0; MEM_freeN(effectedE); MEM_freeN(effectedV); - if(freeF) MEM_freeN(effectedF); + if (freeF) MEM_freeN(effectedF); return eCCGError_None; } /* update normals for specified faces */ -CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF) { +CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF) +{ CCGVert **effectedV; CCGEdge **effectedE; int i, numEffectedV, numEffectedE, freeF; @@ -2429,16 +2562,16 @@ CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEf effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF); - for (i=0; i<numEffectedV; i++) + for (i = 0; i < numEffectedV; i++) effectedV[i]->flags = 0; - for (i=0; i<numEffectedE; i++) + for (i = 0; i < numEffectedE; i++) effectedE[i]->flags = 0; - for (i=0; i<numEffectedF; i++) + for (i = 0; i < numEffectedF; i++) effectedF[i]->flags = 0; MEM_freeN(effectedE); MEM_freeN(effectedV); - if(freeF) MEM_freeN(effectedF); + if (freeF) MEM_freeN(effectedF); return eCCGError_None; } @@ -2457,22 +2590,22 @@ CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, i ccgSubSurf__effectedFaceNeighbours(ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE); - for (curLvl=lvl; curLvl<subdivLevels; curLvl++) { + for (curLvl = lvl; curLvl < subdivLevels; curLvl++) { ccgSubSurf__calcSubdivLevel(ss, effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF, curLvl); } - for (i=0; i<numEffectedV; i++) + for (i = 0; i < numEffectedV; i++) effectedV[i]->flags = 0; - for (i=0; i<numEffectedE; i++) + for (i = 0; i < numEffectedE; i++) effectedE[i]->flags = 0; - for (i=0; i<numEffectedF; i++) + for (i = 0; i < numEffectedF; i++) effectedF[i]->flags = 0; MEM_freeN(effectedE); MEM_freeN(effectedV); - if(freeF) MEM_freeN(effectedF); + if (freeF) MEM_freeN(effectedF); return eCCGError_None; } @@ -2484,272 +2617,352 @@ CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, i /*** External API accessor functions ***/ -int ccgSubSurf_getNumVerts(const CCGSubSurf *ss) { +int ccgSubSurf_getNumVerts(const CCGSubSurf *ss) +{ return ss->vMap->numEntries; } -int ccgSubSurf_getNumEdges(const CCGSubSurf *ss) { +int ccgSubSurf_getNumEdges(const CCGSubSurf *ss) +{ return ss->eMap->numEntries; } -int ccgSubSurf_getNumFaces(const CCGSubSurf *ss) { +int ccgSubSurf_getNumFaces(const CCGSubSurf *ss) +{ return ss->fMap->numEntries; } -CCGVert *ccgSubSurf_getVert(CCGSubSurf *ss, CCGVertHDL v) { +CCGVert *ccgSubSurf_getVert(CCGSubSurf *ss, CCGVertHDL v) +{ return (CCGVert*) _ehash_lookup(ss->vMap, v); } -CCGEdge *ccgSubSurf_getEdge(CCGSubSurf *ss, CCGEdgeHDL e) { +CCGEdge *ccgSubSurf_getEdge(CCGSubSurf *ss, CCGEdgeHDL e) +{ return (CCGEdge*) _ehash_lookup(ss->eMap, e); } -CCGFace *ccgSubSurf_getFace(CCGSubSurf *ss, CCGFaceHDL f) { +CCGFace *ccgSubSurf_getFace(CCGSubSurf *ss, CCGFaceHDL f) +{ return (CCGFace*) _ehash_lookup(ss->fMap, f); } -int ccgSubSurf_getSubdivisionLevels(const CCGSubSurf *ss) { +int ccgSubSurf_getSubdivisionLevels(const CCGSubSurf *ss) +{ return ss->subdivLevels; } -int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss) { +int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss) +{ return ccgSubSurf_getEdgeLevelSize(ss, ss->subdivLevels); } -int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level) { - if (level<1 || level>ss->subdivLevels) { +int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level) +{ + if (level<1 || level > ss->subdivLevels) { return -1; - } else { - return 1 + (1<<level); + } + else { + return 1 + (1 << level); } } -int ccgSubSurf_getGridSize(const CCGSubSurf *ss) { +int ccgSubSurf_getGridSize(const CCGSubSurf *ss) +{ return ccgSubSurf_getGridLevelSize(ss, ss->subdivLevels); } -int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level) { - if (level<1 || level>ss->subdivLevels) { +int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level) +{ + if (level<1 || level > ss->subdivLevels) { return -1; - } else { - return 1 + (1<<(level-1)); + } + else { + return 1 + (1 << (level - 1)); } } /* Vert accessors */ -CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v) { +CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v) +{ return v->vHDL; } -int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v) { +int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v) +{ if (ss->useAgeCounts) { byte *userData = ccgSubSurf_getVertUserData(ss, v); return ss->currentAge - *((int*) &userData[ss->vertUserAgeOffset]); - } else { + } + else { return 0; } } -void *ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v) { - return VERT_getLevelData(v) + ss->meshIFC.vertDataSize*(ss->subdivLevels+1); +void *ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v) +{ + return VERT_getLevelData(v) + ss->meshIFC.vertDataSize * (ss->subdivLevels + 1); } -int ccgSubSurf_getVertNumFaces(CCGVert *v) { +int ccgSubSurf_getVertNumFaces(CCGVert *v) +{ return v->numFaces; } -CCGFace *ccgSubSurf_getVertFace(CCGVert *v, int index) { +CCGFace *ccgSubSurf_getVertFace(CCGVert *v, int index) +{ if (index<0 || index>=v->numFaces) { return NULL; - } else { + } + else { return v->faces[index]; } } -int ccgSubSurf_getVertNumEdges(CCGVert *v) { +int ccgSubSurf_getVertNumEdges(CCGVert *v) +{ return v->numEdges; } -CCGEdge *ccgSubSurf_getVertEdge(CCGVert *v, int index) { +CCGEdge *ccgSubSurf_getVertEdge(CCGVert *v, int index) +{ if (index<0 || index>=v->numEdges) { return NULL; - } else { + } + else { return v->edges[index]; } } -void *ccgSubSurf_getVertData(CCGSubSurf *ss, CCGVert *v) { +void *ccgSubSurf_getVertData(CCGSubSurf *ss, CCGVert *v) +{ return ccgSubSurf_getVertLevelData(ss, v, ss->subdivLevels); } -void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level) { - if (level<0 || level>ss->subdivLevels) { +void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level) +{ + if (level<0 || level > ss->subdivLevels) { return NULL; - } else { + } + else { return _vert_getCo(v, level, ss->meshIFC.vertDataSize); } } /* Edge accessors */ -CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e) { +CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e) +{ return e->eHDL; } -int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e) { +int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e) +{ if (ss->useAgeCounts) { byte *userData = ccgSubSurf_getEdgeUserData(ss, e); return ss->currentAge - *((int*) &userData[ss->edgeUserAgeOffset]); - } else { + } + else { return 0; } } -void *ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e) { - return EDGE_getLevelData(e) + ss->meshIFC.vertDataSize *((ss->subdivLevels+1) + (1<<(ss->subdivLevels+1))-1); +void *ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e) +{ + return EDGE_getLevelData(e) + ss->meshIFC.vertDataSize * ((ss->subdivLevels + 1) + (1 << (ss->subdivLevels + 1)) - 1); } -int ccgSubSurf_getEdgeNumFaces(CCGEdge *e) { +int ccgSubSurf_getEdgeNumFaces(CCGEdge *e) +{ return e->numFaces; } -CCGFace *ccgSubSurf_getEdgeFace(CCGEdge *e, int index) { +CCGFace *ccgSubSurf_getEdgeFace(CCGEdge *e, int index) +{ if (index<0 || index>=e->numFaces) { return NULL; - } else { + } + else { return e->faces[index]; } } -CCGVert *ccgSubSurf_getEdgeVert0(CCGEdge *e) { +CCGVert *ccgSubSurf_getEdgeVert0(CCGEdge *e) +{ return e->v0; } -CCGVert *ccgSubSurf_getEdgeVert1(CCGEdge *e) { +CCGVert *ccgSubSurf_getEdgeVert1(CCGEdge *e) +{ return e->v1; } -void *ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e) { +void *ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e) +{ return ccgSubSurf_getEdgeData(ss, e, 0); } -void *ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x) { +void *ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x) +{ return ccgSubSurf_getEdgeLevelData(ss, e, x, ss->subdivLevels); } -void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level) { - if (level<0 || level>ss->subdivLevels) { +void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level) +{ + if (level<0 || level > ss->subdivLevels) { return NULL; - } else { + } + else { return _edge_getCo(e, level, x, ss->meshIFC.vertDataSize); } } -float ccgSubSurf_getEdgeCrease(CCGEdge *e) { +float ccgSubSurf_getEdgeCrease(CCGEdge *e) +{ return e->crease; } /* Face accessors */ -CCGFaceHDL ccgSubSurf_getFaceFaceHandle(CCGSubSurf *UNUSED(ss), CCGFace *f) { +CCGFaceHDL ccgSubSurf_getFaceFaceHandle(CCGSubSurf *UNUSED(ss), CCGFace *f) +{ return f->fHDL; } -int ccgSubSurf_getFaceAge(CCGSubSurf *ss, CCGFace *f) { +int ccgSubSurf_getFaceAge(CCGSubSurf *ss, CCGFace *f) +{ if (ss->useAgeCounts) { byte *userData = ccgSubSurf_getFaceUserData(ss, f); return ss->currentAge - *((int*) &userData[ss->faceUserAgeOffset]); - } else { + } + else { return 0; } } -void *ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f) { - int maxGridSize = 1 + (1<<(ss->subdivLevels-1)); - return FACE_getCenterData(f) + ss->meshIFC.vertDataSize *(1 + f->numVerts*maxGridSize + f->numVerts*maxGridSize*maxGridSize); +void *ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f) +{ + int maxGridSize = 1 + (1 << (ss->subdivLevels - 1)); + return FACE_getCenterData(f) + ss->meshIFC.vertDataSize * (1 + f->numVerts * maxGridSize + f->numVerts * maxGridSize * maxGridSize); } -int ccgSubSurf_getFaceNumVerts(CCGFace *f) { +int ccgSubSurf_getFaceNumVerts(CCGFace *f) +{ return f->numVerts; } -CCGVert *ccgSubSurf_getFaceVert(CCGSubSurf *UNUSED(ss), CCGFace *f, int index) { +CCGVert *ccgSubSurf_getFaceVert(CCGSubSurf *UNUSED(ss), CCGFace *f, int index) +{ if (index<0 || index>=f->numVerts) { return NULL; - } else { + } + else { return FACE_getVerts(f)[index]; } } -CCGEdge *ccgSubSurf_getFaceEdge(CCGSubSurf *UNUSED(ss), CCGFace *f, int index) { +CCGEdge *ccgSubSurf_getFaceEdge(CCGSubSurf *UNUSED(ss), CCGFace *f, int index) +{ if (index<0 || index>=f->numVerts) { return NULL; - } else { + } + else { return FACE_getEdges(f)[index]; } } -int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e) { +int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e) +{ int i; - for (i=0; i<f->numVerts; i++) - if (FACE_getEdges(f)[i]==e) + for (i = 0; i < f->numVerts; i++) { + if (FACE_getEdges(f)[i] == e) { return i; - + } + } return -1; } -void *ccgSubSurf_getFaceCenterData(CCGFace *f) { +void *ccgSubSurf_getFaceCenterData(CCGFace *f) +{ return FACE_getCenterData(f); } -void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex) { +void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex) +{ return ccgSubSurf_getFaceGridEdgeData(ss, f, gridIndex, 0); } -void *ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x) { +void *ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x) +{ return _face_getIECo(f, ss->subdivLevels, gridIndex, x, ss->subdivLevels, ss->meshIFC.vertDataSize); } -void *ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex) { +void *ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex) +{ return ccgSubSurf_getFaceGridData(ss, f, gridIndex, 0, 0); } -void *ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y) { +void *ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y) +{ return _face_getIFCo(f, ss->subdivLevels, gridIndex, x, y, ss->subdivLevels, ss->meshIFC.vertDataSize); } /*** External API iterator functions ***/ -CCGVertIterator *ccgSubSurf_getVertIterator(CCGSubSurf *ss) { +CCGVertIterator *ccgSubSurf_getVertIterator(CCGSubSurf *ss) +{ return (CCGVertIterator*) _ehashIterator_new(ss->vMap); } -CCGEdgeIterator *ccgSubSurf_getEdgeIterator(CCGSubSurf *ss) { +CCGEdgeIterator *ccgSubSurf_getEdgeIterator(CCGSubSurf *ss) +{ return (CCGEdgeIterator*) _ehashIterator_new(ss->eMap); } -CCGFaceIterator *ccgSubSurf_getFaceIterator(CCGSubSurf *ss) { +CCGFaceIterator *ccgSubSurf_getFaceIterator(CCGSubSurf *ss) +{ return (CCGFaceIterator*) _ehashIterator_new(ss->fMap); } -CCGVert *ccgVertIterator_getCurrent(CCGVertIterator *vi) { +CCGVert *ccgVertIterator_getCurrent(CCGVertIterator *vi) +{ return (CCGVert*) _ehashIterator_getCurrent((EHashIterator*) vi); } -int ccgVertIterator_isStopped(CCGVertIterator *vi) { +int ccgVertIterator_isStopped(CCGVertIterator *vi) +{ return _ehashIterator_isStopped((EHashIterator*) vi); } -void ccgVertIterator_next(CCGVertIterator *vi) { +void ccgVertIterator_next(CCGVertIterator *vi) +{ _ehashIterator_next((EHashIterator*) vi); } -void ccgVertIterator_free(CCGVertIterator *vi) { +void ccgVertIterator_free(CCGVertIterator *vi) +{ _ehashIterator_free((EHashIterator*) vi); } -CCGEdge *ccgEdgeIterator_getCurrent(CCGEdgeIterator *vi) { +CCGEdge *ccgEdgeIterator_getCurrent(CCGEdgeIterator *vi) +{ return (CCGEdge*) _ehashIterator_getCurrent((EHashIterator*) vi); } -int ccgEdgeIterator_isStopped(CCGEdgeIterator *vi) { +int ccgEdgeIterator_isStopped(CCGEdgeIterator *vi) +{ return _ehashIterator_isStopped((EHashIterator*) vi); } -void ccgEdgeIterator_next(CCGEdgeIterator *vi) { +void ccgEdgeIterator_next(CCGEdgeIterator *vi) +{ _ehashIterator_next((EHashIterator*) vi); } -void ccgEdgeIterator_free(CCGEdgeIterator *vi) { +void ccgEdgeIterator_free(CCGEdgeIterator *vi) +{ _ehashIterator_free((EHashIterator*) vi); } -CCGFace *ccgFaceIterator_getCurrent(CCGFaceIterator *vi) { +CCGFace *ccgFaceIterator_getCurrent(CCGFaceIterator *vi) +{ return (CCGFace*) _ehashIterator_getCurrent((EHashIterator*) vi); } -int ccgFaceIterator_isStopped(CCGFaceIterator *vi) { +int ccgFaceIterator_isStopped(CCGFaceIterator *vi) +{ return _ehashIterator_isStopped((EHashIterator*) vi); } -void ccgFaceIterator_next(CCGFaceIterator *vi) { +void ccgFaceIterator_next(CCGFaceIterator *vi) +{ _ehashIterator_next((EHashIterator*) vi); } -void ccgFaceIterator_free(CCGFaceIterator *vi) { +void ccgFaceIterator_free(CCGFaceIterator *vi) +{ _ehashIterator_free((EHashIterator*) vi); } /*** Extern API final vert/edge/face interface ***/ -int ccgSubSurf_getNumFinalVerts(const CCGSubSurf *ss) { - int edgeSize = 1 + (1<<ss->subdivLevels); - int gridSize = 1 + (1<<(ss->subdivLevels-1)); - int numFinalVerts = ss->vMap->numEntries + ss->eMap->numEntries*(edgeSize-2) + ss->fMap->numEntries + ss->numGrids*((gridSize-2) + ((gridSize-2)*(gridSize-2))); +int ccgSubSurf_getNumFinalVerts(const CCGSubSurf *ss) +{ + int edgeSize = 1 + (1 << ss->subdivLevels); + int gridSize = 1 + (1 << (ss->subdivLevels - 1)); + int numFinalVerts = (ss->vMap->numEntries + + ss->eMap->numEntries * (edgeSize - 2) + + ss->fMap->numEntries + + ss->numGrids * ((gridSize - 2) + ((gridSize - 2) * (gridSize - 2)))); + return numFinalVerts; } -int ccgSubSurf_getNumFinalEdges(const CCGSubSurf *ss) { - int edgeSize = 1 + (1<<ss->subdivLevels); - int gridSize = 1 + (1<<(ss->subdivLevels-1)); - int numFinalEdges = ss->eMap->numEntries*(edgeSize-1) + ss->numGrids*((gridSize-1) + 2*((gridSize-2)*(gridSize-1))); +int ccgSubSurf_getNumFinalEdges(const CCGSubSurf *ss) +{ + int edgeSize = 1 + (1 << ss->subdivLevels); + int gridSize = 1 + (1 << (ss->subdivLevels - 1)); + int numFinalEdges = (ss->eMap->numEntries * (edgeSize - 1) + + ss->numGrids * ((gridSize - 1) + 2 * ((gridSize - 2) * (gridSize - 1)))); + return numFinalEdges; } -int ccgSubSurf_getNumFinalFaces(const CCGSubSurf *ss) { - int gridSize = 1 + (1<<(ss->subdivLevels-1)); - int numFinalFaces = ss->numGrids*((gridSize-1)*(gridSize-1)); +int ccgSubSurf_getNumFinalFaces(const CCGSubSurf *ss) +{ + int gridSize = 1 + (1 << (ss->subdivLevels - 1)); + int numFinalFaces = ss->numGrids * ((gridSize - 1) * (gridSize - 1)); return numFinalFaces; } |