39 #include "RNA_prototypes.h"
92 if (runtime_data_v ==
NULL) {
111 if (runtime_data ==
NULL) {
112 runtime_data =
MEM_callocN(
sizeof(*runtime_data),
"subsurf runtime");
126 runtime_data->
subdiv = subdiv;
150 ignore_control_edges);
172 settings->resolution = (1 << level) + 1;
203 #if !defined(WITH_OPENSUBDIV)
210 if (subdiv_settings.
level == 0) {
215 if (subdiv ==
NULL) {
272 if (subdiv != runtime_data->
subdiv) {
282 float (*vertex_cos)[3],
283 float (*deform_matrices)[3][3],
287 #if !defined(WITH_OPENSUBDIV)
293 (
void)deform_matrices;
299 if (subdiv_settings.
level == 0) {
311 if (subdiv ==
NULL) {
317 if (subdiv != runtime_data->
subdiv) {
342 uiItemR(layout,
ptr,
"show_only_control_edges", 0,
NULL, ICON_NONE);
372 "OBJECT_OT_multires_subdivide",
384 "OBJECT_OT_multires_subdivide",
394 "OBJECT_OT_multires_subdivide",
406 uiItemO(layout,
IFACE_(
"Unsubdivide"), ICON_NONE,
"OBJECT_OT_multires_unsubdivide");
407 uiItemO(layout,
IFACE_(
"Delete Higher"), ICON_NONE,
"OBJECT_OT_multires_higher_levels_delete");
421 uiItemO(row,
IFACE_(
"Reshape"), ICON_NONE,
"OBJECT_OT_multires_reshape");
422 uiItemO(row,
IFACE_(
"Apply Base"), ICON_NONE,
"OBJECT_OT_multires_base_apply");
437 layout,
IFACE_(
"Rebuild Subdivisions"), ICON_NONE,
"OBJECT_OT_multires_rebuild_subdiv");
443 uiItemO(row,
IFACE_(
"Pack External"), ICON_NONE,
"OBJECT_OT_multires_external_pack");
449 uiItemO(
col,
IFACE_(
"Save External..."), ICON_NONE,
"OBJECT_OT_multires_external_save");
491 "MultiresModifierData",
493 &RNA_MultiresModifier,
typedef float(TangentPoint)[2]
struct Object * CTX_data_active_object(const bContext *C)
void CustomData_clear_layer_flag(struct CustomData *data, int type, int flag)
bool CustomData_has_layer(const struct CustomData *data, int type)
void * CustomData_get_layer(const struct CustomData *data, int type)
void CustomData_set_layer_flag(struct CustomData *data, int type, int flag)
void BKE_mesh_calc_normals_split(struct Mesh *mesh)
void BKE_mesh_set_custom_normals(struct Mesh *mesh, float(*r_custom_loopnors)[3])
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_RequiresOriginalData
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, int flag)
@ eModifierTypeType_Constructive
void BKE_modifier_set_error(const struct Object *ob, struct ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
@ MOD_APPLY_IGNORE_SIMPLIFY
void BKE_multires_subdiv_settings_init(struct SubdivSettings *settings, const struct MultiresModifierData *mmd)
int multires_get_level(const struct Scene *scene, const struct Object *ob, const struct MultiresModifierData *mmd, bool render, bool ignore_simplify)
void BKE_multires_subdiv_mesh_settings_init(struct SubdivToMeshSettings *mesh_settings, const struct Scene *scene, const struct Object *object, const struct MultiresModifierData *mmd, bool use_render_params, bool ignore_simplify, bool ignore_control_edges)
@ MULTIRES_SUBDIVIDE_LINEAR
@ MULTIRES_SUBDIVIDE_CATMULL_CLARK
@ MULTIRES_SUBDIVIDE_SIMPLE
void BKE_subdiv_free(Subdiv *subdiv)
void BKE_subdiv_displacement_attach_from_multires(Subdiv *subdiv, struct Mesh *mesh, const struct MultiresModifierData *mmd)
Subdiv * BKE_subdiv_update_from_mesh(Subdiv *subdiv, const SubdivSettings *settings, const struct Mesh *mesh)
struct Mesh * BKE_subdiv_to_ccg_mesh(struct Subdiv *subdiv, const SubdivToCCGSettings *settings, const struct Mesh *coarse_mesh)
struct Mesh * BKE_subdiv_to_mesh(struct Subdiv *subdiv, const SubdivToMeshSettings *settings, const struct Mesh *coarse_mesh)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
#define CD_MASK_CUSTOMLOOPNORMAL
#define DNA_struct_default_get(struct_name)
@ eMultiresModifierFlag_UseSculptBaseMesh
@ eMultiresModifierFlag_UseCustomNormals
struct MultiresModifierData MultiresModifierData
Object is a sort of wrapper for general info.
@ UI_PANEL_DATA_EXPAND_ROOT
@ UI_SUBPANEL_DATA_EXPAND_1
Read Guarded memory(de)allocation.
static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag)
static void subdivisions_panel_draw(const bContext *UNUSED(C), Panel *panel)
static Mesh * modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static Mesh * multires_as_mesh(MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh, Subdiv *subdiv)
static Subdiv * subdiv_descriptor_ensure(MultiresModifierData *mmd, const SubdivSettings *subdiv_settings, const Mesh *mesh)
static bool dependsOnNormals(ModifierData *md)
static void freeRuntimeData(void *runtime_data_v)
ModifierTypeInfo modifierType_Multires
static void advanced_panel_draw(const bContext *UNUSED(C), Panel *panel)
struct MultiresRuntimeData MultiresRuntimeData
static void deformMatrices(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertex_cos)[3], float(*deform_matrices)[3][3], int verts_num)
static Mesh * multires_as_ccg(MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh, Subdiv *subdiv)
static void generate_panel_draw(const bContext *UNUSED(C), Panel *panel)
static void multires_ccg_settings_init(SubdivToCCGSettings *settings, const MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh)
static MultiresRuntimeData * multires_ensure_runtime(MultiresModifierData *mmd)
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
static void freeData(ModifierData *md)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void panel_draw(const bContext *C, Panel *panel)
static void shape_panel_draw(const bContext *UNUSED(C), Panel *panel)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
void uiLayoutSetActive(uiLayout *layout, bool active)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
void uiLayoutSetEnabled(uiLayout *layout, bool enabled)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void UI_block_lock_clear(uiBlock *block)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, struct IDProperty *properties, wmOperatorCallContext context, int flag, struct PointerRNA *r_opptr)
void UI_block_lock_set(uiBlock *block, bool val, const char *lockstr)
SyclQueue void void size_t num_bytes void
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct Depsgraph * depsgraph
struct SculptSession * sculpt
struct SubdivCCG * subdiv_ccg
struct SculptSession::@52 multires
struct MultiresModifierData * modifier