[Bf-blender-cvs] [fd69ba2255] master: Depsgraph: Link from material to object shading
Sergey Sharybin
noreply at git.blender.org
Thu Jan 26 17:02:20 CET 2017
Commit: fd69ba225540cde5e4c1fa651fb02df21ea0a143
Author: Sergey Sharybin
Date: Thu Jan 26 17:01:37 2017 +0100
Branches: master
https://developer.blender.org/rBfd69ba225540cde5e4c1fa651fb02df21ea0a143
Depsgraph: Link from material to object shading
This is a ground work for the upcoming changes in Blender 2.8 branch
where we need to do special actions to reconstruct shaders when
material changes.
===================================================================
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 173d5c3221..9d78b99341 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -824,11 +824,18 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, Object *ob)
}
/* materials */
- for (int a = 1; a <= ob->totcol; a++) {
- Material *ma = give_current_material(ob, a);
- if (ma != NULL) {
- build_material(ma);
+ if (ob->totcol != 0) {
+ for (int a = 1; a <= ob->totcol; a++) {
+ Material *ma = give_current_material(ob, a);
+ if (ma != NULL) {
+ build_material(ma);
+ }
}
+ add_operation_node(&ob->id,
+ DEPSNODE_TYPE_SHADING,
+ DEPSOP_TYPE_EXEC,
+ NULL,
+ DEG_OPCODE_PLACEHOLDER, "Material Update");
}
/* geometry collision */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 82d502dcc1..ba7818c21a 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1418,11 +1418,18 @@ void DepsgraphRelationBuilder::build_obdata_geom(Main *bmain, Scene *scene, Obje
}
/* materials */
- if (ob->totcol) {
+ if (ob->totcol != 0) {
+ ComponentKey object_shading_key(&ob->id, DEPSNODE_TYPE_SHADING);
for (int a = 1; a <= ob->totcol; a++) {
Material *ma = give_current_material(ob, a);
if (ma != NULL) {
build_material(ma);
+ ComponentKey material_shading_key(&ma->id,
+ DEPSNODE_TYPE_SHADING);
+ add_relation(material_shading_key,
+ object_shading_key,
+ DEPSREL_TYPE_UPDATE,
+ "Object Shading");
}
}
}
More information about the Bf-blender-cvs
mailing list