diff --git a/source/blender/editors/space_node/space_node.cc b/source/blender/editors/space_node/space_node.cc index 017c303a090..b3c38ea1c91 100644 --- a/source/blender/editors/space_node/space_node.cc +++ b/source/blender/editors/space_node/space_node.cc @@ -765,10 +765,8 @@ static void node_area_listener(const wmSpaceTypeListenerParams *params) if (wmn->reference == snode->id || snode->id == nullptr) { node_area_tag_tree_recalc(snode, area); } - /* Redraw context path if modifier was added or removed. */ - if (ELEM(wmn->action, NA_ADDED, NA_REMOVED)) { - ED_area_tag_redraw(area); - } + /* Redraw context path or modifier dependent information. */ + ED_area_tag_redraw(area); } } break; diff --git a/source/blender/makesrna/intern/rna_modifier.cc b/source/blender/makesrna/intern/rna_modifier.cc index e954ee28e52..6500cd6e590 100644 --- a/source/blender/makesrna/intern/rna_modifier.cc +++ b/source/blender/makesrna/intern/rna_modifier.cc @@ -11218,7 +11218,7 @@ void RNA_def_modifier(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Realtime", "Display modifier in viewport"); RNA_def_property_flag(prop, PROP_LIB_EXCEPTION); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); - RNA_def_property_update(prop, 0, "rna_Modifier_update"); + RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_Modifier_update"); RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1); prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/nodes/geometry/nodes/node_geo_viewer.cc b/source/blender/nodes/geometry/nodes/node_geo_viewer.cc index 4892752f556..50c46bcf69f 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_viewer.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_viewer.cc @@ -8,6 +8,8 @@ #include "BLO_read_write.hh" +#include "DNA_modifier_types.h" + #include "NOD_geo_viewer.hh" #include "NOD_node_extra_info.hh" #include "NOD_socket_items_blend.hh" @@ -228,6 +230,30 @@ static void geo_viewer_node_log_impl(const bNode &node, static void node_extra_info(NodeExtraInfoParams ¶ms) { + SpaceNode *snode = CTX_wm_space_node(¶ms.C); + if (snode) { + if (std::optional object_and_modifier = + ed::space_node::get_modifier_for_node_editor(*snode)) + { + const NodesModifierData &nmd = *object_and_modifier->nmd; + nmd.node_group->ensure_topology_cache(); + if (!(nmd.modifier.mode & eModifierMode_Realtime)) { + NodeExtraInfoRow row; + row.icon = ICON_ERROR; + row.text = TIP_("Modifier disabled"); + row.tooltip = TIP_("The viewer does not work because the modifier is disabled"); + params.rows.append(std::move(row)); + } + else if (!nmd.node_group->group_output_node()) { + NodeExtraInfoRow row; + row.icon = ICON_ERROR; + row.text = TIP_("Missing output"); + row.tooltip = TIP_( + "The viewer does not work because the node group used by the modifier has no output"); + params.rows.append(std::move(row)); + } + } + } const auto data_type = eCustomDataType(node_storage(params.node).data_type_legacy); if (ELEM(data_type, CD_PROP_QUATERNION, CD_PROP_FLOAT4X4)) { NodeExtraInfoRow row;