[Bf-blender-cvs] [64297ec8add] temp-nodes-group-declarations: Cleanup
Hans Goudey
noreply at git.blender.org
Thu Dec 15 23:17:20 CET 2022
Commit: 64297ec8add4cf821649e373dd943265b47062e2
Author: Hans Goudey
Date: Thu Dec 15 16:17:16 2022 -0600
Branches: temp-nodes-group-declarations
https://developer.blender.org/rB64297ec8add4cf821649e373dd943265b47062e2
Cleanup
===================================================================
M source/blender/nodes/NOD_node_declaration.hh
M source/blender/nodes/NOD_socket_declarations.hh
M source/blender/nodes/intern/node_common.cc
===================================================================
diff --git a/source/blender/nodes/NOD_node_declaration.hh b/source/blender/nodes/NOD_node_declaration.hh
index 6c34506e661..4b7f09f8ed5 100644
--- a/source/blender/nodes/NOD_node_declaration.hh
+++ b/source/blender/nodes/NOD_node_declaration.hh
@@ -72,10 +72,11 @@ using ImplicitInputValueFn = std::function<void(const bNode &node, void *r_value
* Describes a single input or output socket. This is subclassed for different socket types.
*/
class SocketDeclaration {
- protected:
+ public:
std::string name_;
std::string identifier_;
std::string description_;
+
/** Defined by whether the socket is part of the node's input or
* output socket declaration list. Included here for convenience. */
eNodeSocketInOut in_out_;
diff --git a/source/blender/nodes/NOD_socket_declarations.hh b/source/blender/nodes/NOD_socket_declarations.hh
index b85e1a46cfb..83bf2e5b9bc 100644
--- a/source/blender/nodes/NOD_socket_declarations.hh
+++ b/source/blender/nodes/NOD_socket_declarations.hh
@@ -72,6 +72,7 @@ class IntBuilder : public SocketDeclarationBuilder<Int> {
class VectorBuilder;
class Vector : public SocketDeclaration {
+ public:
float3 default_value_ = {0, 0, 0};
float soft_min_value_ = -FLT_MAX;
float soft_max_value_ = FLT_MAX;
@@ -101,6 +102,7 @@ class VectorBuilder : public SocketDeclarationBuilder<Vector> {
class BoolBuilder;
class Bool : public SocketDeclaration {
+ public:
bool default_value_ = false;
private:
@@ -122,6 +124,7 @@ class BoolBuilder : public SocketDeclarationBuilder<Bool> {
class ColorBuilder;
class Color : public SocketDeclaration {
+ public:
ColorGeometry4f default_value_;
private:
@@ -143,6 +146,7 @@ class ColorBuilder : public SocketDeclarationBuilder<Color> {
class StringBuilder;
class String : public SocketDeclaration {
+ public:
std::string default_value_;
private:
diff --git a/source/blender/nodes/intern/node_common.cc b/source/blender/nodes/intern/node_common.cc
index 6dcdbcfe1eb..6484aa28a24 100644
--- a/source/blender/nodes/intern/node_common.cc
+++ b/source/blender/nodes/intern/node_common.cc
@@ -123,17 +123,98 @@ bool nodeGroupPoll(const bNodeTree *nodetree,
namespace blender::nodes {
+static SocketDeclarationPtr declataion_for_interface_socket(const bNodeSocket &io_socket)
+{
+ SocketDeclarationPtr dst;
+ switch (io_socket.type) {
+ case SOCK_FLOAT: {
+ const auto &value = *io_socket.default_value_typed<bNodeSocketValueFloat>();
+ std::unique_ptr<decl::Float> decl = std::make_unique<decl::Float>();
+ decl->default_value_ = value.value;
+ decl->soft_min_value_ = value.min;
+ decl->soft_max_value_ = value.max;
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_VECTOR: {
+ const auto &value = *io_socket.default_value_typed<bNodeSocketValueVector>();
+ std::unique_ptr<decl::Vector> decl = std::make_unique<decl::Vector>();
+ decl->default_value_ = value.value;
+ decl->soft_min_value_ = value.min;
+ decl->soft_max_value_ = value.max;
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_RGBA: {
+ const auto &value = *io_socket.default_value_typed<bNodeSocketValueRGBA>();
+ std::unique_ptr<decl::Color> decl = std::make_unique<decl::Color>();
+ decl->default_value_ = value.value;
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_SHADER: {
+ std::unique_ptr<decl::Color> decl = std::make_unique<decl::Color>();
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_BOOLEAN: {
+ const auto &value = *io_socket.default_value_typed<bNodeSocketValueBoolean>();
+ std::unique_ptr<decl::Bool> decl = std::make_unique<decl::Bool>();
+ decl->default_value_ = value.value;
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_INT: {
+ const auto &value = *io_socket.default_value_typed<bNodeSocketValueInt>();
+ std::unique_ptr<decl::Int> decl = std::make_unique<decl::Int>();
+ decl->default_value_ = value.value;
+ decl->soft_min_value_ = value.min;
+ decl->soft_max_value_ = value.max;
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_STRING: {
+ const auto &value = *io_socket.default_value_typed<bNodeSocketValueString>();
+ std::unique_ptr<decl::String> decl = std::make_unique<decl::String>();
+ decl->default_value_ = value.value;
+ dst = std::move(decl);
+ break;
+ }
+ case SOCK_OBJECT:
+ /* TODO: What happens to default values of data-block sockets? */
+ dst = std::make_unique<decl::Object>();
+ break;
+ case SOCK_IMAGE:
+ dst = std::make_unique<decl::Image>();
+ break;
+ case SOCK_GEOMETRY:
+ dst = std::make_unique<decl::Geometry>();
+ break;
+ case SOCK_COLLECTION:
+ dst = std::make_unique<decl::Collection>();
+ break;
+ case SOCK_TEXTURE:
+ dst = std::make_unique<decl::Texture>();
+ break;
+ case SOCK_MATERIAL:
+ dst = std::make_unique<decl::Material>();
+ break;
+ }
+ dst->name_ = io_socket.name;
+ dst->identifier_ = io_socket.identifier;
+ dst->in_out_ = eNodeSocketInOut(io_socket.in_out);
+ dst->description_ = io_socket.description;
+}
+
bool node_group_declare_dynamic_fn(const bNodeTree & /*node_tree*/,
const bNode &node,
NodeDeclaration &r_declaration)
{
- /* TODO: Restore this behavior somehow:
- * Missing data-block, leave sockets unchanged so that when it comes back
- * the links remain valid. */
if (!node.id) {
return false;
}
else if (ID_IS_LINKED(node.id) && (node.id->tag & LIB_TAG_MISSING)) {
+ /* TODO: Restore the behavior that keeps the sockets until the ID is found. */
return false;
}
const bNodeTree &group = *reinterpret_cast<const bNodeTree *>(node.id);
@@ -144,155 +225,15 @@ bool node_group_declare_dynamic_fn(const bNodeTree & /*node_tree*/,
/* TODO: Specialize for geometry nodes and fields. */
/* TODO: Figure out how this should work for custom node trees / #SOCK_CUSTOM. */
LISTBASE_FOREACH (const bNodeSocket *, input, &group.inputs) {
- switch (input->type) {
- case SOCK_FLOAT: {
- const auto &value = *input->default_value_typed<bNodeSocketValueFloat>();
- std::unique_ptr<decl::Float> decl = std::make_unique<decl::Float>();
- decl->soft_min_value_ = value.min;
- decl->soft_max_value_ = value.max;
- decl->description_ = input->description;
- b.add_input<decl::Float>(input->name, input->identifier)
- .default_value(value.value)
- .min(value.min)
- .max(value.max)
- .description(input->description);
- break;
- }
- case SOCK_VECTOR: {
- const auto &value = *input->default_value_typed<bNodeSocketValueVector>();
- b.add_input<decl::Vector>(input->name, input->identifier)
- .default_value(value.value)
- .min(value.min)
- .max(value.max)
- .description(input->description);
- break;
- }
- case SOCK_RGBA: {
- const auto &value = *input->default_value_typed<bNodeSocketValueRGBA>();
- b.add_input<decl::Color>(input->name, input->identifier)
- .default_value(value.value)
- .description(input->description);
- break;
- }
- case SOCK_SHADER: {
- b.add_input<decl::Shader>(input->name, input->identifier).description(input->description);
- break;
- }
- case SOCK_BOOLEAN: {
- const auto &value = *input->default_value_typed<bNodeSocketValueBoolean>();
- b.add_input<decl::Float>(input->name, input->identifier)
- .default_value(value.value)
- .description(input->description);
- break;
- }
- case SOCK_INT: {
- const auto &value = *input->default_value_typed<bNodeSocketValueInt>();
- b.add_input<decl::Int>(input->name, input->identifier)
- .default_value(value.value)
- .min(value.min)
- .max(value.max)
- .description(input->description);
- break;
- }
- case SOCK_STRING: {
- const auto &value = *input->default_value_typed<bNodeSocketValueString>();
- b.add_input<decl::String>(input->name, input->identifier)
- .default_value(value.value)
- .description(input->description);
- break;
- }
- case SOCK_OBJECT: {
- /* TODO: What happens to default values of data-block sockets? */
- b.add_input<decl::Object>(input->name, input->identifier).description(input->description);
- break;
- }
- case SOCK_IMAGE: {
- b.add_input<decl::Image>(input->name, input->identifier).description(input->description);
- break;
- }
- case SOCK_GEOMETRY: {
- b.add_input<decl::Geometry>(input->name, input->identifier)
- .description(input->description);
- break;
- }
- case SOCK_COLLECTION: {
- b.add_input<decl::Collection>(input->name, input->identifier)
- .description(input->description);
- break;
- }
- case SOCK_TEXTURE: {
- b.add_input<decl::Texture>(input->name, input->identifier).description(input->description);
- break;
- }
- case SOCK_MATERIAL: {
- b.add_input<decl::Material>(input->name, input->identifier)
- .description(input->description);
- break;
- }
- }
+ inputs.append(declataion_for_interface_socket(*input));
}
LISTBASE_FOREACH (const bNodeSocket *, output, &group.outputs) {
- switch (output->type) {
- case SOCK_FLOAT:
- b.add_output<decl::Float>(output->name, output->identifier)
- .description(output->description);
- break;
- case SOCK_VECTOR:
- b.add_output<decl::Vector>(output->name, output->identifier)
- .description(output->description);
- break;
- case SOCK_RGBA:
- b.add_output<decl::Color>(output->name, output->identifier)
- .description(output->description);
- break;
- case SOCK_SHADER:
- b.add_output<decl::Shader>(output->name, output->identifier
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list