Blender  V2.93
CCGSubSurf.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
17 #pragma once
18 
23 typedef void *CCGMeshHDL;
24 typedef void *CCGVertHDL;
25 typedef void *CCGEdgeHDL;
26 typedef void *CCGFaceHDL;
27 
28 typedef struct CCGEdge CCGEdge;
29 typedef struct CCGFace CCGFace;
30 typedef struct CCGSubSurf CCGSubSurf;
31 typedef struct CCGVert CCGVert;
32 
33 typedef struct CCGMeshIFC {
35  int numLayers;
39 
40 /***/
41 
42 typedef void *CCGAllocatorHDL;
43 
44 typedef struct CCGAllocatorIFC {
45  void *(*alloc)(CCGAllocatorHDL a, int numBytes);
46  void *(*realloc)(CCGAllocatorHDL a, void *ptr, int newSize, int oldSize);
47  void (*free)(CCGAllocatorHDL a, void *ptr);
50 
51 /* private, so we can allocate on the stack */
52 typedef struct _EHashIterator {
53  struct _EHash *eh;
54  int curBucket;
55  struct _EHEntry *curEntry;
57 
58 /***/
59 
60 typedef enum {
62 
65 } CCGError;
66 
67 /***/
68 
69 /* TODO(sergey): This actually depends on subsurf level as well. */
70 #define CCG_TASK_LIMIT 16
71 
72 /***/
73 
75  int subdivLevels,
76  CCGAllocatorIFC *allocatorIFC,
77  CCGAllocatorHDL allocator);
78 void ccgSubSurf_free(CCGSubSurf *ss);
79 
82 #ifdef WITH_OPENSUBDIV
83 CCGError ccgSubSurf_initOpenSubdivSync(CCGSubSurf *ss);
84 #endif
85 
87  CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r);
89  CCGEdgeHDL eHDL,
90  CCGVertHDL e_vHDL0,
91  CCGVertHDL e_vHDL1,
92  float crease,
93  CCGEdge **e_r);
95  CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r);
96 
100 
102 
104  int lvl,
105  CCGFace **effectedF,
106  int numEffectedF);
107 CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
108 CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF);
109 CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
110 CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
111 
112 CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels);
113 
115  int allowEdgeCreation,
116  float defaultCreaseValue,
117  void *defaultUserData);
119  int *allowEdgeCreation_r,
120  float *defaultCreaseValue_r,
121  void *defaultUserData_r);
122 
124  int *useAgeCounts_r,
125  int *vertUserOffset_r,
126  int *edgeUserOffset_r,
127  int *faceUserOffset_r);
129  CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset);
130 
131 CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset);
132 void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset);
133 
134 void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers);
135 
136 /***/
137 
138 int ccgSubSurf_getNumVerts(const CCGSubSurf *ss);
139 int ccgSubSurf_getNumEdges(const CCGSubSurf *ss);
140 int ccgSubSurf_getNumFaces(const CCGSubSurf *ss);
141 
143 int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss);
144 int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level);
145 int ccgSubSurf_getGridSize(const CCGSubSurf *ss);
146 int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level);
148 
155 
159 void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level);
160 
168 
172 void *ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x);
173 void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level);
174 
178 CCGVert *ccgSubSurf_getFaceVert(CCGFace *f, int index);
179 CCGEdge *ccgSubSurf_getFaceEdge(CCGFace *f, int index);
181 
185 void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
186 void *ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x);
187 void *ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
188 void *ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y);
189 
193 
194 /***/
195 
196 typedef struct _EHashIterator CCGEdgeIterator;
197 typedef struct _EHashIterator CCGFaceIterator;
198 typedef struct _EHashIterator CCGVertIterator;
199 
203 
207 
211 
void ccgSubSurf_initFaceIterator(CCGSubSurf *ss, CCGFaceIterator *fiter)
Definition: CCGSubSurf.c:1456
struct _EHashIterator EHashIterator
int ccgSubSurf_getNumFinalEdges(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1512
int ccgSubSurf_getNumFaces(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1216
CCGVert * ccgVertIterator_getCurrent(CCGVertIterator *vi)
Definition: CCGSubSurf.c:1461
void ccgVertIterator_next(CCGVertIterator *vi)
Definition: CCGSubSurf.c:1469
int ccgSubSurf_getVertNumFaces(CCGVert *v)
Definition: CCGSubSurf.c:1284
CCGFace * ccgSubSurf_getVertFace(CCGVert *v, int index)
Definition: CCGSubSurf.c:1288
int ccgSubSurf_getNumFinalFaces(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1520
void * CCGFaceHDL
Definition: CCGSubSurf.h:26
int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e)
Definition: CCGSubSurf.c:1324
int ccgFaceIterator_isStopped(CCGFaceIterator *fi)
Definition: CCGSubSurf.c:1491
CCGSubSurf * ccgSubSurf_new(CCGMeshIFC *ifc, int subdivLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator)
Definition: CCGSubSurf.c:241
int ccgEdgeIterator_isStopped(CCGEdgeIterator *ei)
Definition: CCGSubSurf.c:1478
CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
Definition: CCGSubSurf.c:943
CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData)
Definition: CCGSubSurf.c:326
CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
Definition: CCGSubSurf.c:990
void * ccgSubSurf_getVertData(CCGSubSurf *ss, CCGVert *v)
Definition: CCGSubSurf.c:1306
void ccgSubSurf_initEdgeIterator(CCGSubSurf *ss, CCGEdgeIterator *eiter)
Definition: CCGSubSurf.c:1452
void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers)
Definition: CCGSubSurf.c:449
void * CCGEdgeHDL
Definition: CCGSubSurf.h:25
int ccgSubSurf_getNumVerts(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1208
CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
void * ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f)
Definition: CCGSubSurf.c:1389
CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r)
Definition: CCGSubSurf.c:686
struct CCGMeshIFC CCGMeshIFC
CCGFace * ccgSubSurf_getEdgeFace(CCGEdge *e, int index)
Definition: CCGSubSurf.c:1340
void * CCGMeshHDL
Definition: CCGSubSurf.h:23
int ccgSubSurf_getSubdivisionLevels(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1234
CCGVert * ccgSubSurf_getEdgeVert0(CCGEdge *e)
Definition: CCGSubSurf.c:1347
CCGVert * ccgSubSurf_getFaceVert(CCGFace *f, int index)
Definition: CCGSubSurf.c:1400
void * CCGVertHDL
Definition: CCGSubSurf.h:24
void * ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y)
Definition: CCGSubSurf.c:1440
CCGError ccgSubSurf_processSync(CCGSubSurf *ss)
Definition: CCGSubSurf.c:825
int ccgSubSurf_getVertNumEdges(CCGVert *v)
Definition: CCGSubSurf.c:1295
void * ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
Definition: CCGSubSurf.c:1427
CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset)
Definition: CCGSubSurf.c:426
CCGFace * ccgSubSurf_getFace(CCGSubSurf *ss, CCGFaceHDL f)
Definition: CCGSubSurf.c:1229
int ccgSubSurf_getFaceAge(CCGSubSurf *ss, CCGFace *f)
Definition: CCGSubSurf.c:1381
CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
Definition: CCGSubSurf.c:1040
CCGError ccgSubSurf_syncVert(CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r)
Definition: CCGSubSurf.c:553
CCGError
Definition: CCGSubSurf.h:60
@ eCCGError_None
Definition: CCGSubSurf.h:61
@ eCCGError_InvalidSyncState
Definition: CCGSubSurf.h:63
@ eCCGError_InvalidValue
Definition: CCGSubSurf.h:64
int ccgSubSurf_getSimpleSubdiv(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1261
int ccgSubSurf_getGridSize(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1249
CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL)
Definition: CCGSubSurf.c:496
void * ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e)
Definition: CCGSubSurf.c:1355
CCGEdge * ccgSubSurf_getEdge(CCGSubSurf *ss, CCGEdgeHDL e)
Definition: CCGSubSurf.c:1225
CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL)
Definition: CCGSubSurf.c:515
float ccgSubSurf_getEdgeCrease(CCGEdge *e)
Definition: CCGSubSurf.c:1370
void * ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x)
Definition: CCGSubSurf.c:1431
CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss)
Definition: CCGSubSurf.c:483
CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e)
Definition: CCGSubSurf.c:1320
void * ccgSubSurf_getFaceCenterData(CCGFace *f)
Definition: CCGSubSurf.c:1423
CCGVert * ccgSubSurf_getEdgeVert1(CCGEdge *e)
Definition: CCGSubSurf.c:1351
void ccgEdgeIterator_next(CCGEdgeIterator *ei)
Definition: CCGSubSurf.c:1482
void ccgSubSurf_initVertIterator(CCGSubSurf *ss, CCGVertIterator *viter)
Definition: CCGSubSurf.c:1448
void ccgSubSurf_getUseAgeCounts(CCGSubSurf *ss, int *useAgeCounts_r, int *vertUserOffset_r, int *edgeUserOffset_r, int *faceUserOffset_r)
Definition: CCGSubSurf.c:385
CCGFaceHDL ccgSubSurf_getFaceFaceHandle(CCGFace *f)
Definition: CCGSubSurf.c:1377
void * ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v)
Definition: CCGSubSurf.c:1280
void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset)
Definition: CCGSubSurf.c:443
void ccgSubSurf_free(CCGSubSurf *ss)
Definition: CCGSubSurf.c:295
CCGError ccgSubSurf_initFullSync(CCGSubSurf *ss)
Definition: CCGSubSurf.c:456
CCGError ccgSubSurf_setUseAgeCounts(CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset)
Definition: CCGSubSurf.c:404
CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL)
Definition: CCGSubSurf.c:534
CCGEdge * ccgEdgeIterator_getCurrent(CCGEdgeIterator *ei)
Definition: CCGSubSurf.c:1474
void * ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level)
Definition: CCGSubSurf.c:1363
int ccgSubSurf_getNumEdges(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1212
int ccgSubSurf_getNumFinalVerts(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1502
int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level)
Definition: CCGSubSurf.c:1242
CCGEdge * ccgSubSurf_getVertEdge(CCGVert *v, int index)
Definition: CCGSubSurf.c:1299
void * ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x)
Definition: CCGSubSurf.c:1359
void ccgFaceIterator_next(CCGFaceIterator *fi)
Definition: CCGSubSurf.c:1495
int ccgVertIterator_isStopped(CCGVertIterator *vi)
Definition: CCGSubSurf.c:1465
CCGVert * ccgSubSurf_getVert(CCGSubSurf *ss, CCGVertHDL v)
Definition: CCGSubSurf.c:1221
int ccgSubSurf_getEdgeNumFaces(CCGEdge *e)
Definition: CCGSubSurf.c:1336
CCGEdge * ccgSubSurf_getFaceEdge(CCGFace *f, int index)
Definition: CCGSubSurf.c:1407
int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss)
Definition: CCGSubSurf.c:1238
void * ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e)
Definition: CCGSubSurf.c:1332
int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level)
Definition: CCGSubSurf.c:1253
void * ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level)
Definition: CCGSubSurf.c:1310
CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels)
Definition: CCGSubSurf.c:366
int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e)
Definition: CCGSubSurf.c:1414
CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v)
Definition: CCGSubSurf.c:1268
void * ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
Definition: CCGSubSurf.c:1436
void * CCGAllocatorHDL
Definition: CCGSubSurf.h:42
struct CCGAllocatorIFC CCGAllocatorIFC
CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r)
Definition: CCGSubSurf.c:620
CCGFace * ccgFaceIterator_getCurrent(CCGFaceIterator *fi)
Definition: CCGSubSurf.c:1487
int ccgSubSurf_getFaceNumVerts(CCGFace *f)
Definition: CCGSubSurf.c:1396
void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r)
Definition: CCGSubSurf.c:348
int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v)
Definition: CCGSubSurf.c:1272
_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
static unsigned a[3]
Definition: RandGen.cpp:92
void(* free)(CCGAllocatorHDL a, void *ptr)
Definition: CCGSubSurf.h:47
void(* release)(CCGAllocatorHDL a)
Definition: CCGSubSurf.h:48
int numLayers
Definition: CCGSubSurf.h:35
int vertDataSize
Definition: CCGSubSurf.h:36
int simpleSubdiv
Definition: CCGSubSurf.h:37
int edgeUserSize
Definition: CCGSubSurf.h:34
int faceUserSize
Definition: CCGSubSurf.h:34
int vertUserSize
Definition: CCGSubSurf.h:34
struct _EHEntry * curEntry
Definition: CCGSubSurf.h:55
struct _EHash * eh
Definition: CCGSubSurf.h:53
PointerRNA * ptr
Definition: wm_files.c:3157