Blender V2.61 - r43446
Classes | Defines | Typedefs | Enumerations | Functions | Variables

CCGSubSurf.c File Reference

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "CCGSubSurf.h"
#include "MEM_guardedalloc.h"
#include "BLO_sys_types.h"

Go to the source code of this file.

Classes

struct  _EHEntry
struct  _EHash
struct  _EHashIterator
struct  _CCGVert
struct  _CCGEdge
struct  _CCGFace
struct  _CCGSubSurf

Defines

#define CCG_INLINE   inline
#define UNUSED(x)   x
#define EPSILON   (1.0e-35f)
#define EHASH_alloc(eh, nb)   ((eh)->allocatorIFC.alloc((eh)->allocator, nb))
#define EHASH_free(eh, ptr)   ((eh)->allocatorIFC.free((eh)->allocator, ptr))
#define EHASH_hash(eh, item)   (((uintptr_t) (item))%((unsigned int) (eh)->curSize))
#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)
#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 VERT_getLevelData(v)   ((byte*) &(v)[1])
#define EDGE_getLevelData(e)   ((byte*) &(e)[1])
#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 CCGSUBSURF_alloc(ss, nb)   ((ss)->allocatorIFC.alloc((ss)->allocator, nb))
#define CCGSUBSURF_realloc(ss, ptr, nb, ob)   ((ss)->allocatorIFC.realloc((ss)->allocator, ptr, nb, ob))
#define CCGSUBSURF_free(ss, ptr)   ((ss)->allocatorIFC.free((ss)->allocator, ptr))
#define VERT_getNo(e, lvl)   _vert_getNo(e, lvl, vertDataSize, normalDataOffset)
#define EDGE_getNo(e, lvl, x)   _edge_getNo(e, lvl, x, vertDataSize, normalDataOffset)
#define FACE_getIFNo(f, lvl, S, x, y)   _face_getIFNo(f, lvl, S, x, y, subdivLevels, vertDataSize, normalDataOffset)
#define FACE_calcIFNo(f, lvl, S, x, y, no)   _face_calcIFNo(f, lvl, S, x, y, no, subdivLevels, vertDataSize)
#define FACE_getIENo(f, lvl, S, x)   _face_getIENo(f, lvl, S, x, subdivLevels, vertDataSize, normalDataOffset)
#define VERT_getCo(v, lvl)   _vert_getCo(v, lvl, vertDataSize)
#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)

Typedefs

typedef unsigned char byte
typedef struct _EHEntry EHEntry
typedef struct _EHash EHash
typedef void(* EHEntryFreeFP )(EHEntry *, void *)
typedef struct _EHashIterator EHashIterator

Enumerations

enum  { Vert_eEffected = (1<<0), Vert_eChanged = (1<<1), Vert_eSeam = (1<<2) }
enum  { Edge_eEffected = (1<<0) }
enum  { Face_eEffected = (1<<0) }
enum  SyncState {
  eSyncState_None = 0, eSyncState_Vert, eSyncState_Edge, eSyncState_Face,
  eSyncState_Partial
}

Functions

