diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-10-27 13:40:42 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-10-27 13:40:42 +0300 |
commit | 30f626fe4cd62f406468ef0ff2169694424b1a29 (patch) | |
tree | d428586cd3a6e689ab1e2f5a4222d1e0eb77ada7 /intern/cycles/graph | |
parent | 17381c7b90eb3acde53eca013ae5a5a55699f17d (diff) |
Revert "Cycles API: encapsulate Node socket members"
This reverts commit 527f8b32b32187f754e5b176db6377736f9cb8ff. It is causing
motion blur test failures and crashes in some renders, reverting until this is
fixed.
Diffstat (limited to 'intern/cycles/graph')
-rw-r--r-- | intern/cycles/graph/node.cpp | 85 | ||||
-rw-r--r-- | intern/cycles/graph/node.h | 61 |
2 files changed, 5 insertions, 141 deletions
diff --git a/intern/cycles/graph/node.cpp b/intern/cycles/graph/node.cpp index 8c355b66f13..f239040ee3d 100644 --- a/intern/cycles/graph/node.cpp +++ b/intern/cycles/graph/node.cpp @@ -52,6 +52,11 @@ 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) { @@ -382,86 +387,6 @@ void Node::copy_value(const SocketType &socket, const Node &other, const SocketT } } -void Node::set_value(const SocketType &socket, const Node &other, const SocketType &other_socket) -{ - assert(socket.type == other_socket.type); - - if (socket.is_array()) { - switch (socket.type) { - case SocketType::BOOLEAN_ARRAY: - set(socket, get_socket_value<array<bool>>(&other, socket)); - break; - case SocketType::FLOAT_ARRAY: - set(socket, get_socket_value<array<float>>(&other, socket)); - break; - case SocketType::INT_ARRAY: - set(socket, get_socket_value<array<int>>(&other, socket)); - break; - case SocketType::COLOR_ARRAY: - case SocketType::VECTOR_ARRAY: - case SocketType::POINT_ARRAY: - case SocketType::NORMAL_ARRAY: - set(socket, get_socket_value<array<float3>>(&other, socket)); - break; - case SocketType::POINT2_ARRAY: - set(socket, get_socket_value<array<float2>>(&other, socket)); - break; - case SocketType::STRING_ARRAY: - set(socket, get_socket_value<array<ustring>>(&other, socket)); - break; - case SocketType::TRANSFORM_ARRAY: - set(socket, get_socket_value<array<Transform>>(&other, socket)); - break; - case SocketType::NODE_ARRAY: - set(socket, get_socket_value<array<Node *>>(&other, socket)); - break; - default: - assert(0); - break; - } - } - else { - switch (socket.type) { - case SocketType::BOOLEAN: - set(socket, get_socket_value<bool>(&other, socket)); - break; - case SocketType::FLOAT: - set(socket, get_socket_value<float>(&other, socket)); - break; - case SocketType::INT: - set(socket, get_socket_value<int>(&other, socket)); - break; - case SocketType::UINT: - set(socket, get_socket_value<uint>(&other, socket)); - break; - case SocketType::COLOR: - case SocketType::VECTOR: - case SocketType::POINT: - case SocketType::NORMAL: - set(socket, get_socket_value<float3>(&other, socket)); - break; - case SocketType::POINT2: - set(socket, get_socket_value<float2>(&other, socket)); - break; - case SocketType::STRING: - set(socket, get_socket_value<ustring>(&other, socket)); - break; - case SocketType::ENUM: - set(socket, get_socket_value<int>(&other, socket)); - break; - case SocketType::TRANSFORM: - set(socket, get_socket_value<Transform>(&other, socket)); - break; - case SocketType::NODE: - set(socket, get_socket_value<Node *>(&other, socket)); - break; - default: - assert(0); - break; - } - } -} - template<typename T> static bool is_array_equal(const Node *node, const Node *other, const SocketType &socket) { diff --git a/intern/cycles/graph/node.h b/intern/cycles/graph/node.h index b28ea09282b..16bd5e4358a 100644 --- a/intern/cycles/graph/node.h +++ b/intern/cycles/graph/node.h @@ -29,61 +29,6 @@ struct Node; struct NodeType; struct Transform; -/* Note: in the following macros we use "type const &" instead of "const type &" - * to avoid issues when pasting a pointer type. */ -#define NODE_SOCKET_API_BASE_METHODS(type_, name, string_name) \ - const SocketType *get_##name##_socket() const \ - { \ - static const SocketType *socket = type->find_input(ustring(string_name)); \ - return socket; \ - } \ - bool name##_is_modified() const \ - { \ - const SocketType *socket = get_##name##_socket(); \ - return socket_is_modified(*socket); \ - } \ - void tag_##name##_modified() \ - { \ - const SocketType *socket = get_##name##_socket(); \ - socket_modified |= socket->modified_flag_bit; \ - } \ - type_ const &get_##name() const \ - { \ - const SocketType *socket = get_##name##_socket(); \ - return get_socket_value<type_>(this, *socket); \ - } - -#define NODE_SOCKET_API_BASE(type_, name, string_name) \ - protected: \ - type_ name; \ -\ - public: \ - NODE_SOCKET_API_BASE_METHODS(type_, name, string_name) - -#define NODE_SOCKET_API(type_, name) \ - NODE_SOCKET_API_BASE(type_, name, #name) \ - void set_##name(type_ value) \ - { \ - const SocketType *socket = get_##name##_socket(); \ - this->set(*socket, value); \ - } - -#define NODE_SOCKET_API_ARRAY(type_, name) \ - NODE_SOCKET_API_BASE(type_, name, #name) \ - void set_##name(type_ &value) \ - { \ - const SocketType *socket = get_##name##_socket(); \ - this->set(*socket, value); \ - } - -#define NODE_SOCKET_API_STRUCT_MEMBER(type_, name, member) \ - NODE_SOCKET_API_BASE_METHODS(type_, name##_##member, #name "." #member) \ - void set_##name##_##member(type_ value) \ - { \ - const SocketType *socket = get_##name##_##member##_socket(); \ - this->set(*socket, value); \ - } - /* Node */ struct NodeOwner { @@ -143,7 +88,6 @@ struct Node { void set_default_value(const SocketType &input); bool equals_value(const Node &other, const SocketType &input) const; void copy_value(const SocketType &input, const Node &other, const SocketType &other_input); - void set_value(const SocketType &input, const Node &other, const SocketType &other_input); /* equals */ bool equals(const Node &other) const; @@ -175,11 +119,6 @@ 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); - } - SocketModifiedFlags socket_modified; template<typename T> void set_if_different(const SocketType &input, T value); |