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:
authorDalai Felinto <dfelinto@gmail.com>2017-02-09 18:46:05 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-02-09 18:46:05 +0300
commita41bbfb7f395c0dd022c5489afef4bae4d739c8c (patch)
tree13d3c854eef2df5f441716b4d58d2944d34597ab /source/blender/depsgraph/intern
parent1045026ea23c8dac9b74f3cb2f2b4dc24a5d88af (diff)
Depsgraph fix for scene layers
Objects can be moved around freely now
Diffstat (limited to 'source/blender/depsgraph/intern')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc29
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h8
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_scene.cc14
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_scene.cc8
4 files changed, 30 insertions, 29 deletions
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) {