static EHash * _ehash_new (int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator)
static void _ehash_free (EHash *eh, EHEntryFreeFP freeEntry, void *userData)
static void _ehash_insert (EHash *eh, EHEntry *entry)
static void * _ehash_lookupWithPrev (EHash *eh, void *key, void ***prevp_r)
static void * _ehash_lookup (EHash *eh, void *key)
static EHashIterator * _ehashIterator_new (EHash *eh)
static void _ehashIterator_free (EHashIterator *ehi)
static void * _ehashIterator_getCurrent (EHashIterator *ehi)
static void _ehashIterator_next (EHashIterator *ehi)
static int _ehashIterator_isStopped (EHashIterator *ehi)
static void * _stdAllocator_alloc (CCGAllocatorHDL UNUSED(a), int numBytes)
static void * _stdAllocator_realloc (CCGAllocatorHDL UNUSED(a), void *ptr, int newSize, int UNUSED(oldSize))
static void _stdAllocator_free (CCGAllocatorHDL UNUSED(a), void *ptr)
static CCGAllocatorIFC * _getStandardAllocatorIFC (void)
static int VertDataEqual (const float *a, const float *b)
static int _edge_isBoundary (const CCGEdge *e)
static CCGVert * _vert_new (CCGVertHDL vHDL, CCGSubSurf *ss)
static void _vert_remEdge (CCGVert *v, CCGEdge *e)
static void _vert_remFace (CCGVert *v, CCGFace *f)
static void _vert_addEdge (CCGVert *v, CCGEdge *e, CCGSubSurf *ss)
static void _vert_addFace (CCGVert *v, CCGFace *f, CCGSubSurf *ss)
static CCGEdge * _vert_findEdgeTo (const CCGVert *v, const CCGVert *vQ)
static int _vert_isBoundary (const CCGVert *v)
static void * _vert_getCo (CCGVert *v, int lvl, int dataSize)
static float * _vert_getNo (CCGVert *v, int lvl, int dataSize, int normalDataOffset)
static void _vert_free (CCGVert *v, CCGSubSurf *ss)
static int VERT_seam (const CCGVert *v)
static CCGEdge * _edge_new (CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, CCGSubSurf *ss)
static void _edge_remFace (CCGEdge *e, CCGFace *f)
static void _edge_addFace (CCGEdge *e, CCGFace *f, CCGSubSurf *ss)
static CCGVert * _edge_getOtherVert (CCGEdge *e, CCGVert *vQ)
static void * _edge_getCo (CCGEdge *e, int lvl, int x, int dataSize)
static float * _edge_getNo (CCGEdge *e, int lvl, int x, int dataSize, int normalDataOffset)
static void * _edge_getCoVert (CCGEdge *e, CCGVert *v, int lvl, int x, int dataSize)
static void _edge_free (CCGEdge *e, CCGSubSurf *ss)
static void _edge_unlinkMarkAndFree (CCGEdge *e, CCGSubSurf *ss)
static float EDGE_getSharpness (CCGEdge *e, int lvl)
static CCGFace * _face_new (CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int numVerts, CCGSubSurf *ss)
static CCG_INLINE void * _face_getIECo (CCGFace *f, int lvl, int S, int x, int levels, int dataSize)
static CCG_INLINE void * _face_getIENo (CCGFace *f, int lvl, int S, int x, int levels, int dataSize, int normalDataOffset)
static CCG_INLINE void * _face_getIFCo (CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize)
static CCG_INLINE float * _face_getIFNo (CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize, int normalDataOffset)
static int _face_getVertIndex (CCGFace *f, CCGVert *v)
static CCG_INLINE void * _face_getIFCoEdge (CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize)
static float * _face_getIFNoEdge (CCGFace *f, CCGEdge *e, int lvl, int eX, int eY, int levels, int dataSize, int normalDataOffset)
static void _face_calcIFNo (CCGFace *f, int lvl, int S, int x, int y, float *no, int levels, int dataSize)
static void _face_free (CCGFace *f, CCGSubSurf *ss)
static void _face_unlinkMarkAndFree (CCGFace *f, CCGSubSurf *ss)
CCGSubSurf * ccgSubSurf_new (CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator)
void ccgSubSurf_free (CCGSubSurf *ss)
CCGError ccgSubSurf_setAllowEdgeCreation (CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData)
void ccgSubSurf_getAllowEdgeCreation (CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r)
CCGError ccgSubSurf_setSubdivisionLevels (CCGSubSurf *ss, int subdivisionLevels)
void ccgSubSurf_getUseAgeCounts (CCGSubSurf *ss, int *useAgeCounts_r, int *vertUserOffset_r, int *edgeUserOffset_r, int *faceUserOffset_r)
CCGError ccgSubSurf_setUseAgeCounts (CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset)
CCGError ccgSubSurf_setCalcVertexNormals (CCGSubSurf *ss, int useVertNormals, int normalDataOffset)
CCGError ccgSubSurf_initFullSync (CCGSubSurf *ss)
CCGError ccgSubSurf_initPartialSync (CCGSubSurf *ss)
CCGError ccgSubSurf_syncVertDel (CCGSubSurf *ss, CCGVertHDL vHDL)
CCGError ccgSubSurf_syncEdgeDel (CCGSubSurf *ss, CCGEdgeHDL eHDL)
CCGError ccgSubSurf_syncFaceDel (CCGSubSurf *ss, CCGFaceHDL fHDL)
CCGError ccgSubSurf_syncVert (CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r)
CCGError ccgSubSurf_syncEdge (CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r)
CCGError ccgSubSurf_syncFace (CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r)
static void ccgSubSurf__sync (CCGSubSurf *ss)
CCGError ccgSubSurf_processSync (CCGSubSurf *ss)
static void ccgSubSurf__calcVertNormals (CCGSubSurf *ss, CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, int numEffectedV, int numEffectedE, int numEffectedF)
static void ccgSubSurf__calcSubdivLevel (CCGSubSurf *ss, CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, int numEffectedV, int numEffectedE, int numEffectedF, int curLvl)
static void ccgSubSurf__allFaces (CCGSubSurf *ss, CCGFace ***faces, int *numFaces, int *freeFaces)
static void ccgSubSurf__effectedFaceNeighbours (CCGSubSurf *ss, CCGFace **faces, int numFaces, CCGVert ***verts, int *numVerts, CCGEdge ***edges, int *numEdges)
CCGError ccgSubSurf_updateFromFaces (CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_updateToFaces (CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_stitchFaces (CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_updateNormals (CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_updateLevels (CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
int ccgSubSurf_getNumVerts (const CCGSubSurf *ss)
int ccgSubSurf_getNumEdges (const CCGSubSurf *ss)
int ccgSubSurf_getNumFaces (const CCGSubSurf *ss)
CCGVert * ccgSubSurf_getVert (CCGSubSurf *ss, CCGVertHDL v)
CCGEdge * ccgSubSurf_getEdge (CCGSubSurf *ss, CCGEdgeHDL e)
CCGFace * ccgSubSurf_getFace (CCGSubSurf *ss, CCGFaceHDL f)
int ccgSubSurf_getSubdivisionLevels (const CCGSubSurf *ss)
int ccgSubSurf_getEdgeSize (const CCGSubSurf *ss)
int ccgSubSurf_getEdgeLevelSize (const CCGSubSurf *ss, int level)
int ccgSubSurf_getGridSize (const CCGSubSurf *ss)
int ccgSubSurf_getGridLevelSize (const CCGSubSurf *ss, int level)
CCGVertHDL ccgSubSurf_getVertVertHandle (CCGVert *v)
int ccgSubSurf_getVertAge (CCGSubSurf *ss, CCGVert *v)
void * ccgSubSurf_getVertUserData (CCGSubSurf *ss, CCGVert *v)
int ccgSubSurf_getVertNumFaces (CCGVert *v)
CCGFace * ccgSubSurf_getVertFace (CCGVert *v, int index)
int ccgSubSurf_getVertNumEdges (CCGVert *v)
CCGEdge * ccgSubSurf_getVertEdge (CCGVert *v, int index)
void * ccgSubSurf_getVertData (CCGSubSurf *ss, CCGVert *v)
void * ccgSubSurf_getVertLevelData (CCGSubSurf *ss, CCGVert *v, int level)
CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle (CCGEdge *e)
int ccgSubSurf_getEdgeAge (CCGSubSurf *ss, CCGEdge *e)
void * ccgSubSurf_getEdgeUserData (CCGSubSurf *ss, CCGEdge *e)
int ccgSubSurf_getEdgeNumFaces (CCGEdge *e)
CCGFace * ccgSubSurf_getEdgeFace (CCGEdge *e, int index)
CCGVert * ccgSubSurf_getEdgeVert0 (CCGEdge *e)
CCGVert * ccgSubSurf_getEdgeVert1 (CCGEdge *e)
void * ccgSubSurf_getEdgeDataArray (CCGSubSurf *ss, CCGEdge *e)
void * ccgSubSurf_getEdgeData (CCGSubSurf *ss, CCGEdge *e, int x)
void * ccgSubSurf_getEdgeLevelData (CCGSubSurf *ss, CCGEdge *e, int x, int level)
float ccgSubSurf_getEdgeCrease (CCGEdge *e)
CCGFaceHDL ccgSubSurf_getFaceFaceHandle (CCGSubSurf *UNUSED(ss), CCGFace *f)
int ccgSubSurf_getFaceAge (CCGSubSurf *ss, CCGFace *f)
void * ccgSubSurf_getFaceUserData (CCGSubSurf *ss, CCGFace *f)
int ccgSubSurf_getFaceNumVerts (CCGFace *f)
CCGVert * ccgSubSurf_getFaceVert (CCGSubSurf *UNUSED(ss), CCGFace *f, int index)
CCGEdge * ccgSubSurf_getFaceEdge (CCGSubSurf *UNUSED(ss), CCGFace *f, int index)
int ccgSubSurf_getFaceEdgeIndex (CCGFace *f, CCGEdge *e)
void * ccgSubSurf_getFaceCenterData (CCGFace *f)
void * ccgSubSurf_getFaceGridEdgeDataArray (CCGSubSurf *ss, CCGFace *f, int gridIndex)
void * ccgSubSurf_getFaceGridEdgeData (CCGSubSurf *ss, CCGFace *f, int gridIndex, int x)
void * ccgSubSurf_getFaceGridDataArray (CCGSubSurf *ss, CCGFace *f, int gridIndex)
void * ccgSubSurf_getFaceGridData (CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y)
CCGVertIterator * ccgSubSurf_getVertIterator (CCGSubSurf *ss)
CCGEdgeIterator * ccgSubSurf_getEdgeIterator (CCGSubSurf *ss)
CCGFaceIterator * ccgSubSurf_getFaceIterator (CCGSubSurf *ss)
CCGVert * ccgVertIterator_getCurrent (CCGVertIterator *vi)
int ccgVertIterator_isStopped (CCGVertIterator *vi)
void ccgVertIterator_next (CCGVertIterator *vi)
void ccgVertIterator_free (CCGVertIterator *vi)
CCGEdge * ccgEdgeIterator_getCurrent (CCGEdgeIterator *vi)
int ccgEdgeIterator_isStopped (CCGEdgeIterator *vi)
void ccgEdgeIterator_next (CCGEdgeIterator *vi)
void ccgEdgeIterator_free (CCGEdgeIterator *vi)
CCGFace * ccgFaceIterator_getCurrent (CCGFaceIterator *vi)
int ccgFaceIterator_isStopped (CCGFaceIterator *vi)
void ccgFaceIterator_next (CCGFaceIterator *vi)
void ccgFaceIterator_free (CCGFaceIterator *vi)
int ccgSubSurf_getNumFinalVerts (const CCGSubSurf *ss)
int ccgSubSurf_getNumFinalEdges (const CCGSubSurf *ss)
int ccgSubSurf_getNumFinalFaces (const CCGSubSurf *ss)

Variables

static int kHashSizes []

Detailed Description

Definition in file CCGSubSurf.c.


Define Documentation

#define CCG_INLINE   inline

Definition at line 18 of file CCGSubSurf.c.

#define CCGSUBSURF_alloc (   ss,
  nb 
)    ((ss)->allocatorIFC.alloc((ss)->allocator, nb))
#define CCGSUBSURF_free (   ss,
  ptr 
)    ((ss)->allocatorIFC.free((ss)->allocator, ptr))
#define CCGSUBSURF_realloc (   ss,
  ptr,
  nb,
  ob 
)    ((ss)->allocatorIFC.realloc((ss)->allocator, ptr, nb, ob))

Definition at line 348 of file CCGSubSurf.c.

Referenced by _edge_addFace(), _vert_addEdge(), and _vert_addFace().

#define EDGE_getCo (   e,
  lvl,
  x 
)    _edge_getCo(e, lvl, x, vertDataSize)
#define EDGE_getLevelData (   e)    ((byte*) &(e)[1])
#define EDGE_getNo (   e,
  lvl,
  x 
)    _edge_getNo(e, lvl, x, vertDataSize, normalDataOffset)

