Fix T49981: New Depsgraph - When camera is on inactive layer, it does not evaluate...
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 21 Nov 2016 13:36:36 +0000 (14:36 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 21 Nov 2016 13:37:23 +0000 (14:37 +0100)
source/blender/depsgraph/intern/builder/deg_builder_nodes.cc

index 4de82dd63e4a0ad2b5639bd31af2834581cf62cc..e312c4e0dcbd5ea0c6b75cb084ef646ab2091468 100644 (file)
@@ -372,19 +372,26 @@ SubgraphDepsNode *DepsgraphNodeBuilder::build_subgraph(Group *group)
 
 void DepsgraphNodeBuilder::build_object(Scene *scene, Base *base, Object *ob)
 {
-       if (ob->id.tag & LIB_TAG_DOIT) {
-               IDDepsNode *id_node = m_graph->find_id_node(&ob->id);
-               if (base != NULL) {
-                       id_node->layers |= base->lay;
-               }
-               return;
-       }
-       ob->id.tag |= LIB_TAG_DOIT;
-
-       IDDepsNode *id_node = add_id_node(&ob->id);
+       const bool has_object = (ob->id.tag & LIB_TAG_DOIT);
+       IDDepsNode *id_node = (has_object)
+               ? m_graph->find_id_node(&ob->id)
+               : add_id_node(&ob->id);
+       /* Update node layers.
+        * Do it for both new and existing ID nodes. This is so because several
+        * bases might be sharing same object.
+        */
        if (base != NULL) {
                id_node->layers |= base->lay;
        }
+       if (ob == scene->camera) {
+               /* Camera should always be updated, it used directly by viewport. */
+               id_node->layers |= (unsigned int)(-1);
+       }
+       /* Skip rest of components if the ID node was already there. */
+       if (has_object) {
+               return;
+       }
+       ob->id.tag |= LIB_TAG_DOIT;
        ob->customdata_mask = 0;
 
        /* Standard components. */