diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-30 14:29:53 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-11-30 14:36:37 +0300 |
commit | c601ef7d7da8a3222a4d5d8a793eef9706997cd3 (patch) | |
tree | 7ce408b8a43255ccf54d21c94edb8801676332c2 | |
parent | 1c5c3748b5181050dfc18aa2f4b95537ce521643 (diff) |
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.
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc | 16 |
1 files changed, 13 insertions, 3 deletions
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); |