Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-11-30 14:29:53 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-11-30 14:36:37 +0300
commitc601ef7d7da8a3222a4d5d8a793eef9706997cd3 (patch)
tree7ce408b8a43255ccf54d21c94edb8801676332c2
parent1c5c3748b5181050dfc18aa2f4b95537ce521643 (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.cc16
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);