Commit: c601ef7d7da8a3222a4d5d8a793eef9706997cd3
Author: Sergey Sharybin
Date:   Thu Nov 30 12:29:53 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBc601ef7d7da8a3222a4d5d8a793eef9706997cd3

Depsgraph: Fix missing objects in viewport when CoW is enabled

Remapping of pointers did not work properly, since it had no pointers yet to
remap base->object to a CoW object.

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

M       source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc

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

diff --git 
a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
index 91930636e0a..cd226941278 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
@@ -65,13 +65,23 @@ extern "C" {
 
 namespace DEG {
 
-void DepsgraphNodeBuilder::build_view_layer(Scene *scene,
-                                            ViewLayer *view_layer,
-                                            eDepsNode_LinkedState_Type 
linked_state)
+void DepsgraphNodeBuilder::build_view_layer(
+        Scene *scene,
+        ViewLayer *view_layer,
+        eDepsNode_LinkedState_Type linked_state)
 {
+       /* Expand Scene Cow datablock to get proper pointers to bases. */
        Scene *scene_cow;
        ViewLayer *view_layer_cow;
        if (DEG_depsgraph_use_copy_on_write()) {
+               /* NOTE: We need to create ID nodes for all objects coming from 
bases,
+                * otherwise remapping will not replace objects with their CoW 
versions
+                * for CoW bases.
+                */
+               LINKLIST_FOREACH(Base *, base, &view_layer->object_bases) {
+                       Object *object = base->object;
+                       add_id_node(&object->id, false);
+               }
                /* Make sure we've got ID node, so we can get pointer to CoW 
datablock.
                 */
                scene_cow = expand_cow_datablock(scene);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to