Commit: 4140b9d0ca9c34c31dc1916ff3e6774ae7495d61
Author: Sergey Sharybin
Date:   Thu Jan 8 20:04:16 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB4140b9d0ca9c34c31dc1916ff3e6774ae7495d61

Depsgraph: Resolve missing object update after loading the file

This is a bit of experiment and will need to re-think it again tomorrow
because currently running out of energy after hunting the previous fix.

It seems to work now so Joshua could continue being happy coder :)

===================================================================

M       source/blender/depsgraph/DEG_depsgraph.h
M       source/blender/depsgraph/intern/depsgraph_tag.cpp
M       source/blender/makesrna/intern/rna_depsgraph.c

===================================================================

diff --git a/source/blender/depsgraph/DEG_depsgraph.h 
b/source/blender/depsgraph/DEG_depsgraph.h
index 3316aab..e89312f 100644
--- a/source/blender/depsgraph/DEG_depsgraph.h
+++ b/source/blender/depsgraph/DEG_depsgraph.h
@@ -96,7 +96,7 @@ void DEG_free_node_types(void);
 void DEG_scene_update_flags(Depsgraph *graph, const bool do_time);
 
 /* Update dependency graph when visible scenes/layers changes. */
-void DEG_graph_on_visible_update(struct Main *bmain, Depsgraph *graph);
+void DEG_graph_on_visible_update(struct Main *bmain, struct Scene *scene);
 
 /* Update all dependency graphs when visible scenes/layers changes. */
 void DEG_on_visible_update(struct Main *bmain, const bool do_time);
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cpp 
b/source/blender/depsgraph/intern/depsgraph_tag.cpp
index e2c1b4d..a42e43d 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cpp
@@ -268,8 +268,9 @@ void DEG_graph_clear_tags(Depsgraph *graph)
 }
 
 /* Update dependency graph when visible scenes/layers changes. */
-void DEG_graph_on_visible_update(Main *bmain, Depsgraph *graph)
+void DEG_graph_on_visible_update(Main *bmain, Scene *scene)
 {
+       Depsgraph *graph = scene->depsgraph;
        wmWindowManager *wm = (wmWindowManager *)bmain->wm.first;
        int old_layers = graph->layers;
        if (wm != NULL) {
@@ -307,7 +308,24 @@ void DEG_graph_on_visible_update(Main *bmain, Depsgraph 
*graph)
                        graph->add_entry_tag(node);
                }
                graph->invisible_entry_tags.clear();
+               /* Tag all objects which becomes visible (or which becomes 
needed for dependencies)
+                * for recalc.
+                *
+                * This is mainly needed on file load only, after that updates 
of invisible objects
+                * will be stored in the pending list.
+                */
+               for (Depsgraph::OperationNodes::const_iterator it = 
graph->operations.begin();
+                    it != graph->operations.end();
+                    ++it)
+               {
+                       OperationDepsNode *node = *it;
+                       IDDepsNode *id_node = node->owner->owner;
+                       if ((id_node->layers & scene->lay_updated) == 0) {
+                               id_node->tag_update(graph);
+                       }
+               }
        }
+       scene->lay_updated |= graph->layers;
 }
 
 void DEG_on_visible_update(Main *bmain, const bool do_time)
@@ -317,7 +335,7 @@ void DEG_on_visible_update(Main *bmain, const bool do_time)
             scene = (Scene*)scene->id.next)
        {
                if (scene->depsgraph != NULL) {
-                       DEG_graph_on_visible_update(bmain, scene->depsgraph);
+                       DEG_graph_on_visible_update(bmain, scene);
                }
        }
 }
diff --git a/source/blender/makesrna/intern/rna_depsgraph.c 
b/source/blender/makesrna/intern/rna_depsgraph.c
index 685d5bf..8ac1e2a 100644
--- a/source/blender/makesrna/intern/rna_depsgraph.c
+++ b/source/blender/makesrna/intern/rna_depsgraph.c
@@ -61,7 +61,7 @@ static void rna_Depsgraph_debug_rebuild(Depsgraph 
*UNUSED(graph), Main *bmain)
        DAG_relations_tag_update(bmain);
        for (sce = bmain->scene.first; sce; sce = sce->id.next) {
                DAG_scene_relations_rebuild(bmain, sce);
-               DEG_graph_on_visible_update(bmain, sce->depsgraph);
+               DEG_graph_on_visible_update(bmain, sce);
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to