Fix T61575: missing Cycles viewport updates when changing settings.
This reverts "Depsgraph: Don't tag original IDs", commit:
5f814cb3b4
.
This commit is contained in:
@@ -280,6 +280,7 @@ void depsgraph_tag_component(Depsgraph *graph,
|
|||||||
ComponentNode *cow_comp =
|
ComponentNode *cow_comp =
|
||||||
id_node->find_component(NodeType::COPY_ON_WRITE);
|
id_node->find_component(NodeType::COPY_ON_WRITE);
|
||||||
cow_comp->tag_update(graph, update_source);
|
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::Depsgraph *deg_graph = reinterpret_cast<DEG::Depsgraph *>(data_v);
|
||||||
DEG::IDNode *id_node = deg_graph->id_nodes[i];
|
DEG::IDNode *id_node = deg_graph->id_nodes[i];
|
||||||
id_node->id_cow->recalc &= ~ID_RECALC_ALL;
|
id_node->id_cow->recalc &= ~ID_RECALC_ALL;
|
||||||
|
id_node->id_orig->recalc &= ~ID_RECALC_ALL;
|
||||||
|
|
||||||
/* Clear embedded node trees too. */
|
/* Clear embedded node trees too. */
|
||||||
bNodeTree *ntree_cow = ntreeFromID(id_node->id_cow);
|
bNodeTree *ntree_cow = ntreeFromID(id_node->id_cow);
|
||||||
|
@@ -684,6 +684,7 @@ ID *deg_expand_copy_on_write_datablock(const Depsgraph *depsgraph,
|
|||||||
{
|
{
|
||||||
const ID *id_orig = id_node->id_orig;
|
const ID *id_orig = id_node->id_orig;
|
||||||
ID *id_cow = id_node->id_cow;
|
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
|
/* No need to expand such datablocks, their copied ID is same as original
|
||||||
* one already. */
|
* one already. */
|
||||||
if (!deg_copy_on_write_is_needed(id_orig)) {
|
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
|
/* Correct or tweak some pointers which are not taken care by foreach
|
||||||
* from above. */
|
* from above. */
|
||||||
update_special_pointers(depsgraph, id_orig, id_cow);
|
update_special_pointers(depsgraph, id_orig, id_cow);
|
||||||
|
id_cow->recalc = id_orig->recalc | id_cow_recalc;
|
||||||
return id_cow;
|
return id_cow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -248,6 +248,10 @@ void flush_editors_id_update(Main *bmain,
|
|||||||
/* TODO(sergey): Do we need to pass original or evaluated ID here? */
|
/* TODO(sergey): Do we need to pass original or evaluated ID here? */
|
||||||
ID *id_orig = id_node->id_orig;
|
ID *id_orig = id_node->id_orig;
|
||||||
ID *id_cow = id_node->id_cow;
|
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. */
|
/* Gather recalc flags from all changed components. */
|
||||||
GHASH_FOREACH_BEGIN(ComponentNode *, comp_node, id_node->components)
|
GHASH_FOREACH_BEGIN(ComponentNode *, comp_node, id_node->components)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user