Definition at line 1157 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcVertNormals().

#define EHASH_alloc (   eh,
  nb 
)    ((eh)->allocatorIFC.alloc((eh)->allocator, nb))

Definition at line 57 of file CCGSubSurf.c.

Referenced by _ehash_insert(), _ehash_new(), and _ehashIterator_new().

#define EHASH_free (   eh,
  ptr 
)    ((eh)->allocatorIFC.free((eh)->allocator, ptr))

Definition at line 58 of file CCGSubSurf.c.

Referenced by _ehash_free(), _ehash_insert(), and _ehashIterator_free().

#define EHASH_hash (   eh,
  item 
)    (((uintptr_t) (item))%((unsigned int) (eh)->curSize))

Definition at line 60 of file CCGSubSurf.c.

Referenced by _ehash_insert(), _ehash_lookup(), and _ehash_lookupWithPrev().

#define EPSILON   (1.0e-35f)

Definition at line 30 of file CCGSubSurf.c.

Referenced by _face_calcIFNo(), and ccgSubSurf__calcVertNormals().

#define FACE_calcIFNo (   f,
  lvl,
  S,
  x,
  y,
  no 
)    _face_calcIFNo(f, lvl, S, x, y, no, subdivLevels, vertDataSize)

Definition at line 1159 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcVertNormals().

