Blender V5.0
node_type.h File Reference
#include "graph/node_enum.h"
#include "util/array.h"
#include "util/map.h"
#include "util/param.h"
#include "util/thread.h"
#include "util/unique_ptr.h"
#include "util/vector.h"

Go to the source code of this file.

Classes

struct  SocketType
struct  NodeType

Macros

#define NODE_DECLARE
#define NODE_DEFINE(structname)
#define NODE_ABSTRACT_DECLARE
#define NODE_ABSTRACT_DEFINE(structname)
#define SOCKET_OFFSETOF(T, name)
#define SOCKET_SIZEOF(T, name)
#define SOCKET_DEFINE(name, ui_name, default_value, datatype, TYPE, flags, ...)
#define SOCKET_BOOLEAN(name, ui_name, default_value, ...)
#define SOCKET_INT(name, ui_name, default_value, ...)
#define SOCKET_UINT(name, ui_name, default_value, ...)
#define SOCKET_UINT64(name, ui_name, default_value, ...)
#define SOCKET_FLOAT(name, ui_name, default_value, ...)
#define SOCKET_COLOR(name, ui_name, default_value, ...)
#define SOCKET_VECTOR(name, ui_name, default_value, ...)
#define SOCKET_POINT(name, ui_name, default_value, ...)
#define SOCKET_NORMAL(name, ui_name, default_value, ...)
#define SOCKET_POINT2(name, ui_name, default_value, ...)
#define SOCKET_STRING(name, ui_name, default_value, ...)
#define SOCKET_TRANSFORM(name, ui_name, default_value, ...)
#define SOCKET_ENUM(name, ui_name, values, default_value, ...)
#define SOCKET_NODE(name, ui_name, node_type, ...)
#define SOCKET_BOOLEAN_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_INT_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_FLOAT_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_COLOR_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_VECTOR_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_POINT_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_NORMAL_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_POINT2_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_STRING_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_TRANSFORM_ARRAY(name, ui_name, default_value, ...)
#define SOCKET_NODE_ARRAY(name, ui_name, node_type, ...)
#define SOCKET_IN_BOOLEAN(name, ui_name, default_value, ...)
#define SOCKET_IN_INT(name, ui_name, default_value, ...)
#define SOCKET_IN_FLOAT(name, ui_name, default_value, ...)
#define SOCKET_IN_COLOR(name, ui_name, default_value, ...)
#define SOCKET_IN_VECTOR(name, ui_name, default_value, ...)
#define SOCKET_IN_POINT(name, ui_name, default_value, ...)
#define SOCKET_IN_NORMAL(name, ui_name, default_value, ...)
#define SOCKET_IN_STRING(name, ui_name, default_value, ...)
#define SOCKET_IN_CLOSURE(name, ui_name, ...)
#define SOCKET_OUT_BOOLEAN(name, ui_name)
#define SOCKET_OUT_INT(name, ui_name)
#define SOCKET_OUT_FLOAT(name, ui_name)
#define SOCKET_OUT_COLOR(name, ui_name)
#define SOCKET_OUT_VECTOR(name, ui_name)
#define SOCKET_OUT_POINT(name, ui_name)
#define SOCKET_OUT_NORMAL(name, ui_name)
#define SOCKET_OUT_CLOSURE(name, ui_name)
#define SOCKET_OUT_STRING(name, ui_name)
#define SOCKET_OUT_ENUM(name, ui_name)

Typedefs

using SocketModifiedFlags = uint64_t

Macro Definition Documentation

◆ NODE_ABSTRACT_DECLARE

#define NODE_ABSTRACT_DECLARE
Value:
template<typename T> static const NodeType *register_base_type(); \
static const NodeType *get_node_base_type();

Definition at line 171 of file node_type.h.

◆ NODE_ABSTRACT_DEFINE

