[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