#define FACE_getCenterData (   f)    ((byte*) &(FACE_getEdges(f)[(f)->numVerts]))
#define FACE_getEdges (   f)    ((CCGEdge**) &(FACE_getVerts(f)[(f)->numVerts]))
#define FACE_getIECo (   f,
  lvl,
  S,
  x 
)    _face_getIECo(f, lvl, S, x, subdivLevels, vertDataSize)
#define FACE_getIENo (   f,
  lvl,
  S,
  x 
)    _face_getIENo(f, lvl, S, x, subdivLevels, vertDataSize, normalDataOffset)

Definition at line 1160 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcVertNormals().

#define FACE_getIFCo (   f,
  lvl,
  S,
  x,
  y 
)    _face_getIFCo(f, lvl, S, x, y, subdivLevels, vertDataSize)
#define FACE_getIFNo (   f,
  lvl,
  S,
  x,
  y 
)    _face_getIFNo(f, lvl, S, x, y, subdivLevels, vertDataSize, normalDataOffset)

Definition at line 1158 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcVertNormals().

#define FACE_getVerts (   f)    ((CCGVert**) &(f)[1])
#define NormAdd (   av,
  bv 
)    { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }

Definition at line 238 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcVertNormals().

#define NormCopy (   av,
  bv 
)    { float *_a = (float*) av, *_b = (float*) bv; _a[0] =_b[0]; _a[1] =_b[1]; _a[2] =_b[2]; }

Definition at line 237 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcVertNormals().

#define NormZero (   av)    { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; }

Definition at line 236 of file CCGSubSurf.c.

Referenced by _face_calcIFNo(), and ccgSubSurf__calcVertNormals().

#define UNUSED (   x)    x

Definition at line 25 of file CCGSubSurf.c.

#define VERT_getCo (   v,
  lvl 
)    _vert_getCo(v, lvl, vertDataSize)
#define VERT_getLevelData (   v)    ((byte*) &(v)[1])

Definition at line 268 of file CCGSubSurf.c.

Referenced by _vert_getCo(), _vert_getNo(), and ccgSubSurf_getVertUserData().

#define VERT_getNo (   e,
  lvl 
)    _vert_getNo(e, lvl, vertDataSize, normalDataOffset)

Definition at line 1156 of file CCGSubSurf.c.

#define VertDataAdd (   av,
  bv 
)    { float *_a = (float*) av, *_b = (float*) bv; _a[0]+=_b[0]; _a[1]+=_b[1]; _a[2]+=_b[2]; }
#define VertDataAvg4 (   tv,
  av,
  bv,
  cv,
  dv 
)
Value:
{ \
        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; \
    }

Definition at line 229 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcSubdivLevel().

#define VertDataCopy (   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 VertDataSub (   av,
  bv 
)    { float *_a = (float*) av, *_b = (float*) bv; _a[0]-=_b[0]; _a[1]-=_b[1]; _a[2]-=_b[2]; }

Definition at line 227 of file CCGSubSurf.c.

Referenced by ccgSubSurf__calcSubdivLevel(), and ccgSubSurf__sync().

#define VertDataZero (   av)    { float *_a = (float*) av; _a[0] = _a[1] = _a[2] = 0.0f; }

Typedef Documentation

typedef unsigned char byte

Definition at line 34 of file CCGSubSurf.c.

typedef struct _EHash EHash
typedef struct _EHashIterator EHashIterator
typedef struct _EHEntry EHEntry

Definition at line 44 of file CCGSubSurf.c.

typedef void(* EHEntryFreeFP)(EHEntry *, void *)

Definition at line 76 of file CCGSubSurf.c.


Enumeration Type Documentation

anonymous enum
Enumerator:
Vert_eEffected 
Vert_eChanged 
Vert_eSeam 

Definition at line 245 of file CCGSubSurf.c.

anonymous enum
Enumerator:
Edge_eEffected 

Definition at line 250 of file CCGSubSurf.c.

anonymous enum
Enumerator:
Face_eEffected 

Definition at line 253 of file CCGSubSurf.c.

enum SyncState
Enumerator:
eSyncState_None 
eSyncState_Vert 
eSyncState_Edge 
eSyncState_Face 
eSyncState_Partial 

Definition at line 301 of file CCGSubSurf.c.


Function Documentation

static void _edge_addFace ( CCGEdge *  e,
CCGFace *  f,
CCGSubSurf *  ss 
) [static]

Definition at line 461 of file CCGSubSurf.c.

References CCGSUBSURF_realloc, _CCGEdge::faces, and _CCGEdge::numFaces.

Referenced by _face_new().

static void _edge_free ( CCGEdge *  e,
CCGSubSurf *  ss 
) [static]
static void* _edge_getCo ( CCGEdge *  e,
int  lvl,
int  x,
int  dataSize 
) [static]

Definition at line 477 of file CCGSubSurf.c.

References EDGE_getLevelData.

Referenced by ccgSubSurf_getEdgeLevelData().

static void* _edge_getCoVert ( CCGEdge *  e,
CCGVert *  v,
int  lvl,
int  x,
int  dataSize 
) [static]
static float* _edge_getNo ( CCGEdge *  e,
int  lvl,
int  x,
int  dataSize,
int  normalDataOffset 
) [static]

Definition at line 481 of file CCGSubSurf.c.

References EDGE_getLevelData.

static CCGVert* _edge_getOtherVert ( CCGEdge *  e,
CCGVert *  vQ 
) [static]

Definition at line 469 of file CCGSubSurf.c.

References _CCGEdge::v0, and _CCGEdge::v1.

Referenced by ccgSubSurf__sync().

static int _edge_isBoundary ( const CCGEdge *  e) [static]

Definition at line 465 of file CCGSubSurf.c.

References _CCGEdge::numFaces.

Referenced by _vert_isBoundary(), ccgSubSurf__calcSubdivLevel(), and ccgSubSurf__sync().

