Fix compositor node previews flickering when dragging sliders

Compositing jobs would get cancelled as you drag number sliders, and
would write back empty previews. Only sync previews for completed jobs.
This commit is contained in:
Brecht Van Lommel
2023-06-19 15:29:48 +02:00
parent a6503f1dc9
commit 4b4c95c402
2 changed files with 10 additions and 5 deletions

View File

@@ -3653,9 +3653,6 @@ void ntreeLocalMerge(Main *bmain, bNodeTree *localtree, bNodeTree *ntree)
if (ntree->typeinfo->local_merge) {
ntree->typeinfo->local_merge(bmain, localtree, ntree);
}
ntreeFreeTree(localtree);
MEM_freeN(localtree);
}
}

View File

@@ -97,10 +97,11 @@ struct CompoJob {
bNodeTree *localtree;
/* Render instance. */
Render *re;
/* Jon system integration. */
/* Job system integration. */
const bool *stop;
bool *do_update;
float *progress;
bool cancelled;
};
float node_socket_calculate_height(const bNodeSocket &socket)
@@ -209,7 +210,13 @@ static void compo_freejob(void *cjv)
CompoJob *cj = (CompoJob *)cjv;
if (cj->localtree) {
bke::ntreeLocalMerge(cj->bmain, cj->localtree, cj->ntree);
/* Merge back node previews, only for completed jobs. */
if (!cj->cancelled) {
bke::ntreeLocalMerge(cj->bmain, cj->localtree, cj->ntree);
}
bke::ntreeFreeTree(cj->localtree);
MEM_freeN(cj->localtree);
}
if (cj->compositor_depsgraph != nullptr) {
DEG_graph_free(cj->compositor_depsgraph);
@@ -315,6 +322,7 @@ static void compo_canceljob(void *cjv)
Main *bmain = cj->bmain;
Scene *scene = cj->scene;
BKE_callback_exec_id(bmain, &scene->id, BKE_CB_EVT_COMPOSITE_CANCEL);
cj->cancelled = true;
}
static void compo_completejob(void *cjv)