Blender Git Loki
Git Commits -> Revision 31041d8
Revision 31041d8 by Sergey Sharybin (depsgraph_refactor) December 8, 2014, 13:58 (GMT) |
Depsgraph: Solution for missing update tag when adding new object The issue was caused by new object add tagging object for recalc and tagging relations for update. With new dependency graph it lead to situation when ID tags are simply lost because of the whole graph being rebuilt. The idea of this change is: - Relations update tag doesn't destroy graph, it only stores flag in the graph that it's relations need to be updated. - ID tagging now stores an ID which is currently missing in the dependency graph. Tag of those IDs would happen later after relations are all up to date. - Relations update reconstructs the graph and re-tags all the nodes which were previously tagged for recalc. This gives quite the same behavior that with old dependency graph, making it possible to store recalc tags separately from the graph nodes themselves in order to be able to invalidate graph without rebuilding it and still have proper track for what's changed. This is a crucial thing to have in order to have reasonable speed of python scripts. Alternative to a separate storage in the Depsgraph would be to re-use recalc flags stored in the ID itself. There are probably some more tweaks to be done in this area, let's see how this behaves for now. P.S. This change also seems to solve issues with missing updates of the armatures when exiting edit mode. |
Commit Details:
Full Hash: 31041d86b7a4754ced3ededc28624844165687eb
Parent Commit: cc06c00
Lines Changed: +131, -22
6 Modified Paths:
/source/blender/blenkernel/intern/depsgraph.c (+28, -15) (Diff)
/source/blender/depsgraph/DEG_depsgraph_build.h (+8, -3) (Diff)
/source/blender/depsgraph/intern/depsgraph.cpp (+18, -0) (Diff)
/source/blender/depsgraph/intern/depsgraph.h (+15, -0) (Diff)
/source/blender/depsgraph/intern/depsgraph_build.cpp (+56, -1) (Diff)
/source/blender/depsgraph/intern/depsgraph_tag.cpp (+6, -3) (Diff)
/source/blender/depsgraph/DEG_depsgraph_build.h (+8, -3) (Diff)
/source/blender/depsgraph/intern/depsgraph.cpp (+18, -0) (Diff)
/source/blender/depsgraph/intern/depsgraph.h (+15, -0) (Diff)
/source/blender/depsgraph/intern/depsgraph_build.cpp (+56, -1) (Diff)
/source/blender/depsgraph/intern/depsgraph_tag.cpp (+6, -3) (Diff)