[Bf-blender-cvs] [3da0ad6bb23] temp-attribute-processor: add node to access iteration index
Jacques Lucke
noreply at git.blender.org
Mon May 31 11:42:08 CEST 2021
Commit: 3da0ad6bb232bf2d3407f0c70c38f05fe621f6b7
Author: Jacques Lucke
Date: Mon May 31 11:41:51 2021 +0200
Branches: temp-attribute-processor
https://developer.blender.org/rB3da0ad6bb232bf2d3407f0c70c38f05fe621f6b7
add node to access iteration index
===================================================================
M release/scripts/startup/nodeitems_builtins.py
M source/blender/blenkernel/BKE_node.h
M source/blender/blenkernel/intern/node.cc
M source/blender/nodes/CMakeLists.txt
M source/blender/nodes/NOD_geometry.h
M source/blender/nodes/NOD_static_types.h
M source/blender/nodes/geometry/node_geometry_util.cc
M source/blender/nodes/geometry/node_geometry_util.hh
R097 source/blender/nodes/geometry/nodes/node_attribute_group.cc source/blender/nodes/geometry/nodes/node_attr_group.cc
A source/blender/nodes/geometry/nodes/node_attr_index.cc
M source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
===================================================================
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 79908b9db28..5297e7fb945 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -599,6 +599,7 @@ attribute_node_categories = [
NodeItem("ShaderNodeValue"),
NodeItem("FunctionNodeInputString"),
NodeItem("FunctionNodeInputVector"),
+ NodeItem("AttributeNodeIndex"),
]),
AttributeNodeCategory("ATTR_UTILITIES", "Utilities", items=[
NodeItem("ShaderNodeMapRange"),
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 78d12c9df8b..90854c6d2cf 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1443,6 +1443,14 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
/** \} */
+/* -------------------------------------------------------------------- */
+/** \name Attribute Nodes
+ * \{ */
+
+#define ATTR_NODE_INDEX 1400
+
+/** \} */
+
void BKE_node_system_init(void);
void BKE_node_system_exit(void);
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index bdf7c6737bb..cc63a031285 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -5059,7 +5059,6 @@ static void registerTextureNodes()
static void registerGeometryNodes()
{
register_node_type_geo_group();
- register_node_type_attribute_group();
register_node_type_geo_align_rotation_to_vector();
register_node_type_geo_attribute_clamp();
@@ -5115,6 +5114,10 @@ static void registerGeometryNodes()
register_node_type_geo_transform();
register_node_type_geo_triangulate();
register_node_type_geo_volume_to_mesh();
+
+ register_node_type_attr_group();
+
+ register_node_type_attr_index();
}
static void registerFunctionNodes()
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index dba6672849d..99a0e68e246 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -139,7 +139,8 @@ set(SRC
function/nodes/node_fn_random_float.cc
function/node_function_util.cc
- geometry/nodes/node_attribute_group.cc
+ geometry/nodes/node_attr_group.cc
+ geometry/nodes/node_attr_index.cc
geometry/nodes/node_geo_align_rotation_to_vector.cc
geometry/nodes/node_geo_attribute_clamp.cc
geometry/nodes/node_geo_attribute_color_ramp.cc
diff --git a/source/blender/nodes/NOD_geometry.h b/source/blender/nodes/NOD_geometry.h
index 66425dccd48..6e4b5189d37 100644
--- a/source/blender/nodes/NOD_geometry.h
+++ b/source/blender/nodes/NOD_geometry.h
@@ -26,14 +26,10 @@ 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);
-void register_node_type_attribute_group(void);
-void register_node_type_attribute_custom_group(bNodeType *ntype);
-
void register_node_type_geo_align_rotation_to_vector(void);
void register_node_type_geo_attribute_clamp(void);
void register_node_type_geo_attribute_color_ramp(void);
@@ -89,6 +85,13 @@ void register_node_type_geo_transform(void);
void register_node_type_geo_triangulate(void);
void register_node_type_geo_volume_to_mesh(void);
+void register_node_tree_type_attr(void);
+
+void register_node_type_attr_group(void);
+void register_node_type_attribute_custom_group(bNodeType *ntype);
+
+void register_node_type_attr_index(void);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index 59c1b725d26..56649b03611 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -322,6 +322,8 @@ DefNode(GeometryNode, GEO_NODE_TRANSFORM, 0, "TRANSFORM", Transform, "Transform"
DefNode(GeometryNode, GEO_NODE_TRIANGULATE, def_geo_triangulate, "TRIANGULATE", Triangulate, "Triangulate", "")
DefNode(GeometryNode, GEO_NODE_VOLUME_TO_MESH, def_geo_volume_to_mesh, "VOLUME_TO_MESH", VolumeToMesh, "Volume to Mesh", "")
+DefNode(AttributeNode, ATTR_NODE_INDEX, 0, "INDEX", Index, "Index", "")
+
/* undefine macros */
#undef DefNode
diff --git a/source/blender/nodes/geometry/node_geometry_util.cc b/source/blender/nodes/geometry/node_geometry_util.cc
index 93cada2982b..1d11092d53c 100644
--- a/source/blender/nodes/geometry/node_geometry_util.cc
+++ b/source/blender/nodes/geometry/node_geometry_util.cc
@@ -67,6 +67,17 @@ bool geo_node_poll_default(bNodeType *UNUSED(ntype),
return true;
}
+bool attr_node_poll_default(bNodeType *UNUSED(ntype),
+ bNodeTree *ntree,
+ const char **r_disabled_hint)
+{
+ if (!STREQ(ntree->idname, "AttributeNodeTree")) {
+ *r_disabled_hint = "Not a attribute node tree";
+ return false;
+ }
+ return true;
+}
+
void geo_node_type_base(bNodeType *ntype, int type, const char *name, short nclass, short flag)
{
node_type_base(ntype, type, name, nclass, flag);
@@ -74,3 +85,12 @@ void geo_node_type_base(bNodeType *ntype, int type, const char *name, short ncla
ntype->update_internal_links = node_update_internal_links_default;
ntype->insert_link = node_insert_link_default;
}
+
+void attr_node_type_base(
+ struct bNodeType *ntype, int type, const char *name, short nclass, short flag)
+{
+ node_type_base(ntype, type, name, nclass, flag);
+ ntype->poll = attr_node_poll_default;
+ ntype->update_internal_links = node_update_internal_links_default;
+ ntype->insert_link = node_insert_link_default;
+}
diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh
index 81092798ca1..52a51977ce9 100644
--- a/source/blender/nodes/geometry/node_geometry_util.hh
+++ b/source/blender/nodes/geometry/node_geometry_util.hh
@@ -40,6 +40,9 @@ bool geo_node_poll_default(struct bNodeType *ntype,
struct bNodeTree *ntree,
const char **r_disabled_hint);
+void attr_node_type_base(
+ struct bNodeType *ntype, int type, const char *name, short nclass, short flag);
+
namespace blender::nodes {
void update_attribute_input_socket_availabilities(bNode &node,
const StringRef name,
diff --git a/source/blender/nodes/geometry/nodes/node_attribute_group.cc b/source/blender/nodes/geometry/nodes/node_attr_group.cc
similarity index 97%
rename from source/blender/nodes/geometry/nodes/node_attribute_group.cc
rename to source/blender/nodes/geometry/nodes/node_attr_group.cc
index 2893fe33cc7..5c5a3c7ae07 100644
--- a/source/blender/nodes/geometry/nodes/node_attribute_group.cc
+++ b/source/blender/nodes/geometry/nodes/node_attr_group.cc
@@ -22,7 +22,7 @@
#include "node_common.h"
#include "node_geometry_util.hh"
-void register_node_type_attribute_group(void)
+void register_node_type_attr_group(void)
{
static bNodeType ntype;
diff --git a/source/blender/nodes/geometry/nodes/node_attr_index.cc b/source/blender/nodes/geometry/nodes/node_attr_index.cc
new file mode 100644
index 00000000000..b31dddba94b
--- /dev/null
+++ b/source/blender/nodes/geometry/nodes/node_attr_index.cc
@@ -0,0 +1,34 @@
+/*
+ * 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 "UI_interface.h"
+#include "UI_resources.h"
+
+#include "node_geometry_util.hh"
+
+static bNodeSocketTemplate attr_node_index_out[] = {
+ {SOCK_INT, N_("Index")},
+ {-1, ""},
+};
+
+void register_node_type_attr_index()
+{
+ static bNodeType ntype;
+
+ attr_node_type_base(&ntype, ATTR_NODE_INDEX, "Index", NODE_CLASS_ATTRIBUTE, 0);
+ node_type_socket_templates(&ntype, nullptr, attr_node_index_out);
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
index 5319394a551..46ee6141092 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_processor.cc
@@ -344,6 +344,13 @@ static CustomDataType get_custom_data_type(bNodeSocketType *typeinfo)
return CD_PROP_FLOAT;
}
+namespace {
+struct InputsCache {
+ Map<int, GVArrayPtr> group_inputs;
+ GVArrayPtr index;
+};
+} // namespace
+
static void process_attributes_on_component(GeoNodeExecParams &geo_params,
GeometryComponent &component,
const fn::MultiFunction &network_fn,
@@ -364,40 +371,56 @@ static void process_attributes_on_component(GeoNodeExecParams &geo_params,
fn::MFParamsBuilder fn_params{network_fn, domain_size};
fn::MFContextBuilder context;
- Map<int, GVArrayPtr> input_varrays;
+ InputsCache inputs_cache;
for (const DOutputSocket &dsocket : used_group_inputs) {
- const int index = dsocket->index();
- GVArrayPtr &input_varray = input_varrays.lookup_or_add_cb(index, [&]() -> GVArrayPtr {
- const AttributeProcessorInputSettings *input_settings = (AttributeProcessorInputSettings *)
- BLI_findlink(&storage.inputs_settings, index);
- const bNodeSocket *interface_socket = (bNodeSocket *)BLI_findlink(&group->inputs, index);
- const CustomDataType type = get_custom_data_type(interface_socket->typeinfo);
- cons
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list