static CCGEdge* _edge_new ( CCGEdgeHDL  eHDL,
CCGVert *  v0,
CCGVert *  v1,
float  crease,
CCGSubSurf *  ss 
) [static]
static void _edge_remFace ( CCGEdge *  e,
CCGFace *  f 
) [static]

Definition at line 452 of file CCGSubSurf.c.

References _CCGEdge::faces, i, and _CCGEdge::numFaces.

Referenced by _face_unlinkMarkAndFree().

static void _edge_unlinkMarkAndFree ( CCGEdge *  e,
CCGSubSurf *  ss 
) [static]
static void _ehash_free ( EHash *  eh,
EHEntryFreeFP  freeEntry,
void *  userData 
) [static]
static void _ehash_insert ( EHash *  eh,
EHEntry *  entry 
) [static]
static void* _ehash_lookup ( EHash *  eh,
void *  key 
) [static]
static void* _ehash_lookupWithPrev ( EHash *  eh,
void *  key,
void ***  prevp_r 
) [static]
static EHash* _ehash_new ( int  estimatedNumEntries,
CCGAllocatorIFC *  allocatorIFC,
CCGAllocatorHDL  allocator 
) [static]
static void _ehashIterator_free ( EHashIterator *  ehi) [static]

Definition at line 173 of file CCGSubSurf.c.

References _EHashIterator::eh, and EHASH_free.

Referenced by ccgEdgeIterator_free(), ccgFaceIterator_free(), and ccgVertIterator_free().

static void* _ehashIterator_getCurrent ( EHashIterator *  ehi) [static]
static int _ehashIterator_isStopped ( EHashIterator *  ehi) [static]
static EHashIterator* _ehashIterator_new ( EHash *  eh) [static]
static void _ehashIterator_next ( EHashIterator *  ehi) [static]
static void _face_calcIFNo ( CCGFace *  f,
int  lvl,
int  S,
int  x,
int  y,
float *  no,
int  levels,
int  dataSize 
) [static]

Definition at line 605 of file CCGSubSurf.c.

References _face_getIFCo(), simple_enum_gen::d, EPSILON, length(), NormZero, and sqrt().

static void _face_free ( CCGFace *  f,
CCGSubSurf *  ss 
) [static]
static CCG_INLINE void* _face_getIECo ( CCGFace *  f,
int  lvl,
int  S,
int  x,
int  levels,
int  dataSize 
) [static]

Definition at line 541 of file CCGSubSurf.c.

References FACE_getCenterData.

Referenced by ccgSubSurf_getFaceGridEdgeData().

static CCG_INLINE void* _face_getIENo ( CCGFace *  f,
int  lvl,
int  S,
int  x,
int  levels,
int  dataSize,
int  normalDataOffset 
) [static]

Definition at line 547 of file CCGSubSurf.c.

References FACE_getCenterData.

static CCG_INLINE void* _face_getIFCo ( CCGFace *  f,
int  lvl,
int  S,
int  x,
int  y,
int  levels,
int  dataSize 
) [static]

Definition at line 553 of file CCGSubSurf.c.

References FACE_getCenterData.

Referenced by _face_calcIFNo(), _face_getIFCoEdge(), and ccgSubSurf_getFaceGridData().

static CCG_INLINE void* _face_getIFCoEdge ( CCGFace *  f,
CCGEdge *  e,
int  lvl,
int  eX,
int  eY,
int  levels,
int  dataSize 
) [static]
static CCG_INLINE float* _face_getIFNo ( CCGFace *  f,
int  lvl,
int  S,
int  x,
int  y,
int  levels,
int  dataSize,
int  normalDataOffset 
) [static]

Definition at line 559 of file CCGSubSurf.c.

References FACE_getCenterData.

static float* _face_getIFNoEdge ( CCGFace *  f,
CCGEdge *  e,
int  lvl,
int  eX,
int  eY,
int  levels,
int  dataSize,
int  normalDataOffset 
) [static]

Definition at line 602 of file CCGSubSurf.c.

References _face_getIFCoEdge().

Referenced by ccgSubSurf__calcVertNormals().

static int _face_getVertIndex ( CCGFace *  f,
CCGVert *  v 
) [static]

Definition at line 565 of file CCGSubSurf.c.

References FACE_getVerts, i, and _CCGFace::numVerts.

Referenced by ccgSubSurf__calcSubdivLevel(), and ccgSubSurf__calcVertNormals().

static CCGFace* _face_new ( CCGFaceHDL  fHDL,
CCGVert **  verts,
CCGEdge **  edges,
int  numVerts,
CCGSubSurf *  ss 
) [static]
static void _face_unlinkMarkAndFree ( CCGFace *  f,
CCGSubSurf *  ss 
) [static]
static CCGAllocatorIFC* _getStandardAllocatorIFC ( void  ) [static]
static void* _stdAllocator_alloc ( CCGAllocatorHDL   UNUSEDa,
int  numBytes 
) [static]

Definition at line 198 of file CCGSubSurf.c.

Referenced by _getStandardAllocatorIFC().

static void _stdAllocator_free ( CCGAllocatorHDL   UNUSEDa,
void *  ptr 
) [static]

Definition at line 204 of file CCGSubSurf.c.

References addon::engine::free().

Referenced by _getStandardAllocatorIFC().

static void* _stdAllocator_realloc ( CCGAllocatorHDL   UNUSEDa,
void *  ptr,
int  newSize,
int   UNUSEDoldSize 
) [static]

Definition at line 201 of file CCGSubSurf.c.

Referenced by _getStandardAllocatorIFC().

static void _vert_addEdge ( CCGVert *  v,
CCGEdge *  e,
CCGSubSurf *  ss 
) [static]

Definition at line 387 of file CCGSubSurf.c.

References CCGSUBSURF_realloc, credits_svn_gen::e, _CCGVert::edges, and _CCGVert::numEdges.

Referenced by _edge_new().

static void _vert_addFace ( CCGVert *  v,
CCGFace *  f,
CCGSubSurf *  ss 
) [static]

