Blender V4.3
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
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15typedef void *CCGMeshHDL;
16typedef void *CCGVertHDL;
17typedef void *CCGEdgeHDL;
18typedef void *CCGFaceHDL;
19
20typedef struct CCGEdge CCGEdge;
21typedef struct CCGFace CCGFace;
22typedef struct CCGSubSurf CCGSubSurf;
23typedef struct CCGVert CCGVert;
24
31
32/***/
33
34typedef void *CCGAllocatorHDL;
35
36typedef struct CCGAllocatorIFC {
37 void *(*alloc)(CCGAllocatorHDL a, int numBytes);
38 void *(*realloc)(CCGAllocatorHDL a, void *ptr, int newSize, int oldSize);
39 void (*free)(CCGAllocatorHDL a, void *ptr);
42
43/* private, so we can allocate on the stack */
49
50/***/
51
58
59/***/
60
61/* TODO(sergey): This actually depends on subsurf level as well. */
62#define CCG_TASK_LIMIT 16
63
64/***/
65
67 int subdivLevels,
68 CCGAllocatorIFC *allocatorIFC,
69 CCGAllocatorHDL allocator);
71
74#ifdef WITH_OPENSUBDIV
75CCGError ccgSubSurf_initOpenSubdivSync(CCGSubSurf *ss);
76#endif
77
79 CCGSubSurf *ss, CCGVertHDL vHDL, const void *vertData, int seam, CCGVert **v_r);
81 CCGEdgeHDL eHDL,
82 CCGVertHDL e_vHDL0,
83 CCGVertHDL e_vHDL1,
84 float crease,
85 CCGEdge **e_r);
87 CCGSubSurf *ss, CCGFaceHDL fHDL, int numVerts, CCGVertHDL *vHDLs, CCGFace **f_r);
88
92
94
99 int lvl,
100 CCGFace **effectedF,
101 int numEffectedF);
105CCGError ccgSubSurf_updateToFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
109CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF);
114CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
119CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF);
120
121CCGError ccgSubSurf_setSubdivisionLevels(CCGSubSurf *ss, int subdivisionLevels);
122
124 int allowEdgeCreation,
125 float defaultCreaseValue,
126 void *defaultUserData);
128 int *allowEdgeCreation_r,
129 float *defaultCreaseValue_r,
130 void *defaultUserData_r);
131
133 int *useAgeCounts_r,
134 int *vertUserOffset_r,
135 int *edgeUserOffset_r,
136 int *faceUserOffset_r);
138 CCGSubSurf *ss, int useAgeCounts, int vertUserOffset, int edgeUserOffset, int faceUserOffset);
139
140CCGError ccgSubSurf_setCalcVertexNormals(CCGSubSurf *ss, int useVertNormals, int normalDataOffset);
141void ccgSubSurf_setAllocMask(CCGSubSurf *ss, int allocMask, int maskOffset);
142
143void ccgSubSurf_setNumLayers(CCGSubSurf *ss, int numLayers);
144
145/***/
146
150
153int ccgSubSurf_getEdgeLevelSize(const CCGSubSurf *ss, int level);
155int ccgSubSurf_getGridLevelSize(const CCGSubSurf *ss, int level);
157
164
168void *ccgSubSurf_getVertLevelData(CCGSubSurf *ss, CCGVert *v, int level);
169
177
181void *ccgSubSurf_getEdgeData(CCGSubSurf *ss, CCGEdge *e, int x);
182void *ccgSubSurf_getEdgeLevelData(CCGSubSurf *ss, CCGEdge *e, int x, int level);
183
190
194void *ccgSubSurf_getFaceGridEdgeDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
195void *ccgSubSurf_getFaceGridEdgeData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x);
196void *ccgSubSurf_getFaceGridDataArray(CCGSubSurf *ss, CCGFace *f, int gridIndex);
197void *ccgSubSurf_getFaceGridData(CCGSubSurf *ss, CCGFace *f, int gridIndex, int x, int y);
198
202
203/***/
204
208
212
216
220
224
225#ifdef __cplusplus
226}
227#endif
void ccgSubSurf_initFaceIterator(CCGSubSurf *ss, CCGFaceIterator *fiter)
struct _EHashIterator EHashIterator
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)
void * CCGFaceHDL
Definition CCGSubSurf.h:18
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)
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 * CCGEdgeHDL
Definition CCGSubSurf.h:17
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)
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)
struct CCGMeshIFC CCGMeshIFC
void * CCGMeshHDL
Definition CCGSubSurf.h:15
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)
void * CCGVertHDL
Definition CCGSubSurf.h:16
CCGError ccgSubSurf_processSync(CCGSubSurf *ss)
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:52
@ eCCGError_None
Definition CCGSubSurf.h:53
@ eCCGError_InvalidSyncState
Definition CCGSubSurf.h:55
@ eCCGError_InvalidValue
Definition CCGSubSurf.h:56
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 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)
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)
void * CCGAllocatorHDL
Definition CCGSubSurf.h:34
struct CCGAllocatorIFC CCGAllocatorIFC
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)
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:39
void(* release)(CCGAllocatorHDL a)
Definition CCGSubSurf.h:40
int numLayers
Definition CCGSubSurf.h:27
int vertDataSize
Definition CCGSubSurf.h:28
int simpleSubdiv
Definition CCGSubSurf.h:29
int edgeUserSize
Definition CCGSubSurf.h:26
int faceUserSize
Definition CCGSubSurf.h:26
int vertUserSize
Definition CCGSubSurf.h:26
struct _EHEntry * curEntry
Definition CCGSubSurf.h:47
struct _EHash * eh
Definition CCGSubSurf.h:45
PointerRNA * ptr
Definition wm_files.cc:4126