From a41bbfb7f395c0dd022c5489afef4bae4d739c8c Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Thu, 9 Feb 2017 16:46:05 +0100 Subject: Depsgraph fix for scene layers Objects can be moved around freely now --- .../depsgraph/intern/builder/deg_builder_nodes.cc | 29 +++++++++++----------- .../depsgraph/intern/builder/deg_builder_nodes.h | 8 ++---- .../intern/builder/deg_builder_nodes_scene.cc | 14 ++++++----- .../intern/builder/deg_builder_relations_scene.cc | 8 +++--- 4 files changed, 30 insertions(+), 29 deletions(-) (limited to 'source/blender/depsgraph/intern') diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 373d9dc4348..0f0d16907f4 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -125,7 +125,7 @@ static void modifier_walk(void *user_data, { BuilderWalkUserData *data = (BuilderWalkUserData *)user_data; if (*obpoin) { - data->builder->build_object(data->scene, NULL, *obpoin); + data->builder->build_object(data->scene, *obpoin); } } @@ -138,7 +138,7 @@ void constraint_walk(bConstraint * /*con*/, if (*idpoin) { ID *id = *idpoin; if (GS(id->name) == ID_OB) { - data->builder->build_object(data->scene, NULL, (Object *)id); + data->builder->build_object(data->scene, (Object *)id); } } } @@ -337,9 +337,7 @@ void DepsgraphNodeBuilder::begin_build(Main *bmain) { } FOREACH_NODETREE_END } -void DepsgraphNodeBuilder::build_group(Scene *scene, - BaseLegacy *base, - Group *group) +void DepsgraphNodeBuilder::build_group(Scene *scene, Group *group) { ID *group_id = &group->id; if (group_id->tag & LIB_TAG_DOIT) { @@ -348,7 +346,7 @@ void DepsgraphNodeBuilder::build_group(Scene *scene, group_id->tag |= LIB_TAG_DOIT; LINKLIST_FOREACH (GroupObject *, go, &group->gobject) { - build_object(scene, base, go->ob); + build_object(scene, go->ob); } } @@ -387,7 +385,7 @@ SubgraphDepsNode *DepsgraphNodeBuilder::build_subgraph(Group *group) return subgraph_node; } -void DepsgraphNodeBuilder::build_object(Scene *scene, BaseLegacy *base, Object *ob) +void DepsgraphNodeBuilder::build_object(Scene *scene, Object *ob) { const bool has_object = (ob->id.tag & LIB_TAG_DOIT); IDDepsNode *id_node = (has_object) @@ -397,9 +395,12 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, BaseLegacy *base, Object * * 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; - } + + /* Blender 2.8 transition: we don't have bases and do not have + * layer masks, but still want objects to be updated + */ + id_node->layers |= ((1 << 20) - 1); + if (ob == scene->camera) { /* Camera should always be updated, it used directly by viewport. */ id_node->layers |= (unsigned int)(-1); @@ -415,7 +416,7 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, BaseLegacy *base, Object * build_object_transform(scene, ob); if (ob->parent != NULL) { - build_object(scene, NULL, ob->parent); + build_object(scene, ob->parent); } if (ob->modifiers.first != NULL) { BuilderWalkUserData data; @@ -927,13 +928,13 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, Object *ob) */ Curve *cu = (Curve *)obdata; if (cu->bevobj != NULL) { - build_object(scene, NULL, cu->bevobj); + build_object(scene, cu->bevobj); } if (cu->taperobj != NULL) { - build_object(scene, NULL, cu->taperobj); + build_object(scene, cu->taperobj); } if (ob->type == OB_FONT && cu->textoncurve != NULL) { - build_object(scene, NULL, cu->textoncurve); + build_object(scene, cu->textoncurve); } break; } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index ab66fb90160..2f3f733b8db 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -32,10 +32,6 @@ #include "intern/depsgraph_types.h" -/* XXX: Temporary solution to get proper Baselegacy. */ -#include "DNA_scene_types.h" - -struct BaseLegacy; struct CacheFile; struct bGPdata; struct ListBase; @@ -129,8 +125,8 @@ struct DepsgraphNodeBuilder { void build_scene(Main *bmain, Scene *scene); SubgraphDepsNode *build_subgraph(Group *group); - void build_group(Scene *scene, BaseLegacy *base, Group *group); - void build_object(Scene *scene, BaseLegacy *base, Object *ob); + void build_group(Scene *scene, Group *group); + void build_object(Scene *scene, Object *ob); void build_object_transform(Scene *scene, Object *ob); void build_object_constraints(Scene *scene, Object *ob); void build_pose_constraints(Object *ob, bPoseChannel *pchan); diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc index 507f2572927..c7e8edb122e 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc @@ -46,6 +46,7 @@ extern "C" { #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "BKE_layer.h" #include "BKE_main.h" #include "BKE_node.h" @@ -79,24 +80,25 @@ void DepsgraphNodeBuilder::build_scene(Main *bmain, Scene *scene) } /* scene objects */ - LINKLIST_FOREACH (BaseLegacy *, base, &scene->base) { - Object *ob = base->object; - + Object *ob; + FOREACH_SCENE_OBJECT(scene, ob) + { /* object itself */ - build_object(scene, base, ob); + build_object(scene, ob); /* object that this is a proxy for */ // XXX: the way that proxies work needs to be completely reviewed! if (ob->proxy) { ob->proxy->proxy_from = ob; - build_object(scene, base, ob->proxy); + build_object(scene, ob->proxy); } /* Object dupligroup. */ if (ob->dup_group) { - build_group(scene, base, ob->dup_group); + build_group(scene, ob->dup_group); } } + FOREACH_SCENE_OBJECT_END /* rigidbody */ if (scene->rigidbody_world) { diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc index 8b68516a027..2f49d5b1645 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc @@ -46,6 +46,7 @@ extern "C" { #include "DNA_object_types.h" #include "DNA_scene_types.h" +#include "BKE_layer.h" #include "BKE_main.h" #include "BKE_node.h" @@ -74,9 +75,9 @@ void DepsgraphRelationBuilder::build_scene(Main *bmain, Scene *scene) } /* scene objects */ - LINKLIST_FOREACH (BaseLegacy *, base, &scene->base) { - Object *ob = base->object; - + Object *ob; + FOREACH_SCENE_OBJECT(scene, ob) + { /* object itself */ build_object(bmain, scene, ob); @@ -97,6 +98,7 @@ void DepsgraphRelationBuilder::build_scene(Main *bmain, Scene *scene) build_group(bmain, scene, ob, ob->dup_group); } } + FOREACH_SCENE_OBJECT_END /* rigidbody */ if (scene->rigidbody_world) { -- cgit v1.2.3