#define NODE_ABSTRACT_DEFINE ( structname)
Value:
const NodeType *structname::get_node_base_type() \
{ \
/* Base types constructed in this getter to ensure correct initialization \
* order. Regular types are not so they are auto-registered for XML parsing. */ \
static const NodeType *node_base_type = register_base_type<structname>(); \
return node_base_type; \
} \
template<typename T> const NodeType *structname::register_base_type()

Definition at line 175 of file node_type.h.

◆ NODE_DECLARE

#define NODE_DECLARE
Value:
static const NodeType *get_node_type(); \
template<typename T> static const NodeType *register_type(); \
static unique_ptr<Node> create(const NodeType *type); \
static const NodeType *node_type_; \
static thread_mutex node_type_mutex_;
std::mutex thread_mutex
Definition thread.h:27

Definition at line 145 of file node_type.h.

◆ NODE_DEFINE

#define NODE_DEFINE ( structname)
Value:
const NodeType *structname::node_type_ = nullptr; \
thread_mutex structname::node_type_mutex_; \
unique_ptr<Node> structname::create(const NodeType *) \
{ \
return make_unique<structname>(); \
} \
const NodeType *structname::get_node_type() \
{ \
if (node_type_ == nullptr) { \
thread_scoped_lock lock(node_type_mutex_); \
if (node_type_ == nullptr) { \
node_type_ = structname::register_type<structname>(); \
} \
} \
return node_type_; \
} \
template<typename T> const NodeType *structname::register_type()
volatile int lock
std::unique_lock< std::mutex > thread_scoped_lock
Definition thread.h:28

Definition at line 152 of file node_type.h.

◆ SOCKET_BOOLEAN

◆ SOCKET_BOOLEAN_ARRAY

#define SOCKET_BOOLEAN_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<bool>, SocketType::BOOLEAN_ARRAY, 0, ##__VA_ARGS__)
@ BOOLEAN_ARRAY
Definition node_type.h:45

Definition at line 254 of file node_type.h.

Referenced by NODE_DEFINE().

◆ SOCKET_COLOR

#define SOCKET_COLOR ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, float3, SocketType::COLOR, 0, ##__VA_ARGS__)

Definition at line 213 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_COLOR_ARRAY

#define SOCKET_COLOR_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<float3>, SocketType::COLOR_ARRAY, 0, ##__VA_ARGS__)

Definition at line 262 of file node_type.h.

Referenced by NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_DEFINE

#define SOCKET_DEFINE ( name,
ui_name,
default_value,
datatype,
TYPE,
flags,
... )
Value:
{ \
static datatype defval = default_value; \
static_assert(std::is_same_v<decltype(T::name), datatype>); \
type->register_input(ustring(#name), \
ustring(ui_name), \
TYPE, \
&defval, \
nullptr, \
nullptr, \
flags, \
##__VA_ARGS__); \
}
#define T
#define SOCKET_OFFSETOF(T, name)
Definition node_type.h:186

Definition at line 188 of file node_type.h.

◆ SOCKET_ENUM

◆ SOCKET_FLOAT

#define SOCKET_FLOAT ( name,
ui_name,
default_value,
... )

◆ SOCKET_FLOAT_ARRAY

#define SOCKET_FLOAT_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<float>, SocketType::FLOAT_ARRAY, 0, ##__VA_ARGS__)

Definition at line 259 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_IN_BOOLEAN

#define SOCKET_IN_BOOLEAN ( name,
ui_name,
default_value,
... )
Value:
ui_name, \
default_value, \
bool, \
##__VA_ARGS__)

Definition at line 302 of file node_type.h.

Referenced by NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_IN_CLOSURE

