24 return (1 << (level - 1)) + 1;
31 return 1 + (1 << level);
39 return 1 << (high_level - low_level);
46 return level + (1 << level) - 1;
53 return (uint8_t *)(&(
v)[1]);
58 return (uint8_t *)(&(
e)[1]);
105 dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize));
106 return &gridBase[dataSize *
x * spacing];
110 CCGFace *f,
int lvl,
int S,
int x,
int levels,
int dataSize,
int normalDataOffset)
115 dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize));
116 return &gridBase[dataSize *
x * spacing + normalDataOffset];
120 CCGFace *f,
int lvl,
int S,
int x,
int y,
int levels,
int dataSize)
125 dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize));
126 return &gridBase[dataSize * (maxGridSize + (
y * maxGridSize +
x) * spacing)];
130 CCGFace *f,
int lvl,
int S,
int x,
int y,
int levels,
int dataSize,
int normalDataOffset)
135 dataSize * (1 + S * (maxGridSize + maxGridSize * maxGridSize));
136 return (
float *)&gridBase[dataSize * (maxGridSize + (
y * maxGridSize +
x) * spacing) +
161 CCGFace *f,
CCGEdge *
e,
int f_ed_idx,
int lvl,
int eX,
int eY,
int levels,
int dataSize)
172 eX = (maxGridSize * 2 - 1) - 1 - eX;
174 y = maxGridSize - 1 - eX;
175 x = maxGridSize - 1 - eY;
182 f_ed_idx = (f_ed_idx + 1) % f->
numVerts;
195 const float length =
sqrtf(no[0] * no[0] + no[1] * no[1] + no[2] * no[2]);
198 const float length_inv = 1.0f /
length;
262 v[
i] = (a[
i] +
b[
i] + c[
i] + d[
i]) * 0.25f;
BLI_INLINE uint8_t * VERT_getLevelData(CCGVert *v)
BLI_INLINE int ccg_edgesize(int level)
BLI_INLINE uint8_t * EDGE_getLevelData(CCGEdge *e)
BLI_INLINE void Normalize(float no[3])
BLI_INLINE CCGVert ** FACE_getVerts(CCGFace *f)
BLI_INLINE float * ccg_edge_getNo(CCGEdge *e, int lvl, int x, int dataSize, int normalDataOffset)
BLI_INLINE int ccg_gridsize(int level)
BLI_INLINE void * ccg_face_getIECo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize)
BLI_INLINE void VertDataZero(float v[], const CCGSubSurf *ss)
BLI_INLINE float * ccg_vert_getNo(CCGVert *v, int lvl, int dataSize, int normalDataOffset)
BLI_INLINE CCGEdge ** FACE_getEdges(CCGFace *f)
BLI_INLINE bool VertDataEqual(const float a[], const float b[], const CCGSubSurf *ss)
BLI_INLINE int ccg_edgebase(int level)
BLI_INLINE int ccg_face_getEdgeIndex(CCGFace *f, CCGEdge *e)
BLI_INLINE void * ccg_face_getIFCo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize)
BLI_INLINE int ccg_spacing(int high_level, int low_level)
BLI_INLINE uint8_t * FACE_getCenterData(CCGFace *f)
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 void * ccg_vert_getCo(CCGVert *v, int lvl, int dataSize)
BLI_INLINE void * ccg_face_getIENo(CCGFace *f, int lvl, int S, int x, int levels, int dataSize, int normalDataOffset)
BLI_INLINE int ccg_face_getVertIndex(CCGFace *f, CCGVert *v)
BLI_INLINE float * ccg_face_getIFNo(CCGFace *f, int lvl, int S, int x, int y, int levels, int dataSize, int normalDataOffset)
BLI_INLINE void VertDataMulN(float v[], float f, const CCGSubSurf *ss)
BLI_INLINE void VertDataAvg4(float v[], const float a[], const float b[], const float c[], const float d[], const CCGSubSurf *ss)
BLI_INLINE void * ccg_edge_getCo(CCGEdge *e, int lvl, int x, int dataSize)
BLI_INLINE void VertDataAdd(float a[], const float b[], const CCGSubSurf *ss)
BLI_INLINE void * ccg_face_getIFCoEdge(CCGFace *f, CCGEdge *e, int f_ed_idx, int lvl, int eX, int eY, int levels, int dataSize)
#define CCGSUBSURF_LEVEL_MAX
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
float length(VecOp< float, D >) RET