[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