Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesdna/DNA_node_types.h')
-rw-r--r--source/blender/makesdna/DNA_node_types.h199
1 files changed, 161 insertions, 38 deletions
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 2e24b6ed78d..5ccdd5c6ac2 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -44,11 +44,19 @@ struct SpaceNode;
struct bNodeLink;
struct bNodeType;
struct bNodeTreeExec;
+struct bNodePreview;
+struct bNodeInstanceHash;
struct AnimData;
struct bGPdata;
struct uiBlock;
struct Image;
+/* In writefile.c: write deprecated DNA data,
+ * to ensure forward compatibility in 2.6x versions.
+ * Will be removed eventually.
+ */
+#define USE_NODE_COMPAT_CUSTOMNODES
+
#define NODE_MAXSTR 64
typedef struct bNodeStack {
@@ -79,13 +87,22 @@ typedef struct bNodeStack {
typedef struct bNodeSocket {
struct bNodeSocket *next, *prev, *new_sock;
+ IDProperty *prop; /* user-defined properties */
+
+ char identifier[64]; /* unique identifier for mapping */
+
char name[64]; /* MAX_NAME */
+ /* XXX deprecated, only used for the Image and OutputFile nodes,
+ * should be removed at some point.
+ */
void *storage; /* custom storage */
short type, flag;
short limit; /* max. number of links */
- short pad1;
+ short in_out; /* input/output type */
+ struct bNodeSocketType *typeinfo; /* runtime type information */
+ char idname[64]; /* runtime type identifier */
float locx, locy;
@@ -98,11 +115,14 @@ typedef struct bNodeSocket {
int resizemode; /* compositor resize mode of the socket */
void *cache; /* cached data from execution */
- /* internal data to retrieve relations and groups */
- int own_index; /* group socket identifiers, to find matching pairs after reading files */
+ /* internal data to retrieve relations and groups
+ * DEPRECATED, now uses the generic identifier string instead
+ */
+ int own_index DNA_DEPRECATED; /* group socket identifiers, to find matching pairs after reading files */
/* XXX deprecated, only used for restoring old group node links */
int to_index DNA_DEPRECATED;
- struct bNodeSocket *groupsock;
+ /* XXX deprecated, still forward compatible since verification restores pointer from matching own_index. */
+ struct bNodeSocket *groupsock DNA_DEPRECATED;
struct bNodeLink *link; /* a link pointer, set in ntreeUpdateTree */
@@ -111,31 +131,34 @@ typedef struct bNodeSocket {
} bNodeSocket;
/* sock->type */
+#define SOCK_CUSTOM -1 /* socket has no integer type */
#define SOCK_FLOAT 0
#define SOCK_VECTOR 1
#define SOCK_RGBA 2
#define SOCK_SHADER 3
#define SOCK_BOOLEAN 4
-#define SOCK_MESH 5
+#define __SOCK_MESH 5 /* deprecated */
#define SOCK_INT 6
#define SOCK_STRING 7
#define NUM_SOCKET_TYPES 8 /* must be last! */
/* socket side (input/output) */
-#define SOCK_IN 1
-#define SOCK_OUT 2
+typedef enum eNodeSocketInOut {
+ SOCK_IN = 1,
+ SOCK_OUT = 2
+} eNodeSocketInOut;
/* sock->flag, first bit is select */
/* hidden is user defined, to hide unused */
#define SOCK_HIDDEN 2
/* for quick check if socket is linked */
-#define SOCK_IN_USE 4 /* XXX deprecated */
+#define SOCK_IN_USE 4
/* unavailable is for dynamic sockets */
#define SOCK_UNAVAIL 8
- /* dynamic socket (can be modified by user) */
-#define SOCK_DYNAMIC 16
- /* group socket should not be exposed */
-#define SOCK_INTERNAL 32
+ /* DEPRECATED dynamic socket (can be modified by user) */
+#define __SOCK_DYNAMIC 16
+ /* DEPRECATED group socket should not be exposed */
+#define __SOCK_INTERNAL 32
/* socket collapsed in UI */
#define SOCK_COLLAPSED 64
/* hide socket value, if it gets auto default */
@@ -144,19 +167,18 @@ typedef struct bNodeSocket {
/* DEPRECATED, only kept here to avoid reusing the flag */
#define SOCK_AUTO_HIDDEN__DEPRECATED 256
-typedef struct bNodePreview {
- unsigned char *rect;
- short xsize, ysize;
- int pad;
-} bNodePreview;
-
/* limit data in bNode to what we want to see saved? */
typedef struct bNode {
struct bNode *next, *prev, *new_node;
+
+ IDProperty *prop; /* user-defined properties */
+
+ struct bNodeType *typeinfo; /* runtime type information */
+ char idname[64]; /* runtime type identifier */
char name[64]; /* MAX_NAME */
int flag;
- short type, pad2;
+ short type, pad;
short done, level; /* both for dependency and sorting */
short lasty, menunr; /* lasty: check preview render status, menunr: browse ID blocks */
short stack_index; /* for groupnode, offset in global caller stack */
@@ -186,10 +208,17 @@ typedef struct bNode {
rctf totr; /* entire boundbox (worldspace) */
rctf butr; /* optional buttons area */
rctf prvr; /* optional preview area */
- bNodePreview *preview; /* optional preview image */
+ /* XXX TODO
+ * Node totr size depends on the prvr size, which in turn is determined from preview size.
+ * In earlier versions bNodePreview was stored directly in nodes, but since now there can be
+ * multiple instances using different preview images it is possible that required node size varies between instances.
+ * preview_xsize, preview_ysize defines a common reserved size for preview rect for now,
+ * could be replaced by more accurate node instance drawing, but that requires removing totr from DNA
+ * and replacing all uses with per-instance data.
+ */
+ short preview_xsize, preview_ysize; /* reserved size of the preview rect */
+ int pad2;
struct uiBlock *block; /* runtime during drawing */
-
- struct bNodeType *typeinfo; /* lookup of callbacks and defaults */
} bNode;
/* node->flag */
@@ -200,7 +229,7 @@ typedef struct bNode {
#define NODE_ACTIVE 16
#define NODE_ACTIVE_ID 32
#define NODE_DO_OUTPUT 64
-#define NODE_GROUP_EDIT 128
+#define __NODE_GROUP_EDIT 128 /* DEPRECATED */
/* free test flag, undefined */
#define NODE_TEST 256
/* node is disabled */
@@ -221,6 +250,12 @@ typedef struct bNode {
#define NODE_ACTIVE_TEXTURE (1<<14)
/* use a custom color for the node */
#define NODE_CUSTOM_COLOR (1<<15)
+ /* Node has been initialized
+ * This flag indicates the node->typeinfo->init function has been called.
+ * In case of undefined type at creation time this can be delayed until
+ * until the node type is registered.
+ */
+#define NODE_INIT (1<<16)
/* node->update */
/* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
@@ -229,6 +264,36 @@ typedef struct bNode {
#define NODE_UPDATE 0xFFFF /* generic update flag (includes all others) */
#define NODE_UPDATE_ID 1 /* associated id data block has changed */
+/* Unique hash key for identifying node instances
+ * Defined as a struct because DNA does not support other typedefs.
+ */
+typedef struct bNodeInstanceKey
+{
+ unsigned int value;
+} bNodeInstanceKey;
+
+/* Base struct for entries in node instance hash.
+ * WARNING: pointers are cast to this struct internally,
+ * it must be first member in hash entry structs!
+ */
+typedef struct bNodeInstanceHashEntry {
+ bNodeInstanceKey key;
+
+ /* tags for cleaning the cache */
+ short tag;
+ short pad;
+} bNodeInstanceHashEntry;
+
+
+typedef struct bNodePreview {
+ bNodeInstanceHashEntry hash_entry; /* must be first */
+
+ unsigned char *rect;
+ short xsize, ysize;
+ int pad;
+} bNodePreview;
+
+
typedef struct bNodeLink {
struct bNodeLink *next, *prev;
@@ -263,7 +328,13 @@ typedef struct bNodeTree {
ID id;
struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
+ struct bNodeTreeType *typeinfo; /* runtime type information */
+ char idname[64]; /* runtime type identifier */
+
+ struct StructRNA *interface_type; /* runtime RNA type of the group interface */
+
struct bGPdata *gpd; /* grease pencil data */
+ float view_center[2]; /* node tree stores own offset for consistent editor view */
ListBase nodes, links;
@@ -272,8 +343,11 @@ typedef struct bNodeTree {
* will increase this counter */
int flag;
int update; /* update flags */
+ short is_updating; /* flag to prevent reentrant update calls */
+ short done; /* generic temporary flag for recursion check (DFS/BFS) */
+ int pad2;
- int nodetype; /* specific node type this tree is used for */
+ int nodetype DNA_DEPRECATED; /* specific node type this tree is used for */
short edit_quality; /* Quality setting when editing */
short render_quality; /* Quality setting when rendering */
@@ -281,7 +355,16 @@ typedef struct bNodeTree {
rctf viewer_border;
- ListBase inputs, outputs; /* external sockets for group nodes */
+ /* Lists of bNodeSocket to hold default values and own_index.
+ * Warning! Don't make links to these sockets, input/output nodes are used for that.
+ * These sockets are used only for generating external interfaces.
+ */
+ ListBase inputs, outputs;
+
+ /* Node preview hash table
+ * Only available in base node trees (e.g. scene->node_tree)
+ */
+ struct bNodeInstanceHash *previews;
/* execution data */
/* XXX It would be preferable to completely move this data out of the underlying node tree,
@@ -302,10 +385,10 @@ typedef struct bNodeTree {
} bNodeTree;
/* ntree->type, index */
+#define NTREE_CUSTOM -1 /* for dynamically registered custom types */
#define NTREE_SHADER 0
#define NTREE_COMPOSIT 1
#define NTREE_TEXTURE 2
-#define NUM_NTREE_TYPES 3
/* ntree->init, flag */
#define NTREE_TYPE_INIT 1
@@ -320,18 +403,24 @@ typedef struct bNodeTree {
/* XXX not nice, but needed as a temporary flags
* for group updates after library linking.
*/
-#define NTREE_DO_VERSIONS_GROUP_EXPOSE 1024
+#define NTREE_DO_VERSIONS_GROUP_EXPOSE_2_56_2 1024 /* changes from r35033 */
+#define NTREE_DO_VERSIONS_CUSTOMNODES_GROUP 2048 /* custom_nodes branch: remove links to node tree sockets */
+#define NTREE_DO_VERSIONS_CUSTOMNODES_GROUP_CREATE_INTERFACE 4096 /* custom_nodes branch: create group input/output nodes */
/* ntree->update */
-#define NTREE_UPDATE 0xFFFF /* generic update flag (includes all others) */
-#define NTREE_UPDATE_LINKS 1 /* links have been added or removed */
-#define NTREE_UPDATE_NODES 2 /* nodes or sockets have been added or removed */
-#define NTREE_UPDATE_GROUP_IN 16 /* group inputs have changed */
-#define NTREE_UPDATE_GROUP_OUT 32 /* group outputs have changed */
-#define NTREE_UPDATE_GROUP 48 /* group has changed (generic flag including all other group flags) */
-
-
-/* socket value structs for input buttons */
+typedef enum eNodeTreeUpdate {
+ NTREE_UPDATE = 0xFFFF, /* generic update flag (includes all others) */
+ NTREE_UPDATE_LINKS = 1, /* links have been added or removed */
+ NTREE_UPDATE_NODES = 2, /* nodes or sockets have been added or removed */
+ NTREE_UPDATE_GROUP_IN = 16, /* group inputs have changed */
+ NTREE_UPDATE_GROUP_OUT = 32, /* group outputs have changed */
+ NTREE_UPDATE_GROUP = 48 /* group has changed (generic flag including all other group flags) */
+} eNodeTreeUpdate;
+
+
+/* socket value structs for input buttons
+ * DEPRECATED now using ID properties
+ */
typedef struct bNodeSocketValueInt {
int subtype; /* RNA subtype */
@@ -731,8 +820,6 @@ typedef struct NodeShaderScript {
char bytecode_hash[64];
char *bytecode;
-
- IDProperty *prop;
} NodeShaderScript;
typedef struct NodeShaderTangent {
@@ -758,6 +845,9 @@ typedef struct NodeShaderNormalMap {
#define NODE_FRAME_SHRINK 1 /* keep the bounding box minimal */
#define NODE_FRAME_RESIZEABLE 2 /* test flag, if frame can be resized by user */
+/* proxy node flags */
+#define NODE_PROXY_AUTOTYPE 1 /* automatically change output type based on link */
+
/* comp channel matte */
#define CMP_NODE_CHANNEL_MATTE_CS_RGB 1
#define CMP_NODE_CHANNEL_MATTE_CS_HSV 2
@@ -857,6 +947,39 @@ typedef struct NodeShaderNormalMap {
#define CMP_NODE_MASK_MBLUR_SAMPLES_MAX 64
+/* geometry output socket defines */
+#define GEOM_OUT_GLOB 0
+#define GEOM_OUT_LOCAL 1
+#define GEOM_OUT_VIEW 2
+#define GEOM_OUT_ORCO 3
+#define GEOM_OUT_UV 4
+#define GEOM_OUT_NORMAL 5
+#define GEOM_OUT_VCOL 6
+#define GEOM_OUT_VCOL_ALPHA 7
+#define GEOM_OUT_FRONTBACK 8
+
+/* material input socket defines */
+#define MAT_IN_COLOR 0
+#define MAT_IN_SPEC 1
+#define MAT_IN_REFL 2
+#define MAT_IN_NORMAL 3
+#define MAT_IN_MIR 4
+#define MAT_IN_AMB 5
+#define MAT_IN_EMIT 6
+#define MAT_IN_SPECTRA 7
+#define MAT_IN_RAY_MIRROR 8
+#define MAT_IN_ALPHA 9
+#define MAT_IN_TRANSLUCENCY 10
+#define NUM_MAT_IN 11 /* for array size */
+
+/* material output socket defines */
+#define MAT_OUT_COLOR 0
+#define MAT_OUT_ALPHA 1
+#define MAT_OUT_NORMAL 2
+#define MAT_OUT_DIFFUSE 3
+#define MAT_OUT_SPEC 4
+#define MAT_OUT_AO 5
+
/* image */
#define CMP_NODE_IMAGE_USE_STRAIGHT_OUTPUT 1