Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/composite/node_composite_tree.cc
| Show First 20 Lines • Show All 206 Lines • ▼ Show 20 Lines | static bool composite_node_tree_socket_type_valid(bNodeTreeType *UNUSED(ntreetype), | ||||
| bNodeSocketType *socket_type) | bNodeSocketType *socket_type) | ||||
| { | { | ||||
| return nodeIsStaticSocketType(socket_type) && | return nodeIsStaticSocketType(socket_type) && | ||||
| ELEM(socket_type->type, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA); | ELEM(socket_type->type, SOCK_FLOAT, SOCK_VECTOR, SOCK_RGBA); | ||||
| } | } | ||||
| bNodeTreeType *ntreeType_Composite; | bNodeTreeType *ntreeType_Composite; | ||||
| void register_node_tree_type_cmp(void) | void register_node_tree_type_cmp() | ||||
| { | { | ||||
| bNodeTreeType *tt = ntreeType_Composite = (bNodeTreeType *)MEM_callocN( | bNodeTreeType *tt = ntreeType_Composite = (bNodeTreeType *)MEM_callocN( | ||||
| sizeof(bNodeTreeType), "compositor node tree type"); | sizeof(bNodeTreeType), "compositor node tree type"); | ||||
| tt->type = NTREE_COMPOSIT; | tt->type = NTREE_COMPOSIT; | ||||
| strcpy(tt->idname, "CompositorNodeTree"); | strcpy(tt->idname, "CompositorNodeTree"); | ||||
| strcpy(tt->ui_name, N_("Compositor")); | strcpy(tt->ui_name, N_("Compositor")); | ||||
| tt->ui_icon = 0; /* Defined in `drawnode.c`. */ | tt->ui_icon = 0; /* Defined in `drawnode.c`. */ | ||||
| Show All 30 Lines | #else | ||||
| UNUSED_VARS(scene, ntree, rd, rendering, view_settings, display_settings, view_name); | UNUSED_VARS(scene, ntree, rd, rendering, view_settings, display_settings, view_name); | ||||
| #endif | #endif | ||||
| UNUSED_VARS(do_preview); | UNUSED_VARS(do_preview); | ||||
| } | } | ||||
| /* *********************************************** */ | /* *********************************************** */ | ||||
| /** | |||||
| * Update the outputs of the render layer nodes. | |||||
| * Since the outputs depend on the render engine, this part is a bit complex: | |||||
| * - #ntreeCompositUpdateRLayers is called and loops over all render layer nodes. | |||||
| * - Each render layer node calls the update function of the | |||||
| * render engine that's used for its scene. | |||||
| * - The render engine calls RE_engine_register_pass for each pass. | |||||
| * - #RE_engine_register_pass calls #ntreeCompositRegisterPass, | |||||
| * which calls #node_cmp_rlayers_register_pass for every render layer node. | |||||
| */ | |||||
| void ntreeCompositUpdateRLayers(bNodeTree *ntree) | void ntreeCompositUpdateRLayers(bNodeTree *ntree) | ||||
| { | { | ||||
| if (ntree == nullptr) { | if (ntree == nullptr) { | ||||
| return; | return; | ||||
| } | } | ||||
| LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { | LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { | ||||
| if (node->type == CMP_NODE_R_LAYERS) { | if (node->type == CMP_NODE_R_LAYERS) { | ||||
| Show All 14 Lines | void ntreeCompositRegisterPass(bNodeTree *ntree, | ||||
| LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { | LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { | ||||
| if (node->type == CMP_NODE_R_LAYERS) { | if (node->type == CMP_NODE_R_LAYERS) { | ||||
| node_cmp_rlayers_register_pass(ntree, node, scene, view_layer, name, type); | node_cmp_rlayers_register_pass(ntree, node, scene, view_layer, name, type); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* called from render pipeline, to tag render input and output */ | |||||
| /* need to do all scenes, to prevent errors when you re-render 1 scene */ | |||||
| void ntreeCompositTagRender(Scene *scene) | void ntreeCompositTagRender(Scene *scene) | ||||
| { | { | ||||
| /* XXX Think using G_MAIN here is valid, since you want to update current file's scene nodes, | /* XXX Think using G_MAIN here is valid, since you want to update current file's scene nodes, | ||||
| * not the ones in temp main generated for rendering? | * not the ones in temp main generated for rendering? | ||||
| * This is still rather weak though, | * This is still rather weak though, | ||||
| * ideally render struct would store own main AND original G_MAIN. */ | * ideally render struct would store own main AND original G_MAIN. */ | ||||
| for (Scene *sce_iter = (Scene *)G_MAIN->scenes.first; sce_iter; | for (Scene *sce_iter = (Scene *)G_MAIN->scenes.first; sce_iter; | ||||
| Show All 28 Lines | |||||