23 #define NODE_SOCKET_API_BASE_METHODS(type_, name, string_name) \
24 const SocketType *get_##name##_socket() const \
28 const Node *self_node = this; \
29 static const SocketType *socket = self_node->type->find_input(ustring(string_name)); \
32 bool name##_is_modified() const \
34 const SocketType *socket = get_##name##_socket(); \
35 return socket_is_modified(*socket); \
37 void tag_##name##_modified() \
39 const SocketType *socket = get_##name##_socket(); \
40 socket_modified |= socket->modified_flag_bit; \
42 type_ const &get_##name() const \
44 const SocketType *socket = get_##name##_socket(); \
45 return get_socket_value<type_>(this, *socket); \
48 #define NODE_SOCKET_API_BASE(type_, name, string_name) \
53 NODE_SOCKET_API_BASE_METHODS(type_, name, string_name)
55 #define NODE_SOCKET_API(type_, name) \
56 NODE_SOCKET_API_BASE(type_, name, #name) \
57 void set_##name(type_ value) \
59 const SocketType *socket = get_##name##_socket(); \
60 this->set(*socket, value); \
63 #define NODE_SOCKET_API_ARRAY(type_, name) \
64 NODE_SOCKET_API_BASE(type_, name, #name) \
65 void set_##name(type_ &value) \
67 const SocketType *socket = get_##name##_socket(); \
68 this->set(*socket, value); \
72 const SocketType *socket = get_##name##_socket(); \
73 return get_socket_value<type_>(this, *socket); \
76 #define NODE_SOCKET_API_STRUCT_MEMBER(type_, name, member) \
77 NODE_SOCKET_API_BASE_METHODS(type_, name##_##member, #name "." #member) \
78 void set_##name##_##member(type_ value) \
80 const SocketType *socket = get_##name##_##member##_socket(); \
81 this->set(*socket, value); \
108 template<
class ValueType,
typename std::enable_if_t<std::is_enum_v<ValueType>> * =
nullptr>
111 static_assert(
sizeof(ValueType) <=
sizeof(
int),
"Enumerator type should fit int");
112 set(
input,
static_cast<int>(value));
#define CCL_NAMESPACE_END
ccl_global KernelShaderEvalInput * input
uint64_t SocketModifiedFlags
bool has_default_value(const SocketType &input) const
const array< float3 > & get_float3_array(const SocketType &input) const
static T & get_socket_value(const Node *node, const SocketType &socket)
bool equals(const Node &other) const
const array< float > & get_float_array(const SocketType &input) const
const array< int > & get_int_array(const SocketType &input) const
float get_float(const SocketType &input) const
Transform get_transform(const SocketType &input) const
void set(const SocketType &input, bool value)
void set_value(const SocketType &input, const Node &other, const SocketType &other_input)
void dereference_all_used_nodes()
float3 get_float3(const SocketType &input) const
void set_default_value(const SocketType &input)
const array< bool > & get_bool_array(const SocketType &input) const
void copy_value(const SocketType &input, const Node &other, const SocketType &other_input)
const array< Node * > & get_node_array(const SocketType &input) const
size_t get_total_size_in_bytes() const
SocketModifiedFlags socket_modified
bool get_bool(const SocketType &input) const
int reference_count() const
float2 get_float2(const SocketType &input) const
const array< ustring > & get_string_array(const SocketType &input) const
const array< float2 > & get_float2_array(const SocketType &input) const
bool socket_is_modified(const SocketType &input) const
ustring get_string(const SocketType &input) const
bool is_a(const NodeType *type)
void set_if_different(const SocketType &input, T value)
Node * get_node(const SocketType &input) const
const NodeOwner * get_owner() const
uint get_uint(const SocketType &input) const
Node(const NodeType *type, ustring name=ustring())
int get_int(const SocketType &input) const
const array< Transform > & get_transform_array(const SocketType &input) const
void clear_reference_count()
bool equals_value(const Node &other, const SocketType &input) const
void print_modified_sockets() const
void set_owner(const NodeOwner *owner_)