38#include "RNA_prototypes.hh"
78 if (runtime_data_v ==
nullptr) {
82 if (runtime_data->
subdiv !=
nullptr) {
97 if (runtime_data ==
nullptr) {
114 runtime_data->
subdiv, subdiv_settings, mesh);
115 runtime_data->
subdiv = subdiv;
139 ignore_control_edges);
160 const int level =
multires_get_level(scene,
object, mmd, use_render_params, ignore_simplify);
161 settings->resolution = (1 << level) + 1;
162 settings->need_normal =
true;
163 settings->need_mask = has_mask;
184 runtime_data->
subdiv =
nullptr;
192#if !defined(WITH_OPENSUBDIV)
199 if (subdiv_settings.
level == 0) {
204 if (subdiv ==
nullptr) {
222 result->runtime->subdiv_ccg_tot_level = mmd->
totlvl;
230 sculpt_session->
subdiv_ccg = result->runtime->subdiv_ccg.get();
241 memcpy(data, mesh->corner_normals().data(), mesh->corner_normals().size_in_bytes());
247 float(*corner_normals)[3] =
static_cast<float(*)[3]
>(
253 if (subdiv != runtime_data->
subdiv) {
267#if !defined(WITH_OPENSUBDIV)
276 if (subdiv_settings.
level == 0) {
288 if (subdiv ==
nullptr) {
294 if (subdiv != runtime_data->
subdiv) {
349 "OBJECT_OT_multires_subdivide",
361 "OBJECT_OT_multires_subdivide",
371 "OBJECT_OT_multires_subdivide",
383 uiItemO(layout,
IFACE_(
"Unsubdivide"), ICON_NONE,
"OBJECT_OT_multires_unsubdivide");
384 uiItemO(layout,
IFACE_(
"Delete Higher"), ICON_NONE,
"OBJECT_OT_multires_higher_levels_delete");
398 uiItemO(row,
IFACE_(
"Reshape"), ICON_NONE,
"OBJECT_OT_multires_reshape");
399 uiItemO(row,
IFACE_(
"Apply Base"), ICON_NONE,
"OBJECT_OT_multires_base_apply");
414 layout,
IFACE_(
"Rebuild Subdivisions"), ICON_NONE,
"OBJECT_OT_multires_rebuild_subdiv");
420 uiItemO(row,
IFACE_(
"Pack External"), ICON_NONE,
"OBJECT_OT_multires_external_pack");
426 uiItemO(
col,
IFACE_(
"Save External..."), ICON_NONE,
"OBJECT_OT_multires_external_save");
469 "MultiresModifierData",
471 &RNA_MultiresModifier,
Object * CTX_data_active_object(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free_layers(CustomData *data, eCustomDataType type, int totelem)
void * CustomData_get_layer_for_write(CustomData *data, eCustomDataType type, int totelem)
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
void * CustomData_add_layer(CustomData *data, eCustomDataType type, eCDAllocType alloctype, int totelem)
void BKE_mesh_set_custom_normals_normalized(Mesh *mesh, float(*r_custom_loop_normals)[3])
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_RequiresOriginalData
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
@ MOD_APPLY_IGNORE_SIMPLIFY
void BKE_multires_subdiv_settings_init(blender::bke::subdiv::Settings *settings, const MultiresModifierData *mmd)
@ MULTIRES_SUBDIVIDE_LINEAR
@ MULTIRES_SUBDIVIDE_CATMULL_CLARK
@ MULTIRES_SUBDIVIDE_SIMPLE
void BKE_multires_subdiv_mesh_settings_init(blender::bke::subdiv::ToMeshSettings *mesh_settings, const Scene *scene, const Object *object, const MultiresModifierData *mmd, bool use_render_params, bool ignore_simplify, bool ignore_control_edges)
int multires_get_level(const Scene *scene, const Object *ob, const MultiresModifierData *mmd, bool render, bool ignore_simplify)
Mesh * BKE_subdiv_to_ccg_mesh(blender::bke::subdiv::Subdiv &subdiv, const SubdivToCCGSettings &settings, const Mesh &coarse_mesh)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
Scene * DEG_get_evaluated_scene(const 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 init_data(ModifierData *md)
static void generate_panel_draw(const bContext *, Panel *panel)
static blender::bke::subdiv::Subdiv * subdiv_descriptor_ensure(MultiresModifierData *mmd, const blender::bke::subdiv::Settings *subdiv_settings, const Mesh *mesh)
static void panel_register(ARegionType *region_type)
static void free_runtime_data(void *runtime_data_v)
static Mesh * multires_as_ccg(MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh, blender::bke::subdiv::Subdiv *subdiv)
static void copy_data(const ModifierData *md_src, ModifierData *md_dst, const int flag)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
ModifierTypeInfo modifierType_Multires
static void free_data(ModifierData *md)
static Mesh * multires_as_mesh(MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh, blender::bke::subdiv::Subdiv *subdiv)
static void shape_panel_draw(const bContext *, Panel *panel)
static void advanced_panel_draw(const bContext *, Panel *panel)
static void subdivisions_panel_draw(const bContext *, Panel *panel)
static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
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 deform_matrices(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions, blender::MutableSpan< blender::float3x3 >)
static void panel_draw(const bContext *C, Panel *panel)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiLayoutSetEnabled(uiLayout *layout, bool enabled)
void UI_block_lock_clear(uiBlock *block)
void uiItemFullO(uiLayout *layout, const char *opname, const char *name, int icon, IDProperty *properties, wmOperatorCallContext context, eUI_Item_Flag flag, PointerRNA *r_opptr)
uiBlock * uiLayoutGetBlock(uiLayout *layout)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
void uiItemO(uiLayout *layout, const char *name, int icon, const char *opname)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void UI_block_lock_set(uiBlock *block, bool val, const char *lockstr)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
draw_view in_light_buf[] float
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void displacement_attach_from_multires(Subdiv *subdiv, Mesh *mesh, const MultiresModifierData *mmd)
void free(Subdiv *subdiv)
void deform_coarse_vertices(Subdiv *subdiv, const Mesh *coarse_mesh, MutableSpan< float3 > vert_positions)
Mesh * subdiv_to_mesh(Subdiv *subdiv, const ToMeshSettings *settings, const Mesh *coarse_mesh)
Subdiv * update_from_mesh(Subdiv *subdiv, const Settings *settings, const Mesh *mesh)
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)
blender::bke::subdiv::Subdiv * subdiv
struct SculptSession * sculpt
struct SculptSession::@48 multires
MultiresModifierData * modifier