Depsgraph: Fix missing updates when changing node tree topology
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 29 Aug 2017 09:26:57 +0000 (11:26 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 29 Aug 2017 09:32:25 +0000 (11:32 +0200)
commit83ea224a7fa2261ded92b5a341c9237855148963
tree5a6e88864a2e4341dfcdc7bf9c55fb01b5566d9e
parent6b8132a153d0bad697005d1d93c9827c2be8a273
Depsgraph: Fix missing updates when changing node tree topology

There were two issues here:

1. material_update did not do anything, because DEG_id_tag_update was storing
   update tags in original IDs, which had nothing evaluated. Even more, material
   update should have been called with evaluated version of material, Solved
   this by copying update tag from original ID to a copied one.

   However, perhaps DEG_id_tag_update should tag both original and copied ID,
   so updates are never gets lots if some depsgraph is not visible.

2. Tagging material for update should ensure it's copied version of node tree is
   up to date, otherwise material will still use old node tree.

This solves missing material updates when changing topology. Tweaking values is
still broken, because of GPUMaterial using pointer to original node's socket
value, which gets broken after copy-on-write of the node tree (pointers of nodes
are changing).
source/blender/depsgraph/intern/depsgraph_tag.cc
source/blender/depsgraph/intern/eval/deg_eval_flush.cc