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
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-15 20:36:59 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-15 20:43:33 +0300
commitdb3bfd0633ae5d3a5458fed7cca7849b86525002 (patch)
tree7f9664b4f1e4212a205d99898b3aefded9a464e1 /source
parent2f60b505c6fe14d04cb15479dfad8c47e32c8e9f (diff)
Fix T61575: missing Cycles viewport updates when changing settings.
This reverts "Depsgraph: Don't tag original IDs", commit: 5f814cb3b47df9255724e979458e05a42ed40f9a.
Diffstat (limited to 'source')
-rw-r--r--source/blender/depsgraph/intern/depsgraph_tag.cc2
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc2
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_flush.cc4
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)
{