#define SOCKET_IN_CLOSURE ( name,
ui_name,
... )
Value:
type->register_input(ustring(#name), \
ustring(ui_name), \
0, \
nullptr, \
nullptr, \
nullptr, \
##__VA_ARGS__)

Definition at line 361 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_IN_COLOR

◆ SOCKET_IN_FLOAT

◆ SOCKET_IN_INT

#define SOCKET_IN_INT ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, int, SocketType::INT, SocketType::LINKABLE, ##__VA_ARGS__)

Definition at line 310 of file node_type.h.

◆ SOCKET_IN_NORMAL

#define SOCKET_IN_NORMAL ( name,
ui_name,
default_value,
... )

◆ SOCKET_IN_POINT

#define SOCKET_IN_POINT ( name,
ui_name,
default_value,
... )

◆ SOCKET_IN_STRING

#define SOCKET_IN_STRING ( name,
ui_name,
default_value,
... )
Value:
ui_name, \
default_value, \
ustring, \
##__VA_ARGS__)

Definition at line 353 of file node_type.h.

Referenced by NODE_DEFINE().

◆ SOCKET_IN_VECTOR

#define SOCKET_IN_VECTOR ( name,
ui_name,
default_value,
... )

◆ SOCKET_INT

#define SOCKET_INT ( name,
ui_name,
default_value,
... )

◆ SOCKET_INT_ARRAY

#define SOCKET_INT_ARRAY ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, array<int>, SocketType::INT_ARRAY, 0, ##__VA_ARGS__)

Definition at line 257 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_NODE

