[Bf-blender-cvs] [1291e369f95] temp-attribute-processor: initial attribute nodes

Jacques Lucke noreply at git.blender.org
Thu May 27 12:51:40 CEST 2021


Commit: 1291e369f9523fd94d330fc701446ae2c2b74353
Author: Jacques Lucke
Date:   Mon May 24 15:29:27 2021 +0200
Branches: temp-attribute-processor
https://developer.blender.org/rB1291e369f9523fd94d330fc701446ae2c2b74353

initial attribute nodes

===================================================================

M	source/blender/blenkernel/intern/node.cc
M	source/blender/editors/include/ED_node.h
M	source/blender/editors/space_node/drawnode.c
M	source/blender/editors/space_node/node_edit.c
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/CMakeLists.txt
M	source/blender/nodes/NOD_geometry.h
A	source/blender/nodes/geometry/node_attribute_tree.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 643dc58af18..8b8534a588d 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5106,6 +5106,7 @@ void BKE_node_system_init(void)
   register_node_tree_type_sh();
   register_node_tree_type_tex();
   register_node_tree_type_geo();
+  register_node_tree_type_attr();
 
   register_node_type_frame();
   register_node_type_reroute();
diff --git a/source/blender/editors/include/ED_node.h b/source/blender/editors/include/ED_node.h
index 67a50b83bd6..99610b6082c 100644
--- a/source/blender/editors/include/ED_node.h
+++ b/source/blender/editors/include/ED_node.h
@@ -101,6 +101,7 @@ bool ED_node_is_compositor(struct SpaceNode *snode);
 bool ED_node_is_shader(struct SpaceNode *snode);
 bool ED_node_is_texture(struct SpaceNode *snode);
 bool ED_node_is_geometry(struct SpaceNode *snode);
+bool ED_node_is_attribute(struct SpaceNode *snode);
 
 void ED_node_shader_default(const struct bContext *C, struct ID *id);
 void ED_node_composit_default(const struct bContext *C, struct Scene *scene);
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 6b4366b2966..d74523ea73f 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -3306,6 +3306,7 @@ void ED_node_init_butfuncs(void)
   ntreeType_Shader->ui_icon = ICON_NODE_MATERIAL;
   ntreeType_Texture->ui_icon = ICON_NODE_TEXTURE;
   ntreeType_Geometry->ui_icon = ICON_NODETREE;
+  ntreeType_Attribute->ui_icon = ICON_NONE;
 }
 
 void ED_init_custom_node_type(bNodeType *ntype)
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 50fa8b28468..a3b8f2f0a28 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -466,6 +466,11 @@ bool ED_node_is_geometry(struct SpaceNode *snode)
   return STREQ(snode->tree_idname, ntreeType_Geometry->idname);
 }
 
+bool ED_node_is_attribute(struct SpaceNode *snode)
+{
+  return STREQ(snode->tree_idname, ntreeType_Attribute->idname);
+}
+
 /* assumes nothing being done in ntree yet, sets the default in/out node */
 /* called from shading buttons or header */
 void ED_node_shader_default(const bContext *C, ID *id)
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 58c94b6f369..2ae5dcae6de 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -519,6 +519,7 @@ typedef struct bNodeTree {
 #define NTREE_COMPOSIT 1
 #define NTREE_TEXTURE 2
 #define NTREE_GEOMETRY 3
+#define NTREE_ATTRIBUTE 4
 
 /* ntree->init, flag */
 #define NTREE_TYPE_INIT 1
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 379e3e77b6e..98f1a3845d6 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -71,6 +71,7 @@ extern StructRNA RNA_ArrayGpencilModifier;
 extern StructRNA RNA_ArrayModifier;
 extern StructRNA RNA_Attribute;
 extern StructRNA RNA_AttributeGroup;
+extern StructRNA RNA_AttributeNodeTree;
 extern StructRNA RNA_AssetMetaData;
 extern StructRNA RNA_AssetTag;
 extern StructRNA RNA_BackgroundImage;
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index c2512ea33ae..3d0cd483b14 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -11514,6 +11514,7 @@ static void rna_def_nodetree(BlenderRNA *brna)
       {NTREE_TEXTURE, "TEXTURE", ICON_TEXTURE, "Texture", "Texture nodes"},
       {NTREE_COMPOSIT, "COMPOSITING", ICON_RENDERLAYERS, "Compositing", "Compositing nodes"},
       {NTREE_GEOMETRY, "GEOMETRY", ICON_NODETREE, "Geometry", "Geometry nodes"},
+      {NTREE_ATTRIBUTE, "ATTRIBUTE", ICON_NONE, "Attribute", "Attribute Nodes"},
       {0, NULL, 0, NULL, NULL},
   };
 
