[Bf-blender-cvs] [453aef9] id_override_static: Include "static override rules generator" operation into new depsgraph.

Bastien Montagne noreply at git.blender.org
Mon Jan 2 12:56:42 CET 2017


Commit: 453aef97be5855839d64bf1c81205befe8d249cc
Author: Bastien Montagne
Date:   Fri Dec 30 16:54:50 2016 +0100
Branches: id_override_static
https://developer.blender.org/rB453aef97be5855839d64bf1c81205befe8d249cc

Include "static override rules generator" operation into new depsgraph.

Note that this is dummy empty placeholder for now!

Idea here is that depsgraph is best place to generate our override rules
based on data changes. That way all tools in Blender keep working as
usual, on local data, and overrides are generated when needed just
before IDs get actually evaluated.

Depsgraph has key advantage of only running over *changed* data-blocks
already.

Not sure this is actually valid idea, but for tests will do the work.
If we want to keep it, we'll have to find a way to prevent this running
too often though, especially not during most animation-triggered
evaluations.

===================================================================

M	source/blender/blenkernel/intern/library_override.c
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc

===================================================================

diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
index f15bcf6..a4487fc 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -169,6 +169,7 @@ bool BKE_override_status_check_reference(ID *local)
 bool BKE_override_operations_create(ID *local)
 {
 	BLI_assert(local->override != NULL);
+	printf("Should generate static override rules for %s\n", local->name);
 	return false;
 }
 
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index e312c4e..01b167c 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -80,6 +80,7 @@ extern "C" {
 #include "BKE_key.h"
 #include "BKE_lattice.h"
 #include "BKE_library.h"
+#include "BKE_library_override.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
 #include "BKE_mesh.h"
@@ -167,7 +168,22 @@ RootDepsNode *DepsgraphNodeBuilder::add_root_node()
 
 IDDepsNode *DepsgraphNodeBuilder::add_id_node(ID *id)
 {
-	return m_graph->add_id_node(id, id->name);
+	IDDepsNode *id_node = m_graph->find_id_node(id);
+
+	if (id_node == NULL) {
+		id_node = m_graph->add_id_node(id, id->name);
+
+		if (id->override != NULL) {
+			ComponentDepsNode *comp_node = id_node->add_component(DEPSNODE_TYPE_PARAMETERS, "override_generator");
+			comp_node->owner = id_node;
+
+			/* TDOD We most certainly do not want to run this on every deg evaluation! Especially not during animation? */
+			add_operation_node(comp_node, DEPSOP_TYPE_INIT, function_bind(BKE_override_operations_create, id),
+							   DEG_OPCODE_OPERATION, "override_generator", 0);
+		}
+	}
+
+	return id_node;
 }
 
 TimeSourceDepsNode *DepsgraphNodeBuilder::add_time_source(ID *id)




More information about the Bf-blender-cvs mailing list