Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-06-03 15:47:44 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-06-04 10:41:33 +0300
commitc3f00d78796216ce15b6032f980539af6f1b0687 (patch)
tree32be9b0d474e1e37a9b5a83dd78a636bb415c12d /source/blender/editors/space_node/node_edit.c
parentb998a7b384c6a598ea851fbc06a2df8829c34329 (diff)
Fix T65447: Mask doesn't update in compositor unless there's motion blur on
This is probably just one of the related issues. Root of the problem was that compositor job was using original scene and node tree for compositing. It is not guaranteed to have all the evaluated data. Switched compositor job to use it's own render-pipeline-like dependency graph which has everything evaluated in it. Reviewers: brecht Reviewed By: brecht Differential Revision: https://developer.blender.org/D4998
Diffstat (limited to 'source/blender/editors/space_node/node_edit.c')
-rw-r--r--source/blender/editors/space_node/node_edit.c27
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);