47 return 1 << (high_level - low_level);
62 v->numEdges =
v->numFaces = 0;
75 for (
int i = 0; i <
v->numEdges; i++) {
76 if (
v->edges[i] ==
e) {
77 v->edges[i] =
v->edges[--
v->numEdges];
84 for (
int i = 0; i <
v->numFaces; i++) {
85 if (
v->faces[i] == f) {
86 v->faces[i] =
v->faces[--
v->numFaces];
94 ss,
v->edges, (
v->numEdges + 1) *
sizeof(*
v->edges),
v->numEdges *
sizeof(*
v->edges));
95 v->edges[
v->numEdges++] =
e;
100 ss,
v->faces, (
v->numFaces + 1) *
sizeof(*
v->faces),
v->numFaces *
sizeof(*
v->faces));
101 v->faces[
v->numFaces++] = f;
105 for (
int i = 0; i <
v->numEdges; i++) {
107 if ((
e->v0 ==
v &&
e->v1 == vQ) || (
e->v1 ==
v &&
e->v0 == vQ)) {
155 for (
int i = 0; i <
e->numFaces; i++) {
156 if (
e->faces[i] == f) {
157 e->faces[i] =
e->faces[--
e->numFaces];
165 ss,
e->faces, (
e->numFaces + 1) *
sizeof(*
e->faces),
e->numFaces *
sizeof(*
e->faces));
166 e->faces[
e->numFaces++] = f;
198 int num_face_data = (numVerts * maxGridSize + numVerts * maxGridSize * maxGridSize + 1);
209 for (
int i = 0; i < numVerts; i++) {
251 if (subdivLevels < 1) {
322 allocatorIFC.
release(allocator);
327 int allowEdgeCreation,
328 float defaultCreaseValue,
329 void *defaultUserData)
339 if (defaultUserData) {
349 int *allowEdgeCreation_r,
350 float *defaultCreaseValue_r,
351 void *defaultUserData_r)
353 if (allowEdgeCreation_r) {
357 if (defaultCreaseValue_r) {
360 if (defaultUserData_r) {
368 if (subdivisionLevels <= 0) {
387 int *vertUserOffset_r,
388 int *edgeUserOffset_r,
389 int *faceUserOffset_r)
393 if (vertUserOffset_r) {
396 if (edgeUserOffset_r) {
399 if (faceUserOffset_r) {
405 CCGSubSurf *ss,
int useAgeCounts,
int vertUserOffset,
int edgeUserOffset,
int faceUserOffset)
428 if (useVertNormals) {
505 if (!
v ||
v->numFaces ||
v->numEdges) {
524 if (!
e ||
e->numFaces) {
575 for (i = 0; i <
v->numEdges; i++) {
580 for (i = 0; i <
v->numFaces; i++) {
632 if (!
e ||
e->v0->vHDL != e_vHDL0 ||
e->v1->vHDL != e_vHDL1 || crease !=
e->crease) {
640 eNew->next =
e->next;
661 if (!
e ||
e->v0->vHDL != e_vHDL0 ||
e->v1->vHDL != e_vHDL1 ||
e->crease != crease) {
691 int j, k, topologyChanged = 0;
702 for (k = 0; k < numVerts; k++) {
705 for (k = 0; k < numVerts; k++) {
717 if (!f || topologyChanged) {
724 fNew->next = f->
next;
733 for (k = 0; k < numVerts; k++) {
748 for (k = 0; k < numVerts; k++) {
755 for (k = 0; k < numVerts; k++) {
788 if (!f || topologyChanged) {
793 for (k = 0; k < numVerts; k++) {
803 for (j = 0; j < f->numVerts; j++) {
805 for (k = 0; k < f->numVerts; k++) {
867 for (; f; f = f->
next) {
891 int numV, numE, i, j;
897 for (i = 0; i < numFaces; i++) {
905 for (;
v;
v =
v->next) {
906 for (j = 0; j <
v->numFaces; j++) {
912 if (j ==
v->numFaces) {
922 for (;
e;
e =
e->next) {
923 for (j = 0; j <
e->numFaces; j++) {
929 if (j ==
e->numFaces) {
945 int i, S,
x, gridSize, cornerIdx, subdivLevels;
949 lvl = (lvl) ? lvl : subdivLevels;
951 cornerIdx = gridSize - 1;
955 for (i = 0; i < numEffectedF; i++) {
966 for (
x = 0;
x < gridSize;
x++) {
970 for (
x = 0;
x < gridSize;
x++) {
971 int eI = gridSize - 1 -
x;
992 int i, S,
x, gridSize, cornerIdx, subdivLevels;
996 lvl = (lvl) ? lvl : subdivLevels;
998 cornerIdx = gridSize - 1;
1002 for (i = 0; i < numEffectedF; i++) {
1005 for (S = 0; S < f->
numVerts; S++) {
1010 for (
x = 0;
x < gridSize;
x++) {
1011 int eI = gridSize - 1 -
x;
1020 for (
x = 1;
x < gridSize - 1;
x++) {
1044 int numEffectedV, numEffectedE, freeF;
1045 int i, S,
x, gridSize, cornerIdx, subdivLevels, edgeSize;
1049 lvl = (lvl) ? lvl : subdivLevels;
1052 cornerIdx = gridSize - 1;
1056 ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
1059 for (i = 0; i < numEffectedV; i++) {
1066 for (i = 0; i < numEffectedE; i++) {
1070 for (
x = 0;
x < edgeSize;
x++) {
1077 for (i = 0; i < numEffectedF; i++) {
1082 for (S = 0; S < f->
numVerts; S++) {
1083 for (
x = 0;
x < gridSize;
x++) {
1088 for (S = 0; S < f->
numVerts; S++) {
1100 for (
x = 1;
x < gridSize - 1;
x++) {
1105 for (
x = 0;
x < gridSize - 1;
x++) {
1106 int eI = gridSize - 1 -
x;
1124 for (i = 0; i < numEffectedV; i++) {
1131 for (i = 0; i < numEffectedE; i++) {
1138 for (
x = 1;
x < edgeSize - 1;
x++) {
1145 for (i = 0; i < numEffectedF; i++) {
1150 for (S = 0; S < f->
numVerts; S++) {
1151 for (
x = 1;
x < gridSize - 1;
x++) {
1156 for (S = 0; S < f->
numVerts; S++) {
1165 for (
x = 1;
x < gridSize - 1;
x++) {
1170 for (
x = 0;
x < gridSize - 1;
x++) {
1171 int eI = gridSize - 1 -
x;
1187 for (i = 0; i < numEffectedV; i++) {
1188 effectedV[i]->
flags = 0;
1190 for (i = 0; i < numEffectedE; i++) {
1191 effectedE[i]->
flags = 0;
1193 for (i = 0; i < numEffectedF; i++) {
1194 effectedF[i]->
flags = 0;
1290 if (index < 0 || index >=
v->numFaces) {
1293 return v->faces[index];
1301 if (index < 0 || index >=
v->numEdges) {
1304 return v->edges[index];
1342 if (index < 0 || index >=
e->numFaces) {
1345 return e->faces[index];
1402 if (index < 0 || index >= f->
numVerts) {
1409 if (index < 0 || index >= f->
numVerts) {
1416 for (
int i = 0; i < f->
numVerts; i++) {
1508 ss->
numGrids * ((gridSize - 2) + ((gridSize - 2) * (gridSize - 2))));
1510 return numFinalVerts;
1517 ss->
numGrids * ((gridSize - 1) + 2 * ((gridSize - 2) * (gridSize - 1))));
1518 return numFinalEdges;
1523 int numFinalFaces = ss->
numGrids * ((gridSize - 1) * (gridSize - 1));
1524 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