diff options
Diffstat (limited to 'source/blender/nodes/composite')
19 files changed, 205 insertions, 65 deletions
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c index 6d5b85da569..cb565bd5491 100644 --- a/source/blender/nodes/composite/node_composite_tree.c +++ b/source/blender/nodes/composite/node_composite_tree.c @@ -36,11 +36,8 @@ #include "DNA_scene_types.h" #include "DNA_node_types.h" -#include "BLI_listbase.h" +#include "BLT_translation.h" -#include "BLF_translation.h" - -#include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_main.h" @@ -50,8 +47,6 @@ #include "node_common.h" #include "node_util.h" -#include "PIL_time.h" - #include "RNA_access.h" #include "NOD_composite.h" @@ -231,16 +226,16 @@ void *COM_linker_hack = NULL; void ntreeCompositExecTree(Scene *scene, bNodeTree *ntree, RenderData *rd, int rendering, int do_preview, const ColorManagedViewSettings *view_settings, - const ColorManagedDisplaySettings *display_settings) + const ColorManagedDisplaySettings *display_settings, + const char *view_name) { #ifdef WITH_COMPOSITOR - COM_execute(rd, scene, ntree, rendering, view_settings, display_settings); + COM_execute(rd, scene, ntree, rendering, view_settings, display_settings, view_name); #else - (void)scene, (void)ntree, (void)rd, (void)rendering, (void)do_preview; - (void)view_settings, (void)display_settings; + UNUSED_VARS(scene, ntree, rd, rendering, view_settings, display_settings, view_name); #endif - (void)do_preview; + UNUSED_VARS(do_preview); } /* *********************************************** */ diff --git a/source/blender/nodes/composite/node_composite_util.c b/source/blender/nodes/composite/node_composite_util.c index 8e279cf6d68..bbfb07a316d 100644 --- a/source/blender/nodes/composite/node_composite_util.c +++ b/source/blender/nodes/composite/node_composite_util.c @@ -43,7 +43,7 @@ void cmp_node_update_default(bNodeTree *UNUSED(ntree), bNode *node) for (sock = node->outputs.first; sock; sock = sock->next) { if (sock->cache) { //free_compbuf(sock->cache); - //sock->cache= NULL; + //sock->cache = NULL; } } node->need_exec = 1; diff --git a/source/blender/nodes/composite/node_composite_util.h b/source/blender/nodes/composite/node_composite_util.h index 3f9cfc03089..2dac0cc639a 100644 --- a/source/blender/nodes/composite/node_composite_util.h +++ b/source/blender/nodes/composite/node_composite_util.h @@ -40,7 +40,7 @@ #include "BLI_math.h" #include "BLI_blenlib.h" -#include "BLF_translation.h" +#include "BLT_translation.h" #include "BKE_colortools.h" #include "BKE_image.h" diff --git a/source/blender/nodes/composite/nodes/node_composite_boxmask.c b/source/blender/nodes/composite/nodes/node_composite_boxmask.c index 9cb0f1c75c7..0390eb43da0 100644 --- a/source/blender/nodes/composite/nodes/node_composite_boxmask.c +++ b/source/blender/nodes/composite/nodes/node_composite_boxmask.c @@ -66,7 +66,3 @@ void register_node_type_cmp_boxmask(void) nodeRegisterType(&ntype); } - - - - diff --git a/source/blender/nodes/composite/nodes/node_composite_colorbalance.c b/source/blender/nodes/composite/nodes/node_composite_colorbalance.c index 65f2391983e..70e52d432cd 100644 --- a/source/blender/nodes/composite/nodes/node_composite_colorbalance.c +++ b/source/blender/nodes/composite/nodes/node_composite_colorbalance.c @@ -29,11 +29,8 @@ * \ingroup cmpnodes */ - - #include "node_composite_util.h" - /* ******************* Color Balance ********************************* */ static bNodeSocketTemplate cmp_node_colorbalance_in[] = { {SOCK_FLOAT, 1, N_("Fac"), 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, PROP_FACTOR}, diff --git a/source/blender/nodes/composite/nodes/node_composite_common.c b/source/blender/nodes/composite/nodes/node_composite_common.c index 36c12693bdf..75e7fa8fbac 100644 --- a/source/blender/nodes/composite/nodes/node_composite_common.c +++ b/source/blender/nodes/composite/nodes/node_composite_common.c @@ -35,7 +35,6 @@ #include "node_composite_util.h" #include "NOD_common.h" #include "node_common.h" -#include "node_exec.h" #include "BKE_node.h" diff --git a/source/blender/nodes/composite/nodes/node_composite_composite.c b/source/blender/nodes/composite/nodes/node_composite_composite.c index 41d417c2cb4..be9ed457150 100644 --- a/source/blender/nodes/composite/nodes/node_composite_composite.c +++ b/source/blender/nodes/composite/nodes/node_composite_composite.c @@ -31,10 +31,6 @@ #include "node_composite_util.h" -#include "BKE_context.h" - -#include "RNA_access.h" - /* **************** COMPOSITE ******************** */ static bNodeSocketTemplate cmp_node_composite_in[] = { { SOCK_RGBA, 1, N_("Image"), 0.0f, 0.0f, 0.0f, 1.0f}, diff --git a/source/blender/nodes/composite/nodes/node_composite_defocus.c b/source/blender/nodes/composite/nodes/node_composite_defocus.c index ef670b760c2..a3311755717 100644 --- a/source/blender/nodes/composite/nodes/node_composite_defocus.c +++ b/source/blender/nodes/composite/nodes/node_composite_defocus.c @@ -33,10 +33,6 @@ #include <limits.h> -#include "BKE_context.h" - -#include "RNA_access.h" - /* ************ qdn: Defocus node ****************** */ static bNodeSocketTemplate cmp_node_defocus_in[] = { { SOCK_RGBA, 1, N_("Image"), 1.0f, 1.0f, 1.0f, 1.0f}, diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c index 659e582dc1d..4f02c106569 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.c +++ b/source/blender/nodes/composite/nodes/node_composite_image.c @@ -39,7 +39,9 @@ #include "BKE_global.h" #include "BKE_main.h" -#include "RNA_access.h" +#ifdef WITH_CYCLES_DEBUG +# include "RE_pipeline.h" +#endif /* **************** IMAGE (and RenderResult, multilayer image) ******************** */ @@ -75,6 +77,9 @@ static bNodeSocketTemplate cmp_node_rlayers_out[] = { { SOCK_RGBA, 0, N_("Subsurface Direct"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_RGBA, 0, N_("Subsurface Indirect"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, { SOCK_RGBA, 0, N_("Subsurface Color"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, +#ifdef WITH_CYCLES_DEBUG + { SOCK_RGBA, 0, N_("Debug"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}, +#endif { -1, 0, "" } }; @@ -162,6 +167,10 @@ static void cmp_node_image_add_render_pass_outputs(bNodeTree *ntree, bNode *node cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SUBSURFACE_INDIRECT, RRES_OUT_SUBSURFACE_INDIRECT); if (passflag & SCE_PASS_SUBSURFACE_COLOR) cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_SUBSURFACE_COLOR, RRES_OUT_SUBSURFACE_COLOR); + +#ifdef WITH_CYCLES_DEBUG + cmp_node_image_add_render_pass_output(ntree, node, SCE_PASS_DEBUG, RRES_OUT_DEBUG); +#endif } static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, RenderLayer *rl) @@ -170,20 +179,35 @@ static void cmp_node_image_add_multilayer_outputs(bNodeTree *ntree, bNode *node, NodeImageLayer *sockdata; RenderPass *rpass; int index; + int passflag = 0; for (rpass = rl->passes.first, index = 0; rpass; rpass = rpass->next, ++index) { int type; if (rpass->channels == 1) type = SOCK_FLOAT; else type = SOCK_RGBA; - - sock = nodeAddStaticSocket(ntree, node, SOCK_OUT, type, PROP_NONE, rpass->name, rpass->name); + + /* we only need one socket per type */ + if (passflag & rpass->passtype) + continue; + + passflag |= rpass->passtype; + + sock = nodeAddStaticSocket(ntree, node, SOCK_OUT, type, PROP_NONE, rpass->internal_name, rpass->internal_name); /* extra socket info */ sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer"); sock->storage = sockdata; sockdata->pass_index = index; sockdata->pass_flag = rpass->passtype; + + if (rpass->passtype == SCE_PASS_COMBINED) { + sock = nodeAddStaticSocket(ntree, node, SOCK_OUT, SOCK_FLOAT, PROP_NONE, "Alpha", "Alpha"); + sockdata = MEM_callocN(sizeof(NodeImageLayer), "node image layer"); + sock->storage = sockdata; + sockdata->pass_index = index; + sockdata->pass_flag = rpass->passtype; + } } } @@ -367,8 +391,12 @@ void register_node_type_cmp_image(void) static void set_output_visible(bNode *node, int passflag, int index, int pass) { bNodeSocket *sock = BLI_findlink(&node->outputs, index); + bool pass_enabled = ((passflag & pass) != 0); +#ifdef WITH_CYCLES_DEBUG + pass_enabled |= (pass == SCE_PASS_DEBUG); +#endif /* clear the SOCK_HIDDEN flag as well, in case a socket was hidden before */ - if (passflag & pass) + if (pass_enabled) sock->flag &= ~(SOCK_HIDDEN | SOCK_UNAVAIL); else sock->flag |= SOCK_UNAVAIL; @@ -427,6 +455,10 @@ void node_cmp_rlayers_force_hidden_passes(bNode *node) set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_DIRECT, SCE_PASS_SUBSURFACE_DIRECT); set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_INDIRECT, SCE_PASS_SUBSURFACE_INDIRECT); set_output_visible(node, passflag, RRES_OUT_SUBSURFACE_COLOR, SCE_PASS_SUBSURFACE_COLOR); + +#ifdef WITH_CYCLES_DEBUG + set_output_visible(node, passflag, RRES_OUT_DEBUG, SCE_PASS_DEBUG); +#endif } static void node_composit_init_rlayers(const bContext *C, PointerRNA *ptr) @@ -441,7 +473,7 @@ static void node_composit_init_rlayers(const bContext *C, PointerRNA *ptr) static int node_composit_poll_rlayers(bNodeType *UNUSED(ntype), bNodeTree *ntree) { - if (strcmp(ntree->idname, "CompositorNodeTree") == 0) { + if (STREQ(ntree->idname, "CompositorNodeTree")) { Scene *scene; /* XXX ugly: check if ntree is a local scene node tree. diff --git a/source/blender/nodes/composite/nodes/node_composite_keying.c b/source/blender/nodes/composite/nodes/node_composite_keying.c index 6b5def1ea93..6dd2bcc9002 100644 --- a/source/blender/nodes/composite/nodes/node_composite_keying.c +++ b/source/blender/nodes/composite/nodes/node_composite_keying.c @@ -30,16 +30,12 @@ * \ingroup cmpnodes */ -#include "BLF_translation.h" +#include "BLT_translation.h" #include "DNA_movieclip_types.h" -#include "BKE_movieclip.h" - -#include "BLI_listbase.h" #include "BLI_math_base.h" #include "BLI_math_color.h" -#include "BLI_voronoi.h" #include "node_composite_util.h" diff --git a/source/blender/nodes/composite/nodes/node_composite_keyingscreen.c b/source/blender/nodes/composite/nodes/node_composite_keyingscreen.c index 9965b55e088..0cdf15c0412 100644 --- a/source/blender/nodes/composite/nodes/node_composite_keyingscreen.c +++ b/source/blender/nodes/composite/nodes/node_composite_keyingscreen.c @@ -30,16 +30,10 @@ * \ingroup cmpnodes */ -#include "BLF_translation.h" - #include "DNA_movieclip_types.h" -#include "BKE_movieclip.h" - -#include "BLI_listbase.h" #include "BLI_math_base.h" #include "BLI_math_color.h" -#include "BLI_voronoi.h" #include "node_composite_util.h" diff --git a/source/blender/nodes/composite/nodes/node_composite_mapValue.c b/source/blender/nodes/composite/nodes/node_composite_mapValue.c index 22d16e93879..35096d57a4e 100644 --- a/source/blender/nodes/composite/nodes/node_composite_mapValue.c +++ b/source/blender/nodes/composite/nodes/node_composite_mapValue.c @@ -44,7 +44,7 @@ static bNodeSocketTemplate cmp_node_map_value_out[] = { static void node_composit_init_map_value(bNodeTree *UNUSED(ntree), bNode *node) { - node->storage = add_tex_mapping(TEXMAP_TYPE_POINT); + node->storage = BKE_texture_mapping_add(TEXMAP_TYPE_POINT); } void register_node_type_cmp_map_value(void) diff --git a/source/blender/nodes/composite/nodes/node_composite_mask.c b/source/blender/nodes/composite/nodes/node_composite_mask.c index 83cea47db1b..dd05d5d83ad 100644 --- a/source/blender/nodes/composite/nodes/node_composite_mask.c +++ b/source/blender/nodes/composite/nodes/node_composite_mask.c @@ -30,12 +30,8 @@ * \ingroup cmpnodes */ -#include "BLF_translation.h" - #include "DNA_mask_types.h" -#include "BKE_mask.h" - #include "node_composite_util.h" /* **************** Translate ******************** */ diff --git a/source/blender/nodes/composite/nodes/node_composite_movieclip.c b/source/blender/nodes/composite/nodes/node_composite_movieclip.c index fc0d8060644..0fece9dd4f6 100644 --- a/source/blender/nodes/composite/nodes/node_composite_movieclip.c +++ b/source/blender/nodes/composite/nodes/node_composite_movieclip.c @@ -30,13 +30,10 @@ * \ingroup cmpnodes */ - #include "node_composite_util.h" #include "BKE_context.h" -#include "RNA_access.h" - static bNodeSocketTemplate cmp_node_movieclip_out[] = { { SOCK_RGBA, 0, N_("Image")}, { SOCK_FLOAT, 0, N_("Alpha")}, diff --git a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c index 1d411aafe68..9c54009d2f1 100644 --- a/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c +++ b/source/blender/nodes/composite/nodes/node_composite_moviedistortion.c @@ -34,8 +34,6 @@ #include "BKE_context.h" -#include "RNA_access.h" - /* **************** Translate ******************** */ static bNodeSocketTemplate cmp_node_moviedistortion_in[] = { diff --git a/source/blender/nodes/composite/nodes/node_composite_outputFile.c b/source/blender/nodes/composite/nodes/node_composite_outputFile.c index 76101409ba7..7d1087435c2 100644 --- a/source/blender/nodes/composite/nodes/node_composite_outputFile.c +++ b/source/blender/nodes/composite/nodes/node_composite_outputFile.c @@ -40,9 +40,6 @@ #include "node_composite_util.h" -#include "IMB_imbuf.h" -#include "IMB_imbuf_types.h" - #include "intern/openexr/openexr_multi.h" @@ -130,7 +127,7 @@ bNodeSocket *ntreeCompositOutputFileAddSocket(bNodeTree *ntree, bNode *node, con BKE_imformat_defaults(&sockdata->format); /* use node data format by default */ sockdata->use_node_format = true; - + nimf->active_input = BLI_findindex(&node->inputs, sock); return sock; @@ -140,7 +137,7 @@ int ntreeCompositOutputFileRemoveActiveSocket(bNodeTree *ntree, bNode *node) { NodeImageMultiFile *nimf = node->storage; bNodeSocket *sock = BLI_findlink(&node->inputs, nimf->active_input); - int totinputs = BLI_countlist(&node->inputs); + int totinputs = BLI_listbase_count(&node->inputs); if (!sock) return 0; @@ -192,7 +189,7 @@ static void init_output_file(const bContext *C, PointerRNA *ptr) } else BKE_imformat_defaults(&nimf->format); - + /* add one socket by default */ ntreeCompositOutputFileAddSocket(ntree, node, "Image", format); } diff --git a/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.c b/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.c index 7a15d6364dc..415427c360f 100644 --- a/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.c +++ b/source/blender/nodes/composite/nodes/node_composite_planetrackdeform.c @@ -47,7 +47,8 @@ static bNodeSocketTemplate cmp_node_planetrackdeform_out[] = { static void init(bNodeTree *UNUSED(ntree), bNode *node) { NodePlaneTrackDeformData *data = MEM_callocN(sizeof(NodePlaneTrackDeformData), "node plane track deform data"); - + data->motion_blur_samples = 16; + data->motion_blur_shutter = 0.5f; node->storage = data; } diff --git a/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c b/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c index 28e2a2a205b..00791c278ae 100644 --- a/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c +++ b/source/blender/nodes/composite/nodes/node_composite_stabilize2d.c @@ -30,13 +30,10 @@ * \ingroup cmpnodes */ - #include "node_composite_util.h" #include "BKE_context.h" -#include "RNA_access.h" - /* **************** Translate ******************** */ static bNodeSocketTemplate cmp_node_stabilize2d_in[] = { diff --git a/source/blender/nodes/composite/nodes/node_composite_switchview.c b/source/blender/nodes/composite/nodes/node_composite_switchview.c new file mode 100644 index 00000000000..d805cf4d87f --- /dev/null +++ b/source/blender/nodes/composite/nodes/node_composite_switchview.c @@ -0,0 +1,153 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2006 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): + * Dalai Felinto + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/nodes/composite/nodes/node_composite_switchview.c + * \ingroup cmpnodes + */ + +#include "BKE_context.h" +#include "../node_composite_util.h" + +/* **************** SWITCH VIEW ******************** */ +static bNodeSocketTemplate cmp_node_switch_view_out[] = { + { SOCK_RGBA, 0, N_("Image"), 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f}, + { -1, 0, "" } +}; + +static bNodeSocket *ntreeCompositSwitchViewAddSocket(bNodeTree *ntree, bNode *node, const char *name) +{ + bNodeSocket *sock = nodeAddStaticSocket(ntree, node, SOCK_IN, SOCK_RGBA, PROP_NONE, NULL, name); + return sock; +} + +static void cmp_node_switch_view_sanitycheck(bNodeTree *ntree, bNode *node) +{ + bNodeSocket *sock; + + if (!BLI_listbase_is_empty(&node->inputs)) + return; + + sock = ntreeCompositSwitchViewAddSocket(ntree, node, "No View"); + sock->flag |= SOCK_HIDDEN; +} + +static void cmp_node_switch_view_update(bNodeTree *ntree, bNode *node) +{ + bNodeSocket *sock; + SceneRenderView *srv; + Scene *scene = (Scene *)node->id; + + /* only update when called from the operator button */ + if (node->update != NODE_UPDATE_OPERATOR) + return; + + if (scene == NULL) { + nodeRemoveAllSockets(ntree, node); + /* make sure there is always one socket */ + cmp_node_switch_view_sanitycheck(ntree, node); + return; + } + + /* remove the views that were removed */ + sock = node->inputs.last; + while (sock) { + srv = BLI_findstring(&scene->r.views, sock->name, offsetof(SceneRenderView, name)); + + if (srv == NULL) { + bNodeSocket *sock_del = sock; + sock = sock->prev; + nodeRemoveSocket(ntree, node, sock_del); + } + else { + if (srv->viewflag & SCE_VIEW_DISABLE) + sock->flag |= SOCK_HIDDEN; + else + sock->flag &= ~SOCK_HIDDEN; + + sock = sock->prev; + } + } + + /* add the new views */ + for (srv = scene->r.views.first; srv; srv = srv->next) { + sock = BLI_findstring(&node->inputs, srv->name, offsetof(bNodeSocket, name)); + + if (sock == NULL) + sock = ntreeCompositSwitchViewAddSocket(ntree, node, srv->name); + + if (srv->viewflag & SCE_VIEW_DISABLE) + sock->flag |= SOCK_HIDDEN; + else + sock->flag &= ~SOCK_HIDDEN; + } + + /* make sure there is always one socket */ + cmp_node_switch_view_sanitycheck(ntree, node); +} + +static void init_switch_view(const bContext *C, PointerRNA *ptr) +{ + Scene *scene = CTX_data_scene(C); + bNodeTree *ntree = ptr->id.data; + bNode *node = ptr->data; + SceneRenderView *srv; + bNodeSocket *sock; + int nr; + + /* store scene for updates */ + node->id = (ID *)scene; + + if (scene) { + RenderData *rd = &scene->r; + + for (nr = 0, srv = rd->views.first; srv; srv = srv->next, nr++) { + sock = ntreeCompositSwitchViewAddSocket(ntree, node, srv->name); + + if ((srv->viewflag & SCE_VIEW_DISABLE)) + sock->flag |= SOCK_HIDDEN; + } + } + + /* make sure there is always one socket */ + cmp_node_switch_view_sanitycheck(ntree, node); +} + +/* custom1 = mix type */ +void register_node_type_cmp_switch_view(void) +{ + static bNodeType ntype; + + cmp_node_type_base(&ntype, CMP_NODE_SWITCH_VIEW, "Switch View", NODE_CLASS_CONVERTOR, 0); + node_type_socket_templates(&ntype, NULL, cmp_node_switch_view_out); + + ntype.initfunc_api = init_switch_view; + + node_type_update(&ntype, cmp_node_switch_view_update, NULL); + + nodeRegisterType(&ntype); +} |