Definition at line 391 of file CCGSubSurf.c.

References CCGSUBSURF_realloc, _CCGVert::faces, and _CCGVert::numFaces.

Referenced by _face_new().

static CCGEdge* _vert_findEdgeTo ( const CCGVert *  v,
const CCGVert *  vQ 
) [static]
static void _vert_free ( CCGVert *  v,
CCGSubSurf *  ss 
) [static]
static void* _vert_getCo ( CCGVert *  v,
int  lvl,
int  dataSize 
) [static]

Definition at line 413 of file CCGSubSurf.c.

References VERT_getLevelData.

Referenced by ccgSubSurf_getVertLevelData(), and ccgSubSurf_syncVert().

static float* _vert_getNo ( CCGVert *  v,
int  lvl,
int  dataSize,
int  normalDataOffset 
) [static]

Definition at line 416 of file CCGSubSurf.c.

References VERT_getLevelData.

Referenced by ccgSubSurf__calcVertNormals().

static int _vert_isBoundary ( const CCGVert *  v) [static]

Definition at line 405 of file CCGSubSurf.c.

References _edge_isBoundary(), _CCGVert::edges, i, and _CCGVert::numEdges.

Referenced by ccgSubSurf__calcSubdivLevel(), and ccgSubSurf__sync().

static CCGVert* _vert_new ( CCGVertHDL  vHDL,
CCGSubSurf *  ss 
) [static]
static void _vert_remEdge ( CCGVert *  v,
CCGEdge *  e 
) [static]

Definition at line 369 of file CCGSubSurf.c.

References _CCGVert::edges, i, and _CCGVert::numEdges.

Referenced by _edge_unlinkMarkAndFree().

static void _vert_remFace ( CCGVert *  v,
CCGFace *  f 
) [static]

Definition at line 378 of file CCGSubSurf.c.

References _CCGVert::faces, i, and _CCGVert::numFaces.

Referenced by _face_unlinkMarkAndFree().

void ccgEdgeIterator_free ( CCGEdgeIterator *  vi)
CCGEdge* ccgEdgeIterator_getCurrent ( CCGEdgeIterator *  vi)
int ccgEdgeIterator_isStopped ( CCGEdgeIterator *  vi)
void ccgEdgeIterator_next ( CCGEdgeIterator *  vi)
void ccgFaceIterator_free ( CCGFaceIterator *  vi)
CCGFace* ccgFaceIterator_getCurrent ( CCGFaceIterator *  vi)
int ccgFaceIterator_isStopped ( CCGFaceIterator *  vi)
void ccgFaceIterator_next ( CCGFaceIterator *  vi)
static void ccgSubSurf__allFaces ( CCGSubSurf *  ss,
CCGFace ***  faces,
int *  numFaces,
int *  freeFaces 
) [static]
static void ccgSubSurf__calcSubdivLevel ( CCGSubSurf *  ss,
CCGVert **  effectedV,
CCGEdge **  effectedE,
CCGFace **  effectedF,
int  numEffectedV,
int  numEffectedE,
int  numEffectedF,
int  curLvl 
) [static]
static void ccgSubSurf__calcVertNormals ( CCGSubSurf *  ss,
CCGVert **  effectedV,
CCGEdge **  effectedE,
CCGFace **  effectedF,
int  numEffectedV,
int  numEffectedE,
int  numEffectedF 
) [static]
static void ccgSubSurf__effectedFaceNeighbours ( CCGSubSurf *  ss,
CCGFace **  faces,
int  numFaces,
CCGVert ***  verts,
int *  numVerts,
CCGEdge ***  edges,
int *  numEdges 
) [static]
static void ccgSubSurf__sync ( CCGSubSurf *  ss) [static]
void ccgSubSurf_free ( CCGSubSurf *  ss)
void ccgSubSurf_getAllowEdgeCreation ( CCGSubSurf *  ss,
int *  allowEdgeCreation_r,
float *  defaultCreaseValue_r,
void *  defaultUserData_r 
)
CCGEdge* ccgSubSurf_getEdge ( CCGSubSurf *  ss,
CCGEdgeHDL  e 
)

Definition at line 2500 of file CCGSubSurf.c.

References _ehash_lookup(), and _CCGSubSurf::eMap.

int ccgSubSurf_getEdgeAge ( CCGSubSurf *  ss,
CCGEdge *  e 
)
float ccgSubSurf_getEdgeCrease ( CCGEdge *  e)

Definition at line 2623 of file CCGSubSurf.c.

References _CCGEdge::crease.

Referenced by ss_sync_from_uv().

void* ccgSubSurf_getEdgeData ( CCGSubSurf *  ss,
CCGEdge *  e,
int  x 
)
void* ccgSubSurf_getEdgeDataArray ( CCGSubSurf *  ss,
CCGEdge *  e 
)
CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle ( CCGEdge *  e)

Definition at line 2580 of file CCGSubSurf.c.

References _CCGEdge::eHDL.

Referenced by ccgDM_copyFinalEdgeArray(), ccgdm_getVertCos(), and getCCGDerivedMesh().

CCGFace* ccgSubSurf_getEdgeFace ( CCGEdge *  e,
int  index 
)

Definition at line 2597 of file CCGSubSurf.c.

References _CCGEdge::faces, NULL, and _CCGEdge::numFaces.

Referenced by ccgdm_adjacent_grid().

CCGEdgeIterator* ccgSubSurf_getEdgeIterator ( CCGSubSurf *  ss)
void* ccgSubSurf_getEdgeLevelData ( CCGSubSurf *  ss,
CCGEdge *  e,
int  x,
int  level 
)
int ccgSubSurf_getEdgeLevelSize ( const CCGSubSurf *  ss,
int  level 
)

Definition at line 2513 of file CCGSubSurf.c.

References _CCGSubSurf::subdivLevels.

Referenced by ccgSubSurf_getEdgeSize().

