Blender V4.5
CCGSubSurf.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11using CCGMeshHDL = void *;
12using CCGVertHDL = void *;
13using CCGEdgeHDL = void *;
14using CCGFaceHDL = void *;
15
16struct CCGEdge;
17struct CCGFace;
18struct CCGSubSurf;
19struct CCGVert;
20
27
28/***/
29
30using CCGAllocatorHDL = void *;
31
33 void *(*alloc)(CCGAllocatorHDL a, int numBytes);
34 void *(*realloc)(CCGAllocatorHDL a, void *ptr, int newSize, int oldSize);
35 void (*free)(CCGAllocatorHDL a, void *ptr);
37};
38
39/* private, so we can allocate on the stack */
41 struct EHash *eh;
44};
45
46/***/
47
54
55/***/
56
57/* TODO(sergey): This actually depends on subsurf level as well. */
58#define CCG_TASK_LIMIT 16
59
60/***/
61
63 int subdivLevels,
64 CCGAllocatorIFC *allocatorIFC,
65 CCGAllocatorHDL allocator);
67
70#ifdef WITH_OPENSUBDIV
71CCGError ccgSubSurf_initOpenSubdivSync(CCGSubSurf *ss);
72#endif
73
75 CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r);
77 CCGEdgeHDL eHDL,
78 CCGVertHDL e_vHDL0,
79 CCGVertHDL e_vHDL1,
80 float crease,
81 CCGEdge **e_r);
83 CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r);
84
88
90
95 int lvl,
96 CCGFace **effectedF,
97 int numEffectedF);
101CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
105CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF);
110CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
115CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
116
117CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels);
118
120 int allowEdgeCreation,
121 float defaultCreaseValue,
122 void *defaultUserData);
124 int *allowEdgeCreation_r,
125 float *defaultCreaseValue_r,
126 void *defaultUserData_r);
127
129 int *useAgeCounts_r,
130 int *vertUserOffset_r,
131 int *edgeUserOffset_r,
132 int *faceUserOffset_r);
134 CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset);
135
136CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset);
137void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset);
138
139void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers);
140
141/***/
142
146
149int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level);
151int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level);
153
160
164void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level);
165
173
178void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level);
179
186
190void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
191void *ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x);
192void *ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
193void *ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y);
194
198
199/***/
200
204
208
212
216
void ccgSubSurf_initFaceIterator(CCGSubSurf *ss, CCGFaceIterator *fiter)
int ccgSubSurf_getNumFinalEdges(const CCGSubSurf *ss)
CCGFace * ccgSubSurf_getFace(CCGSubSurf *ss, CCGFaceHDL f)
int ccgSubSurf_getNumFaces(const CCGSubSurf *ss)
void ccgVertIterator_next(CCGVertIterator *vi)
int ccgSubSurf_getVertNumFaces(CCGVert *v)
int ccgSubSurf_getNumFinalFaces(const CCGSubSurf *ss)
int ccgSubSurf_getEdgeAge(CCGSubSurf *ss, CCGEdge *e)
int ccgFaceIterator_isStopped(CCGFaceIterator *fi)
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)
CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_setAllowEdgeCreation(CCGSubSurf *ss, int allowEdgeCreation, float defaultCreaseValue, void *defaultUserData)
EHashIterator CCGFaceIterator
Definition CCGSubSurf.h:202
CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
void ccgSubSurf_initEdgeIterator(CCGSubSurf *ss, CCGEdgeIterator *eiter)
void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers)
void * CCGMeshHDL
Definition CCGSubSurf.h:11
void * ccgSubSurf_getEdgeUserData(CCGSubSurf *ss, CCGEdge *e)
int ccgSubSurf_getNumVerts(const CCGSubSurf *ss)
CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
void * ccgSubSurf_getFaceUserData(CCGSubSurf *ss, CCGFace *f)
EHashIterator CCGVertIterator
Definition CCGSubSurf.h:203
void * CCGEdgeHDL
Definition CCGSubSurf.h:13
void * ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
void * ccgSubSurf_getVertData(CCGSubSurf *ss, CCGVert *v)
CCGError ccgSubSurf_syncFace(CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r)
void * ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level)
int ccgSubSurf_getSubdivisionLevels(const CCGSubSurf *ss)
CCGVert * ccgSubSurf_getEdgeVert0(CCGEdge *e)
CCGEdge * ccgSubSurf_getVertEdge(CCGVert *v, int index)
CCGError ccgSubSurf_processSync(CCGSubSurf *ss)
void * CCGVertHDL
Definition CCGSubSurf.h:12
int ccgSubSurf_getVertNumEdges(CCGVert *v)
void * ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x)
void * ccgSubSurf_getVertUserData(CCGSubSurf *ss, CCGVert *v)
CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset)
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)
void * ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level)
CCGError
Definition CCGSubSurf.h:48
@ eCCGError_None
Definition CCGSubSurf.h:49
@ eCCGError_InvalidSyncState
Definition CCGSubSurf.h:51
@ eCCGError_InvalidValue
Definition CCGSubSurf.h:52
CCGVert * ccgSubSurf_getVert(CCGSubSurf *ss, CCGVertHDL v)
int ccgSubSurf_getSimpleSubdiv(const CCGSubSurf *ss)
void * ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex)
int ccgSubSurf_getGridSize(const CCGSubSurf *ss)
CCGError ccgSubSurf_syncVertDel(CCGSubSurf *ss, CCGVertHDL vHDL)
CCGError ccgSubSurf_syncEdgeDel(CCGSubSurf *ss, CCGEdgeHDL eHDL)
float ccgSubSurf_getEdgeCrease(CCGEdge *e)
CCGFace * ccgSubSurf_getVertFace(CCGVert *v, int index)
CCGError ccgSubSurf_initPartialSync(CCGSubSurf *ss)
CCGEdgeHDL ccgSubSurf_getEdgeEdgeHandle(CCGEdge *e)
CCGVert * ccgSubSurf_getEdgeVert1(CCGEdge *e)
void ccgEdgeIterator_next(CCGEdgeIterator *ei)
void ccgSubSurf_initVertIterator(CCGSubSurf *ss, CCGVertIterator *viter)
void * CCGAllocatorHDL
Definition CCGSubSurf.h:30
void ccgSubSurf_getUseAgeCounts(CCGSubSurf *ss, int *useAgeCounts_r, int *vertUserOffset_r, int *edgeUserOffset_r, int *faceUserOffset_r)
CCGFaceHDL ccgSubSurf_getFaceFaceHandle(CCGFace *f)
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)
CCGVert * ccgVertIterator_getCurrent(CCGVertIterator *vi)
CCGError ccgSubSurf_syncFaceDel(CCGSubSurf *ss, CCGFaceHDL fHDL)
CCGEdge * ccgSubSurf_getFaceEdge(CCGFace *f, int index)
void * ccgSubSurf_getEdgeDataArray(CCGSubSurf *ss, CCGEdge *e)
int ccgSubSurf_getNumEdges(const CCGSubSurf *ss)
int ccgSubSurf_getNumFinalVerts(const CCGSubSurf *ss)
int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level)
void * ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y)
void ccgFaceIterator_next(CCGFaceIterator *fi)
int ccgVertIterator_isStopped(CCGVertIterator *vi)
CCGEdge * ccgEdgeIterator_getCurrent(CCGEdgeIterator *ei)
CCGVert * ccgSubSurf_getFaceVert(CCGFace *f, int index)
int ccgSubSurf_getEdgeNumFaces(CCGEdge *e)
int ccgSubSurf_getEdgeSize(const CCGSubSurf *ss)
EHashIterator CCGEdgeIterator
Definition CCGSubSurf.h:201
CCGEdge * ccgSubSurf_getEdge(CCGSubSurf *ss, CCGEdgeHDL e)
int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level)
CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels)
int ccgSubSurf_getFaceEdgeIndex(CCGFace *f, CCGEdge *e)
CCGVertHDL ccgSubSurf_getVertVertHandle(CCGVert *v)
CCGError ccgSubSurf_syncEdge(CCGSubSurf *ss, CCGEdgeHDL eHDL, CCGVertHDL e_vHDL0, CCGVertHDL e_vHDL1, float crease, CCGEdge **e_r)
CCGFace * ccgFaceIterator_getCurrent(CCGFaceIterator *fi)
void * ccgSubSurf_getFaceCenterData(CCGFace *f)
int ccgSubSurf_getFaceNumVerts(CCGFace *f)
void ccgSubSurf_getAllowEdgeCreation(CCGSubSurf *ss, int *allowEdgeCreation_r, float *defaultCreaseValue_r, void *defaultUserData_r)
void * ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x)
void * CCGFaceHDL
Definition CCGSubSurf.h:14
CCGFace * ccgSubSurf_getEdgeFace(CCGEdge *e, int index)
int ccgSubSurf_getVertAge(CCGSubSurf *ss, CCGVert *v)
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
void(* free)(CCGAllocatorHDL a, void *ptr)
Definition CCGSubSurf.h:35
void(* release)(CCGAllocatorHDL a)
Definition CCGSubSurf.h:36
int numLayers
Definition CCGSubSurf.h:23
int vertDataSize
Definition CCGSubSurf.h:24
int simpleSubdiv
Definition CCGSubSurf.h:25
int edgeUserSize
Definition CCGSubSurf.h:22
int faceUserSize
Definition CCGSubSurf.h:22
int vertUserSize
Definition CCGSubSurf.h:22
struct EHash * eh
Definition CCGSubSurf.h:41
struct EHEntry * curEntry
Definition CCGSubSurf.h:43
PointerRNA * ptr
Definition wm_files.cc:4226