@@ -11756,6 +11757,18 @@ static void rna_def_geometry_nodetree(BlenderRNA *brna)
   RNA_def_struct_ui_icon(srna, ICON_NODETREE);
 }
 
+static void rna_def_attribute_nodetree(BlenderRNA *brna)
+{
+  StructRNA *srna;
+
+  srna = RNA_def_struct(brna, "AttributeNodeTree", "NodeTree");
+  RNA_def_struct_ui_text(srna,
+                         "Attribute Node Tree",
+                         "Node tree consisting of linked nodes used for attribute processing");
+  RNA_def_struct_sdna(srna, "bNodeTree");
+  RNA_def_struct_ui_icon(srna, ICON_NONE);
+}
+
 static StructRNA *define_specific_node(BlenderRNA *brna,
                                        const char *struct_name,
                                        const char *base_name,
@@ -11853,6 +11866,7 @@ void RNA_def_nodetree(BlenderRNA *brna)
   rna_def_shader_nodetree(brna);
   rna_def_texture_nodetree(brna);
   rna_def_geometry_nodetree(brna);
+  rna_def_attribute_nodetree(brna);
 
 #  define DefNode(Category, ID, DefFunc, EnumName, StructName, UIName, UIDesc) \
     { \
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 33b56fd0de0..a956ed1dde2 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -194,6 +194,7 @@ set(SRC
   geometry/nodes/node_geo_volume_to_mesh.cc
   geometry/node_geometry_exec.cc
   geometry/node_geometry_tree.cc
+  geometry/node_attribute_tree.cc
   geometry/node_geometry_util.cc
 
   shader/nodes/node_shader_add_shader.c
diff --git a/source/blender/nodes/NOD_geometry.h b/source/blender/nodes/NOD_geometry.h
index d2a702c30a6..121a5c89de6 100644
--- a/source/blender/nodes/NOD_geometry.h
+++ b/source/blender/nodes/NOD_geometry.h
@@ -23,8 +23,10 @@ extern "C" {
 #include "BKE_node.h"
 
 extern struct bNodeTreeType *ntreeType_Geometry;
+extern struct bNodeTreeType *ntreeType_Attribute;
 
 void register_node_tree_type_geo(void);
+void register_node_tree_type_attr(void);
 
 void register_node_type_geo_group(void);
 void register_node_type_geo_custom_group(bNodeType *ntype);
diff --git a/source/blender/nodes/geometry/node_attribute_tree.cc b/source/blender/nodes/geometry/node_attribute_tree.cc
new file mode 100644
index 00000000000..58fd147b0d7
--- /dev/null
+++ b/source/blender/nodes/geometry/node_attribute_tree.cc
@@ -0,0 +1,62 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <cstring>
+
+#include "BKE_node.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLT_translation.h"
+
+#include "RNA_access.h"
+
+#include "NOD_geometry.h"
+
+#include "node_common.h"
+
+bNodeTreeType *ntreeType_Attribute;
+
+static void attribute_node_tree_update(bNodeTree *ntree)
+{
+  ntreeSetOutput(ntree);
+
+  /* Needed to give correct types to reroutes. */
+  ntree_update_reroute_nodes(ntree);
+}
+
+static bool attribute_node_tree_socket_type_valid(eNodeSocketDatatype socket_type,
+                                                  bNodeTreeType *UNUSED(ntreetype))
+{
+  return ELEM(
+      socket_type, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA, SOCK_BOOLEAN, SOCK_INT, SOCK_OBJECT);
+}
+
+void register_node_tree_type_attr()
+{
+  bNodeTreeType *tt = ntreeType_Attribute = static_cast<bNodeTreeType *>(
+      MEM_callocN(sizeof(bNodeTreeType), "attribute node tree type"));
+  tt->type = NTREE_ATTRIBUTE;
+  strcpy(tt->idname, "AttributeNodeTree");
+  strcpy(tt->ui_name, N_("Attribute Node Editor"));
+  tt->ui_icon = 0; /* defined in drawnode.c */
+  strcpy(tt->ui_description, N_("Attribute nodes"));
+  tt->rna_ext.srna = &RNA_AttributeNodeTree;
+  tt->update = attribute_node_tree_update;
+  tt->valid_socket_type = attribute_node_tree_socket_type_valid;
+
+  ntreeTypeAdd(tt);
+}



More information about the Bf-blender-cvs mailing list