Fix #34040: Moving Normal Node with enabled Cycles Material Preview crashes
[blender.git] / source / blender / blenkernel / BKE_node.h
index e8f863fbbfd11fd7aa7c785732f8cb7f472e168d..5024b3636c5b2453a6dbc02299fdd36faf65b402 100644 (file)
@@ -34,8 +34,6 @@
 
 #include "DNA_listBase.h"
 
-#include "RNA_types.h"
-
 /* not very important, but the stack solver likes to know a maximum */
 #define MAX_SOCKET     64
 
@@ -64,6 +62,8 @@ struct Tex;
 struct SpaceNode;
 struct ARegion;
 struct Object;
+struct ColorManagedViewSettings;
+struct ColorManagedDisplaySettings;
 
 /* ************** NODE TYPE DEFINITIONS ***** */
 
@@ -80,7 +80,7 @@ typedef struct bNodeSocketTemplate {
        char name[64];  /* MAX_NAME */
        float val1, val2, val3, val4;   /* default alloc value for inputs */
        float min, max;
-       PropertySubType subtype;
+       int subtype;  /* would use PropertySubType but this is a bad level include to use RNA */
        int flag;
        
        /* after this line is used internal only */
@@ -88,8 +88,8 @@ typedef struct bNodeSocketTemplate {
 } bNodeSocketTemplate;
 
 typedef void (*NodeSocketButtonFunction)(const struct bContext *C, struct uiBlock *block, 
-                                                                                struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock,
-                                                                                const char *name, int x, int y, int width);
+                                         struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock,
+                                         const char *name, int x, int y, int width);
 
 /** Defines a socket type.
  * Defines the appearance and behavior of a socket in the UI.
@@ -146,7 +146,7 @@ typedef struct bNodeType {
        /// Additional parameters in the side panel.
        void (*uifuncbut)(struct uiLayout *, struct bContext *C, struct PointerRNA *ptr);
        /// Additional drawing on backdrop.
-       void (*uibackdropfunc)(struct SpaceNode* snode, struct ImBuf* backdrop, struct bNode* node, int x, int y);
+       void (*uibackdropfunc)(struct SpaceNode *snode, struct ImBuf *backdrop, struct bNode *node, int x, int y);
 
        /// Draw a node socket. Default draws the input value button.
        NodeSocketButtonFunction drawinputfunc;
@@ -191,10 +191,8 @@ typedef struct bNodeType {
        struct bNodeTree *(*group_edit_set)(struct bNode *node, int edit);
        void (*group_edit_clear)(struct bNode *node);
        
-       /* Generate a temporary list of internal links (bNodeLink), for muting and disconnect operators.
-        * Result must be freed by caller!
-        */
-       ListBase (*internal_connect)(struct bNodeTree *, struct bNode *node);
+       /* Update the internal links list, for muting and disconnect operators. */
+       void (*update_internal_links)(struct bNodeTree *, struct bNode *node);
        
        /* **** execution callbacks **** */
        void *(*initexecfunc)(struct bNode *node);
@@ -245,6 +243,7 @@ typedef struct bNodeType {
 #define NODE_CLASS_PARTICLES           25
 #define NODE_CLASS_TRANSFORM           30
 #define NODE_CLASS_COMBINE                     31
+#define NODE_CLASS_SCRIPT                      32
 #define NODE_CLASS_SHADER                      40
 #define NODE_CLASS_LAYOUT                      100
 
@@ -291,7 +290,7 @@ typedef struct bNodeTreeType {
        int (*validate_link)(struct bNodeTree *ntree, struct bNodeLink *link);
 
        /* Default internal linking. */
-       ListBase (*internal_connect)(struct bNodeTree *, struct bNode *node);
+       void (*update_internal_links)(struct bNodeTree *, struct bNode *node);
 } bNodeTreeType;
 
 /* ************** GENERIC API, TREES *************** */
@@ -300,37 +299,47 @@ struct bNodeTreeType *ntreeGetType(int type);
 struct bNodeType *ntreeGetNodeType(struct bNodeTree *ntree);
 struct bNodeSocketType *ntreeGetSocketType(int type);
 
-struct bNodeTree *ntreeAddTree(const char *name, int type, int nodetype);
-void                   ntreeInitTypes(struct bNodeTree *ntree);
+struct bNodeTree *ntreeAddTree(struct Main *bmain, const char *name, int type, int nodetype);
+void              ntreeInitTypes(struct bNodeTree *ntree);
 
-void                   ntreeFreeTree(struct bNodeTree *ntree);
+/* copy/free funcs, need to manage ID users */
+void              ntreeFreeTree_ex(struct bNodeTree *ntree, const short do_id_user);
+void              ntreeFreeTree(struct bNodeTree *ntree);
+struct bNodeTree *ntreeCopyTree_ex(struct bNodeTree *ntree, const short do_id_user);
 struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree);