int ccgSubSurf_getEdgeNumFaces ( CCGEdge *  e)
int ccgSubSurf_getEdgeSize ( const CCGSubSurf *  ss)
void* ccgSubSurf_getEdgeUserData ( CCGSubSurf *  ss,
CCGEdge *  e 
)
CCGVert* ccgSubSurf_getEdgeVert0 ( CCGEdge *  e)

Definition at line 2604 of file CCGSubSurf.c.

References _CCGEdge::v0.

Referenced by getCCGDerivedMesh(), getEdgeIndex(), and getFaceIndex().

CCGVert* ccgSubSurf_getEdgeVert1 ( CCGEdge *  e)

Definition at line 2607 of file CCGSubSurf.c.

References _CCGEdge::v1.

Referenced by getCCGDerivedMesh(), and getEdgeIndex().

CCGFace* ccgSubSurf_getFace ( CCGSubSurf *  ss,
CCGFaceHDL  f 
)

Definition at line 2503 of file CCGSubSurf.c.

References _ehash_lookup(), and _CCGSubSurf::fMap.

Referenced by ss_sync_from_uv().

int ccgSubSurf_getFaceAge ( CCGSubSurf *  ss,
CCGFace *  f 
)
void* ccgSubSurf_getFaceCenterData ( CCGFace *  f)
CCGEdge* ccgSubSurf_getFaceEdge ( CCGSubSurf *  UNUSEDss,
CCGFace *  f,
int  index 
)

Definition at line 2654 of file CCGSubSurf.c.

References FACE_getEdges, NULL, and _CCGFace::numVerts.

Referenced by ccgdm_adjacent_grid(), getFaceIndex(), and ss_sync_from_uv().

int ccgSubSurf_getFaceEdgeIndex ( CCGFace *  f,
CCGEdge *  e 
)

Definition at line 2661 of file CCGSubSurf.c.

References FACE_getEdges, i, and _CCGFace::numVerts.

CCGFaceHDL ccgSubSurf_getFaceFaceHandle ( CCGSubSurf *  UNUSEDss,
CCGFace *  f 
)
void* ccgSubSurf_getFaceGridData ( CCGSubSurf *  ss,
CCGFace *  f,
int  gridIndex,
int  x,
int  y 
)
void* ccgSubSurf_getFaceGridDataArray ( CCGSubSurf *  ss,
CCGFace *  f,
int  gridIndex 
)
void* ccgSubSurf_getFaceGridEdgeData ( CCGSubSurf *  ss,
CCGFace *  f,
int  gridIndex,
int  x 
)
void* ccgSubSurf_getFaceGridEdgeDataArray ( CCGSubSurf *  ss,
CCGFace *  f,
int  gridIndex 
)

Definition at line 2673 of file CCGSubSurf.c.

References ccgSubSurf_getFaceGridEdgeData().

CCGFaceIterator* ccgSubSurf_getFaceIterator ( CCGSubSurf *  ss)
int ccgSubSurf_getFaceNumVerts ( CCGFace *  f)
void* ccgSubSurf_getFaceUserData ( CCGSubSurf *  ss,
CCGFace *  f 
)
CCGVert* ccgSubSurf_getFaceVert ( CCGSubSurf *  UNUSEDss,
CCGFace *  f,
int  index 
)

Definition at line 2647 of file CCGSubSurf.c.

References FACE_getVerts, NULL, and _CCGFace::numVerts.

Referenced by getCCGDerivedMesh(), and getFaceIndex().

int ccgSubSurf_getGridLevelSize ( const CCGSubSurf *  ss,
int  level 
)

Definition at line 2523 of file CCGSubSurf.c.

References _CCGSubSurf::subdivLevels.

Referenced by ccgSubSurf_getGridSize().

int ccgSubSurf_getGridSize ( const CCGSubSurf *  ss)
int ccgSubSurf_getNumEdges ( const CCGSubSurf *  ss)
int ccgSubSurf_getNumFaces ( const CCGSubSurf *  ss)
int ccgSubSurf_getNumFinalEdges ( const CCGSubSurf *  ss)
int ccgSubSurf_getNumFinalFaces ( const CCGSubSurf *  ss)

Definition at line 2751 of file CCGSubSurf.c.

References _CCGSubSurf::numGrids, and _CCGSubSurf::subdivLevels.

Referenced by ccgDM_getNumFaces(), and getCCGDerivedMesh().

int ccgSubSurf_getNumFinalVerts ( const CCGSubSurf *  ss)
int ccgSubSurf_getNumVerts ( const CCGSubSurf *  ss)
int ccgSubSurf_getSubdivisionLevels ( const CCGSubSurf *  ss)

Definition at line 2507 of file CCGSubSurf.c.

References _CCGSubSurf::subdivLevels.

Referenced by set_subsurf_uv(), ss_sync_from_derivedmesh(), and ss_sync_from_uv().

void ccgSubSurf_getUseAgeCounts ( CCGSubSurf *  ss,
int *  useAgeCounts_r,
int *  vertUserOffset_r,
int *  edgeUserOffset_r,
int *  faceUserOffset_r 
)
CCGVert* ccgSubSurf_getVert ( CCGSubSurf *  ss,
CCGVertHDL  v 
)

Definition at line 2497 of file CCGSubSurf.c.

References _ehash_lookup(), and _CCGSubSurf::vMap.

int ccgSubSurf_getVertAge ( CCGSubSurf *  ss,
CCGVert *  v 
)
void* ccgSubSurf_getVertData ( CCGSubSurf *  ss,
CCGVert *  v 
)
CCGEdge* ccgSubSurf_getVertEdge ( CCGVert *  v,
int  index 
)

Definition at line 2560 of file CCGSubSurf.c.

References _CCGVert::edges, NULL, and _CCGVert::numEdges.

Referenced by subsurf_calculate_limit_positions().

CCGFace* ccgSubSurf_getVertFace ( CCGVert *  v,
int  index 
)

