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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user