Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Porces <cmporces>2019-03-16 20:48:22 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-03-16 22:36:35 +0300
commit9e152f919f2f86cbe3530c6adc34373ebc703904 (patch)
treee3434b83601c03e659b4a1bfd4ae5027f58fa3f5 /source/blender/nodes
parent5797a5fc65c87b69460d910a82d219b5e3ea12ad (diff)
Python API: add Python-defined node groups for shaders and compositing.
This was already supported for Cycles shader nodes, but now also works for Eevee and compositing nodes. Instead of a generic NodeCustomGroup, now there is ShaderNodeCustomGroup and CompositorNodeCustomGroup that can be subclassed and registered. Differential Revision: https://developer.blender.org/D4370
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/NOD_composite.h2
-rw-r--r--source/blender/nodes/NOD_shader.h2
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_common.c6
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c7
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_common.c8
5 files changed, 22 insertions, 3 deletions
diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h
index 1e43b5011e6..85f4c81610b 100644
--- a/source/blender/nodes/NOD_composite.h
+++ b/source/blender/nodes/NOD_composite.h
@@ -136,4 +136,6 @@ void node_cmp_rlayers_outputs(struct bNodeTree *ntree, struct bNode *node);
void node_cmp_rlayers_register_pass(struct bNodeTree *ntree, struct bNode *node, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int type);
const char *node_cmp_rlayers_sock_to_pass(int sock_index);
+void register_node_type_cmp_custom_group(bNodeType *ntype);
+
#endif
diff --git a/source/blender/nodes/NOD_shader.h b/source/blender/nodes/NOD_shader.h
index e88f7a49d30..9e6fa0706d1 100644
--- a/source/blender/nodes/NOD_shader.h
+++ b/source/blender/nodes/NOD_shader.h
@@ -131,4 +131,6 @@ void register_node_type_sh_tex_checker(void);
void register_node_type_sh_bump(void);
void register_node_type_sh_tex_ies(void);
+void register_node_type_sh_custom_group(bNodeType *ntype);
+
#endif
diff --git a/source/blender/nodes/composite/nodes/node_composite_common.c b/source/blender/nodes/composite/nodes/node_composite_common.c
index 9d72335d720..f9a6961c47b 100644
--- a/source/blender/nodes/composite/nodes/node_composite_common.c
+++ b/source/blender/nodes/composite/nodes/node_composite_common.c
@@ -56,3 +56,9 @@ void register_node_type_cmp_group(void)
nodeRegisterType(&ntype);
}
+
+void register_node_type_cmp_custom_group(bNodeType *ntype)
+{
+ ntype->insert_link = node_insert_link_default;
+ ntype->update_internal_links = node_update_internal_links_default;
+}
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 50bec047222..a4356dabfc0 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -290,7 +290,7 @@ static bNode *ntree_shader_output_node_from_group(bNodeTree *ntree, int target)
/* Search if node groups do not contain valid output nodes (recursively). */
for (bNode *node = ntree->nodes.first; node; node = node->next) {
- if (!ELEM(node->type, NODE_GROUP)) {
+ if (!ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) {
continue;
}
if (node->id != NULL) {
@@ -453,7 +453,7 @@ static void ntree_shader_groups_expand_inputs(bNodeTree *localtree)
for (group_node = localtree->nodes.first; group_node; group_node = group_node->next) {
- if (group_node->type != NODE_GROUP || group_node->id == NULL)
+ if (!(ELEM(group_node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) || group_node->id == NULL)
continue;
/* Do it recursively. */
@@ -674,7 +674,7 @@ static void ntree_shader_link_builtin_normal(bNodeTree *ntree,
/* Don't connect node itself! */
continue;
}
- if (node->type == NODE_GROUP && node->id) {
+ if ((ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) && node->id) {
/* Special re-linking for group nodes. */
ntree_shader_link_builtin_group_normal(ntree,
node,
@@ -765,6 +765,7 @@ static bool ntree_tag_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *user
switch (fromnode->type) {
case NODE_GROUP:
+ case NODE_CUSTOM_GROUP:
/* Recursive */
if (fromnode->id != NULL) {
bNodeTree *ntree = (bNodeTree *)fromnode->id;
diff --git a/source/blender/nodes/shader/nodes/node_shader_common.c b/source/blender/nodes/shader/nodes/node_shader_common.c
index c238a3d946d..0c2b8d939f5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_common.c
+++ b/source/blender/nodes/shader/nodes/node_shader_common.c
@@ -239,3 +239,11 @@ void register_node_type_sh_group(void)
nodeRegisterType(&ntype);
}
+
+void register_node_type_sh_custom_group(bNodeType *ntype)
+{
+ ntype->insert_link = node_insert_link_default;
+ ntype->update_internal_links = node_update_internal_links_default;
+ node_type_exec(ntype, group_initexec, group_freeexec, group_execute);
+ node_type_gpu(ntype, gpu_group_execute);
+}