Blender  V3.3
CCGSubSurf.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
9 typedef void *CCGMeshHDL;
10 typedef void *CCGVertHDL;
11 typedef void *CCGEdgeHDL;
12 typedef void *CCGFaceHDL;
13 
14 typedef struct CCGEdge CCGEdge;
15 typedef struct CCGFace CCGFace;
16 typedef struct CCGSubSurf CCGSubSurf;
17 typedef struct CCGVert CCGVert;
18 
19 typedef struct CCGMeshIFC {
21  int numLayers;
25 
26 /***/
27 
28 typedef void *CCGAllocatorHDL;
29 
30 typedef struct CCGAllocatorIFC {
31  void *(*alloc)(CCGAllocatorHDL a, int numBytes);
32  void *(*realloc)(CCGAllocatorHDL a, void *ptr, int newSize, int oldSize);
36 
37 /* private, so we can allocate on the stack */
38 typedef struct _EHashIterator {
39  struct _EHash *eh;
40  int curBucket;
41  struct _EHEntry *curEntry;
43 
44 /***/
45 
46 typedef enum {
48 
51 } CCGError;
52 
53 /***/
54 
55 /* TODO(sergey): This actually depends on subsurf level as well. */
56 #define CCG_TASK_LIMIT 16
57 
58 /***/
59 
61  int subdivLevels,
62  CCGAllocatorIFC *allocatorIFC,
63  CCGAllocatorHDL allocator);
64 void ccgSubSurf_free(CCGSubSurf *ss);
65 
68 #ifdef WITH_OPENSUBDIV
69 CCGError ccgSubSurf_initOpenSubdivSync(CCGSubSurf *ss);
70 #endif
71 
73  CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r);
75  CCGEdgeHDL eHDL,
76  CCGVertHDL e_vHDL0,
77  CCGVertHDL e_vHDL1,
78  float crease,
79  CCGEdge **e_r);
81  CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r);
82 
86 
88 
93  int lvl,
94  CCGFace **effectedF,
95  int numEffectedF);
99 CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
103 CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF);
108 CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
113 CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
114 
115 CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels);
116 
118  int allowEdgeCreation,
119  float defaultCreaseValue,
120  void *defaultUserData);
122  int *allowEdgeCreation_r,
123  float *defaultCreaseValue_r,
124  void *defaultUserData_r);
125 
127  int *useAgeCounts_r,
128  int *vertUserOffset_r,
129  int *edgeUserOffset_r,
130  int *faceUserOffset_r);
132  CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset);
133 
134 CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset);
135 void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset);
136 
137 void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers);
138 
139 /***/
140 
141 int ccgSubSurf_getNumVerts(const CCGSubSurf *ss);
142 int ccgSubSurf_getNumEdges(const CCGSubSurf *ss);
143 int ccgSubSurf_getNumFaces(const CCGSubSurf *ss);
144 
146 int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss);
147 int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level);
148 int ccgSubSurf_getGridSize(const CCGSubSurf *ss);
149 int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level);
151 
158 
162 void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level);
163 
171 
175 void *ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x);
176 void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level);
177 
181 CCGVert *ccgSubSurf_getFaceVert(CCGFace *f, int index);
182 CCGEdge *ccgSubSurf_getFaceEdge(CCGFace *f, int index);
184 
188 void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
189 void *ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x);
190 void *ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
191 void *ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y);
192 
196 
197 /***/
198 
199 typedef struct _EHashIterator CCGEdgeIterator;
200 typedef struct _EHashIterator CCGFaceIterator;
201 typedef struct _EHashIterator CCGVertIterator;
202 
206 
210 
214 
void ccgSubSurf_initFaceIterator(CCGSubSurf *ss, CCGFaceIterator *fiter)
Definition: CCGSubSurf.c:1438
struct _EHashIterator EHashIterator
int ccgSubSurf_getNumFinalEdges(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1494
int ccgSubSurf_getNumFaces(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1198
CCGVert * ccgVertIterator_getCurrent(CCGVertIterator *vi)
Definition: CCGSubSurf.c:1443
void ccgVertIterator_next(CCGVertIterator *vi)
Definition: CCGSubSurf.c:1451
int ccgSubSurf_getVertNumFaces(CCGVert *v)
Definition: CCGSubSurf.c:1266
CCGFace * ccgSubSurf_getVertFace(CCGVert *v, int index)
Definition: CCGSubSurf.c:1270
int ccgSubSurf_getNumFinalFaces(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1502
void * CCGFaceHDL
Definition: CCGSubSurf.h:12
int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e)
Definition: CCGSubSurf.c:1306
int ccgFaceIterator_isStopped(CCGFaceIterator *fi)
Definition: CCGSubSurf.c:1473
CCGSubSurf * ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator)
Definition: CCGSubSurf.c:227
int ccgEdgeIterator_isStopped(CCGEdgeIterator *ei)
Definition: CCGSubSurf.c:1460
CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
Definition: CCGSubSurf.c:928
CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData)
Definition: CCGSubSurf.c:312
CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
Definition: CCGSubSurf.c:974
void * ccgSubSurf_getVertData(CCGSubSurf *ss, CCGVert *v)
Definition: CCGSubSurf.c:1288
void ccgSubSurf_initEdgeIterator(CCGSubSurf *ss, CCGEdgeIterator *eiter)
Definition: CCGSubSurf.c:1434
void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers)
Definition: CCGSubSurf.c:435
void * CCGEdgeHDL
Definition: CCGSubSurf.h:11
int ccgSubSurf_getNumVerts(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1190
CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
void * ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f)
Definition: CCGSubSurf.c:1371
CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r)
Definition: CCGSubSurf.c:672
struct CCGMeshIFC CCGMeshIFC
CCGFace * ccgSubSurf_getEdgeFace(CCGEdge *e, int index)
Definition: CCGSubSurf.c:1322
void * CCGMeshHDL
Definition: CCGSubSurf.h:9
int ccgSubSurf_getSubdivisionLevels(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1216
CCGVert * ccgSubSurf_getEdgeVert0(CCGEdge *e)
Definition: CCGSubSurf.c:1329
CCGVert * ccgSubSurf_getFaceVert(CCGFace *f, int index)
Definition: CCGSubSurf.c:1382
void * CCGVertHDL
Definition: CCGSubSurf.h:10
void * ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y)
Definition: CCGSubSurf.c:1422
CCGError ccgSubSurf_processSync(CCGSubSurf *ss)
Definition: CCGSubSurf.c:811
int ccgSubSurf_getVertNumEdges(CCGVert *v)
Definition: CCGSubSurf.c:1277
void * ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
Definition: CCGSubSurf.c:1409
CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset)
Definition: CCGSubSurf.c:412
CCGFace * ccgSubSurf_getFace(CCGSubSurf *ss, CCGFaceHDL f)
Definition: CCGSubSurf.c:1211
int ccgSubSurf_getFaceAge(CCGSubSurf *ss, CCGFace *f)
Definition: CCGSubSurf.c:1363
CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
Definition: CCGSubSurf.c:1022
CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r)
Definition: CCGSubSurf.c:539
CCGError
Definition: CCGSubSurf.h:46
@ eCCGError_None
Definition: CCGSubSurf.h:47
@ eCCGError_InvalidSyncState
Definition: CCGSubSurf.h:49
@ eCCGError_InvalidValue
Definition: CCGSubSurf.h:50
int ccgSubSurf_getSimpleSubdiv(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1243
int ccgSubSurf_getGridSize(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1231
CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL)
Definition: CCGSubSurf.c:482
void * ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e)
Definition: CCGSubSurf.c:1337
CCGEdge * ccgSubSurf_getEdge(CCGSubSurf *ss, CCGEdgeHDL e)
Definition: CCGSubSurf.c:1207
CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL)
Definition: CCGSubSurf.c:501
float ccgSubSurf_getEdgeCrease(CCGEdge *e)
Definition: CCGSubSurf.c:1352
void * ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x)
Definition: CCGSubSurf.c:1413
CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss)
Definition: CCGSubSurf.c:469
CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e)
Definition: CCGSubSurf.c:1302
void * ccgSubSurf_getFaceCenterData(CCGFace *f)
Definition: CCGSubSurf.c:1405
CCGVert * ccgSubSurf_getEdgeVert1(CCGEdge *e)
Definition: CCGSubSurf.c:1333
void ccgEdgeIterator_next(CCGEdgeIterator *ei)
Definition: CCGSubSurf.c:1464
void ccgSubSurf_initVertIterator(CCGSubSurf *ss, CCGVertIterator *viter)
Definition: CCGSubSurf.c:1430
void ccgSubSurf_getUseAgeCounts(CCGSubSurf *ss, int *useAgeCounts_r, int *vertUserOffset_r, int *edgeUserOffset_r, int *faceUserOffset_r)
Definition: CCGSubSurf.c:371
CCGFaceHDL ccgSubSurf_getFaceFaceHandle(CCGFace *f)
Definition: CCGSubSurf.c:1359
void * ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v)
Definition: CCGSubSurf.c:1262
void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset)
Definition: CCGSubSurf.c:429
void ccgSubSurf_free(CCGSubSurf *ss)
Definition: CCGSubSurf.c:281
CCGError ccgSubSurf_initFullSync(CCGSubSurf *ss)
Definition: CCGSubSurf.c:442
CCGError ccgSubSurf_setUseAgeCounts(CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset)
Definition: CCGSubSurf.c:390
CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL)
Definition: CCGSubSurf.c:520
CCGEdge * ccgEdgeIterator_getCurrent(CCGEdgeIterator *ei)
Definition: CCGSubSurf.c:1456
void * ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level)
Definition: CCGSubSurf.c:1345
int ccgSubSurf_getNumEdges(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1194
int ccgSubSurf_getNumFinalVerts(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1484
int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level)
Definition: CCGSubSurf.c:1224
CCGEdge * ccgSubSurf_getVertEdge(CCGVert *v, int index)
Definition: CCGSubSurf.c:1281
void * ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x)
Definition: CCGSubSurf.c:1341
void ccgFaceIterator_next(CCGFaceIterator *fi)
Definition: CCGSubSurf.c:1477
int ccgVertIterator_isStopped(CCGVertIterator *vi)
Definition: CCGSubSurf.c:1447
CCGVert * ccgSubSurf_getVert(CCGSubSurf *ss, CCGVertHDL v)
Definition: CCGSubSurf.c:1203
int ccgSubSurf_getEdgeNumFaces(CCGEdge *e)
Definition: CCGSubSurf.c:1318
CCGEdge * ccgSubSurf_getFaceEdge(CCGFace *f, int index)
Definition: CCGSubSurf.c:1389
int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1220
void * ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e)
Definition: CCGSubSurf.c:1314
int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level)
Definition: CCGSubSurf.c:1235
void * ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level)
Definition: CCGSubSurf.c:1292
CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels)
Definition: CCGSubSurf.c:352
int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e)
Definition: CCGSubSurf.c:1396
CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v)
Definition: CCGSubSurf.c:1250
void * ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
Definition: CCGSubSurf.c:1418
void * CCGAllocatorHDL
Definition: CCGSubSurf.h:28
struct CCGAllocatorIFC CCGAllocatorIFC
CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r)
Definition: CCGSubSurf.c:606
CCGFace * ccgFaceIterator_getCurrent(CCGFaceIterator *fi)
Definition: CCGSubSurf.c:1469
int ccgSubSurf_getFaceNumVerts(CCGFace *f)
Definition: CCGSubSurf.c:1378
void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r)
Definition: CCGSubSurf.c:334
int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v)
Definition: CCGSubSurf.c:1254
_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
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
SyclQueue void void size_t num_bytes void
static unsigned a[3]
Definition: RandGen.cpp:78
void(* free)(CCGAllocatorHDL a, void *ptr)
Definition: CCGSubSurf.h:33
void(* release)(CCGAllocatorHDL a)
Definition: CCGSubSurf.h:34
int numLayers
Definition: CCGSubSurf.h:21
int vertDataSize
Definition: CCGSubSurf.h:22
int simpleSubdiv
Definition: CCGSubSurf.h:23
int edgeUserSize
Definition: CCGSubSurf.h:20
int faceUserSize
Definition: CCGSubSurf.h:20
int vertUserSize
Definition: CCGSubSurf.h:20
struct _EHEntry * curEntry
Definition: CCGSubSurf.h:41
struct _EHash * eh
Definition: CCGSubSurf.h:39
PointerRNA * ptr
Definition: wm_files.c:3480