diff options
Diffstat (limited to 'source/blender/editors/space_node/node_edit.c')
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index d54a30047e6..7a6e37bfd4d 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -42,6 +42,8 @@ #include "BKE_scene.h" #include "DEG_depsgraph.h" +#include "DEG_depsgraph_build.h" +#include "DEG_depsgraph_query.h" #include "RE_engine.h" #include "RE_pipeline.h" @@ -79,14 +81,19 @@ enum { }; typedef struct CompoJob { + /* Input parameters. */ Main *bmain; Scene *scene; + ViewLayer *view_layer; bNodeTree *ntree; + int recalc_flags; + /* Evaluated state/ */ + Depsgraph *compositor_depsgraph; bNodeTree *localtree; + /* Jon system integration. */ const short *stop; short *do_update; float *progress; - int recalc_flags; } CompoJob; static void compo_tag_output_nodes(bNodeTree *nodetree, int recalc_flags) @@ -182,6 +189,9 @@ static void compo_freejob(void *cjv) if (cj->localtree) { ntreeLocalMerge(cj->bmain, cj->localtree, cj->ntree); } + if (cj->compositor_depsgraph != NULL) { + DEG_graph_free(cj->compositor_depsgraph); + } MEM_freeN(cj); } @@ -190,8 +200,19 @@ static void compo_freejob(void *cjv) static void compo_initjob(void *cjv) { CompoJob *cj = cjv; + Main *bmain = cj->bmain; + Scene *scene = cj->scene; + ViewLayer *view_layer = cj->view_layer; + + cj->compositor_depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER); + DEG_graph_build_for_compositor_preview( + cj->compositor_depsgraph, bmain, scene, view_layer, cj->ntree); + DEG_evaluate_on_framechange(bmain, cj->compositor_depsgraph, CFRA); + + bNodeTree *ntree_eval = (bNodeTree *)DEG_get_evaluated_id(cj->compositor_depsgraph, + &cj->ntree->id); - cj->localtree = ntreeLocalize(cj->ntree); + cj->localtree = ntreeLocalize(ntree_eval); if (cj->recalc_flags) { compo_tag_output_nodes(cj->localtree, cj->recalc_flags); @@ -283,6 +304,7 @@ void ED_node_composite_job(const bContext *C, struct bNodeTree *nodetree, Scene CompoJob *cj; Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); /* to fix bug: [#32272] */ if (G.is_rendering) { @@ -307,6 +329,7 @@ void ED_node_composite_job(const bContext *C, struct bNodeTree *nodetree, Scene /* customdata for preview thread */ cj->bmain = bmain; cj->scene = scene; + cj->view_layer = view_layer; cj->ntree = nodetree; cj->recalc_flags = compo_get_recalc_flags(C); |