From 1c503b4fb3a57a9abd32ae0fc8ff18e8afd3722f Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 11 Apr 2023 15:12:09 -0400 Subject: [PATCH] Fix #106138: Node add searches missing context-based poll Before the add node search refactor and link-drag-search, nodes were filtered out based on whether they worked with the active render engine. For example, the Principled Hair BSDF node doesn't work with EEVEE, so it isn't displayed in the UI. While we might want to relax this in the future, we have no better way to show that they don't work right now, so it's best to keep that behavior. The filtering is implemented with a new node type callback, mainly to reduce the boilerplate of implementing many node search callbacks otherwise. It's also relatively clear this way I think. The only downside is that now there are three poll functions. I didn't port the "eevee_cycles_shader_nodes_poll" to the new searches, since I don't understand the purpose of it. --- source/blender/blenkernel/BKE_node.h | 6 +++ .../editors/space_node/add_node_search.cc | 5 ++- .../editors/space_node/link_drag_search.cc | 3 ++ source/blender/nodes/NOD_add_node_search.hh | 11 ++++- .../blender/nodes/shader/node_shader_util.cc | 40 +++++++++++++++++++ .../blender/nodes/shader/node_shader_util.hh | 5 +++ .../shader/nodes/node_shader_background.cc | 1 + .../nodes/node_shader_bsdf_anisotropic.cc | 1 + .../shader/nodes/node_shader_bsdf_diffuse.cc | 1 + .../shader/nodes/node_shader_bsdf_glass.cc | 1 + .../shader/nodes/node_shader_bsdf_glossy.cc | 1 + .../shader/nodes/node_shader_bsdf_hair.cc | 1 + .../nodes/node_shader_bsdf_hair_principled.cc | 1 + .../nodes/node_shader_bsdf_principled.cc | 1 + .../nodes/node_shader_bsdf_refraction.cc | 1 + .../shader/nodes/node_shader_bsdf_toon.cc | 1 + .../nodes/node_shader_bsdf_translucent.cc | 1 + .../nodes/node_shader_bsdf_transparent.cc | 1 + .../shader/nodes/node_shader_bsdf_velvet.cc | 1 + .../nodes/node_shader_eevee_specular.cc | 1 + .../nodes/shader/nodes/node_shader_holdout.cc | 1 + .../shader/nodes/node_shader_output_light.cc | 1 + .../nodes/node_shader_output_linestyle.cc | 1 + .../nodes/node_shader_output_material.cc | 1 + .../shader/nodes/node_shader_output_world.cc | 1 + .../shader/nodes/node_shader_shader_to_rgb.cc | 1 + .../node_shader_subsurface_scattering.cc | 1 + .../nodes/node_shader_uv_along_stroke.cc | 1 + 28 files changed, 89 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index 3039334b8f8..03cec560682 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -298,6 +298,12 @@ typedef struct bNodeType { void (*freefunc_api)(struct PointerRNA *ptr); void (*copyfunc_api)(struct PointerRNA *ptr, const struct bNode *src_node); + /** + * An additional poll test for deciding whether nodes should be an option in search menus. + * Potentially more strict poll than #poll(), but doesn't have to check the same things. + */ + bool (*add_ui_poll)(const struct bContext *C); + /** * Can this node type be added to a node tree? * \param r_disabled_hint: Hint to display in the UI when the poll fails. diff --git a/source/blender/editors/space_node/add_node_search.cc b/source/blender/editors/space_node/add_node_search.cc index c0ba8cd998e..8cf72e19652 100644 --- a/source/blender/editors/space_node/add_node_search.cc +++ b/source/blender/editors/space_node/add_node_search.cc @@ -161,11 +161,14 @@ static void gather_add_node_operations(const bContext &C, if (!(node_type->poll && node_type->poll(node_type, &node_tree, &disabled_hint))) { continue; } + if (!(node_type->add_ui_poll && node_type->add_ui_poll(&C))) { + continue; + } if (!node_type->gather_add_node_search_ops) { continue; } Vector info_items; - nodes::GatherAddNodeSearchParams params(*node_type, node_tree, info_items); + nodes::GatherAddNodeSearchParams params(C, *node_type, node_tree, info_items); node_type->gather_add_node_search_ops(params); for (nodes::AddNodeInfo &info : info_items) { AddNodeItem item{}; diff --git a/source/blender/editors/space_node/link_drag_search.cc b/source/blender/editors/space_node/link_drag_search.cc index ae0261a57b9..124fca9ee56 100644 --- a/source/blender/editors/space_node/link_drag_search.cc +++ b/source/blender/editors/space_node/link_drag_search.cc @@ -288,6 +288,9 @@ static void gather_socket_link_operations(const bContext &C, if (!(node_type->poll && node_type->poll(node_type, &node_tree, &disabled_hint))) { continue; } + if (!(node_type->add_ui_poll && node_type->add_ui_poll(&C))) { + continue; + } if (StringRefNull(node_type->ui_name).endswith("(Legacy)")) { continue; } diff --git a/source/blender/nodes/NOD_add_node_search.hh b/source/blender/nodes/NOD_add_node_search.hh index b5b21cfe0d0..0fa5395a33c 100644 --- a/source/blender/nodes/NOD_add_node_search.hh +++ b/source/blender/nodes/NOD_add_node_search.hh @@ -25,18 +25,25 @@ struct AddNodeInfo { }; class GatherAddNodeSearchParams { + const bContext &C_; const bNodeType &node_type_; const bNodeTree &node_tree_; Vector &r_items; public: - GatherAddNodeSearchParams(const bNodeType &node_type, + GatherAddNodeSearchParams(const bContext &C, + const bNodeType &node_type, const bNodeTree &node_tree, Vector &r_items) - : node_type_(node_type), node_tree_(node_tree), r_items(r_items) + : C_(C), node_type_(node_type), node_tree_(node_tree), r_items(r_items) { } + const bContext &context() const + { + return C_; + } + const bNodeTree &node_tree() const { return node_tree_; diff --git a/source/blender/nodes/shader/node_shader_util.cc b/source/blender/nodes/shader/node_shader_util.cc index a47934bda39..a16f5545a66 100644 --- a/source/blender/nodes/shader/node_shader_util.cc +++ b/source/blender/nodes/shader/node_shader_util.cc @@ -6,7 +6,9 @@ */ #include "DNA_node_types.h" +#include "DNA_space_types.h" +#include "BKE_context.h" #include "BKE_node_runtime.hh" #include "node_shader_util.hh" @@ -14,6 +16,8 @@ #include "NOD_add_node_search.hh" #include "NOD_socket_search_link.hh" +#include "RE_engine.h" + #include "node_exec.h" bool sh_node_poll_default(const bNodeType * /*ntype*/, @@ -56,6 +60,42 @@ void sh_fn_node_type_base(bNodeType *ntype, int type, const char *name, short nc ntype->gather_add_node_search_ops = blender::nodes::search_node_add_ops_for_basic_node; } +bool line_style_shader_nodes_poll(const bContext *C) +{ + const SpaceNode *snode = CTX_wm_space_node(C); + return snode->shaderfrom == SNODE_SHADER_LINESTYLE; +} + +bool world_shader_nodes_poll(const bContext *C) +{ + const SpaceNode *snode = CTX_wm_space_node(C); + return snode->shaderfrom == SNODE_SHADER_WORLD; +} + +bool object_shader_nodes_poll(const bContext *C) +{ + const SpaceNode *snode = CTX_wm_space_node(C); + return snode->shaderfrom == SNODE_SHADER_OBJECT; +} + +bool object_cycles_shader_nodes_poll(const bContext *C) +{ + if (!object_shader_nodes_poll(C)) { + return false; + } + const RenderEngineType *engine_type = CTX_data_engine_type(C); + return STREQ(engine_type->idname, "CYCLES"); +} + +bool object_eevee_shader_nodes_poll(const bContext *C) +{ + if (!object_shader_nodes_poll(C)) { + return false; + } + const RenderEngineType *engine_type = CTX_data_engine_type(C); + return STREQ(engine_type->idname, "BLENDER_EEVEE"); +} + /* ****** */ static void nodestack_get_vec(float *in, short type_in, bNodeStack *ns) diff --git a/source/blender/nodes/shader/node_shader_util.hh b/source/blender/nodes/shader/node_shader_util.hh index 46454fe645e..6ebfd441405 100644 --- a/source/blender/nodes/shader/node_shader_util.hh +++ b/source/blender/nodes/shader/node_shader_util.hh @@ -68,6 +68,11 @@ bool sh_node_poll_default(const struct bNodeType *ntype, const char **r_disabled_hint); void sh_node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass); void sh_fn_node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass); +bool line_style_shader_nodes_poll(const struct bContext *C); +bool world_shader_nodes_poll(const struct bContext *C); +bool object_shader_nodes_poll(const struct bContext *C); +bool object_cycles_shader_nodes_poll(const struct bContext *C); +bool object_eevee_shader_nodes_poll(const struct bContext *C); /* ********* exec data struct, remains internal *********** */ diff --git a/source/blender/nodes/shader/nodes/node_shader_background.cc b/source/blender/nodes/shader/nodes/node_shader_background.cc index 7ac6b63e7c8..b360f585c89 100644 --- a/source/blender/nodes/shader/nodes/node_shader_background.cc +++ b/source/blender/nodes/shader/nodes/node_shader_background.cc @@ -33,6 +33,7 @@ void register_node_type_sh_background() sh_node_type_base(&ntype, SH_NODE_BACKGROUND, "Background", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = world_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_background; nodeRegisterType(&ntype); diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.cc index f80f99dc174..f28c31d0288 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.cc @@ -67,6 +67,7 @@ void register_node_type_sh_bsdf_anisotropic() sh_node_type_base(&ntype, SH_NODE_BSDF_ANISOTROPIC, "Anisotropic BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_cycles_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_anisotropic; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.initfunc = file_ns::node_shader_init_anisotropic; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.cc index 21978c0da02..ba0ccb21720 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.cc @@ -44,6 +44,7 @@ void register_node_type_sh_bsdf_diffuse() sh_node_type_base(&ntype, SH_NODE_BSDF_DIFFUSE, "Diffuse BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_diffuse; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc index 52ffacf22d5..f243ccd3e41 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.cc @@ -56,6 +56,7 @@ void register_node_type_sh_bsdf_glass() sh_node_type_base(&ntype, SH_NODE_BSDF_GLASS, "Glass BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.initfunc = file_ns::node_shader_init_glass; ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_glass; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.cc index 4352a9b4a71..c2a4d1d3501 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.cc @@ -55,6 +55,7 @@ void register_node_type_sh_bsdf_glossy() sh_node_type_base(&ntype, SH_NODE_BSDF_GLOSSY, "Glossy BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.initfunc = file_ns::node_shader_init_glossy; ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_glossy; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.cc index 8e127350e5a..b167fb979e2 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair.cc @@ -56,6 +56,7 @@ void register_node_type_sh_bsdf_hair() sh_node_type_base(&ntype, SH_NODE_BSDF_HAIR, "Hair BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_cycles_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_hair; node_type_size(&ntype, 150, 60, 200); ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_hair; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.cc index 3c4b6ae5ee9..3712c53d2a3 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_hair_principled.cc @@ -127,6 +127,7 @@ void register_node_type_sh_bsdf_hair_principled() sh_node_type_base( &ntype, SH_NODE_BSDF_HAIR_PRINCIPLED, "Principled Hair BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_cycles_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_principled_hair; node_type_size_preset(&ntype, NODE_SIZE_LARGE); ntype.initfunc = file_ns::node_shader_init_hair_principled; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc index f0fcc82d4c1..8cb4e3ad632 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.cc @@ -245,6 +245,7 @@ void register_node_type_sh_bsdf_principled() sh_node_type_base(&ntype, SH_NODE_BSDF_PRINCIPLED, "Principled BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_principled; node_type_size_preset(&ntype, NODE_SIZE_LARGE); ntype.initfunc = file_ns::node_shader_init_principled; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.cc index 18352f1132a..21cfe4eb6af 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_refraction.cc @@ -54,6 +54,7 @@ void register_node_type_sh_bsdf_refraction() sh_node_type_base(&ntype, SH_NODE_BSDF_REFRACTION, "Refraction BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.initfunc = file_ns::node_shader_init_refraction; ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_refraction; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.cc index c45e497c8e0..adc02379926 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.cc @@ -57,6 +57,7 @@ void register_node_type_sh_bsdf_toon() sh_node_type_base(&ntype, SH_NODE_BSDF_TOON, "Toon BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_cycles_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_toon; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_toon; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.cc index ebaf95056cc..2d5ea718e11 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.cc @@ -39,6 +39,7 @@ void register_node_type_sh_bsdf_translucent() sh_node_type_base(&ntype, SH_NODE_BSDF_TRANSLUCENT, "Translucent BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_translucent; nodeRegisterType(&ntype); diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.cc index 05b371407ab..9eb11a66ef7 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.cc @@ -34,6 +34,7 @@ void register_node_type_sh_bsdf_transparent() static bNodeType ntype; sh_node_type_base(&ntype, SH_NODE_BSDF_TRANSPARENT, "Transparent BSDF", NODE_CLASS_SHADER); + ntype.add_ui_poll = object_shader_nodes_poll; ntype.declare = file_ns::node_declare; ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_transparent; diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.cc b/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.cc index 36bd1031db3..2df2de229db 100644 --- a/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.cc +++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.cc @@ -43,6 +43,7 @@ void register_node_type_sh_bsdf_velvet() static bNodeType ntype; sh_node_type_base(&ntype, SH_NODE_BSDF_VELVET, "Velvet BSDF", NODE_CLASS_SHADER); + ntype.add_ui_poll = object_cycles_shader_nodes_poll; ntype.declare = file_ns::node_declare; ntype.gpu_fn = file_ns::node_shader_gpu_bsdf_velvet; diff --git a/source/blender/nodes/shader/nodes/node_shader_eevee_specular.cc b/source/blender/nodes/shader/nodes/node_shader_eevee_specular.cc index d8e341f2b2e..67b9a873a49 100644 --- a/source/blender/nodes/shader/nodes/node_shader_eevee_specular.cc +++ b/source/blender/nodes/shader/nodes/node_shader_eevee_specular.cc @@ -80,6 +80,7 @@ void register_node_type_sh_eevee_specular() sh_node_type_base(&ntype, SH_NODE_EEVEE_SPECULAR, "Specular BSDF", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_eevee_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_eevee_specular; nodeRegisterType(&ntype); diff --git a/source/blender/nodes/shader/nodes/node_shader_holdout.cc b/source/blender/nodes/shader/nodes/node_shader_holdout.cc index f5d8f9b5548..b8e4ef38e72 100644 --- a/source/blender/nodes/shader/nodes/node_shader_holdout.cc +++ b/source/blender/nodes/shader/nodes/node_shader_holdout.cc @@ -30,6 +30,7 @@ void register_node_type_sh_holdout() static bNodeType ntype; sh_node_type_base(&ntype, SH_NODE_HOLDOUT, "Holdout", NODE_CLASS_SHADER); + ntype.add_ui_poll = object_shader_nodes_poll; ntype.declare = file_ns::node_declare; ntype.gpu_fn = file_ns::gpu_shader_rgb; diff --git a/source/blender/nodes/shader/nodes/node_shader_output_light.cc b/source/blender/nodes/shader/nodes/node_shader_output_light.cc index 81cc1e35820..b55eeb13afa 100644 --- a/source/blender/nodes/shader/nodes/node_shader_output_light.cc +++ b/source/blender/nodes/shader/nodes/node_shader_output_light.cc @@ -37,6 +37,7 @@ void register_node_type_sh_output_light() sh_node_type_base(&ntype, SH_NODE_OUTPUT_LIGHT, "Light Output", NODE_CLASS_OUTPUT); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_cycles_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_output_light; ntype.no_muting = true; diff --git a/source/blender/nodes/shader/nodes/node_shader_output_linestyle.cc b/source/blender/nodes/shader/nodes/node_shader_output_linestyle.cc index 475dc9d1e17..6e7dd1cef30 100644 --- a/source/blender/nodes/shader/nodes/node_shader_output_linestyle.cc +++ b/source/blender/nodes/shader/nodes/node_shader_output_linestyle.cc @@ -49,6 +49,7 @@ void register_node_type_sh_output_linestyle() sh_node_type_base(&ntype, SH_NODE_OUTPUT_LINESTYLE, "Line Style Output", NODE_CLASS_OUTPUT); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = line_style_shader_nodes_poll; ntype.draw_buttons = file_ns::node_buts_output_linestyle; ntype.no_muting = true; diff --git a/source/blender/nodes/shader/nodes/node_shader_output_material.cc b/source/blender/nodes/shader/nodes/node_shader_output_material.cc index f8fa02b23fc..dde3f4e95c7 100644 --- a/source/blender/nodes/shader/nodes/node_shader_output_material.cc +++ b/source/blender/nodes/shader/nodes/node_shader_output_material.cc @@ -53,6 +53,7 @@ void register_node_type_sh_output_material() sh_node_type_base(&ntype, SH_NODE_OUTPUT_MATERIAL, "Material Output", NODE_CLASS_OUTPUT); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_output_material; ntype.no_muting = true; diff --git a/source/blender/nodes/shader/nodes/node_shader_output_world.cc b/source/blender/nodes/shader/nodes/node_shader_output_world.cc index 52737b2fc6b..fbca98f660a 100644 --- a/source/blender/nodes/shader/nodes/node_shader_output_world.cc +++ b/source/blender/nodes/shader/nodes/node_shader_output_world.cc @@ -40,6 +40,7 @@ void register_node_type_sh_output_world() sh_node_type_base(&ntype, SH_NODE_OUTPUT_WORLD, "World Output", NODE_CLASS_OUTPUT); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = world_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_output_world; ntype.no_muting = true; diff --git a/source/blender/nodes/shader/nodes/node_shader_shader_to_rgb.cc b/source/blender/nodes/shader/nodes/node_shader_shader_to_rgb.cc index 815671b8284..bf8fbf6bcf7 100644 --- a/source/blender/nodes/shader/nodes/node_shader_shader_to_rgb.cc +++ b/source/blender/nodes/shader/nodes/node_shader_shader_to_rgb.cc @@ -34,6 +34,7 @@ void register_node_type_sh_shadertorgb() sh_node_type_base(&ntype, SH_NODE_SHADERTORGB, "Shader to RGB", NODE_CLASS_CONVERTER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_eevee_shader_nodes_poll; ntype.gpu_fn = file_ns::node_shader_gpu_shadertorgb; nodeRegisterType(&ntype); diff --git a/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.cc b/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.cc index 94fcdb73c78..3278907b9b8 100644 --- a/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.cc +++ b/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.cc @@ -87,6 +87,7 @@ void register_node_type_sh_subsurface_scattering() sh_node_type_base( &ntype, SH_NODE_SUBSURFACE_SCATTERING, "Subsurface Scattering", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = object_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_subsurface; node_type_size_preset(&ntype, NODE_SIZE_MIDDLE); ntype.initfunc = file_ns::node_shader_init_subsurface_scattering; diff --git a/source/blender/nodes/shader/nodes/node_shader_uv_along_stroke.cc b/source/blender/nodes/shader/nodes/node_shader_uv_along_stroke.cc index 4a3aed67b11..738b0cf488c 100644 --- a/source/blender/nodes/shader/nodes/node_shader_uv_along_stroke.cc +++ b/source/blender/nodes/shader/nodes/node_shader_uv_along_stroke.cc @@ -29,6 +29,7 @@ void register_node_type_sh_uvalongstroke() sh_node_type_base(&ntype, SH_NODE_UVALONGSTROKE, "UV Along Stroke", NODE_CLASS_INPUT); ntype.declare = file_ns::node_declare; + ntype.add_ui_poll = line_style_shader_nodes_poll; ntype.draw_buttons = file_ns::node_shader_buts_uvalongstroke; nodeRegisterType(&ntype); -- 2.30.2