-void                   ntreeSwitchID(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sce_to);
-void                   ntreeMakeLocal(struct bNodeTree *ntree);
-int                            ntreeHasType(struct bNodeTree *ntree, int type);
+void              ntreeSwitchID_ex(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sce_to, const short do_id_user);
+void              ntreeSwitchID(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sce_to);
+/* node->id user count */
+void              ntreeUserIncrefID(struct bNodeTree *ntree);
+void              ntreeUserDecrefID(struct bNodeTree *ntree);
+
 
-void                   ntreeUpdateTree(struct bNodeTree *ntree);
+struct bNodeTree *ntreeFromID(struct ID *id);
+
+void              ntreeMakeLocal(struct bNodeTree *ntree);
+int               ntreeHasType(struct bNodeTree *ntree, int type);
+void              ntreeUpdateTree(struct bNodeTree *ntree);
 /* XXX Currently each tree update call does call to ntreeVerifyNodes too.
  * Some day this should be replaced by a decent depsgraph automatism!
  */
-void                   ntreeVerifyNodes(struct Main *main, struct ID *id);
+void              ntreeVerifyNodes(struct Main *main, struct ID *id);
 
-void                   ntreeGetDependencyList(struct bNodeTree *ntree, struct bNode ***deplist, int *totnodes);
+void              ntreeGetDependencyList(struct bNodeTree *ntree, struct bNode ***deplist, int *totnodes);
 
 /* XXX old trees handle output flags automatically based on special output node types and last active selection.
  * new tree types have a per-output socket flag to indicate the final output to use explicitly.
  */
-void                   ntreeSetOutput(struct bNodeTree *ntree);
-void                   ntreeInitPreview(struct bNodeTree *, int xsize, int ysize);
-void                   ntreeClearPreview(struct bNodeTree *ntree);
+void            ntreeSetOutput(struct bNodeTree *ntree);
+void            ntreeInitPreview(struct bNodeTree *, int xsize, int ysize);
+void            ntreeClearPreview(struct bNodeTree *ntree);
 
-void                   ntreeFreeCache(struct bNodeTree *ntree);
+void            ntreeFreeCache(struct bNodeTree *ntree);
 
-int                            ntreeNodeExists(struct bNodeTree *ntree, struct bNode *testnode);
-int                            ntreeOutputExists(struct bNode *node, struct bNodeSocket *testsock);
+int             ntreeNodeExists(struct bNodeTree *ntree, struct bNode *testnode);
+int             ntreeOutputExists(struct bNode *node, struct bNodeSocket *testsock);
 struct bNodeTree *ntreeLocalize(struct bNodeTree *ntree);
-void                   ntreeLocalSync(struct bNodeTree *localtree, struct bNodeTree *ntree);
-void                   ntreeLocalMerge(struct bNodeTree *localtree, struct bNodeTree *ntree);
+void            ntreeLocalSync(struct bNodeTree *localtree, struct bNodeTree *ntree);
+void            ntreeLocalMerge(struct bNodeTree *localtree, struct bNodeTree *ntree);
 
 /* ************** GENERIC API, NODES *************** */
 
