[Bf-blender-cvs] [57a5ef8c611] blender2.8: Depsgraph: Fix missing relations for IDs brought by drivers
Sergey Sharybin
noreply at git.blender.org
Fri May 4 14:30:11 CEST 2018
Commit: 57a5ef8c611b2c0952153e9624c46ffb369b6a42
Author: Sergey Sharybin
Date: Fri May 4 14:27:50 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB57a5ef8c611b2c0952153e9624c46ffb369b6a42
Depsgraph: Fix missing relations for IDs brought by drivers
This is similar to rather recent fix in nodes builder.
Fixes crash when creating static override for chicken from Dweebs.
===================================================================
M source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M source/blender/depsgraph/intern/builder/deg_builder_relations.h
===================================================================
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 4dfcf5229e3..94c9f0cdd57 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -390,6 +390,40 @@ void DepsgraphRelationBuilder::begin_build()
{
}
+void DepsgraphRelationBuilder::build_id(ID* id) {
+ if (id == NULL) {
+ return;
+ }
+ switch (GS(id->name)) {
+ case ID_GR:
+ build_group(NULL, (Group *)id);
+ break;
+ case ID_OB:
+ build_object(NULL, (Object *)id);
+ break;
+ case ID_NT:
+ build_nodetree((bNodeTree *)id);
+ break;
+ case ID_MA:
+ build_material((Material *)id);
+ break;
+ case ID_TE:
+ build_texture((Tex *)id);
+ break;
+ case ID_WO:
+ build_world((World *)id);
+ break;
+ case ID_MSK:
+ build_mask((Mask *)id);
+ break;
+ case ID_MC:
+ build_movieclip((MovieClip *)id);
+ break;
+ default:
+ fprintf(stderr, "Unhandled ID %s\n", id->name);
+ }
+}
+
void DepsgraphRelationBuilder::build_group(Object *object, Group *group)
{
const bool group_done = built_map_.checkIsBuiltAndTag(group);
@@ -1214,6 +1248,7 @@ void DepsgraphRelationBuilder::build_driver_variables(ID *id, FCurve *fcu)
if (dtar->id == NULL) {
continue;
}
+ build_id(dtar->id);
/* Special handling for directly-named bones. */
if ((dtar->flag & DTAR_FLAG_STRUCT_REF) &&
(((Object *)dtar->id)->type == OB_ARMATURE) &&
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 7c88eea6f72..9e45d01fd79 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -194,6 +194,7 @@ struct DepsgraphRelationBuilder
const char *description,
bool check_unique = false);
+ void build_id(ID* id);
void build_view_layer(Scene *scene, ViewLayer *view_layer);
void build_group(Object *object, Group *group);
void build_object(Base *base, Object *object);
More information about the Bf-blender-cvs
mailing list