Definition at line 2550 of file CCGSubSurf.c.

References _CCGVert::faces, NULL, and _CCGVert::numFaces.

Referenced by subsurf_calculate_limit_positions().

CCGVertIterator* ccgSubSurf_getVertIterator ( CCGSubSurf *  ss)
void* ccgSubSurf_getVertLevelData ( CCGSubSurf *  ss,
CCGVert *  v,
int  level 
)
int ccgSubSurf_getVertNumEdges ( CCGVert *  v)

Definition at line 2557 of file CCGSubSurf.c.

References _CCGVert::numEdges.

Referenced by subsurf_calculate_limit_positions().

int ccgSubSurf_getVertNumFaces ( CCGVert *  v)

Definition at line 2547 of file CCGSubSurf.c.

References _CCGVert::numFaces.

Referenced by subsurf_calculate_limit_positions().

void* ccgSubSurf_getVertUserData ( CCGSubSurf *  ss,
CCGVert *  v 
)
CCGVertHDL ccgSubSurf_getVertVertHandle ( CCGVert *  v)

Definition at line 2533 of file CCGSubSurf.c.

References _CCGVert::vHDL.

Referenced by ccgdm_getVertCos(), getCCGDerivedMesh(), and subsurf_calculate_limit_positions().

CCGError ccgSubSurf_initFullSync ( CCGSubSurf *  ss)
CCGError ccgSubSurf_initPartialSync ( CCGSubSurf *  ss)
CCGSubSurf* ccgSubSurf_new ( CCGMeshIFC *  ifc,
int  subdivLevels,
CCGAllocatorIFC *  allocatorIFC,
CCGAllocatorHDL  allocator 
)
CCGError ccgSubSurf_processSync ( CCGSubSurf *  ss)
CCGError ccgSubSurf_setAllowEdgeCreation ( CCGSubSurf *  ss,
int  allowEdgeCreation,
float  defaultCreaseValue,
void *  defaultUserData 
)
CCGError ccgSubSurf_setCalcVertexNormals ( CCGSubSurf *  ss,
int  useVertNormals,
int  normalDataOffset 
)
CCGError ccgSubSurf_setSubdivisionLevels ( CCGSubSurf *  ss,
int  subdivisionLevels 
)
CCGError ccgSubSurf_setUseAgeCounts ( CCGSubSurf *  ss,
int  useAgeCounts,
int  vertUserOffset,
int  edgeUserOffset,
int  faceUserOffset 
)
CCGError ccgSubSurf_stitchFaces ( CCGSubSurf *  ss,
int  lvl,
CCGFace **  effectedF,
int  numEffectedF 
)
CCGError ccgSubSurf_syncEdge ( CCGSubSurf *  ss,
CCGEdgeHDL  eHDL,
CCGVertHDL  e_vHDL0,
CCGVertHDL  e_vHDL1,
float  crease,
CCGEdge **  e_r 
)
CCGError ccgSubSurf_syncEdgeDel ( CCGSubSurf *  ss,
CCGEdgeHDL  eHDL 
)
CCGError ccgSubSurf_syncFace ( CCGSubSurf *  ss,
CCGFaceHDL  fHDL,
int  numVerts,
CCGVertHDL *  vHDLs,
CCGFace **  f_r 
)
CCGError ccgSubSurf_syncFaceDel ( CCGSubSurf *  ss,
CCGFaceHDL  fHDL 
)
CCGError ccgSubSurf_syncVert ( CCGSubSurf *  ss,
CCGVertHDL  vHDL,
const void *  vertData,
int  seam,
CCGVert **  v_r 
)
CCGError ccgSubSurf_syncVertDel ( CCGSubSurf *  ss,
CCGVertHDL  vHDL 
)
CCGError ccgSubSurf_updateFromFaces ( CCGSubSurf *  ss,
int  lvl,
CCGFace **  effectedF,
int  numEffectedF 
)
CCGError ccgSubSurf_updateLevels ( CCGSubSurf *  ss,
int  lvl,
CCGFace **  effectedF,
int  numEffectedF 
)
CCGError ccgSubSurf_updateNormals ( CCGSubSurf *  ss,
CCGFace **  effectedF,
int  numEffectedF 
)
CCGError ccgSubSurf_updateToFaces ( CCGSubSurf *  ss,
int  lvl,
CCGFace **  effectedF,
int  numEffectedF 
)
void ccgVertIterator_free ( CCGVertIterator *  vi)
CCGVert* ccgVertIterator_getCurrent ( CCGVertIterator *  vi)
int ccgVertIterator_isStopped ( CCGVertIterator *  vi)
void ccgVertIterator_next ( CCGVertIterator *  vi)
static float EDGE_getSharpness ( CCGEdge *  e,
int  lvl 
) [static]

Definition at line 506 of file CCGSubSurf.c.

References _CCGEdge::crease.

Referenced by ccgSubSurf__calcSubdivLevel(), and ccgSubSurf__sync().

static int VERT_seam ( const CCGVert *  v) [static]

Definition at line 426 of file CCGSubSurf.c.

References _CCGVert::flags, and Vert_eSeam.

Referenced by ccgSubSurf__calcSubdivLevel(), and ccgSubSurf__sync().

static int VertDataEqual ( const float *  a,
const float *  b 
) [static]

Definition at line 221 of file CCGSubSurf.c.

Referenced by ccgSubSurf_syncVert().


Variable Documentation

int kHashSizes[] [static]
Initial value:
 {
    1, 3, 5, 11, 17, 37, 67, 131, 257, 521, 1031, 2053, 4099, 8209, 
    16411, 32771, 65537, 131101, 262147, 524309, 1048583, 2097169, 
    4194319, 8388617, 16777259, 33554467, 67108879, 134217757, 268435459
}

Definition at line 38 of file CCGSubSurf.c.

Referenced by _ehash_insert(), and _ehash_new().