diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-02-15 20:36:59 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-02-15 20:43:33 +0300 |
commit | db3bfd0633ae5d3a5458fed7cca7849b86525002 (patch) | |
tree | 7f9664b4f1e4212a205d99898b3aefded9a464e1 | |
parent | 2f60b505c6fe14d04cb15479dfad8c47e32c8e9f (diff) |
Fix T61575: missing Cycles viewport updates when changing settings.
This reverts "Depsgraph: Don't tag original IDs", commit:
5f814cb3b47df9255724e979458e05a42ed40f9a.
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_tag.cc | 2 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc | 2 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval_flush.cc | 4 |
3 files changed, 8 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc index 454b622385a..10ea2e27daf 100644 --- a/source/blender/depsgraph/intern/depsgraph_tag.cc +++ b/source/blender/depsgraph/intern/depsgraph_tag.cc @@ -280,6 +280,7 @@ void depsgraph_tag_component(Depsgraph *graph, ComponentNode *cow_comp = id_node->find_component(NodeType::COPY_ON_WRITE); cow_comp->tag_update(graph, update_source); + id_node->id_orig->recalc |= ID_RECALC_COPY_ON_WRITE; } } @@ -765,6 +766,7 @@ static void deg_graph_clear_id_node_func( DEG::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(data_v); DEG::IDNode *id_node = deg_graph->id_nodes[i]; id_node->id_cow->recalc &= ~ID_RECALC_ALL; + id_node->id_orig->recalc &= ~ID_RECALC_ALL; /* Clear embedded node trees too. */ bNodeTree *ntree_cow = ntreeFromID(id_node->id_cow); diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc index e8a7a2a735f..32212b0e1c1 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc @@ -684,6 +684,7 @@ ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, { const ID *id_orig = id_node->id_orig; ID *id_cow = id_node->id_cow; + const int id_cow_recalc = id_cow->recalc; /* No need to expand such datablocks, their copied ID is same as original * one already. */ if (!deg_copy_on_write_is_needed(id_orig)) { @@ -760,6 +761,7 @@ ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph, /* Correct or tweak some pointers which are not taken care by foreach * from above. */ update_special_pointers(depsgraph, id_orig, id_cow); + id_cow->recalc = id_orig->recalc | id_cow_recalc; return id_cow; } diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc index 351e6901015..e408314a340 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc @@ -248,6 +248,10 @@ void flush_editors_id_update(Main *bmain, /* TODO(sergey): Do we need to pass original or evaluated ID here? */ ID *id_orig = id_node->id_orig; ID *id_cow = id_node->id_cow; + /* Copy tag from original data to CoW storage. + * This is because DEG_id_tag_update() sets tags on original + * data. */ + id_cow->recalc |= (id_orig->recalc & ID_RECALC_ALL); /* Gather recalc flags from all changed components. */ GHASH_FOREACH_BEGIN(ComponentNode *, comp_node, id_node->components) { |