[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