[Bf-blender-cvs] [805540c713a] temp-enum-socket: initial enum socket
Jacques Lucke
noreply at git.blender.org
Mon Nov 8 16:07:01 CET 2021
Commit: 805540c713a68fc4a00209e8cc9a66bd0deec478
Author: Jacques Lucke
Date: Thu Nov 4 13:28:24 2021 +0100
Branches: temp-enum-socket
https://developer.blender.org/rB805540c713a68fc4a00209e8cc9a66bd0deec478
initial enum socket
===================================================================
M source/blender/blenkernel/intern/node.cc
M source/blender/editors/space_node/drawnode.cc
M source/blender/editors/space_node/node_relationships.cc
M source/blender/makesdna/DNA_node_types.h
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/NOD_socket_declarations.hh
M source/blender/nodes/geometry/node_geometry_tree.cc
M source/blender/nodes/intern/node_socket.cc
M source/blender/nodes/intern/node_socket_declarations.cc
M source/blender/nodes/intern/node_util.c
===================================================================
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 688005454c8..e4b78865a2d 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -349,6 +349,7 @@ static void library_foreach_node_socket(LibraryForeachIDData *data, bNodeSocket
case SOCK_CUSTOM:
case SOCK_SHADER:
case SOCK_GEOMETRY:
+ case SOCK_ENUM:
break;
}
}
@@ -480,6 +481,9 @@ static void write_node_socket_default_value(BlendWriter *writer, bNodeSocket *so
case SOCK_MATERIAL:
BLO_write_struct(writer, bNodeSocketValueMaterial, sock->default_value);
break;
+ case SOCK_ENUM:
+ BLO_write_struct(writer, bNodeSocketValueEnum, sock->default_value);
+ break;
case __SOCK_MESH:
case SOCK_CUSTOM:
case SOCK_SHADER:
@@ -889,6 +893,7 @@ static void lib_link_node_socket(BlendLibReader *reader, Library *lib, bNodeSock
case SOCK_CUSTOM:
case SOCK_SHADER:
case SOCK_GEOMETRY:
+ case SOCK_ENUM:
break;
}
}
@@ -984,6 +989,7 @@ static void expand_node_socket(BlendExpander *expander, bNodeSocket *sock)
case SOCK_CUSTOM:
case SOCK_SHADER:
case SOCK_GEOMETRY:
+ case SOCK_ENUM:
break;
}
}
@@ -1585,6 +1591,7 @@ static void socket_id_user_increment(bNodeSocket *sock)
case SOCK_CUSTOM:
case SOCK_SHADER:
case SOCK_GEOMETRY:
+ case SOCK_ENUM:
break;
}
}
@@ -1638,6 +1645,7 @@ static void socket_id_user_decrement(bNodeSocket *sock)
case SOCK_CUSTOM:
case SOCK_SHADER:
case SOCK_GEOMETRY:
+ case SOCK_ENUM:
break;
}
}
@@ -1800,6 +1808,8 @@ const char *nodeStaticSocketType(int type, int subtype)
return "NodeSocketTexture";
case SOCK_MATERIAL:
return "NodeSocketMaterial";
+ case SOCK_ENUM:
+ return "NodeSocketEnum";
}
return nullptr;
}
@@ -1877,6 +1887,8 @@ const char *nodeStaticSocketInterfaceType(int type, int subtype)
return "NodeSocketInterfaceTexture";
case SOCK_MATERIAL:
return "NodeSocketInterfaceMaterial";
+ case SOCK_ENUM:
+ return "NodeSocketInterfaceEnum";
}
return nullptr;
}
@@ -1910,6 +1922,8 @@ const char *nodeStaticSocketLabel(int type, int UNUSED(subtype))
return "Texture";
case SOCK_MATERIAL:
return "Material";
+ case SOCK_ENUM:
+ return "Enum";
}
return nullptr;
}
diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc
index fe866a81f67..3ad5a206944 100644
--- a/source/blender/editors/space_node/drawnode.cc
+++ b/source/blender/editors/space_node/drawnode.cc
@@ -3467,6 +3467,7 @@ static const float std_node_socket_colors[][4] = {
{0.96, 0.96, 0.96, 1.0}, /* SOCK_COLLECTION */
{0.62, 0.31, 0.64, 1.0}, /* SOCK_TEXTURE */
{0.92, 0.46, 0.51, 1.0}, /* SOCK_MATERIAL */
+ {0.00, 0.00, 0.00, 1.0}, /* SOCK_ENUM */
};
/* common color callbacks for standard types */
@@ -3685,6 +3686,10 @@ static void std_node_socket_draw(
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
break;
}
+ case SOCK_ENUM: {
+ uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
+ break;
+ }
default:
node_socket_button_label(C, layout, ptr, node_ptr, text);
break;
@@ -3722,7 +3727,8 @@ static void std_node_socket_interface_draw(bContext *UNUSED(C), uiLayout *layout
}
case SOCK_BOOLEAN:
case SOCK_RGBA:
- case SOCK_STRING: {
+ case SOCK_STRING:
+ case SOCK_ENUM: {
uiItemR(col, ptr, "default_value", DEFAULT_FLAGS, IFACE_("Default"), 0);
break;
}
diff --git a/source/blender/editors/space_node/node_relationships.cc b/source/blender/editors/space_node/node_relationships.cc
index 76aad684b4c..b5943201410 100644
--- a/source/blender/editors/space_node/node_relationships.cc
+++ b/source/blender/editors/space_node/node_relationships.cc
@@ -2177,6 +2177,7 @@ static int get_main_socket_priority(const bNodeSocket *socket)
case SOCK_COLLECTION:
case SOCK_TEXTURE:
case SOCK_MATERIAL:
+ case SOCK_ENUM:
return 5;
}
return -1;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index d5d2520ddf6..eaa5fb0f71c 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -171,6 +171,7 @@ typedef enum eNodeSocketDatatype {
SOCK_COLLECTION = 11,
SOCK_TEXTURE = 12,
SOCK_MATERIAL = 13,
+ SOCK_ENUM = 14,
} eNodeSocketDatatype;
/* Socket shape. */
@@ -664,6 +665,10 @@ typedef struct bNodeSocketValueMaterial {
struct Material *value;
} bNodeSocketValueMaterial;
+typedef struct bNodeSocketValueEnum {
+ int value;
+} bNodeSocketValueEnum;
+
/* Data structs, for node->storage. */
enum {
CMP_NODE_MASKTYPE_ADD = 0,
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 01889a1b0a9..2c20fa655e3 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -78,6 +78,7 @@ static const EnumPropertyItem node_socket_data_type_items[] = {
{SOCK_COLLECTION, "COLLECTION", 0, "Collection", ""},
{SOCK_TEXTURE, "TEXTURE", 0, "Texture", ""},
{SOCK_MATERIAL, "MATERIAL", 0, "Material", ""},
+ {SOCK_ENUM, "ENUM", 0, "Enum", ""},
{0, NULL, 0, NULL, NULL},
};
@@ -106,6 +107,7 @@ static const EnumPropertyItem node_socket_type_items[] = {
{SOCK_COLLECTION, "COLLECTION", 0, "Collection", ""},
{SOCK_TEXTURE, "TEXTURE", 0, "Texture", ""},
{SOCK_MATERIAL, "MATERIAL", 0, "Material", ""},
+ {SOCK_ENUM, "ENUM", 0, "Enum", ""},
{0, NULL, 0, NULL, NULL},
};
@@ -11960,6 +11962,45 @@ static void rna_def_node_socket_material(BlenderRNA *brna,
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
}
+static void rna_def_node_socket_enum(BlenderRNA *brna,
+ const char *identifier,
+ const char *interface_idname)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
+ RNA_def_struct_ui_text(srna, "Enum Node Socket", "Enum socket of a node");
+ RNA_def_struct_sdna(srna, "bNodeSocket");
+
+ RNA_def_struct_sdna_from(srna, "bNodeSocketValueEnum", "default_value");
+
+ prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "value");
+ RNA_def_property_enum_items(prop, node_socket_data_type_items); /* TODO */
+ RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+
+ RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
+
+ /* socket interface */
+ srna = RNA_def_struct(brna, interface_idname, "NodeSocketInterfaceStandard");
+ RNA_def_struct_ui_text(srna, "Enum Node Socket Interface", "Enum socket of a node");
+ RNA_def_struct_sdna(srna, "bNodeSocket");
+
+ RNA_def_struct_sdna_from(srna, "bNodeSocketValueEnum", "default_value");
+
+ prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "value");
+ RNA_def_property_enum_items(prop, node_socket_data_type_items); /* TODO */
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketInterface_update");
+
+ RNA_def_struct_sdna_from(srna, "bNodeSocket", NULL);
+}
+
static void rna_def_node_socket_standard_types(BlenderRNA *brna)
{
/* XXX Workaround: Registered functions are not exposed in python by bpy,
@@ -12112,6 +12153,8 @@ static void rna_def_node_socket_standard_types(BlenderRNA *brna)
rna_def_node_socket_texture(brna, "NodeSocketTexture", "NodeSocketInterfaceTexture");
rna_def_node_socket_material(brna, "NodeSocketMaterial", "NodeSocketInterfaceMaterial");
+
+ rna_def_node_socket_enum(brna, "NodeSocketEnum", "NodeSocketInterfaceEnum");
}
static void rna_def_internal_node(BlenderRNA *brna)
diff --git a/source/blender/nodes/NOD_socket_declarations.hh b/source/blender/nodes/NOD_socket_declarations.hh
index f7aea212f73..ef440806b34 100644
--- a/source/blender/nodes/NOD_socket_declarations.hh
+++ b/source/blender/nodes/NOD_socket_declarations.hh
@@ -165,6 +165,25 @@ class StringBuilder : public SocketDeclarationBuilder<String> {
StringBuilder &default_value(const std::string value);
};
+class EnumBuilder;
+
+class Enum : public SocketDeclaration {
+ private:
+ int default_value_ = 0;
+ friend EnumBuilder;
+
+ public:
+ using Builder = EnumBuilder;
+
+ bNodeSocket &build(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out) const override;
+ bool matches(const bNodeSocket &socket) const override;
+};
+
+class EnumBuilder : public SocketDeclarationBuilder<Enum> {
+ public:
+ EnumBuilder &default_value(const int value);
+};
+
class IDSocketDeclaration : public SocketDeclaration {
private:
const char *idname_;
@@ -338,6 +357,18 @@ inline StringBuilder &StringBuilder::default_value(std::string value)
/** \} */
+/* -------------------------------------------------------------------- */
+/** \name #EnumBuilder Inline Methods
+ * \{ */
+
+inline EnumBuilder &EnumBuilder::default_value(const int value)
+{
+ decl_->default_value_ = value;
+ return *this;
+}
+
+/** \} */
+
/* -------------------------------------------------------------------- */
/** \name #IDSocketDeclaration and Children Inline Methods
* \{ */
diff --git a/source/blender/nodes/geometry/node_geometry_tree.cc b/source/blender/nodes/geometry/node_geometry_tree.cc
index 9747bb63773..66c325b2091 100644
--- a/source/blender/nodes/geometry/node_geometry_tree.cc
+++ b/source/blender/nodes/geometry/node_geometry_tree.cc
@@ -110,7 +110,8 @@ static bool geometry_node_tree_socket_type_valid(bNodeTreeType *UNUSED(ntreetype
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list