@@ -339,104 +348,116 @@ struct bNodeSocket *nodeInsertSocket(struct bNodeTree *ntree, struct bNode *node
 void nodeRemoveSocket(struct bNodeTree *ntree, struct bNode *node, struct bNodeSocket *sock);
 void nodeRemoveAllSockets(struct bNodeTree *ntree, struct bNode *node);
 
-void                   nodeAddToPreview(struct bNode *node, float col[4], int x, int y, int do_manage);
+void            nodeAddToPreview(struct bNode *node, const float col[4], int x, int y, int do_manage);
 
 struct bNode   *nodeAddNode(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
-void                   nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node);
-void                   nodeUniqueName(struct bNodeTree *ntree, struct bNode *node);
+void            nodeUnlinkNode(struct bNodeTree *ntree, struct bNode *node);
+void            nodeUniqueName(struct bNodeTree *ntree, struct bNode *node);
 
-void                   nodeRegisterType(struct bNodeTreeType *ttype, struct bNodeType *ntype);
-void                   nodeMakeDynamicType(struct bNode *node);
-int                            nodeDynamicUnlinkText(struct ID *txtid);
+void            nodeRegisterType(struct bNodeTreeType *ttype, struct bNodeType *ntype);
+void            nodeMakeDynamicType(struct bNode *node);
+int             nodeDynamicUnlinkText(struct ID *txtid);
 
-void                   nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
+void            nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
 struct bNode   *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node);
 
 struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
-void                   nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
-void                   nodeRemSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
-void                   nodeInternalRelink(struct bNodeTree *ntree, struct bNode *node);
+void            nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
+void            nodeRemSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
+void            nodeInternalRelink(struct bNodeTree *ntree, struct bNode *node);
 
-void                   nodeToView(struct bNode *node, float x, float y, float *rx, float *ry);
-void                   nodeFromView(struct bNode *node, float x, float y, float *rx, float *ry);
-void                   nodeAttachNode(struct bNode *node, struct bNode *parent);
-void                   nodeDetachNode(struct bNode *node);
+void            nodeToView(struct bNode *node, float x, float y, float *rx, float *ry);
+void            nodeFromView(struct bNode *node, float x, float y, float *rx, float *ry);
+int             nodeAttachNodeCheck(struct bNode *node, struct bNode *parent);
+void            nodeAttachNode(struct bNode *node, struct bNode *parent);
+void            nodeDetachNode(struct bNode *node);
 
-struct bNode   *nodeFindNodebyName(struct bNodeTree *ntree, const char *name);
-int                            nodeFindNode(struct bNodeTree *ntree, struct bNodeSocket *sock, struct bNode **nodep, int *sockindex, int *in_out);
+struct bNode   *nodeFindNodebyName(struct bNodeTree *ntree, const char *name);
+int             nodeFindNode(struct bNodeTree *ntree, struct bNodeSocket *sock, struct bNode **nodep, int *sockindex, int *in_out);
 
 struct bNodeLink *nodeFindLink(struct bNodeTree *ntree, struct bNodeSocket *from, struct bNodeSocket *to);
-int                            nodeCountSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
-
-void                   nodeSetActive(struct bNodeTree *ntree, struct bNode *node);
-struct bNode   *nodeGetActive(struct bNodeTree *ntree);
-struct bNode   *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
-int                            nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
-void                   nodeClearActive(struct bNodeTree *ntree);
-void                   nodeClearActiveID(struct bNodeTree *ntree, short idtype);
-struct bNode   *nodeGetActiveTexture(struct bNodeTree *ntree);
-
-void                   nodeUpdate(struct bNodeTree *ntree, struct bNode *node);
-int                            nodeUpdateID(struct bNodeTree *ntree, struct ID *id);
-
-void                   nodeFreePreview(struct bNode *node);
-
-int                            nodeSocketIsHidden(struct bNodeSocket *sock);
-void                   nodeSocketSetType(struct bNodeSocket *sock, int type);
+int             nodeCountSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
+
+void            nodeSetActive(struct bNodeTree *ntree, struct bNode *node);
+struct bNode   *nodeGetActive(struct bNodeTree *ntree);
+struct bNode   *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
+int             nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
+void            nodeClearActive(struct bNodeTree *ntree);
+void            nodeClearActiveID(struct bNodeTree *ntree, short idtype);
+struct bNode   *nodeGetActiveTexture(struct bNodeTree *ntree);
+
+void            nodeUpdate(struct bNodeTree *ntree, struct bNode *node);
+int             nodeUpdateID(struct bNodeTree *ntree, struct ID *id);
+void            nodeUpdateInternalLinks(struct bNodeTree *ntree, struct bNode *node);
+
+void            nodeFreePreview(struct bNode *node);
+
+int             nodeSocketIsHidden(struct bNodeSocket *sock);
+void            nodeSocketSetType(struct bNodeSocket *sock, int type);
+
+/* Node Clipboard */
+void                   BKE_node_clipboard_init(struct bNodeTree *ntree);
+void                   BKE_node_clipboard_clear(void);
+int                    BKE_node_clipboard_validate(void);
+void                   BKE_node_clipboard_add_node(struct bNode *node);
+void                   BKE_node_clipboard_add_link(struct bNodeLink *link);
+const struct ListBase *BKE_node_clipboard_get_nodes(void);
+const struct ListBase *BKE_node_clipboard_get_links(void);
+int                    BKE_node_clipboard_get_type(void);
 
 /* ************** NODE TYPE ACCESS *************** */
 
 struct bNodeTemplate nodeMakeTemplate(struct bNode *node);
