100 #define NO_ACTIVE_LAYER ATTR_DOMAIN_AUTO
137 if (*((
bool *)rebuild)) {
159 int *node_grid_indices;
163 for (
int i = 0; i < totgrid; i++) {
164 if (
data->modified_grids[node_grid_indices[i]] == 1) {
177 const int *vert_indices;
180 if (
data->modified_mask_vertices !=
NULL) {
181 for (
int i = 0; i < verts_num; i++) {
182 if (
data->modified_mask_vertices[vert_indices[i]]) {
188 if (
data->modified_color_vertices !=
NULL) {
189 for (
int i = 0; i < verts_num; i++) {
190 if (
data->modified_color_vertices[vert_indices[i]]) {
196 if (
data->modified_hidden_vertices !=
NULL) {
197 for (
int i = 0; i < verts_num; i++) {
198 if (
data->modified_hidden_vertices[vert_indices[i]]) {
213 if (memcmp(
a,
b,
sizeof(
float[3])) != 0) {
261 index = unode->
index;
270 for (
int i = 0; i < unode->
totvert; i++) {
275 for (
int i = 0; i < unode->
totvert; i++) {
281 for (
int i = 0; i < unode->
totvert; i++) {
298 for (
int i = 0; i < unode->
totvert; i++) {
304 for (
int i = 0; i < unode->
totvert; i++) {
311 for (
int i = 0; i < unode->
totvert; i++) {
325 grids = subdiv_ccg->
grids;
330 for (
int j = 0; j < unode->
totgrid; j++) {
331 grid = grids[unode->
grids[j]];
333 for (
int i = 0; i < gridsize * gridsize; i++, co++) {
352 for (
int i = 0; i < unode->
totvert; i++) {
357 modified_vertices[unode->
index[i]] =
true;
364 for (
int i = 0; i < unode->
totgrid; i++) {
378 bool modified =
false;
396 for (
int i = 0; i < unode->
totvert; i++) {
397 modified_vertices[unode->
index[i]] =
true;
416 index = unode->
index;
419 for (
int i = 0; i < unode->
totvert; i++) {
420 if (vmask[index[i]] != unode->
mask[i]) {
421 SWAP(
float, vmask[index[i]], unode->
mask[i]);
422 modified_vertices[index[i]] =
true;
433 grids = subdiv_ccg->
grids;
438 for (
int j = 0; j < unode->
totgrid; j++) {
439 grid = grids[unode->
grids[j]];
441 for (
int i = 0; i < gridsize * gridsize; i++,
mask++) {
456 for (
int i = 0; i < me->
totpoly; i++) {
512 .use_toolflags =
false,
652 switch (unode->
type) {
706 bool update =
false,
rebuild =
false, update_mask =
false, update_visibility =
false;
707 bool need_mask =
false;
708 bool need_refine_subdiv =
false;
710 for (unode = lb->
first; unode; unode = unode->
next) {
774 char *undo_modified_grids =
NULL;
775 bool use_multires_undo =
false;
777 for (unode = lb->
first; unode; unode = unode->
next) {
796 use_multires_undo =
true;
799 switch (unode->
type) {
811 update_visibility =
true;
835 need_refine_subdiv =
true;
843 BLI_assert_msg(0,
"Dynamic topology should've already been handled");
848 if (use_multires_undo) {
849 for (unode = lb->
first; unode; unode = unode->
next) {
857 if (undo_modified_grids ==
NULL) {
861 for (
int i = 0; i < unode->
totgrid; i++) {
862 undo_modified_grids[unode->
grids[i]] = 1;
867 if (subdiv_ccg !=
NULL && need_refine_subdiv) {
872 bool tag_update =
false;
879 .modified_grids = undo_modified_grids,
892 if (update_visibility) {
938 while (unode !=
NULL) {
968 for (
int i = 0; i < unode->
totgrid; i++) {
1024 if (usculpt ==
NULL) {
1041 if (usculpt ==
NULL) {
1053 int *grid_indices, totgrid;
1056 size_t alloc_size =
sizeof(*unode->
grid_hidden) * (
size_t)totgrid;
1059 for (
int i = 0; i < totgrid; i++) {
1060 if (grid_hidden[grid_indices[i]]) {
1136 size_t alloc_size =
sizeof(int) * (
size_t)totloop;
1142 size_t alloc_size =
sizeof(*unode->
co) * (
size_t)allvert;
1148 alloc_size =
sizeof(*unode->
no) * (
size_t)allvert;
1165 const size_t alloc_size =
sizeof(*unode->
mask) * (
size_t)allvert;
1173 const size_t alloc_size =
sizeof(*unode->
col) * (
size_t)allvert;
1179 size_t alloc_size_loop =
sizeof(
float) * 4 * (
size_t)unode->
totloop;
1182 unode->
totloop,
sizeof(
float) * 4,
"SculptUndoNode.loop_col");
1190 BLI_assert_msg(0,
"Dynamic topology should've already been handled");
1202 const size_t alloc_size =
sizeof(*unode->
grids) * (
size_t)totgrid;
1210 const size_t alloc_size =
sizeof(*unode->
index) * (
size_t)allvert;
1216 const size_t alloc_size =
sizeof(*unode->
orig_co) * (
size_t)allvert;
1255 const int *vert_indices;
1260 for (
int i = 0; i < allvert; i++) {
1332 for (
int i = 0; i < me->
totpoly; i++) {
1349 if (unode ==
NULL) {
1459 int totgrid, *grids;
1461 memcpy(unode->
grids, grids,
sizeof(
int) * totgrid);
1464 const int *vert_indices, *loop_indices;
1465 int allvert, allloop;
1469 memcpy(unode->
index, vert_indices,
sizeof(
int) * allvert);
1476 memcpy(unode->
loop_index, loop_indices,
sizeof(
int) * allloop);
1499 BLI_assert_msg(0,
"Dynamic topology should've already been handled");
1524 return a->domain ==
b->domain &&
a->type ==
b->type &&
STREQ(
a->name,
b->name);
1723 const bool is_final)
1735 while ((us_iter != us) || (!is_final && us_iter == us)) {
1741 if (us_iter == us) {
1767 if (us_iter == us) {
1847 ut->
name =
"Sculpt";
1932 for (
int i = 0; i < totnodes; i++) {
typedef float(TangentPoint)[2]
Generic geometry attributes built on CustomData.
void BKE_id_attributes_active_color_set(struct ID *id, struct CustomDataLayer *active_layer)
struct CustomDataLayer * BKE_id_attribute_find(const struct ID *id, const char *name, int type, eAttrDomain domain)
struct CustomDataLayer * BKE_id_attributes_active_color_get(const struct ID *id)
eAttrDomain BKE_id_attribute_domain(const struct ID *id, const struct CustomDataLayer *layer)
struct CustomDataLayer * BKE_id_attribute_search(struct ID *id, const char *name, eCustomDataMask type, eAttrDomainMask domain_mask)
BLI_INLINE float * CCG_elem_offset_co(const CCGKey *key, CCGElem *elem, int offset)
BLI_INLINE float * CCG_elem_offset_mask(const CCGKey *key, CCGElem *elem, int offset)
struct Scene * CTX_data_scene(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct RegionView3D * CTX_wm_region_view3d(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free(struct CustomData *data, int totelem)
void CustomData_copy(const struct CustomData *source, struct CustomData *dest, eCustomDataMask mask, eCDAllocType alloctype, int totelem)
void * CustomData_add_layer_named(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem, const char *name)
void * CustomData_get_layer(const struct CustomData *data, int type)
const CustomData_MeshMasks CD_MASK_MESH
struct KeyBlock * BKE_keyblock_find_name(struct Key *key, const char name[])
struct Key * BKE_key_from_object(struct Object *ob)
float(* BKE_keyblock_convert_to_vertcos(const struct Object *ob, const struct KeyBlock *kb))[3]
void BKE_mesh_update_customdata_pointers(struct Mesh *me, bool do_ensure_tess_cd)
void BKE_mesh_flush_hidden_from_verts(struct Mesh *me)
void BKE_mesh_tag_coords_changed(struct Mesh *mesh)
void BKE_mesh_runtime_clear_cache(struct Mesh *mesh)
This function clears runtime cache of the given mesh.
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_mark_as_modified(struct Depsgraph *depsgraph, struct Object *object, enum MultiresModifiedFlags flags)
General operations, lookup, etc. for blender objects.
struct Mesh * BKE_object_get_original_mesh(const struct Object *object)
ePaintMode BKE_paintmode_get_active_from_context(const struct bContext *C)
struct MultiresModifierData * BKE_sculpt_multires_active(const struct Scene *scene, struct Object *ob)
void BKE_sculpt_update_object_for_edit(struct Depsgraph *depsgraph, struct Object *ob_orig, bool need_pmap, bool need_mask, bool is_paint_tool)
bool BKE_sculptsession_use_pbvh_draw(const struct Object *ob, const struct RegionView3D *rv3d)
void BKE_sculptsession_free_deformMats(struct SculptSession *ss)
void BKE_pbvh_node_mark_update(PBVHNode *node)
void BKE_pbvh_node_get_verts(PBVH *pbvh, PBVHNode *node, const int **r_vert_indices, struct MVert **r_verts)
#define BKE_pbvh_vertex_iter_begin(pbvh, node, vi, mode)
void BKE_pbvh_node_mark_update_visibility(PBVHNode *node)
void BKE_pbvh_node_mark_update_color(PBVHNode *node)
void BKE_pbvh_update_active_vcol(PBVH *pbvh, const struct Mesh *mesh)
void BKE_pbvh_node_num_verts(PBVH *pbvh, PBVHNode *node, int *r_uniquevert, int *r_totvert)
void BKE_pbvh_swap_colors(PBVH *pbvh, const int *indices, const int indices_num, float(*colors)[4])
void BKE_pbvh_update_visibility(PBVH *pbvh)
void BKE_pbvh_store_colors_vertex(PBVH *pbvh, const int *indices, const int indices_num, float(*colors)[4])
PBVHType BKE_pbvh_type(const PBVH *pbvh)
void BKE_pbvh_store_colors(PBVH *pbvh, const int *indices, const int indices_num, float(*colors)[4])
bool BKE_pbvh_node_has_vert_with_normal_update_tag(PBVH *pbvh, PBVHNode *node)
void BKE_pbvh_vert_coords_apply(struct PBVH *pbvh, const float(*vertCos)[3], int totvert)
void BKE_pbvh_node_get_loops(PBVH *pbvh, PBVHNode *node, const int **r_loop_indices, const struct MLoop **r_loops)
#define BKE_pbvh_vertex_iter_end
void BKE_pbvh_vert_tag_update_normal(PBVH *pbvh, int index)
struct GSet * BKE_pbvh_bmesh_node_faces(PBVHNode *node)
void BKE_pbvh_node_get_grids(PBVH *pbvh, PBVHNode *node, int **grid_indices, int *totgrid, int *maxgrid, int *gridsize, struct CCGElem ***r_griddata)
void BKE_pbvh_node_fully_hidden_set(PBVHNode *node, int fully_hidden)
void BKE_pbvh_parallel_range_settings(struct TaskParallelSettings *settings, bool use_threading, int totnode)
void BKE_pbvh_node_num_loops(PBVH *pbvh, PBVHNode *node, int *r_totloop)
void BKE_pbvh_update_vertex_data(PBVH *pbvh, int flags)
void BKE_pbvh_node_mark_update_mask(PBVHNode *node)
void BKE_pbvh_update_bounds(PBVH *pbvh, int flags)
void BKE_pbvh_search_callback(PBVH *pbvh, BKE_pbvh_SearchCallback scb, void *search_data, BKE_pbvh_HitCallback hcb, void *hit_data)
void BKE_pbvh_node_mark_redraw(PBVHNode *node)
unsigned int ** BKE_pbvh_grid_hidden(const PBVH *pbvh)
void BKE_pbvh_search_gather(PBVH *pbvh, BKE_pbvh_SearchCallback scb, void *search_data, PBVHNode ***array, int *tot)
void BKE_scene_graph_evaluated_ensure(struct Depsgraph *depsgraph, struct Main *bmain)
void BKE_subdiv_ccg_key_top_level(struct CCGKey *key, const SubdivCCG *subdiv_ccg)
bool BKE_subdiv_eval_refine_from_mesh(struct Subdiv *subdiv, const struct Mesh *mesh, const float(*coarse_vertex_cos)[3])
@ MULTIRES_HIDDEN_MODIFIED
@ MULTIRES_COORDS_MODIFIED
@ UNDOTYPE_FLAG_DECODE_ACTIVE_STEP
const UndoType * BKE_UNDOSYS_TYPE_SCULPT
UndoStep * BKE_undosys_step_push_init_with_type(UndoStack *ustack, struct bContext *C, const char *name, const UndoType *ut)
eUndoPushReturn BKE_undosys_step_push(UndoStack *ustack, struct bContext *C, const char *name)
UndoStep * BKE_undosys_stack_init_or_active_with_type(UndoStack *ustack, const UndoType *ut)
#define BKE_undosys_stack_limit_steps_and_memory_defaults(ustack)
#define BLI_assert_msg(a, msg)
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_SIZE(_num)
#define BLI_BITMAP_FLIP(_bitmap, _index)
#define BLI_BITMAP_SET(_bitmap, _index, _set)
#define GSET_ITER(gs_iter_, gset_)
BLI_INLINE void * BLI_gsetIterator_getKey(GSetIterator *gsi)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void swap_v3_v3(float a[3], float b[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
void BLI_thread_unlock(int type)
void BLI_thread_lock(int type)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
#define ID_REAL_USERS(id)
#define MAX_CUSTOMDATA_LAYER_NAME
@ ME_SCULPT_DYNAMIC_TOPOLOGY
Object is a sort of wrapper for general info.
#define OBACT(_view_layer)
void ED_object_mode_generic_exit(struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
void ED_object_sculptmode_enter_ex(struct Main *bmain, struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, bool force_dyntopo, struct ReportList *reports)
void ED_undo_push(struct bContext *C, const char *str)
struct UndoStack * ED_undo_stack_get(void)
void ED_undosys_stack_memfile_id_changed_tag(struct UndoStack *ustack, struct ID *id)
_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 type
Read Guarded memory(de)allocation.
void BM_data_layer_add(BMesh *bm, CustomData *data, int type)
void BM_log_all_added(BMesh *bm, BMLog *log)
BMLogEntry * BM_log_entry_add(BMLog *log)
void BM_log_cleanup_entry(BMLogEntry *entry)
void BM_log_face_modified(BMLog *log, BMFace *f)
void BM_log_redo(BMesh *bm, BMLog *log)
BMLog * BM_log_from_existing_entries_create(BMesh *bm, BMLogEntry *entry)
void BM_log_vert_before_modified(BMLog *log, BMVert *v, const int cd_vert_mask_offset)
void BM_log_entry_drop(BMLogEntry *entry)
void BM_log_undo(BMesh *bm, BMLog *log)
void BM_log_before_all_removed(BMesh *bm, BMLog *log)
const BMAllocTemplate bm_mesh_allocsize_default
BMesh * BM_mesh_create(const BMAllocTemplate *allocsize, const struct BMeshCreateParams *params)
ATTR_WARN_UNUSED_RESULT const BMVert * v
const Depsgraph * depsgraph
bool ED_geometry_attribute_convert(Mesh *mesh, const char *layer_name, eCustomDataType old_type, eAttrDomain old_domain, eCustomDataType new_type, eAttrDomain new_domain)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
size_t(* MEM_allocN_len)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
static void update(bNodeTree *ntree)
void SCULPT_vertcos_to_key(Object *ob, KeyBlock *kb, const float(*vertCos)[3])
void SCULPT_visibility_sync_all_vertex_to_face_sets(SculptSession *ss)
void SCULPT_update_object_bounding_box(Object *ob)
void SCULPT_visibility_sync_all_face_sets_to_vertices(Object *ob)
void SCULPT_pbvh_clear(Object *ob)
void SCULPT_dynamic_topology_disable(bContext *C, SculptUndoNode *unode)
void SCULPT_dyntopo_node_layers_add(SculptSession *ss)
struct SculptUndoNode SculptUndoNode
@ SCULPT_UNDO_DYNTOPO_SYMMETRIZE
@ SCULPT_UNDO_DYNTOPO_END
@ SCULPT_UNDO_DYNTOPO_BEGIN
static SculptUndoNodeGeometry * sculpt_undo_geometry_get(SculptUndoNode *unode)
static void sculpt_undo_restore_list(bContext *C, Depsgraph *depsgraph, ListBase *lb)
static bool sculpt_undo_restore_hidden(bContext *C, SculptUndoNode *unode, bool *modified_vertices)
static void sculpt_undosys_step_decode(struct bContext *C, struct Main *bmain, UndoStep *us_p, const eUndoStepDir dir, bool is_final)
static void sculpt_undo_geometry_restore(SculptUndoNode *unode, Object *object)
static void update_cb_partial(PBVHNode *node, void *userdata)
struct SculptAttrRef SculptAttrRef
void ED_sculpt_undo_geometry_begin(struct Object *ob, const char *name)
static void sculpt_undo_store_mask(Object *ob, SculptUndoNode *unode)
static bool sculpt_undo_restore_deformed(const SculptSession *ss, SculptUndoNode *unode, int uindex, int oindex, float coord[3])
SculptUndoNode * SCULPT_undo_get_first_node()
static void sculpt_undo_push_all_grids(Object *object)
static SculptUndoNode * sculpt_undo_face_sets_push(Object *ob, SculptUndoType type)
static bool sculpt_undo_use_multires_mesh(bContext *C)
void ED_sculpt_undo_geometry_end(struct Object *ob)
static void sculpt_undo_geometry_store_data(SculptUndoNodeGeometry *geometry, Object *object)
static SculptUndoNode * sculpt_undo_alloc_node(Object *ob, PBVHNode *node, SculptUndoType type)
static size_t sculpt_undo_alloc_and_store_hidden(PBVH *pbvh, SculptUndoNode *unode)
void SCULPT_undo_push_end(Object *ob)
void ED_sculpt_undosys_type(UndoType *ut)
static bool sculpt_attribute_ref_equals(SculptAttrRef *a, SculptAttrRef *b)
static void sculpt_undosys_step_encode_init(struct bContext *UNUSED(C), UndoStep *us_p)
static void sculpt_undo_refine_subdiv(Depsgraph *depsgraph, SculptSession *ss, Object *object, struct Subdiv *subdiv)
static bool sculpt_undo_restore_face_sets(bContext *C, SculptUndoNode *unode)
void SCULPT_undo_push_end_ex(struct Object *ob, const bool use_nested_undo)
static SculptUndoNode * sculpt_undo_alloc_node_type(Object *object, SculptUndoType type)
static void sculpt_undo_set_active_layer(struct bContext *C, SculptAttrRef *attr)
static UndoSculpt * sculpt_undosys_step_get_nodes(UndoStep *us_p)
static void sculpt_undosys_step_decode_redo(struct bContext *C, Depsgraph *depsgraph, SculptUndoStep *us)
void ED_sculpt_undo_push_multires_mesh_begin(bContext *C, const char *str)
static UndoSculpt * sculpt_undo_get_nodes(void)
static SculptUndoNode * sculpt_undo_geometry_push(Object *object, SculptUndoType type)
static bool sculpt_undo_restore_coords(bContext *C, Depsgraph *depsgraph, SculptUndoNode *unode)
static bool sculpt_undo_restore_mask(bContext *C, SculptUndoNode *unode, bool *modified_vertices)
static bool sculpt_undosys_step_encode(struct bContext *UNUSED(C), struct Main *bmain, UndoStep *us_p)
static void sculpt_undo_bmesh_enable(Object *ob, SculptUndoNode *unode)
void ED_sculpt_undo_push_multires_mesh_end(bContext *C, const char *str)
static bool sculpt_undo_restore_color(bContext *C, SculptUndoNode *unode, bool *modified_vertices)
static void sculpt_undo_store_hidden(Object *ob, SculptUndoNode *unode)
static void sculpt_undo_bmesh_restore_begin(bContext *C, SculptUndoNode *unode, Object *ob, SculptSession *ss)
static void update_cb(PBVHNode *node, void *rebuild)
SculptUndoNode * SCULPT_undo_push_node(Object *ob, PBVHNode *node, SculptUndoType type)
SculptUndoNode * SCULPT_undo_get_node(PBVHNode *node, SculptUndoType type)
static SculptUndoNode * sculpt_undo_bmesh_push(Object *ob, PBVHNode *node, SculptUndoType type)
void SCULPT_undo_push_begin(Object *ob, const char *name)
static void sculpt_undo_store_color(Object *ob, SculptUndoNode *unode)
static void sculpt_undo_geometry_restore_data(SculptUndoNodeGeometry *geometry, Object *object)
static int sculpt_undo_bmesh_restore(bContext *C, SculptUndoNode *unode, Object *ob, SculptSession *ss)
static void sculpt_undo_free_list(ListBase *lb)
static void sculpt_undosys_step_decode_redo_impl(struct bContext *C, Depsgraph *depsgraph, SculptUndoStep *us)
static SculptUndoNode * sculpt_undo_find_or_alloc_node_type(Object *object, SculptUndoType type)
static void sculpt_undosys_step_decode_undo_impl(struct bContext *C, Depsgraph *depsgraph, SculptUndoStep *us)
struct SculptUndoStep SculptUndoStep
static void sculpt_undo_bmesh_restore_end(bContext *C, SculptUndoNode *unode, Object *ob, SculptSession *ss)
static void sculpt_save_active_attribute(Object *ob, SculptAttrRef *attr)
struct UndoSculpt UndoSculpt
static void sculpt_undo_bmesh_restore_generic_task_cb(void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
static void sculpt_undosys_step_free(UndoStep *us_p)
static bool test_swap_v3_v3(float a[3], float b[3])
static void sculpt_undo_store_coords(Object *ob, SculptUndoNode *unode)
static void sculpt_undosys_step_decode_undo(struct bContext *C, Depsgraph *depsgraph, SculptUndoStep *us, const bool is_final)
static void sculpt_undo_bmesh_restore_generic(SculptUndoNode *unode, Object *ob, SculptSession *ss)
static void sculpt_undo_geometry_free_data(SculptUndoNodeGeometry *geometry)
char is_memfile_undo_flush_needed
struct SculptSession * sculpt
bool * modified_mask_vertices
bool * modified_hidden_vertices
bool * modified_color_vertices
char name[MAX_CUSTOMDATA_LAYER_NAME]
struct SubdivCCG * subdiv_ccg
struct KeyBlock * shapekey_active
struct SculptSession::@52 multires
struct MultiresModifierData * modifier
bool deform_modifiers_active
struct BMLogEntry * bm_entry
BLI_bitmap ** grid_hidden
SculptUndoNodeGeometry geometry_modified
SculptUndoNodeGeometry geometry_bmesh_enter
char shapeName[sizeof(((KeyBlock *) 0)) ->name]
SculptUndoNodeGeometry geometry_original
struct SculptUndoNode * next
SculptAttrRef active_color_start
SculptAttrRef active_color_end
BLI_bitmap ** grid_hidden
const struct UndoType * type
void(* step_decode)(struct bContext *C, struct Main *bmain, UndoStep *us, eUndoStepDir dir, bool is_final)
bool(* step_encode)(struct bContext *C, struct Main *bmain, UndoStep *us)
void(* step_encode_init)(struct bContext *C, UndoStep *us)
void(* step_free)(UndoStep *us)
bool(* poll)(struct bContext *C)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_file_tag_modified(void)