#define SOCKET_NODE ( name,
ui_name,
node_type,
... )
Value:
{ \
static Node *defval = nullptr; \
assert(SOCKET_SIZEOF(T, name) == sizeof(Node *)); \
type->register_input(ustring(#name), \
ustring(ui_name), \
(const void *)&defval, \
nullptr, \
node_type, \
##__VA_ARGS__); \
}

Definition at line 240 of file node_type.h.

Referenced by NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_NODE_ARRAY

#define SOCKET_NODE_ARRAY ( name,
ui_name,
node_type,
... )
Value:
{ \
static array<Node *> defval = {}; \
assert(SOCKET_SIZEOF(T, name) == sizeof(array<Node *>)); \
type->register_input(ustring(#name), \
ustring(ui_name), \
&defval, \
nullptr, \
node_type, \
##__VA_ARGS__); \
}

Definition at line 288 of file node_type.h.

Referenced by NODE_ABSTRACT_DEFINE().

◆ SOCKET_NORMAL

#define SOCKET_NORMAL ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, float3, SocketType::NORMAL, 0, ##__VA_ARGS__)

Definition at line 219 of file node_type.h.

◆ SOCKET_NORMAL_ARRAY

#define SOCKET_NORMAL_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<float3>, SocketType::NORMAL_ARRAY, 0, ##__VA_ARGS__)

Definition at line 271 of file node_type.h.

◆ SOCKET_OFFSETOF

#define SOCKET_OFFSETOF ( T,
name )
Value:
#define offsetof(t, d)

Definition at line 186 of file node_type.h.

◆ SOCKET_OUT_BOOLEAN

#define SOCKET_OUT_BOOLEAN ( name,
ui_name )
Value:
{ \
type->register_output(ustring(#name), ustring(ui_name), SocketType::BOOLEAN); \
}

Definition at line 372 of file node_type.h.

◆ SOCKET_OUT_CLOSURE

◆ SOCKET_OUT_COLOR

◆ SOCKET_OUT_ENUM

#define SOCKET_OUT_ENUM ( name,
ui_name )
Value:
{ \
type->register_output(ustring(#name), ustring(ui_name), SocketType::ENUM); \
}

Definition at line 408 of file node_type.h.

◆ SOCKET_OUT_FLOAT

◆ SOCKET_OUT_INT

#define SOCKET_OUT_INT ( name,
ui_name )
Value:
{ \
type->register_output(ustring(#name), ustring(ui_name), SocketType::INT); \
}

Definition at line 376 of file node_type.h.

◆ SOCKET_OUT_NORMAL

#define SOCKET_OUT_NORMAL ( name,
ui_name )
Value:
{ \
type->register_output(ustring(#name), ustring(ui_name), SocketType::NORMAL); \
}

Definition at line 396 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_OUT_POINT

#define SOCKET_OUT_POINT ( name,
ui_name )
Value:
{ \
type->register_output(ustring(#name), ustring(ui_name), SocketType::POINT); \
}

Definition at line 392 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_OUT_STRING

#define SOCKET_OUT_STRING ( name,
ui_name )
Value:
{ \
type->register_output(ustring(#name), ustring(ui_name), SocketType::STRING); \
}

Definition at line 404 of file node_type.h.

◆ SOCKET_OUT_VECTOR

#define SOCKET_OUT_VECTOR ( name,
ui_name )

◆ SOCKET_POINT

#define SOCKET_POINT ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, float3, SocketType::POINT, 0, ##__VA_ARGS__)

Definition at line 217 of file node_type.h.

Referenced by NODE_DEFINE().

◆ SOCKET_POINT2

#define SOCKET_POINT2 ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, float2, SocketType::POINT2, 0, ##__VA_ARGS__)

Definition at line 221 of file node_type.h.

Referenced by NODE_DEFINE().

◆ SOCKET_POINT2_ARRAY

#define SOCKET_POINT2_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<float2>, SocketType::POINT2_ARRAY, 0, ##__VA_ARGS__)

Definition at line 274 of file node_type.h.

◆ SOCKET_POINT_ARRAY

#define SOCKET_POINT_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<float3>, SocketType::POINT_ARRAY, 0, ##__VA_ARGS__)

Definition at line 268 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_SIZEOF

#define SOCKET_SIZEOF ( T,
name )
Value:
(sizeof(T::name))

Definition at line 187 of file node_type.h.

◆ SOCKET_STRING

#define SOCKET_STRING ( name,
ui_name,
default_value,
... )

◆ SOCKET_STRING_ARRAY

#define SOCKET_STRING_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<ustring>, SocketType::STRING_ARRAY, 0, ##__VA_ARGS__)

Definition at line 277 of file node_type.h.

◆ SOCKET_TRANSFORM

#define SOCKET_TRANSFORM ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, Transform, SocketType::TRANSFORM, 0, ##__VA_ARGS__)

Definition at line 225 of file node_type.h.

Referenced by NODE_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_TRANSFORM_ARRAY

#define SOCKET_TRANSFORM_ARRAY ( name,
ui_name,
default_value,
... )
Value:
ui_name, \
default_value, \
0, \
##__VA_ARGS__)
@ TRANSFORM_ARRAY
Definition node_type.h:54

Definition at line 280 of file node_type.h.

Referenced by NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_UINT

#define SOCKET_UINT ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, uint, SocketType::UINT, 0, ##__VA_ARGS__)
unsigned int uint

Definition at line 207 of file node_type.h.

Referenced by NODE_ABSTRACT_DEFINE(), NODE_DEFINE(), NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_UINT64

#define SOCKET_UINT64 ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, uint64_t, SocketType::UINT64, 0, ##__VA_ARGS__)
unsigned long long int uint64_t

Definition at line 209 of file node_type.h.

Referenced by NODE_DEFINE().

◆ SOCKET_VECTOR

#define SOCKET_VECTOR ( name,
ui_name,
default_value,
... )
Value:
SOCKET_DEFINE(name, ui_name, default_value, float3, SocketType::VECTOR, 0, ##__VA_ARGS__)

Definition at line 215 of file node_type.h.

Referenced by NODE_DEFINE(), and NODE_DEFINE().

◆ SOCKET_VECTOR_ARRAY

#define SOCKET_VECTOR_ARRAY ( name,
ui_name,
default_value,
... )
Value:
name, ui_name, default_value, array<float3>, SocketType::VECTOR_ARRAY, 0, ##__VA_ARGS__)

Definition at line 265 of file node_type.h.

Referenced by NODE_DEFINE().

Typedef Documentation

◆ SocketModifiedFlags

Definition at line 21 of file node_type.h.