[Bf-blender-cvs] [0c7ec589663] master: Depsgraph: Make sure textures used by modifiers are in the graph
Sergey Sharybin
noreply at git.blender.org
Wed Apr 4 12:56:07 CEST 2018
Commit: 0c7ec5896638480c8ed0a67d80026b83e4d12526
Author: Sergey Sharybin
Date: Wed Apr 4 12:55:38 2018 +0200
Branches: master
https://developer.blender.org/rB0c7ec5896638480c8ed0a67d80026b83e4d12526
Depsgraph: Make sure textures used by modifiers are in the graph
===================================================================
M source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M source/blender/depsgraph/intern/builder/deg_builder_relations.cc
===================================================================
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 15e3ea3e10f..1613e9f6e53 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -122,12 +122,24 @@ struct BuilderWalkUserData {
static void modifier_walk(void *user_data,
struct Object * /*object*/,
- struct Object **obpoin,
+ struct ID **idpoin,
int /*cb_flag*/)
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
- if (*obpoin) {
- data->builder->build_object(NULL, *obpoin);
+ ID *id = *idpoin;
+ if (id == NULL) {
+ return;
+ }
+ switch (GS(id->name)) {
+ case ID_OB:
+ data->builder->build_object(NULL, (Object *)id);
+ break;
+ case ID_TE:
+ data->builder->build_texture((Tex *)id);
+ break;
+ default:
+ /* pass */
+ break;
}
}
@@ -342,7 +354,7 @@ void DepsgraphNodeBuilder::build_object(Base *base, Object *object)
if (object->modifiers.first != NULL) {
BuilderWalkUserData data;
data.builder = this;
- modifiers_foreachObjectLink(object, modifier_walk, &data);
+ modifiers_foreachIDLink(object, modifier_walk, &data);
}
/* Constraints. */
if (object->constraints.first != NULL) {
@@ -1053,6 +1065,11 @@ void DepsgraphNodeBuilder::build_texture(Tex *texture)
build_image(texture->ima);
}
}
+ /* Placeholder so we can add relations and tag ID node for update. */
+ add_operation_node(&texture->id,
+ DEG_NODE_TYPE_PARAMETERS,
+ NULL,
+ DEG_OPCODE_PLACEHOLDER);
}
void DepsgraphNodeBuilder::build_image(Image *image) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 40db9d1b5f1..6f3686f2a10 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -122,12 +122,24 @@ struct BuilderWalkUserData {
void modifier_walk(void *user_data,
struct Object * /*object*/,
- struct Object **obpoin,
+ struct ID **idpoin,
int /*cb_flag*/)
{
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
- if (*obpoin) {
- data->builder->build_object(*obpoin);
+ ID *id = *idpoin;
+ if (id == NULL) {
+ return;
+ }
+ switch (GS(id->name)) {
+ case ID_OB:
+ data->builder->build_object((Object *)id);
+ break;
+ case ID_TE:
+ data->builder->build_texture((Tex *)id);
+ break;
+ default:
+ /* pass */
+ break;
}
}
@@ -459,7 +471,7 @@ void DepsgraphRelationBuilder::build_object(Object *object)
if (object->modifiers.first != NULL) {
BuilderWalkUserData data;
data.builder = this;
- modifiers_foreachObjectLink(object, modifier_walk, &data);
+ modifiers_foreachIDLink(object, modifier_walk, &data);
}
/* Constraints. */
if (object->constraints.first != NULL) {
More information about the Bf-blender-cvs
mailing list