17 #define FACE_calcIFNo(f, lvl, S, x, y, no) \
18 _face_calcIFNo(f, lvl, S, x, y, no, subdivLevels, vertDataSize)
33 return e->numFaces < 2;
38 for (
int i = 0; i <
v->numEdges; i++) {
70 CCGFace *f,
int lvl,
int S,
int x,
int y,
float no[3],
int levels,
int dataSize)
76 float a_cX =
c[0] -
a[0], a_cY =
c[1] -
a[1], a_cZ =
c[2] -
a[2];
77 float b_dX = d[0] -
b[0], b_dY = d[1] -
b[1], b_dZ = d[2] -
b[2];
79 no[0] = b_dY * a_cZ - b_dZ * a_cY;
80 no[1] = b_dZ * a_cX - b_dX * a_cZ;
81 no[2] = b_dX * a_cY - b_dY * a_cX;
99 if (
e->crease - lvl < 0.0f) {
102 return e->crease - lvl;
135 for (
y = 0;
y < gridSize - 1;
y++) {
136 for (
x = 0;
x < gridSize - 1;
x++) {
142 for (
x = 0;
x < gridSize - 1;
x++) {
147 for (
y = 0;
y < gridSize - 1;
y++) {
159 int yLimitNext = xLimit;
160 int xLimitPrev = yLimit;
162 for (
y = 0;
y < gridSize - 1;
y++) {
163 for (
x = 0;
x < gridSize - 1;
x++) {
164 int xPlusOk = (!xLimit ||
x < gridSize - 2);
165 int yPlusOk = (!yLimit ||
y < gridSize - 2);
176 if (xPlusOk && yPlusOk) {
177 if (
x < gridSize - 2 ||
y < gridSize - 2 ||
183 if (
x == 0 &&
y == 0) {
186 if (!yLimitNext || 1 < gridSize - 1) {
189 if (!xLimitPrev || 1 < gridSize - 1) {
201 if (!yLimitNext ||
x < gridSize - 2) {
207 if (!xLimitPrev ||
y < gridSize - 2) {
238 for (
y = 0;
y < gridSize;
y++) {
239 for (
x = 0;
x < gridSize;
x++) {
249 for (
x = 1;
x < gridSize - 1;
x++) {
270 CCGFace *fLast =
e->faces[
e->numFaces - 1];
273 for (i = 0; i <
e->numFaces - 1; i++) {
278 for (
x = 1;
x < edgeSize - 1;
x++) {
281 fLast,
e, f_ed_idx_last, lvl,
x, 0, subdivLevels, vertDataSize, normalDataOffset),
283 f,
e, f_ed_idx, lvl,
x, 0, subdivLevels, vertDataSize, normalDataOffset));
287 for (i = 0; i <
e->numFaces - 1; i++) {
292 for (
x = 1;
x < edgeSize - 1;
x++) {
295 f,
e, f_ed_idx, lvl,
x, 0, subdivLevels, vertDataSize, normalDataOffset),
297 fLast,
e, f_ed_idx_last, lvl,
x, 0, subdivLevels, vertDataSize, normalDataOffset));
321 .effectedV = effectedV,
322 .effectedE = effectedE,
323 .effectedF = effectedF,
324 .numEffectedV = numEffectedV,
325 .numEffectedE = numEffectedE,
326 .numEffectedF = numEffectedF,
338 for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) {
344 for (i = 0; i <
v->numFaces; i++) {
355 for (i = 0; i <
v->numFaces; i++) {
377 for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) {
385 for (
x = 0;
x < edgeSize;
x++) {
388 f,
e, f_ed_idx, lvl,
x, 0, subdivLevels, vertDataSize, normalDataOffset));
398 for (
x = 0;
x < edgeSize;
x++) {
416 const int curLvl =
data->curLvl;
417 const int nextLvl = curLvl + 1;
427 for (
y = 0;
y < gridSize - 1;
y++) {
428 for (
x = 0;
x < gridSize - 1;
x++) {
447 for (
x = 0;
x < gridSize - 1;
x++) {
464 for (
x = 1;
x < gridSize - 1;
x++) {
465 for (
y = 0;
y < gridSize - 1;
y++) {
470 const float *co2 =
FACE_getIFCo(f, nextLvl, S, fx - 1, fy);
471 const float *co3 =
FACE_getIFCo(f, nextLvl, S, fx + 1, fy);
479 for (
y = 1;
y < gridSize - 1;
y++) {
480 for (
x = 0;
x < gridSize - 1;
x++) {
485 const float *co2 =
FACE_getIFCo(f, nextLvl, S, fx, fy - 1);
486 const float *co3 =
FACE_getIFCo(f, nextLvl, S, fx, fy + 1);
504 const int curLvl =
data->curLvl;
505 const int nextLvl = curLvl + 1;
509 float *q_thread = alloca(vertDataSize);
510 float *r_thread = alloca(vertDataSize);
541 for (
x = 1;
x < gridSize - 1;
x++) {
542 for (
y = 1;
y < gridSize - 1;
y++) {
574 for (
x = 1;
x < gridSize - 1;
x++) {
610 const int nextLvl =
data->curLvl + 1;
612 const int cornerIdx = gridSize - 1;
629 for (
x = 1;
x < gridSize - 1;
x++) {
634 for (
x = 0;
x < gridSize - 1;
x++) {
635 int eI = gridSize - 1 -
x;
650 const int numEffectedV,
651 const int numEffectedE,
652 const int numEffectedF,
656 const int nextLvl = curLvl + 1;
660 float *q = ss->
q, *
r = ss->
r;
664 .effectedV = effectedV,
665 .effectedE = effectedE,
666 .effectedF = effectedF,
667 .numEffectedV = numEffectedV,
668 .numEffectedE = numEffectedE,
669 .numEffectedF = numEffectedF,
689 for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) {
695 for (
x = 0;
x < edgeSize - 1;
x++) {
707 for (
x = 0;
x < edgeSize - 1;
x++) {
717 for (j = 0; j <
e->numFaces; j++) {
747 for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) {
751 int sharpCount = 0, allSharp = 1;
752 float avgSharpness = 0.0;
755 for (j = 0; j <
v->numEdges; j++) {
763 if (sharpness != 0.0f) {
765 avgSharpness += sharpness;
773 avgSharpness /= sharpCount;
774 if (avgSharpness > 1.0f) {
779 if (seamEdges < 2 || seamEdges != v->numEdges) {
790 for (j = 0; j <
v->numEdges; j++) {
804 const int cornerIdx = (1 + (1 << (curLvl))) - 2;
805 int numEdges = 0, numFaces = 0;
808 for (j = 0; j <
v->numFaces; j++) {
816 for (j = 0; j <
v->numEdges; j++) {
830 if ((sharpCount > 1 &&
v->numFaces) || seam) {
835 sharpCount = seamEdges;
839 for (j = 0; j <
v->numEdges; j++) {
848 else if (sharpness != 0.0f) {
855 if (sharpCount != 2 || allSharp) {
882 for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) {
886 float avgSharpness = 0.0;
889 if (sharpness != 0.0f) {
891 avgSharpness += sharpness;
893 if (avgSharpness > 1.0f) {
903 for (
x = 1;
x < edgeSize - 1;
x++) {
921 for (
x = 1;
x < edgeSize - 1;
x++) {
931 for (j = 0; j <
e->numFaces; j++) {
958 if (sharpCount == 2) {
988 for (i = 0; i < numEffectedE; i++) {
1008 int numEffectedV, numEffectedE, numEffectedF;
1011 int i, j, ptrIdx, S;
1012 int curLvl, nextLvl;
1013 void *q = ss->
q, *
r = ss->
r;
1018 numEffectedV = numEffectedE = numEffectedF = 0;
1021 for (;
v;
v =
v->next) {
1023 effectedV[numEffectedV++] =
v;
1025 for (j = 0; j <
v->numEdges; j++) {
1028 effectedE[numEffectedE++] =
e;
1033 for (j = 0; j <
v->numFaces; j++) {
1036 effectedF[numEffectedF++] = f;
1045 nextLvl = curLvl + 1;
1047 for (ptrIdx = 0; ptrIdx < numEffectedF; ptrIdx++) {
1048 CCGFace *f = effectedF[ptrIdx];
1051 for (i = 0; i < f->
numVerts; i++) {
1058 for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) {
1072 for (i = 0; i <
e->numFaces; i++) {
1091 for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) {
1095 int sharpCount = 0, allSharp = 1;
1096 float avgSharpness = 0.0;
1099 for (i = 0; i <
v->numEdges; i++) {
1107 if (sharpness != 0.0f) {
1109 avgSharpness += sharpness;
1117 avgSharpness /= sharpCount;
1118 if (avgSharpness > 1.0f) {
1119 avgSharpness = 1.0f;
1123 if (seamEdges < 2 || seamEdges != v->numEdges) {
1131 int numBoundary = 0;
1134 for (i = 0; i <
v->numEdges; i++) {
1147 int numEdges = 0, numFaces = 0;
1150 for (i = 0; i <
v->numFaces; i++) {
1157 for (i = 0; i <
v->numEdges; i++) {
1171 if (sharpCount > 1 || seam) {
1175 avgSharpness = 1.0f;
1176 sharpCount = seamEdges;
1180 for (i = 0; i <
v->numEdges; i++) {
1190 else if (sharpness != 0.0f) {
1198 if (sharpCount != 2 || allSharp) {
1222 for (i = 0; i < numEffectedV; i++) {
1228 for (i = 0; i < numEffectedE; i++) {
1234 for (i = 0; i < numEffectedF; i++) {
1241 for (i = 0; i < numEffectedE; i++) {
1246 for (i = 0; i < numEffectedF; i++) {
1248 for (S = 0; S < f->
numVerts; S++) {
1268 for (curLvl = 1; curLvl < subdivLevels; curLvl++) {
1270 ss, effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF, curLvl);
1275 ss, effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF);
1278 for (ptrIdx = 0; ptrIdx < numEffectedV; ptrIdx++) {
1282 for (ptrIdx = 0; ptrIdx < numEffectedE; ptrIdx++) {
1291 #ifdef DUMP_RESULT_GRIDS
1292 ccgSubSurf__dumpCoords(ss);
1302 int i, numEffectedV, numEffectedE, freeF;
1306 ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
1310 ss, effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF);
1313 for (i = 0; i < numEffectedV; i++) {
1314 effectedV[i]->
flags = 0;
1316 for (i = 0; i < numEffectedE; i++) {
1317 effectedE[i]->
flags = 0;
1319 for (i = 0; i < numEffectedF; i++) {
1320 effectedF[i]->
flags = 0;
1336 int numEffectedV, numEffectedE, freeF, i;
1341 ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
1343 for (curLvl = lvl; curLvl < subdivLevels; curLvl++) {
1345 ss, effectedV, effectedE, effectedF, numEffectedV, numEffectedE, numEffectedF, curLvl);
1348 for (i = 0; i < numEffectedV; i++) {
1349 effectedV[i]->
flags = 0;
1351 for (i = 0; i < numEffectedE; i++) {
1352 effectedE[i]->
flags = 0;
1354 for (i = 0; i < numEffectedF; i++) {
1355 effectedF[i]->
flags = 0;
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
void ccgSubSurf__effectedFaceNeighbors(CCGSubSurf *ss, CCGFace **faces, int numFaces, CCGVert ***verts, int *numVerts, CCGEdge ***edges, int *numEdges)
void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces, int *freeFaces)
void * ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f)
void * ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v)
void * ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e)
BLI_INLINE int ccg_edgesize(int level)
BLI_INLINE void Normalize(float no[3])
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 int ccg_edgebase(int level)
BLI_INLINE int ccg_face_getEdgeIndex(CCGFace *f, CCGEdge *e)
BLI_INLINE void VertDataSub(float a[], const float b[], const CCGSubSurf *ss)
BLI_INLINE void VertDataCopy(float dst[], const float src[], const CCGSubSurf *ss)
BLI_INLINE int ccg_face_getVertIndex(CCGFace *f, CCGVert *v)
BLI_INLINE byte * FACE_getCenterData(CCGFace *f)
BLI_INLINE CCGEdge ** FACE_getEdges(CCGFace *f)
BLI_INLINE void * ccg_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int f_ed_idx, int lvl, int eX, int eY, int levels, int dataSize)
BLI_INLINE void VertDataMulN(float v[], float f, const CCGSubSurf *ss)
BLI_INLINE CCGVert ** FACE_getVerts(CCGFace *f)
BLI_INLINE void VertDataAvg4(float v[], const float a[], const float b[], const float c[], const float d[], const CCGSubSurf *ss)
BLI_INLINE void VertDataAdd(float a[], const float b[], const CCGSubSurf *ss)
BLI_INLINE byte * EDGE_getLevelData(CCGEdge *e)
#define EDGE_getNo(e, lvl, x)
#define FACE_getIENo(f, lvl, S, x)
#define FACE_getIFNo(f, lvl, S, x, y)
#define EDGE_getCo(e, lvl, x)
#define FACE_getIFCo(f, lvl, S, x, y)
#define VERT_getCo(v, lvl)
#define VERT_getNo(v, lvl)
#define FACE_getIECo(f, lvl, S, x)
static void ccgSubSurf__calcVertNormals_faces_accumulate_cb(void *__restrict userdata, const int ptrIdx, const TaskParallelTLS *__restrict UNUSED(tls))
static void ccgSubSurf__calcSubdivLevel_verts_copydata_cb(void *__restrict userdata, const int ptrIdx, const TaskParallelTLS *__restrict UNUSED(tls))
static int _edge_isBoundary(const CCGEdge *e)
static void ccgSubSurf__calcVertNormals_faces_finalize_cb(void *__restrict userdata, const int ptrIdx, const TaskParallelTLS *__restrict UNUSED(tls))
static float * _face_getIFNoEdge(CCGFace *f, CCGEdge *e, int f_ed_idx, int lvl, int eX, int eY, int levels, int dataSize, int normalDataOffset)
#define FACE_calcIFNo(f, lvl, S, x, y, no)
CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF)
struct CCGSubSurfCalcSubdivData CCGSubSurfCalcSubdivData
static void ccgSubSurf__calcVertNormals(CCGSubSurf *ss, CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, int numEffectedV, int numEffectedE, int numEffectedF)
CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
static CCGVert * _edge_getOtherVert(CCGEdge *e, CCGVert *vQ)
static void _face_calcIFNo(CCGFace *f, int lvl, int S, int x, int y, float no[3], int levels, int dataSize)
static void ccgSubSurf__calcSubdivLevel_interior_faces_edges_midpoints_cb(void *__restrict userdata, const int ptrIdx, const TaskParallelTLS *__restrict UNUSED(tls))
static float EDGE_getSharpness(CCGEdge *e, int lvl)
static void ccgSubSurf__calcVertNormals_edges_accumulate_cb(void *__restrict userdata, const int ptrIdx, const TaskParallelTLS *__restrict UNUSED(tls))
static int VERT_seam(const CCGVert *v)
static void * _edge_getCoVert(CCGEdge *e, CCGVert *v, int lvl, int x, int dataSize)
static bool _vert_isBoundary(const CCGVert *v)
static void ccgSubSurf__calcSubdivLevel_interior_faces_edges_centerpoints_shift_cb(void *__restrict userdata, const int ptrIdx, const TaskParallelTLS *__restrict UNUSED(tls))
void ccgSubSurf__sync_legacy(CCGSubSurf *ss)
static void ccgSubSurf__calcSubdivLevel(CCGSubSurf *ss, CCGVert **effectedV, CCGEdge **effectedE, CCGFace **effectedF, const int numEffectedV, const int numEffectedE, const int numEffectedF, const int curLvl)
_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 GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_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
Read Guarded memory(de)allocation.
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)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)