-int                            nodeValid(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
-const char*            nodeLabel(struct bNode *node);
+int             nodeValid(struct bNodeTree *ntree, struct bNodeTemplate *ntemp);
+const char     *nodeLabel(struct bNode *node);
 struct bNodeTree *nodeGroupEditGet(struct bNode *node);
 struct bNodeTree *nodeGroupEditSet(struct bNode *node, int edit);
-void                   nodeGroupEditClear(struct bNode *node);
+void            nodeGroupEditClear(struct bNode *node);
 
 /* Init a new node type struct with default values and callbacks */
-void                   node_type_base(struct bNodeTreeType *ttype, struct bNodeType *ntype, int type,
+void            node_type_base(struct bNodeTreeType *ttype, struct bNodeType *ntype, int type,
                                const char *name, short nclass, short flag);
-void                   node_type_socket_templates(struct bNodeType *ntype, struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs);
-void                   node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth);
-void                   node_type_init(struct bNodeType *ntype, void (*initfunc)(struct bNodeTree *ntree, struct bNode *node, struct bNodeTemplate *ntemp));
-void                   node_type_valid(struct bNodeType *ntype, int (*validfunc)(struct bNodeTree *ntree, struct bNodeTemplate *ntemp));
-void                   node_type_storage(struct bNodeType *ntype,
-                                                                 const char *storagename,
-                                                                 void (*freestoragefunc)(struct bNode *),
-                                                                 void (*copystoragefunc)(struct bNode *, struct bNode *));
-void                   node_type_label(struct bNodeType *ntype, const char *(*labelfunc)(struct bNode *));
-void                   node_type_template(struct bNodeType *ntype, struct bNodeTemplate (*templatefunc)(struct bNode *));
-void                   node_type_update(struct bNodeType *ntype,
-                                                                void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node),
-                                                                void (*verifyfunc)(struct bNodeTree *ntree, struct bNode *node, struct ID *id));
-void                   node_type_tree(struct bNodeType *ntype,
-                                                          void (*inittreefunc)(struct bNodeTree *),
-                                                          void (*updatetreefunc)(struct bNodeTree *));
-void                   node_type_group_edit(struct bNodeType *ntype,
-                                                                        struct bNodeTree *(*group_edit_get)(struct bNode *node),
-                                                                        struct bNodeTree *(*group_edit_set)(struct bNode *node, int edit),
-                                                                        void (*group_edit_clear)(struct bNode *node));
-
-void                   node_type_exec(struct bNodeType *ntype, void (*execfunc)(void *data, struct bNode *, struct bNodeStack **,
+void            node_type_socket_templates(struct bNodeType *ntype, struct bNodeSocketTemplate *inputs, struct bNodeSocketTemplate *outputs);
+void            node_type_size(struct bNodeType *ntype, int width, int minwidth, int maxwidth);
+void            node_type_init(struct bNodeType *ntype, void (*initfunc)(struct bNodeTree *ntree, struct bNode *node, struct bNodeTemplate *ntemp));
+void            node_type_valid(struct bNodeType *ntype, int (*validfunc)(struct bNodeTree *ntree, struct bNodeTemplate *ntemp));
+void            node_type_storage(struct bNodeType *ntype,
+                                  const char *storagename,
+                                  void (*freestoragefunc)(struct bNode *),
+                                  void (*copystoragefunc)(struct bNode *, struct bNode *));
+void            node_type_label(struct bNodeType *ntype, const char *(*labelfunc)(struct bNode *));
+void            node_type_template(struct bNodeType *ntype, struct bNodeTemplate (*templatefunc)(struct bNode *));
+void            node_type_update(struct bNodeType *ntype,
+                                 void (*updatefunc)(struct bNodeTree *ntree, struct bNode *node),
+                                 void (*verifyfunc)(struct bNodeTree *ntree, struct bNode *node, struct ID *id));
+void            node_type_tree(struct bNodeType *ntype,
+                               void (*inittreefunc)(struct bNodeTree *),
+                               void (*updatetreefunc)(struct bNodeTree *));
+void            node_type_group_edit(struct bNodeType *ntype,
+                                     struct bNodeTree *(*group_edit_get)(struct bNode *node),
+                                     struct bNodeTree *(*group_edit_set)(struct bNode *node, int edit),
+                                     void (*group_edit_clear)(struct bNode *node));
+
+void            node_type_exec(struct bNodeType *ntype, void (*execfunc)(void *data, struct bNode *, struct bNodeStack **,
                                                                          struct bNodeStack **));
-void                   node_type_exec_new(struct bNodeType *ntype,
-                                                                  void *(*initexecfunc)(struct bNode *node),
-                                                                  void (*freeexecfunc)(struct bNode *node, void *nodedata),
-                                                                  void (*newexecfunc)(void *data, int thread, struct bNode *, void *nodedata,
-                                                                                      struct bNodeStack **, struct bNodeStack **));
-void                   node_type_internal_connect(struct bNodeType *ntype, ListBase (*internal_connect)(struct bNodeTree *, struct bNode *));
-void                   node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node,
+void            node_type_exec_new(struct bNodeType *ntype,
+                                   void *(*initexecfunc)(struct bNode *node),
+                                   void (*freeexecfunc)(struct bNode *node, void *nodedata),
+                                   void (*newexecfunc)(void *data, int thread, struct bNode *, void *nodedata,
+                                                       struct bNodeStack **, struct bNodeStack **));
+void            node_type_internal_links(struct bNodeType *ntype, void (*update_internal_links)(struct bNodeTree *, struct bNode *));
+void            node_type_gpu(struct bNodeType *ntype, int (*gpufunc)(struct GPUMaterial *mat, struct bNode *node,
                                                                       struct GPUNodeStack *in, struct GPUNodeStack *out));
-void                   node_type_gpu_ext(struct bNodeType *ntype, int (*gpuextfunc)(struct GPUMaterial *mat, struct bNode *node,
+void            node_type_gpu_ext(struct bNodeType *ntype, int (*gpuextfunc)(struct GPUMaterial *mat, struct bNode *node,
                                                                              void *nodedata, struct GPUNodeStack *in,
                                                                              struct GPUNodeStack *out));
-void                   node_type_compatibility(struct bNodeType *ntype, short compatibility);
+void            node_type_compatibility(struct bNodeType *ntype, short compatibility);
 
 /* ************** COMMON NODES *************** */
 
 #define NODE_GROUP             2
-#define NODE_FORLOOP   3
-#define NODE_WHILELOOP 4
+#define __NODE_FORLOOP 3       /* deprecated */
+#define __NODE_WHILELOOP       4       /* deprecated */
 #define NODE_FRAME             5
 #define NODE_REROUTE   6
 
@@ -454,6 +475,8 @@ struct bNodeSocket *node_group_add_extern_socket(struct bNodeTree *ntree, ListBa
 void register_node_type_frame(struct bNodeTreeType *ttype);
 void register_node_type_reroute(struct bNodeTreeType *ttype);
 
+void BKE_node_tree_unlink_id_cb(void *calldata, struct ID *owner_id, struct bNodeTree *ntree);
+
 /* ************** SHADER NODES *************** */
 
 struct ShadeInput;
@@ -527,6 +550,14 @@ struct ShadeResult;
 #define SH_NODE_LIGHT_FALLOFF                  166
 #define SH_NODE_OBJECT_INFO                            167
 #define SH_NODE_PARTICLE_INFO           168
+#define SH_NODE_TEX_BRICK                              169
+#define SH_NODE_BUMP                                   170
+#define SH_NODE_SCRIPT                                 171
+#define SH_NODE_AMBIENT_OCCLUSION              172
+#define SH_NODE_BSDF_REFRACTION                        173
+#define SH_NODE_TANGENT                                        174
+#define SH_NODE_NORMAL_MAP                             175
+#define SH_NODE_HAIR_INFO                              176
 
 /* custom defines options for Material node */
 #define SH_NODE_MAT_DIFF   1
@@ -545,16 +576,16 @@ struct ShadeResult;
 /* API */
 
 struct bNodeTreeExec *ntreeShaderBeginExecTree(struct bNodeTree *ntree, int use_tree_data);
-void                   ntreeShaderEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
-void                   ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
-void                   ntreeShaderGetTexcoMode(struct bNodeTree *ntree, int osa, short *texco, int *mode);
-void                   nodeShaderSynchronizeID(struct bNode *node, int copyto);
+void            ntreeShaderEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
+bool            ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
+void            ntreeShaderGetTexcoMode(struct bNodeTree *ntree, int osa, short *texco, int *mode);
+void            nodeShaderSynchronizeID(struct bNode *node, int copyto);
 
-                               /* switch material render loop */
+/* switch material render loop */
 extern void (*node_shader_lamp_loop)(struct ShadeInput *, struct ShadeResult *);
-void                   set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
+void            set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
 
-void                   ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
+void            ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
 
 
 /* ************** COMPOSITE NODES *************** */
@@ -658,6 +689,11 @@ void                       ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
 #define CMP_NODE_DOUBLEEDGEMASK    266
 #define CMP_NODE_OUTPUT_MULTI_FILE__DEPRECATED 267     /* DEPRECATED multi file node has been merged into regular CMP_NODE_OUTPUT_FILE */
 #define CMP_NODE_MASK          268
+#define CMP_NODE_KEYINGSCREEN          269
+#define CMP_NODE_KEYING                        270
+#define CMP_NODE_TRACKPOS              271
+#define CMP_NODE_INPAINT    272
+#define CMP_NODE_DESPECKLE  273
 
 #define CMP_NODE_GLARE         301
 #define CMP_NODE_TONEMAP       302
@@ -669,6 +705,9 @@ void                        ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
 #define CMP_NODE_BOKEHIMAGE     315
 #define CMP_NODE_BOKEHBLUR      316
 #define CMP_NODE_SWITCH         317
+#define CMP_NODE_PIXELATE       318
+
+#define CMP_NODE_MAP_RANGE     319
 
 /* channel toggles */
 #define CMP_CHAN_RGB           1
@@ -691,13 +730,15 @@ void                      ntreeGPUMaterialNodes(struct bNodeTree *ntree, struct GPUMaterial *mat);
 #define CMP_SCALE_ABSOLUTE             1
 #define CMP_SCALE_SCENEPERCENT 2
 #define CMP_SCALE_RENDERPERCENT 3
+/* custom2 */
+#define CMP_SCALE_RENDERSIZE_FRAME_ASPECT  (1 << 0)
+#define CMP_SCALE_RENDERSIZE_FRAME_CROP    (1 << 1)
 
 
 /* API */
 struct CompBuf;
-struct bNodeTreeExec *ntreeCompositBeginExecTree(struct bNodeTree *ntree, int use_tree_data);
-void ntreeCompositEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
-void ntreeCompositExecTree(struct bNodeTree *ntree, struct RenderData *rd, int rendering, int do_previews);
+void ntreeCompositExecTree(struct bNodeTree *ntree, struct RenderData *rd, int rendering, int do_previews,
+                           const struct ColorManagedViewSettings *view_settings, const struct ColorManagedDisplaySettings *display_settings);
 void ntreeCompositTagRender(struct Scene *sce);
 int ntreeCompositTagAnimated(struct bNodeTree *ntree);
 void ntreeCompositTagGenerators(struct bNodeTree *ntree);
@@ -751,7 +792,9 @@ void ntreeTexCheckCyclics(struct bNodeTree *ntree);
 
 struct bNodeTreeExec *ntreeTexBeginExecTree(struct bNodeTree *ntree, int use_tree_data);
 void ntreeTexEndExecTree(struct bNodeTreeExec *exec, int use_tree_data);
-int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target, float *coord, float *dxt, float *dyt, int osatex, short thread, struct Tex *tex, short which_output, int cfra, int preview, struct ShadeInput *shi, struct MTex *mtex);
+int ntreeTexExecTree(struct bNodeTree *ntree, struct TexResult *target,
+                     float coord[3], float dxt[3], float dyt[3], int osatex, const short thread,
+                     struct Tex *tex, short which_output, int cfra, int preview, struct ShadeInput *shi, struct MTex *mtex);
 
 
 /*************************************************/