[Bf-blender-cvs] [0bd3cad04ed] master: Nodes: Add Shader Socket to new decleration API

Aaron Carlisle noreply at git.blender.org
Mon Dec 6 18:00:00 CET 2021


Commit: 0bd3cad04edf4bf9b9d3b1353f955534aa5e6740
Author: Aaron Carlisle
Date:   Mon Dec 6 11:59:26 2021 -0500
Branches: master
https://developer.blender.org/rB0bd3cad04edf4bf9b9d3b1353f955534aa5e6740

Nodes: Add Shader Socket to new decleration API

This commit adds the shader socket type to the new socket builder api.

As a test, this commit also converts the Add Shader node to the new API

Reviewed By: JacquesLucke

Differential Revision: https://developer.blender.org/D13485

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

M	source/blender/nodes/NOD_socket_declarations.hh
M	source/blender/nodes/intern/node_socket_declarations.cc
M	source/blender/nodes/shader/nodes/node_shader_add_shader.cc

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

diff --git a/source/blender/nodes/NOD_socket_declarations.hh b/source/blender/nodes/NOD_socket_declarations.hh
index 7cb32a37ae2..7284accd1ec 100644
--- a/source/blender/nodes/NOD_socket_declarations.hh
+++ b/source/blender/nodes/NOD_socket_declarations.hh
@@ -212,6 +212,21 @@ class Image : public IDSocketDeclaration {
   Image();
 };
 
+class ShaderBuilder;
+
+class Shader : public SocketDeclaration {
+ private:
+  friend ShaderBuilder;
+
+ public:
+  using Builder = ShaderBuilder;
+
+  bNodeSocket &build(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out) const override;
+  bool matches(const bNodeSocket &socket) const override;
+};
+
+class ShaderBuilder : public SocketDeclarationBuilder<Shader> {};
+
 /* -------------------------------------------------------------------- */
 /** \name #FloatBuilder Inline Methods
  * \{ */
diff --git a/source/blender/nodes/intern/node_socket_declarations.cc b/source/blender/nodes/intern/node_socket_declarations.cc
index ed5691ebf7f..1795cc339e7 100644
--- a/source/blender/nodes/intern/node_socket_declarations.cc
+++ b/source/blender/nodes/intern/node_socket_declarations.cc
@@ -376,4 +376,29 @@ GeometryBuilder &GeometryBuilder::only_instances(bool value)
 
 /** \} */
 
+/* -------------------------------------------------------------------- */
+/** \name #Shader
+ * \{ */
+
+bNodeSocket &Shader::build(bNodeTree &ntree, bNode &node, eNodeSocketInOut in_out) const
+{
+  bNodeSocket &socket = *nodeAddSocket(
+      &ntree, &node, in_out, "NodeSocketShader", identifier_.c_str(), name_.c_str());
+  this->set_common_flags(socket);
+  return socket;
+}
+
+bool Shader::matches(const bNodeSocket &socket) const
+{
+  if (!this->matches_common_data(socket)) {
+    return false;
+  }
+  if (socket.type != SOCK_SHADER) {
+    return false;
+  }
+  return true;
+}
+
+/** \} */
+
 }  // namespace blender::nodes::decl
diff --git a/source/blender/nodes/shader/nodes/node_shader_add_shader.cc b/source/blender/nodes/shader/nodes/node_shader_add_shader.cc
index ea06c11326b..81c7643e18b 100644
--- a/source/blender/nodes/shader/nodes/node_shader_add_shader.cc
+++ b/source/blender/nodes/shader/nodes/node_shader_add_shader.cc
@@ -23,16 +23,12 @@
 
 namespace blender::nodes::node_shader_add_shader_cc {
 
-static bNodeSocketTemplate sh_node_add_shader_in[] = {
-    {SOCK_SHADER, N_("Shader")},
-    {SOCK_SHADER, N_("Shader")},
-    {-1, ""},
-};
-
-static bNodeSocketTemplate sh_node_add_shader_out[] = {
-    {SOCK_SHADER, N_("Shader")},
-    {-1, ""},
-};
+static void node_declare(NodeDeclarationBuilder &b)
+{
+  b.add_input<decl::Shader>(N_("Shader"));
+  b.add_input<decl::Shader>(N_("Shader"), "Shader_001");
+  b.add_output<decl::Shader>(N_("Shader"));
+}
 
 static int node_shader_gpu_add_shader(GPUMaterial *mat,
                                       bNode *node,
@@ -53,8 +49,7 @@ void register_node_type_sh_add_shader()
   static bNodeType ntype;
 
   sh_node_type_base(&ntype, SH_NODE_ADD_SHADER, "Add Shader", NODE_CLASS_SHADER, 0);
-  node_type_socket_templates(
-      &ntype, file_ns::sh_node_add_shader_in, file_ns::sh_node_add_shader_out);
+  ntype.declare = file_ns::node_declare;
   node_type_init(&ntype, nullptr);
   node_type_storage(&ntype, "", nullptr, nullptr);
   node_type_gpu(&ntype, file_ns::node_shader_gpu_add_shader);



More information about the Bf-blender-cvs mailing list