33 return 1 << (high_level - low_level);
48 v->numEdges =
v->numFaces = 0;
61 for (
int i = 0; i <
v->numEdges; i++) {
62 if (
v->edges[i] ==
e) {
63 v->edges[i] =
v->edges[--
v->numEdges];
70 for (
int i = 0; i <
v->numFaces; i++) {
71 if (
v->faces[i] == f) {
72 v->faces[i] =
v->faces[--
v->numFaces];
80 ss,
v->edges, (
v->numEdges + 1) *
sizeof(*
v->edges),
v->numEdges *
sizeof(*
v->edges));
81 v->edges[
v->numEdges++] =
e;
86 ss,
v->faces, (
v->numFaces + 1) *
sizeof(*
v->faces),
v->numFaces *
sizeof(*
v->faces));
87 v->faces[
v->numFaces++] = f;
91 for (
int i = 0; i <
v->numEdges; i++) {
93 if ((
e->v0 ==
v &&
e->v1 == vQ) || (
e->v1 ==
v &&
e->v0 == vQ)) {
141 for (
int i = 0; i <
e->numFaces; i++) {
142 if (
e->faces[i] == f) {
143 e->faces[i] =
e->faces[--
e->numFaces];
151 ss,
e->faces, (
e->numFaces + 1) *
sizeof(*
e->faces),
e->numFaces *
sizeof(*
e->faces));
152 e->faces[
e->numFaces++] = f;
184 int num_face_data = (numVerts * maxGridSize + numVerts * maxGridSize * maxGridSize + 1);
195 for (
int i = 0; i < numVerts; i++) {
237 if (subdivLevels < 1) {
308 allocatorIFC.
release(allocator);
313 int allowEdgeCreation,
314 float defaultCreaseValue,
315 void *defaultUserData)
325 if (defaultUserData) {
335 int *allowEdgeCreation_r,
336 float *defaultCreaseValue_r,
337 void *defaultUserData_r)
339 if (allowEdgeCreation_r) {
343 if (defaultCreaseValue_r) {
346 if (defaultUserData_r) {
354 if (subdivisionLevels <= 0) {
373 int *vertUserOffset_r,
374 int *edgeUserOffset_r,
375 int *faceUserOffset_r)
379 if (vertUserOffset_r) {
382 if (edgeUserOffset_r) {
385 if (faceUserOffset_r) {
391 CCGSubSurf *ss,
int useAgeCounts,
int vertUserOffset,
int edgeUserOffset,
int faceUserOffset)
414 if (useVertNormals) {
491 if (!
v ||
v->numFaces ||
v->numEdges) {
510 if (!
e ||
e->numFaces) {
561 for (i = 0; i <
v->numEdges; i++) {
566 for (i = 0; i <
v->numFaces; i++) {
618 if (!
e ||
e->v0->vHDL != e_vHDL0 ||
e->v1->vHDL != e_vHDL1 || crease !=
e->crease) {
626 eNew->next =
e->next;
647 if (!
e ||
e->v0->vHDL != e_vHDL0 ||
e->v1->vHDL != e_vHDL1 ||
e->crease != crease) {
677 int j, k, topologyChanged = 0;
688 for (k = 0; k < numVerts; k++) {
691 for (k = 0; k < numVerts; k++) {
703 if (!f || topologyChanged) {
710 fNew->next = f->
next;
719 for (k = 0; k < numVerts; k++) {
734 for (k = 0; k < numVerts; k++) {
741 for (k = 0; k < numVerts; k++) {
774 if (!f || topologyChanged) {
779 for (k = 0; k < numVerts; k++) {
789 for (j = 0; j < f->numVerts; j++) {
791 for (k = 0; k < f->numVerts; k++) {
853 for (; f; f = f->
next) {
877 int numV, numE, i, j;
883 for (i = 0; i < numFaces; i++) {
891 for (;
v;
v =
v->next) {
892 for (j = 0; j <
v->numFaces; j++) {
898 if (j ==
v->numFaces) {
908 for (;
e;
e =
e->next) {
909 for (j = 0; j <
e->numFaces; j++) {
915 if (j ==
e->numFaces) {
930 int i, S,
x, gridSize, cornerIdx, subdivLevels;
934 lvl = (lvl) ? lvl : subdivLevels;
936 cornerIdx = gridSize - 1;
940 for (i = 0; i < numEffectedF; i++) {
951 for (
x = 0;
x < gridSize;
x++) {
955 for (
x = 0;
x < gridSize;
x++) {
956 int eI = gridSize - 1 -
x;
976 int i, S,
x, gridSize, cornerIdx, subdivLevels;
980 lvl = (lvl) ? lvl : subdivLevels;
982 cornerIdx = gridSize - 1;
986 for (i = 0; i < numEffectedF; i++) {
994 for (
x = 0;
x < gridSize;
x++) {
995 int eI = gridSize - 1 -
x;
1004 for (
x = 1;
x < gridSize - 1;
x++) {
1026 int numEffectedV, numEffectedE, freeF;
1027 int i, S,
x, gridSize, cornerIdx, subdivLevels, edgeSize;
1031 lvl = (lvl) ? lvl : subdivLevels;
1034 cornerIdx = gridSize - 1;
1038 ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
1041 for (i = 0; i < numEffectedV; i++) {
1048 for (i = 0; i < numEffectedE; i++) {
1052 for (
x = 0;
x < edgeSize;
x++) {
1059 for (i = 0; i < numEffectedF; i++) {
1064 for (S = 0; S < f->
numVerts; S++) {
1065 for (
x = 0;
x < gridSize;
x++) {
1070 for (S = 0; S < f->
numVerts; S++) {
1082 for (
x = 1;
x < gridSize - 1;
x++) {
1087 for (
x = 0;
x < gridSize - 1;
x++) {
1088 int eI = gridSize - 1 -
x;
1106 for (i = 0; i < numEffectedV; i++) {
1113 for (i = 0; i < numEffectedE; i++) {
1120 for (
x = 1;
x < edgeSize - 1;
x++) {
1127 for (i = 0; i < numEffectedF; i++) {
1132 for (S = 0; S < f->
numVerts; S++) {
1133 for (
x = 1;
x < gridSize - 1;
x++) {
1138 for (S = 0; S < f->
numVerts; S++) {
1147 for (
x = 1;
x < gridSize - 1;
x++) {
1152 for (
x = 0;
x < gridSize - 1;
x++) {
1153 int eI = gridSize - 1 -
x;
1169 for (i = 0; i < numEffectedV; i++) {
1170 effectedV[i]->
flags = 0;
1172 for (i = 0; i < numEffectedE; i++) {
1173 effectedE[i]->
flags = 0;
1175 for (i = 0; i < numEffectedF; i++) {
1176 effectedF[i]->
flags = 0;
1272 if (index < 0 || index >=
v->numFaces) {
1275 return v->faces[index];
1283 if (index < 0 || index >=
v->numEdges) {
1286 return v->edges[index];
1324 if (index < 0 || index >=
e->numFaces) {
1327 return e->faces[index];
1384 if (index < 0 || index >= f->
numVerts) {
1391 if (index < 0 || index >= f->
numVerts) {
1398 for (
int i = 0; i < f->
numVerts; i++) {
1490 ss->
numGrids * ((gridSize - 2) + ((gridSize - 2) * (gridSize - 2))));
1492 return numFinalVerts;
1499 ss->
numGrids * ((gridSize - 1) + 2 * ((gridSize - 2) * (gridSize - 1))));
1500 return numFinalEdges;
1505 int numFinalFaces = ss->
numGrids * ((gridSize - 1) * (gridSize - 1));
1506 return numFinalFaces;
void ccgSubSurf_initFaceIterator(CCGSubSurf *ss, CCGFaceIterator *fiter)
static void ccgSubSurf__sync(CCGSubSurf *ss)
int BKE_ccg_gridsize(int level)
int ccgSubSurf_getNumFinalEdges(const CCGSubSurf *ss)
int ccgSubSurf_getNumFaces(const CCGSubSurf *ss)
CCGVert * ccgVertIterator_getCurrent(CCGVertIterator *vi)
void ccgVertIterator_next(CCGVertIterator *vi)
void CCG_key_top_level(CCGKey *key, const CCGSubSurf *ss)
void CCG_key(CCGKey *key, const CCGSubSurf *ss, int level)
int ccgSubSurf_getVertNumFaces(CCGVert *v)
static void _face_free(CCGFace *f, CCGSubSurf *ss)
CCGFace * ccgSubSurf_getVertFace(CCGVert *v, int index)
int ccgSubSurf_getNumFinalFaces(const CCGSubSurf *ss)
int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e)
void ccgSubSurf__effectedFaceNeighbors(CCGSubSurf *ss, CCGFace **faces, int numFaces, CCGVert ***verts, int *numVerts, CCGEdge ***edges, int *numEdges)
int ccgFaceIterator_isStopped(CCGFaceIterator *fi)
static void _vert_free(CCGVert *v, CCGSubSurf *ss)
static CCGEdge * _vert_findEdgeTo(const CCGVert *v, const CCGVert *vQ)
CCGSubSurf * ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator)
int ccgEdgeIterator_isStopped(CCGEdgeIterator *ei)
CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces, int *freeFaces)
CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData)
CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
void * ccgSubSurf_getVertData(CCGSubSurf *ss, CCGVert *v)
static CCGEdge * _edge_new(CCGEdgeHDL eHDL, CCGVert *v0, CCGVert *v1, float crease, CCGSubSurf *ss)
void ccgSubSurf_initEdgeIterator(CCGSubSurf *ss, CCGEdgeIterator *eiter)
void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers)
int ccgSubSurf_getNumVerts(const CCGSubSurf *ss)
void * ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f)
CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r)
static void _vert_remEdge(CCGVert *v, CCGEdge *e)
CCGFace * ccgSubSurf_getEdgeFace(CCGEdge *e, int index)
int ccgSubSurf_getSubdivisionLevels(const CCGSubSurf *ss)
CCGVert * ccgSubSurf_getEdgeVert0(CCGEdge *e)
static void _vert_addFace(CCGVert *v, CCGFace *f, CCGSubSurf *ss)
CCGVert * ccgSubSurf_getFaceVert(CCGFace *f, int index)
void * ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y)
CCGError ccgSubSurf_processSync(CCGSubSurf *ss)
int ccgSubSurf_getVertNumEdges(CCGVert *v)
void * ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
static void _edge_free(CCGEdge *e, CCGSubSurf *ss)
CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset)
CCGFace * ccgSubSurf_getFace(CCGSubSurf *ss, CCGFaceHDL f)
int ccgSubSurf_getFaceAge(CCGSubSurf *ss, CCGFace *f)
CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r)
static CCGFace * _face_new(CCGFaceHDL fHDL, CCGVert **verts, CCGEdge **edges, int numVerts, CCGSubSurf *ss)
int ccgSubSurf_getSimpleSubdiv(const CCGSubSurf *ss)
int ccgSubSurf_getGridSize(const CCGSubSurf *ss)
CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL)
void * ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e)
CCGEdge * ccgSubSurf_getEdge(CCGSubSurf *ss, CCGEdgeHDL e)
CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL)
float ccgSubSurf_getEdgeCrease(CCGEdge *e)
void * ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x)
CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss)
CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e)
static void _edge_unlinkMarkAndFree(CCGEdge *e, CCGSubSurf *ss)
void * ccgSubSurf_getFaceCenterData(CCGFace *f)
static void _face_unlinkMarkAndFree(CCGFace *f, CCGSubSurf *ss)
CCGVert * ccgSubSurf_getEdgeVert1(CCGEdge *e)
void ccgEdgeIterator_next(CCGEdgeIterator *ei)
void ccgSubSurf_initVertIterator(CCGSubSurf *ss, CCGVertIterator *viter)
static void * _edge_getCoVert(CCGEdge *e, CCGVert *v, int lvl, int x, int dataSize)
void ccgSubSurf_getUseAgeCounts(CCGSubSurf *ss, int *useAgeCounts_r, int *vertUserOffset_r, int *edgeUserOffset_r, int *faceUserOffset_r)
CCGFaceHDL ccgSubSurf_getFaceFaceHandle(CCGFace *f)
void * ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v)
static CCGVert * _vert_new(CCGVertHDL vHDL, CCGSubSurf *ss)
void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset)
void ccgSubSurf_free(CCGSubSurf *ss)
CCGError ccgSubSurf_initFullSync(CCGSubSurf *ss)
CCGError ccgSubSurf_setUseAgeCounts(CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset)
CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL)
CCGEdge * ccgEdgeIterator_getCurrent(CCGEdgeIterator *ei)
void * ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level)
int ccgSubSurf_getNumEdges(const CCGSubSurf *ss)
int ccgSubSurf_getNumFinalVerts(const CCGSubSurf *ss)
int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level)
CCGEdge * ccgSubSurf_getVertEdge(CCGVert *v, int index)
void * ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x)
void ccgFaceIterator_next(CCGFaceIterator *fi)
int BKE_ccg_factor(int low_level, int high_level)
int ccgVertIterator_isStopped(CCGVertIterator *vi)
CCGVert * ccgSubSurf_getVert(CCGSubSurf *ss, CCGVertHDL v)
static void _edge_addFace(CCGEdge *e, CCGFace *f, CCGSubSurf *ss)
int ccgSubSurf_getEdgeNumFaces(CCGEdge *e)
CCGEdge * ccgSubSurf_getFaceEdge(CCGFace *f, int index)
int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss)
static void _vert_remFace(CCGVert *v, CCGFace *f)
void * ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e)
static void _edge_remFace(CCGEdge *e, CCGFace *f)
int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level)
void * ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level)
CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels)
int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e)
CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v)
void * ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
static void _vert_addEdge(CCGVert *v, CCGEdge *e, CCGSubSurf *ss)
CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r)
CCGFace * ccgFaceIterator_getCurrent(CCGFaceIterator *fi)
int ccgSubSurf_getFaceNumVerts(CCGFace *f)
void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r)
int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v)
@ eCCGError_InvalidSyncState
BLI_INLINE int ccg_edgesize(int level)
BLI_INLINE void * ccg_face_getIECo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize)
BLI_INLINE int ccg_gridsize(int level)
BLI_INLINE void VertDataZero(float v[], const CCGSubSurf *ss)
BLI_INLINE void * ccg_face_getIFCo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize)
BLI_INLINE bool VertDataEqual(const float a[], const float b[], const CCGSubSurf *ss)
BLI_INLINE void * ccg_vert_getCo(CCGVert *v, int lvl, int dataSize)
BLI_INLINE int ccg_edgebase(int level)
BLI_INLINE void * ccg_edge_getCo(CCGEdge *e, int lvl, int x, int dataSize)
BLI_INLINE void VertDataCopy(float dst[], const float src[], const CCGSubSurf *ss)
BLI_INLINE byte * VERT_getLevelData(CCGVert *v)
BLI_INLINE byte * FACE_getCenterData(CCGFace *f)
BLI_INLINE CCGEdge ** FACE_getEdges(CCGFace *f)
BLI_INLINE void VertDataMulN(float v[], float f, const CCGSubSurf *ss)
BLI_INLINE CCGVert ** FACE_getVerts(CCGFace *f)
BLI_INLINE void VertDataAdd(float a[], const float b[], const CCGSubSurf *ss)
BLI_INLINE byte * EDGE_getLevelData(CCGEdge *e)
void * ccg_ehash_lookupWithPrev(EHash *eh, void *key, void ***prevp_r)
#define CCGSUBSURF_alloc(ss, nb)
void ccg_ehashIterator_init(EHash *eh, EHashIterator *ehi)
void ccg_ehashIterator_next(EHashIterator *ehi)
void * ccg_ehash_lookup(EHash *eh, void *key)
void ccg_ehash_insert(EHash *eh, EHEntry *entry)
EHash * ccg_ehash_new(int estimatedNumEntries, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator)
void ccg_ehash_free(EHash *eh, EHEntryFreeFP freeEntry, void *userData)
void * ccg_ehashIterator_getCurrent(EHashIterator *ehi)
#define EDGE_getCo(e, lvl, x)
int ccg_ehashIterator_isStopped(EHashIterator *ehi)
#define FACE_getIFCo(f, lvl, S, x, y)
CCGAllocatorIFC * ccg_getStandardAllocatorIFC(void)
#define VERT_getCo(v, lvl)
#define CCGSUBSURF_free(ss, ptr)
#define CCGSUBSURF_realloc(ss, ptr, nb, ob)
void(* EHEntryFreeFP)(EHEntry *, void *)
void ccgSubSurf__sync_legacy(CCGSubSurf *ss)
#define FACE_getIECo(f, lvl, S, x)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
void(* release)(CCGAllocatorHDL a)
void *(* alloc)(CCGAllocatorHDL a, int numBytes)
CCGAllocatorIFC allocatorIFC
void * defaultEdgeUserData
CCGAllocatorHDL allocator