11 #define DNA_DEPRECATED_ALLOW
51 0, 4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409};
53 0, 2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097};
103 int yh, xh, xl, yl, xo, yo, hi_ndx;
109 if (lo_level == hi_level) {
116 offset = 1 << (hi_level - lo_level - 1);
119 for (yl = 0; yl < lo_gridsize; yl++) {
120 for (xl = 0; xl < lo_gridsize; xl++) {
125 yh = yl * factor + yo;
126 if (yh < 0 || yh >= hi_gridsize) {
131 xh = xl * factor + xo;
132 if (xh < 0 || xh >= hi_gridsize) {
136 hi_ndx = yh * hi_gridsize + xh;
142 if (lo_val != prev_hidden[hi_ndx]) {
167 int x,
y, factor, old_value;
173 for (
y = 0;
y < new_gridsize;
y++) {
174 for (
x = 0;
x < new_gridsize;
x++) {
193 for (i = 0; i < me->
totpoly; i++) {
195 int g = gridOffset[i] + j;
215 if (md->
level >= new_level) {
236 .object = object_eval,
243 if (
result == deformed_mesh) {
252 int *r_num_deformed_verts))[3]
257 Object object_for_eval = *object_eval;
258 object_for_eval.
data =
object->data;
270 &virtual_modifier_data);
272 Mesh *base_mesh =
object->data;
274 int num_deformed_verts;
280 if (md == &mmd->modifier) {
293 md, &mesh_eval_context, base_mesh, deformed_verts, num_deformed_verts);
296 if (r_num_deformed_verts !=
NULL) {
297 *r_num_deformed_verts = num_deformed_verts;
299 return deformed_verts;
306 for (md = lastmd; md; md = md->
prev) {
336 if (!mmd && use_first) {
349 bool ignore_simplify)
358 if (ignore_simplify) {
389 if (
object ==
NULL) {
402 if (subdiv_ccg ==
NULL) {
421 if (subdiv_ccg ==
NULL) {
449 object->sculpt->pbvh =
NULL;
470 int i, j, totlvl = 0;
474 for (i = 0; i < me->
totpoly; i++) {
483 int side = (1 << (totlvl - 1)) + 1;
484 int lvl_totdisp = side * side;
485 if (md->
totdisp == lvl_totdisp) {
488 if (md->
totdisp < lvl_totdisp) {
529 for (i = 0; i < me->
totloop; i++, mdisps++) {
541 for (i = 0; i < totloop; i++) {
545 if (mdisps[i].disps) {
549 if (mdisps[i].level && mdisps[i].hidden) {
553 mdisps[i].
disps = disps;
555 mdisps[i].
level = lvl;
564 skip = (sizeA - 1) / (sizeB - 1);
566 for (j = 0,
y = 0;
y < sizeB;
y++) {
567 for (
x = 0;
x < sizeB;
x++, j++) {
568 copy_v3_v3(gridA[
y * skip * sizeA +
x * skip], gridB[j]);
573 skip = (sizeB - 1) / (sizeA - 1);
575 for (j = 0,
y = 0;
y < sizeA;
y++) {
576 for (
x = 0;
x < sizeA;
x++, j++) {
577 copy_v3_v3(gridA[j], gridB[
y * skip * sizeB +
x * skip]);
615 if (level < gpm->level) {
618 square_i(gridsize),
sizeof(
float),
"multires_grid_paint_mask_downsample");
621 for (
y = 0;
y < gridsize;
y++) {
622 for (
x = 0;
x < gridsize;
x++) {
636 int levels = mmd->
totlvl - lvl;
647 if (mdisps && levels > 0) {
654 for (i = 0; i < me->
totpoly; i++) {
658 float(*disps)[3], (*ndisps)[3], (*hdisps)[3];
665 hdisps = mdisp->
disps;
677 mdisp->
disps = disps;
702 int levels = mmd->
totlvl - lvl;
711 if (mdisps && levels > 0 && direction == 1) {
723 bool alloc_paint_mask,
734 if (alloc_paint_mask) {
748 bool alloc_paint_mask,
772 if (alloc_paint_mask) {
798 else if (axis == 1) {
855 int dSkip = tdata->
dSkip;
857 const int numVerts = mpoly[pidx].
totloop;
858 int S,
x,
y, gIndex = gridOffset[pidx];
860 for (S = 0; S < numVerts; S++, gIndex++) {
863 CCGElem *grid = gridData[gIndex];
864 CCGElem *subgrid = subGridData[gIndex];
867 dispgrid = mdisp->
disps;
878 for (
y = 0;
y < gridSize;
y++) {
879 for (
x = 0;
x < gridSize;
x++) {
882 float *
data = dispgrid[dGridSize *
y * dSkip +
x * dSkip];
883 float mat[3][3], disp[3], d[3],
mask;
940 CCGElem **gridData, **subGridData;
946 int i, gridSize, dGridSize, dSkip;
947 int totloop, totpoly;
975 subGridData = (oldGridData) ? oldGridData : gridData;
978 dSkip = (dGridSize - 1) / (gridSize - 1);
986 for (i = 0; i < totloop; i++) {
987 if (mdisps[i].disps ==
NULL) {
999 .gridData = gridData,
1000 .subGridData = subGridData,
1004 .grid_paint_mask = grid_paint_mask,
1005 .gridOffset = gridOffset,
1006 .gridSize = gridSize,
1007 .dGridSize = dGridSize,
1040 CCGElem **highGridData, **lowGridData, **subGridData, **gridData, *diffGrid;
1041 CCGKey highGridKey, lowGridKey;
1043 int i, j, numGrids, highGridSize, lowGridSize;
1083 for (i = 0; i < numGrids; i++) {
1086 highGridKey.
elem_size, highGridSize * highGridSize,
"subGridData");
1088 subGridData[i], highGridData[i], highGridKey.
elem_size * highGridSize * highGridSize);
1091 for (j = 0; j < lowGridSize * lowGridSize; j++) {
1113 for (i = 0; i < numGrids; i++) {
1158 for (i = 0; i < me->
totloop; i++) {
1184 if (sculpt_session ==
NULL) {
1189 if (pbvh ==
NULL || subdiv_ccg ==
NULL) {
1211 CCGElem **gridData, **subGridData;
1216 int i, gridSize, numGrids;
1253 for (i = 0; i < numGrids; i++) {
1255 memcpy(subGridData[i], gridData[i], key.
elem_size * gridSize * gridSize);
1269 for (i = 0; i < numGrids; i++) {
1280 const int st_max =
st - 1;
1281 float urat, vrat, uopp;
1282 float d[4][3], d2[2][3];
1361 if (mmd_src && mmd_dst) {
1371 MDisps *grid = &mdisps[i];
1372 for (
int j = 0; j < grid->
totdisp; j++) {
1381 const float smat[3][3])
1411 int side = (1 << (lvl - 1)) + 1;
1412 if ((s->
totdisp % (side * side)) == 0) {
1413 return s->
totdisp / (side * side);
1436 float smat[3][3], tmat[3][3], mat[3][3];
1461 for (i = 0; i < me->
totloop; i++, cur++) {
1469 for (i = 0; i < me->
totloop; i++, mdisp++) {
1489 if (mdisps ==
NULL) {
1495 for (
int i = 0; i < totloop; ++i) {
1496 if (mdisps[i].level != top_level) {
1505 mdisps[i].
level = top_level;
1518 struct MPoly *mpoly,
1521 const int face_side,
1527 const float offset = face_side * 0.5f - 0.5f;
1540 else if (u <= offset && v >=
offset) {
1561 else if (mpoly->
totloop == 3) {
1563 float w = (face_side - 1) - u -
v;
1566 if (u >=
v && u >=
w) {
1571 else if (
v >= u &&
v >=
w) {
1582 W1 /= (face_side - 1);
1583 W2 /= (face_side - 1);
1585 *
x = (1 - (2 * W1) / (1 - W2)) * grid_size;
1586 *
y = (1 - (2 * W2) / (1 - W1)) * grid_size;
1595 float mindist = FLT_MAX;
1597 for (i = 0; i < mpoly->
totloop; i++) {
1599 if (
len < mindist) {
typedef float(TangentPoint)[2]
void DM_set_only_copy(DerivedMesh *dm, const struct CustomData_MeshMasks *mask)
BLI_INLINE float * CCG_grid_elem_co(const CCGKey *key, CCGElem *elem, int x, int y)
BLI_INLINE float * CCG_grid_elem_no(const CCGKey *key, CCGElem *elem, int x, int y)
BLI_INLINE float * CCG_elem_offset_co(const CCGKey *key, CCGElem *elem, int offset)
BLI_INLINE float * CCG_grid_elem_mask(const CCGKey *key, CCGElem *elem, int x, int y)
struct DerivedMesh * CDDM_from_mesh(struct Mesh *mesh)
bool CustomData_free_layer_active(struct CustomData *data, int type, int totelem)
bool CustomData_has_layer(const struct CustomData *data, int type)
const CustomData_MeshMasks CD_MASK_BAREMESH
void CustomData_external_reload(struct CustomData *data, struct ID *id, eCustomDataMask mask, int totelem)
void * CustomData_get_layer(const struct CustomData *data, int type)
bool CustomData_external_test(struct CustomData *data, int type)
void * CustomData_add_layer(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem)
void CustomData_external_read(struct CustomData *data, struct ID *id, eCustomDataMask mask, int totelem)
void CustomData_external_remove(struct CustomData *data, struct ID *id, int type, int totelem)
struct Mesh * BKE_mesh_copy_for_eval(const struct Mesh *source, bool reference)
struct Mesh * BKE_mesh_from_object(struct Object *ob)
float(* BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3]
struct Mesh * mesh_get_eval_deform(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, const struct CustomData_MeshMasks *dataMask)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
void BKE_modifier_deform_verts(ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *me, float(*vertexCos)[3], int numVerts)
struct ModifierData * BKE_modifiers_get_virtual_modifierlist(const struct Object *ob, struct VirtualModifierData *data)
@ eModifierTypeType_OnlyDeform
@ MOD_APPLY_IGNORE_SIMPLIFY
bool multiresModifier_reshapeFromCCG(int tot_level, struct Mesh *coarse_mesh, struct SubdivCCG *subdiv_ccg)
@ MULTIRES_USE_RENDER_PARAMS
@ MULTIRES_ALLOC_PAINT_MASK
@ MULTIRES_IGNORE_SIMPLIFY
@ MULTIRES_SUBDIVIDE_CATMULL_CLARK
void multiresModifier_subdivide_to_level(struct Object *object, struct MultiresModifierData *mmd, int top_level, eMultiresSubdivideModeType mode)
General operations, lookup, etc. for blender objects.
void BKE_object_scale_to_mat3(struct Object *ob, float r_mat[3][3])
float paint_grid_paint_mask(const struct GridPaintMask *gpm, uint level, uint x, uint y)
A BVH for high poly meshes.
void BKE_pbvh_get_grid_updates(PBVH *pbvh, bool clear, void ***r_gridfaces, int *r_totface)
void BKE_pbvh_free(PBVH *pbvh)
PBVHType BKE_pbvh_type(const PBVH *pbvh)
int get_render_subsurf_level(const struct RenderData *r, int lvl, bool for_render)
void BKE_subdiv_ccg_average_stitch_faces(SubdivCCG *subdiv_ccg, struct CCGFace **effected_faces, int num_effected_faces)
int BKE_ccg_gridsize(int level)
@ MULTIRES_HIDDEN_MODIFIED
@ MULTIRES_COORDS_MODIFIED
struct DerivedMesh * subsurf_make_derived_from_derived(struct DerivedMesh *dm, struct SubsurfModifierData *smd, const struct Scene *scene, float(*vertCos)[3], SubsurfFlags flags)
@ SUBSURF_ALLOC_PAINT_MASK
@ SUBSURF_USE_RENDER_PARAMS
@ SUBSURF_IGNORE_SIMPLIFY
int BKE_ccg_factor(int low_level, int high_level)
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_SET(_bitmap, _index, _set)
MINLINE int square_i(int a)
bool is_uniform_scaled_m3(const float mat[3][3])
float mat3_to_scale(const float M[3][3])
bool invert_m3(float R[3][3])
void mul_v3_m3v3(float r[3], const float M[3][3], const float a[3])
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4])
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
CCGError ccgSubSurf_updateFromFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEffectedF)
CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, int numEffectedF)
struct Depsgraph Depsgraph
eEvaluationMode DEG_get_mode(const Depsgraph *graph)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
@ eMultiresModifierFlag_ControlEdges
@ eSubsurfModifierFlag_ControlEdges
@ SUBSURF_UV_SMOOTH_PRESERVE_BOUNDARIES
Object is a sort of wrapper for general info.
_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
_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 GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble x2
_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 GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
Read Guarded memory(de)allocation.
void BM_data_layer_free(BMesh *bm, CustomData *data, int type)
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
const Depsgraph * depsgraph
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
static void multires_copy_grid(float(*gridA)[3], float(*gridB)[3], int sizeA, int sizeB)
void multires_modifier_update_mdisps(struct DerivedMesh *dm, Scene *scene)
void multires_force_external_reload(Object *object)
static void multires_output_hidden_to_ccgdm(CCGDerivedMesh *ccgdm, Mesh *me, int level)
static const int multires_grid_tot[]
static void multires_grid_paint_mask_downsample(GridPaintMask *gpm, int level)
DerivedMesh * multires_make_derived_from_derived(DerivedMesh *dm, MultiresModifierData *mmd, Scene *scene, Object *ob, MultiresFlags flags)
static void multires_sync_levels(Scene *scene, Object *ob_src, Object *ob_dst)
void multiresModifier_sync_levels_ex(Object *ob_dst, MultiresModifierData *mmd_src, MultiresModifierData *mmd_dst)
MultiresModifierData * find_multires_modifier_before(Scene *scene, ModifierData *lastmd)
static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, CCGElem **oldGridData, int totlvl)
static void grid_tangent_matrix(float mat[3][3], const CCGKey *key, int x, int y, CCGElem *grid)
static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
void multiresModifier_del_levels(MultiresModifierData *mmd, Scene *scene, Object *ob, int direction)
static void multires_ccg_mark_as_modified(SubdivCCG *subdiv_ccg, MultiresModifiedFlags flags)
static DerivedMesh * multires_dm_create_local(Scene *scene, Object *ob, DerivedMesh *dm, int lvl, int totlvl, bool alloc_paint_mask, int flags)
static void grid_tangent(const CCGKey *key, int x, int y, int axis, CCGElem *grid, float t[3])
static void multires_apply_smat(struct Depsgraph *UNUSED(depsgraph), Scene *scene, Object *object, const float smat[3][3])
static void multires_mdisps_subdivide_hidden(MDisps *md, int new_level)
static DerivedMesh * subsurf_dm_create_local(Scene *scene, Object *ob, DerivedMesh *dm, int lvl, bool is_simple, bool is_optimal, bool is_plain_uv, bool alloc_paint_mask, bool for_render, SubsurfFlags flags)
void multires_flush_sculpt_updates(Object *object)
MultiresModifierData * get_multires_modifier(Scene *scene, Object *ob, bool use_first)
void old_mdisps_bilinear(float out[3], float(*disps)[3], const int st, float u, float v)
static const int multires_side_tot[]
static int get_levels_from_disps(Object *ob)
struct MultiresThreadedData MultiresThreadedData
void multires_stitch_grids(Object *ob)
void multiresModifier_ensure_external_read(struct Mesh *mesh, const MultiresModifierData *mmd)
Mesh * BKE_multires_create_mesh(struct Depsgraph *depsgraph, Object *object, MultiresModifierData *mmd)
static void multires_apply_uniform_scale(Object *object, const float scale)
static BLI_bitmap * multires_mdisps_upsample_hidden(BLI_bitmap *lo_hidden, int lo_level, int hi_level, const BLI_bitmap *prev_hidden)
int mdisp_rot_face_to_crn(struct MVert *UNUSED(mvert), struct MPoly *mpoly, struct MLoop *UNUSED(mloop), const struct MLoopTri *UNUSED(lt), const int face_side, const float u, const float v, float *x, float *y)
void multires_mark_as_modified(Depsgraph *depsgraph, Object *object, MultiresModifiedFlags flags)
static BLI_bitmap * multires_mdisps_downsample_hidden(const BLI_bitmap *old_hidden, int old_level, int new_level)
void multiresModifier_set_levels_from_disps(MultiresModifierData *mmd, Object *ob)
void multires_ensure_external_read(struct Mesh *mesh, int top_level)
float(* BKE_multires_create_deformed_base_mesh_vert_coords(struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, int *r_num_deformed_verts))[3]
void multires_topology_changed(Mesh *me)
void multiresModifier_scale_disp(struct Depsgraph *depsgraph, Scene *scene, Object *ob)
static void multires_set_tot_mdisps(Mesh *me, int lvl)
int multires_mdisp_corners(const MDisps *s)
void multires_force_sculpt_rebuild(Object *object)
void multires_modifier_update_hidden(DerivedMesh *dm)
void multires_set_tot_level(Object *ob, MultiresModifierData *mmd, int lvl)
static void multires_copy_dm_grid(CCGElem *gridA, CCGElem *gridB, CCGKey *keyA, CCGKey *keyB)
static void multires_reallocate_mdisps(int totloop, MDisps *mdisps, int lvl)
int multires_get_level(const Scene *scene, const Object *ob, const MultiresModifierData *mmd, bool render, bool ignore_simplify)
void multires_customdata_delete(Mesh *me)
void multiresModifier_prepare_join(struct Depsgraph *depsgraph, Scene *scene, Object *ob, Object *to_ob)
static void multires_disp_run_cb(void *__restrict userdata, const int pidx, const TaskParallelTLS *__restrict UNUSED(tls))
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
static const pxr::TfToken g("g", pxr::TfToken::Immortal)
struct CCGDerivedMesh::@74 multires
struct MultiresModifierData * mmd
MultiresModifiedFlags modified_flags
unsigned int ** gridHidden
int(* getGridSize)(DerivedMesh *dm)
struct CCGElem **(* getGridData)(DerivedMesh *dm)
int(* getNumGrids)(DerivedMesh *dm)
void(* getGridKey)(DerivedMesh *dm, struct CCGKey *key)
void(* release)(DerivedMesh *dm)
int *(* getGridOffset)(DerivedMesh *dm)
struct SubdivCCG * subdiv_ccg
struct BMEditMesh * edit_mesh
struct ModifierData * next
struct ModifierData * prev
struct Depsgraph * depsgraph
struct Mesh *(* modifyMesh)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh)
GridPaintMask * grid_paint_mask
struct SculptSession * sculpt
struct SubdivCCG * subdiv_ccg
struct MeshElemMap * pmap
struct SculptSession::@52 multires
struct MultiresModifierData * modifier
struct SubdivCCG::@69 dirty