30#include "RNA_prototypes.hh"
35#ifdef WITH_COMPOSITOR_CPU
49 *r_ntree = scene->nodetree;
73 while (node !=
nullptr) {
76 node->runtime->need_exec = 0;
82 if (node->type == CMP_NODE_VIEWER) {
85 local_node->
id = (
ID *)node->id;
88 local_node->
id =
nullptr;
94 local_node = local_node->
next;
105 if (lnode->type == CMP_NODE_VIEWER) {
111 else if (lnode->type == CMP_NODE_MOVIEDISTORTION) {
115 if (lnode->storage) {
116 if (orig_node->storage) {
140 bnode->
flag &= ~NODE_PREVIEW;
162 tt->
ui_icon = ICON_NODE_COMPOSITING;
182 const char *view_name,
186#ifdef WITH_COMPOSITOR_CPU
187 COM_execute(render, rd, scene, ntree, view_name, render_context, profiler);
189 UNUSED_VARS(render, scene, ntree, rd, view_name, render_context, profiler);
197 if (ntree ==
nullptr) {
201 for (
bNode *node : ntree->all_nodes()) {
202 if (node->type == CMP_NODE_R_LAYERS) {
205 else if (node->type == CMP_NODE_CRYPTOMATTE &&
208 node->typeinfo->updatefunc(ntree, node);
221 sce_iter = (
Scene *)sce_iter->id.next)
223 if (sce_iter->nodetree) {
224 for (
bNode *node : sce_iter->nodetree->all_nodes()) {
228 else if (node->type == CMP_NODE_TEXTURE) {
241 if (ntree ==
nullptr) {
245 for (
bNode *node : ntree->all_nodes()) {
246 node->runtime->need_exec = 0;
255 node->runtime->need_exec =
true;
Scene * CTX_data_scene(const bContext *C)
void BKE_image_merge(Main *bmain, Image *dest, Image *source)
#define NODE_CLASS_OUTPUT
#define CMP_NODE_COMPOSITE
#define NODE_CLASS_INTERFACE
#define NODE_CLASS_CONVERTER
#define NODE_CLASS_DISTORT
#define NODE_CLASS_OP_VECTOR
#define NODE_CLASS_LAYOUT
#define NODE_CLASS_OP_COLOR
#define NODE_CLASS_OP_FILTER
void BKE_ntree_update_main(Main *bmain, NodeTreeUpdateExtraParams *params)
void BKE_ntree_update_tag_node_property(bNodeTree *ntree, bNode *node)
struct MovieDistortion * BKE_tracking_distortion_copy(struct MovieDistortion *distortion)
void BKE_tracking_distortion_free(struct MovieDistortion *distortion)
#define LISTBASE_FOREACH(type, var, list)
#define STRNCPY(dst, src)
void COM_execute(Render *render, RenderData *render_data, Scene *scene, bNodeTree *node_tree, const char *view_name, blender::realtime_compositor::RenderContext *render_context, blender::realtime_compositor::Profiler *profiler)
The main method that is used to execute the compositor tree. It can be executed during editing (blenk...
@ CMP_NODE_CRYPTOMATTE_SOURCE_RENDER
void node_tree_set_output(bNodeTree *ntree)
bool node_is_static_socket_type(const bNodeSocketType *stype)
void(*)(void *calldata, int nclass, const char *name) bNodeClassCallback
void node_tree_type_add(bNodeTreeType *nt)
void node_preview_merge_tree(bNodeTree *to_ntree, bNodeTree *from_ntree, bool remove_old)
bNode * node_find_node_by_name(bNodeTree *ntree, const char *name)
void ntree_update_reroute_nodes(bNodeTree *ntree)
void node_cmp_rlayers_outputs(bNodeTree *ntree, bNode *node)
void ntreeCompositExecTree(Render *render, Scene *scene, bNodeTree *ntree, RenderData *rd, const char *view_name, blender::realtime_compositor::RenderContext *render_context, blender::realtime_compositor::Profiler *profiler)
static void composite_node_add_init(bNodeTree *, bNode *bnode)
void ntreeCompositTagRender(Scene *scene)
static void local_merge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
static void localize(bNodeTree *localtree, bNodeTree *ntree)
void ntreeCompositTagNeedExec(bNode *node)
static void update(bNodeTree *ntree)
void ntreeCompositUpdateRLayers(bNodeTree *ntree)
void ntreeCompositClearTags(bNodeTree *ntree)
static bool composite_node_tree_socket_type_valid(blender::bke::bNodeTreeType *, blender::bke::bNodeSocketType *socket_type)
static void composite_get_from_context(const bContext *C, blender::bke::bNodeTreeType *, bNodeTree **r_ntree, ID **r_id, ID **r_from)
blender::bke::bNodeTreeType * ntreeType_Composite
void register_node_tree_type_cmp()
static void foreach_nodeclass(void *calldata, blender::bke::bNodeClassCallback func)
bNodeTypeHandle * typeinfo
bNodeRuntimeHandle * runtime
void(* update)(bNodeTree *ntree)
void(* foreach_nodeclass)(void *calldata, bNodeClassCallback func)
void(* node_add_init)(bNodeTree *ntree, bNode *bnode)
void(* get_from_context)(const bContext *C, bNodeTreeType *ntreetype, bNodeTree **r_ntree, ID **r_id, ID **r_from)
void(* localize)(bNodeTree *localtree, bNodeTree *ntree)
void(* local_merge)(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
bool(* valid_socket_type)(bNodeTreeType *ntreetype, bNodeSocketType *socket_type)