diff --git a/source/blender/blenkernel/BKE_modifier.hh b/source/blender/blenkernel/BKE_modifier.hh index 7fef8bcce0a..cec93fd0ab0 100644 --- a/source/blender/blenkernel/BKE_modifier.hh +++ b/source/blender/blenkernel/BKE_modifier.hh @@ -32,6 +32,8 @@ struct Main; struct Mesh; struct ModifierData; struct Object; +struct PointerRNA; +struct PropertyRNA; struct Scene; struct StructRNA; struct IDCacheKey; @@ -127,7 +129,11 @@ enum ModifierTypeFlag { ENUM_OPERATORS(ModifierTypeFlag, eModifierTypeFlag_AcceptsGreasePencil) using IDWalkFunc = void (*)(void *user_data, Object *ob, ID **idpoin, int cb_flag); -using TexWalkFunc = void (*)(void *user_data, Object *ob, ModifierData *md, const char *propname); +using TexWalkFunc = void (*)(void *user_data, + Object *ob, + ModifierData *md, + const PointerRNA *ptr, + PropertyRNA *texture_prop); enum ModifierApplyFlag { /** Render time. */ diff --git a/source/blender/editors/space_buttons/buttons_texture.cc b/source/blender/editors/space_buttons/buttons_texture.cc index c74b56140d0..865fe5563a5 100644 --- a/source/blender/editors/space_buttons/buttons_texture.cc +++ b/source/blender/editors/space_buttons/buttons_texture.cc @@ -20,6 +20,7 @@ #include "DNA_ID.h" #include "DNA_brush_types.h" #include "DNA_linestyle_types.h" +#include "DNA_modifier_types.h" #include "DNA_node_types.h" #include "DNA_object_force_types.h" #include "DNA_object_types.h" @@ -211,7 +212,8 @@ static void buttons_texture_modifier_geonodes_users_add( static void buttons_texture_modifier_foreach(void *user_data, Object *ob, ModifierData *md, - const char *propname) + const PointerRNA *ptr, + PropertyRNA *texture_prop) { ListBase *users = static_cast(user_data); @@ -223,13 +225,10 @@ static void buttons_texture_modifier_foreach(void *user_data, } } else { - PropertyRNA *prop; - - PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); - prop = RNA_struct_find_property(&ptr, propname); + const ModifierTypeInfo *modifier_type = BKE_modifier_get_info((ModifierType)md->type); buttons_texture_user_property_add( - users, &ob->id, ptr, prop, N_("Modifiers"), RNA_struct_ui_icon(ptr.type), md->name); + users, &ob->id, *ptr, texture_prop, N_("Modifiers"), modifier_type->icon, md->name); } } diff --git a/source/blender/modifiers/intern/MOD_displace.cc b/source/blender/modifiers/intern/MOD_displace.cc index ba60d05faff..eee9f8b031b 100644 --- a/source/blender/modifiers/intern/MOD_displace.cc +++ b/source/blender/modifiers/intern/MOD_displace.cc @@ -95,7 +95,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "texture"); + walk(user_data, ob, md, &ptr, prop); } static bool is_disabled(const Scene * /*scene*/, ModifierData *md, bool /*use_render_params*/) diff --git a/source/blender/modifiers/intern/MOD_fluid.cc b/source/blender/modifiers/intern/MOD_fluid.cc index cb93b65f983..5f612d08c52 100644 --- a/source/blender/modifiers/intern/MOD_fluid.cc +++ b/source/blender/modifiers/intern/MOD_fluid.cc @@ -24,6 +24,8 @@ #include "BKE_lib_query.hh" #include "BKE_modifier.hh" +#include "RNA_access.hh" + #include "UI_interface.hh" #include "UI_resources.hh" @@ -207,6 +209,18 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void } } +static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) +{ + FluidModifierData *fmd = (FluidModifierData *)md; + + if (fmd->type == MOD_FLUID_TYPE_FLOW && fmd->flow) { + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_FluidFlowSettings, fmd->flow); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "noise_texture"); + + walk(user_data, ob, md, &ptr, prop); + } +} + static void panel_draw(const bContext * /*C*/, Panel *panel) { uiLayout *layout = panel->layout; @@ -250,7 +264,7 @@ ModifierTypeInfo modifierType_Fluid = { /*depends_on_time*/ depends_on_time, /*depends_on_normals*/ nullptr, /*foreach_ID_link*/ foreach_ID_link, - /*foreach_tex_link*/ nullptr, + /*foreach_tex_link*/ foreach_tex_link, /*free_runtime_data*/ nullptr, /*panel_register*/ panel_register, /*blend_write*/ nullptr, diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index 10fa83428e4..6c1ef926a6a 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -277,7 +277,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "texture"); + walk(user_data, ob, md, &ptr, prop); } static bool is_disabled(const Scene * /*scene*/, ModifierData *md, bool /*use_render_params*/) diff --git a/source/blender/modifiers/intern/MOD_volume_displace.cc b/source/blender/modifiers/intern/MOD_volume_displace.cc index 357b4d60f02..3ef1f8c8b73 100644 --- a/source/blender/modifiers/intern/MOD_volume_displace.cc +++ b/source/blender/modifiers/intern/MOD_volume_displace.cc @@ -32,6 +32,7 @@ #include "RE_texture.h" +#include "RNA_access.hh" #include "RNA_prototypes.hh" #include "BLI_math_vector.h" @@ -76,7 +77,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "texture"); + walk(user_data, ob, md, &ptr, prop); } static bool depends_on_time(Scene * /*scene*/, ModifierData *md) diff --git a/source/blender/modifiers/intern/MOD_warp.cc b/source/blender/modifiers/intern/MOD_warp.cc index 97f36b12c6a..cadecbe952a 100644 --- a/source/blender/modifiers/intern/MOD_warp.cc +++ b/source/blender/modifiers/intern/MOD_warp.cc @@ -129,7 +129,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "texture"); + walk(user_data, ob, md, &ptr, prop); } static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) diff --git a/source/blender/modifiers/intern/MOD_wave.cc b/source/blender/modifiers/intern/MOD_wave.cc index ddd181d048f..5edd060273e 100644 --- a/source/blender/modifiers/intern/MOD_wave.cc +++ b/source/blender/modifiers/intern/MOD_wave.cc @@ -64,7 +64,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "texture"); + walk(user_data, ob, md, &ptr, prop); } static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.cc b/source/blender/modifiers/intern/MOD_weightvgedit.cc index 417765d5867..5cab0c78f0a 100644 --- a/source/blender/modifiers/intern/MOD_weightvgedit.cc +++ b/source/blender/modifiers/intern/MOD_weightvgedit.cc @@ -113,7 +113,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "mask_texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "mask_texture"); + walk(user_data, ob, md, &ptr, prop); } static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.cc b/source/blender/modifiers/intern/MOD_weightvgmix.cc index 76c159125b2..f08b08b48d2 100644 --- a/source/blender/modifiers/intern/MOD_weightvgmix.cc +++ b/source/blender/modifiers/intern/MOD_weightvgmix.cc @@ -29,6 +29,7 @@ #include "UI_interface.hh" #include "UI_resources.hh" +#include "RNA_access.hh" #include "RNA_prototypes.hh" #include "DEG_depsgraph_build.hh" @@ -158,7 +159,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "mask_texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "mask_texture"); + walk(user_data, ob, md, &ptr, prop); } static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx) diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.cc b/source/blender/modifiers/intern/MOD_weightvgproximity.cc index fb80d817dfb..e6612b0c92e 100644 --- a/source/blender/modifiers/intern/MOD_weightvgproximity.cc +++ b/source/blender/modifiers/intern/MOD_weightvgproximity.cc @@ -369,7 +369,9 @@ static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void static void foreach_tex_link(ModifierData *md, Object *ob, TexWalkFunc walk, void *user_data) { - walk(user_data, ob, md, "mask_texture"); + PointerRNA ptr = RNA_pointer_create(&ob->id, &RNA_Modifier, md); + PropertyRNA *prop = RNA_struct_find_property(&ptr, "mask_texture"); + walk(user_data, ob, md, &ptr, prop); } static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)