[Bf-blender-cvs] [6726c757ac9] cycles_procedural_api: add macros to define getters and setters

Kévin Dietrich noreply at git.blender.org
Mon Sep 7 05:03:33 CEST 2020


Commit: 6726c757ac95cdcccad51b78882167f8c3707afe
Author: Kévin Dietrich
Date:   Mon Aug 24 15:53:28 2020 +0200
Branches: cycles_procedural_api
https://developer.blender.org/rB6726c757ac95cdcccad51b78882167f8c3707afe

add macros to define getters and setters

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

M	intern/cycles/graph/node.cpp
M	intern/cycles/graph/node.h

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

diff --git a/intern/cycles/graph/node.cpp b/intern/cycles/graph/node.cpp
index 37387053d97..3cb2edf7223 100644
--- a/intern/cycles/graph/node.cpp
+++ b/intern/cycles/graph/node.cpp
@@ -51,11 +51,6 @@ Node::~Node()
 {
 }
 
-template<typename T> static T &get_socket_value(const Node *node, const SocketType &socket)
-{
-  return (T &)*(((char *)node) + socket.struct_offset);
-}
-
 #ifndef NDEBUG
 static bool is_socket_float3(const SocketType &socket)
 {
diff --git a/intern/cycles/graph/node.h b/intern/cycles/graph/node.h
index 3c84dbdb4a7..16a7a4eae04 100644
--- a/intern/cycles/graph/node.h
+++ b/intern/cycles/graph/node.h
@@ -29,6 +29,55 @@ struct Node;
 struct NodeType;
 struct Transform;
 
+// todo(kevin) set_##name will copy the arrays
+#define NODE_PUBLIC_API(type_, name) \
+ public: \
+  type_ name; \
+\
+ public: \
+  const SocketType *get_##name##socket() const \
+  { \
+    static const SocketType *socket = type->find_input(ustring(#name)); \
+    return socket; \
+  } \
+  bool name##_is_modified() const \
+  { \
+    const SocketType *socket = get_##name##socket(); \
+    return socket_is_modified(*socket); \
+  } \
+  const type_ &get_##name() const \
+  { \
+    const SocketType *socket = get_##name##socket(); \
+    return get_socket_value<type_>(this, *socket); \
+  } \
+  void set_##name(type_ value) \
+  { \
+    const SocketType *socket = get_##name##socket(); \
+    this->set(*socket, value); \
+  }
+
+#define NODE_PUBLIC_API_STRUCT_MEMBER(type_, name, member) \
+  const SocketType *get_##name##_##member##socket() const \
+  { \
+    static const SocketType *socket = type->find_input(ustring(#name"."#member)); \
+    return socket; \
+  } \
+   bool name##_##member##_is_modified() const \
+   { \
+     const SocketType *socket = get_##name##_##member##socket(); \
+     return socket_is_modified(*socket); \
+   } \
+   const type_ &get_##name##_##member() const \
+   { \
+     const SocketType *socket = get_##name##_##member##socket(); \
+     return get_socket_value<type_>(this, *socket); \
+   } \
+   void set_##name##_##member(type_ value) \
+   { \
+     const SocketType *socket = get_##name##_##member##socket(); \
+     this->set(*socket, value); \
+   }
+
 /* Node */
 
 struct NodeOwner {
@@ -109,6 +158,11 @@ struct Node {
 
  protected:
   const NodeOwner *owner;
+
+  template<typename T> static T &get_socket_value(const Node *node, const SocketType &socket)
+  {
+    return (T &)*(((char *)node) + socket.struct_offset);
+  }
 };
 
 CCL_NAMESPACE_END



More information about the Bf-blender-cvs mailing list