35#include "RNA_prototypes.hh"
100 walk(user_data, ob, md, &
ptr, prop);
112 bool need_transform_relation =
false;
117 need_transform_relation =
true;
126 need_transform_relation =
true;
129 need_transform_relation =
true;
133 if (need_transform_relation) {
163 float weight = data->weight;
164 int defgrp_index = data->defgrp_index;
165 int direction = data->direction;
166 bool use_global_direction = data->use_global_direction;
167 float(*tex_co)[3] = data->tex_co;
169 float(*vert_clnors)[3] = data->vert_clnors;
172 const float delta_fixed = 1.0f - dmd->
midlevel;
182 if (weight == 0.0f) {
187 if (data->tex_target) {
200 CLAMP(delta, -10000, 10000);
204 if (use_global_direction) {
205 positions[iter][0] += delta * data->local_mat[0][0];
206 positions[iter][1] += delta * data->local_mat[1][0];
207 positions[iter][2] += delta * data->local_mat[2][0];
210 positions[iter][0] += delta;
214 if (use_global_direction) {
215 positions[iter][0] += delta * data->local_mat[0][1];
216 positions[iter][1] += delta * data->local_mat[1][1];
217 positions[iter][2] += delta * data->local_mat[2][1];
220 positions[iter][1] += delta;
224 if (use_global_direction) {
225 positions[iter][0] += delta * data->local_mat[0][2];
226 positions[iter][1] += delta * data->local_mat[1][2];
227 positions[iter][2] += delta * data->local_mat[2][2];
230 positions[iter][2] += delta;
237 if (use_global_direction) {
244 madd_v3_v3fl(positions[iter], data->vert_normals[iter], delta);
247 madd_v3_v3fl(positions[iter], vert_clnors[iter], delta);
263 float(*vert_clnors)[3] =
nullptr;
264 float local_mat[4][4] = {{0}};
276 if (defgrp_index >= 0 && dvert ==
nullptr) {
282 if (tex_target !=
nullptr) {
284 size_t(positions.size()),
sizeof(*tex_co),
"displaceModifier_do tex_co"));
289 reinterpret_cast<float(*)[3]
>(positions.data()),
300 vert_clnors =
static_cast<float(*)[3]
>(
304 mesh->corner_verts().data(),
306 reinterpret_cast<const float(*)[3]
>(mesh->corner_normals().data()),
314 use_global_direction)
316 copy_m4_m4(local_mat, ob->object_to_world().ptr());
323 data.weight = weight;
324 data.defgrp_index = defgrp_index;
325 data.direction = direction;
326 data.use_global_direction = use_global_direction;
327 data.tex_target = tex_target;
328 data.tex_co = tex_co;
329 data.positions = positions;
332 data.vert_normals = mesh->vert_normals();
334 data.vert_clnors = vert_clnors;
335 if (tex_target !=
nullptr) {
341 settings.use_threading = (positions.size() > 512);
344 if (data.pool !=
nullptr) {
381 uiTemplateID(layout, C,
ptr,
"texture",
"texture.new",
nullptr,
nullptr);
395 "texture_coords_bone",
396 &texture_coords_obj_data_ptr,
438 "DisplaceModifierData",
440 &RNA_DisplaceModifier,
CustomData interface, see also DNA_customdata_types.h.
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
void BKE_image_pool_free(ImagePool *pool)
ImagePool * BKE_image_pool_new(void)
void BKE_mesh_normals_loop_to_vertex(int numVerts, const int *corner_verts, int numLoops, const float(*clnors)[3], float(*r_vert_clnors)[3])
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
void(*)(void *user_data, Object *ob, ModifierData *md, const PointerRNA *ptr, PropertyRNA *texture_prop) TexWalkFunc
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void(*)(void *user_data, Object *ob, ID **idpoin, int cb_flag) IDWalkFunc
bool BKE_texture_dependsOnTime(const struct Tex *texture)
void BKE_texture_fetch_images_for_pool(struct Tex *texture, struct ImagePool *pool)
void BKE_texture_get_value_ex(struct Tex *texture, const float *tex_co, struct TexResult *texres, struct ImagePool *pool, bool use_color_management)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
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)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void DEG_add_generic_id_relation(DepsNodeHandle *node_handle, ID *id, const char *description)
void DEG_add_depends_on_transform_relation(DepsNodeHandle *node_handle, const char *description)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
#define CD_MASK_MDEFORMVERT
#define CD_MASK_CUSTOMLOOPNORMAL
#define DNA_struct_default_get(struct_name)
struct DisplaceModifierData DisplaceModifierData
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
static void displaceModifier_do(DisplaceModifierData *dmd, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void deform_verts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions)
static void panel_register(ARegionType *region_type)
static void displaceModifier_do_task(void *__restrict userdata, const int iter, const TaskParallelTLS *__restrict)
static bool depends_on_time(Scene *, ModifierData *md)
static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data)
static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
ModifierTypeInfo modifierType_Displace
static void panel_draw(const bContext *C, Panel *panel)
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 modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const char *vgroup_prop, const char *invert_vgroup_prop, const char *text)
void MOD_init_texture(MappingInfoModifierData *dmd, const ModifierEvalContext *ctx)
void MOD_depsgraph_update_object_bone_relation(DepsNodeHandle *node, Object *object, const char *bonename, const char *description)
void MOD_get_vgroup(const Object *ob, const Mesh *mesh, const char *name, const MDeformVert **dvert, int *defgrp_index)
void MOD_get_texture_coords(MappingInfoModifierData *dmd, const ModifierEvalContext *, Object *ob, Mesh *mesh, float(*cos)[3], float(*r_texco)[3])
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
void uiItemPointerR(uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *searchptr, const char *searchpropname, const char *name, int icon)
void uiTemplateID(uiLayout *layout, const bContext *C, PointerRNA *ptr, const char *propname, const char *newop, const char *openop, const char *unlinkop, int filter=UI_TEMPLATE_ID_FILTER_ALL, bool live_icon=false, const char *text=nullptr)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
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_malloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_pointer_is_null(const PointerRNA *ptr)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct Object * map_object
const MDeformVert * dvert
bool use_global_direction
blender::MutableSpan< blender::float3 > positions
DisplaceModifierData * dmd
blender::Span< blender::float3 > vert_normals