[Bf-blender-cvs] [7ca4c512a7e] greasepencil-object: Hacky WIP code to verify that GPencil-Dopesheet Integration (for modifiers) is working

Joshua Leung noreply at git.blender.org
Sat Nov 4 05:47:25 CET 2017


Commit: 7ca4c512a7eafbfc36e65ba65f907e19ac54ac3b
Author: Joshua Leung
Date:   Thu Oct 26 21:23:23 2017 +1300
Branches: greasepencil-object
https://developer.blender.org/rB7ca4c512a7eafbfc36e65ba65f907e19ac54ac3b

Hacky WIP code to verify that GPencil-Dopesheet Integration (for modifiers) is working

This code should be replaced, as it currently just duplicates the
modifier-looping logic (bad!). However, this is just a temporary placeholder
needed to get the updateDepsgraph() calls to run at all.

In any case, this would've been easier if I'd done the ob->gpd ==> ob->data
fixes first, since this hack wouldn't be needed.

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

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 eec363a7f50..7e9b363ff28 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -497,6 +497,25 @@ void DepsgraphNodeBuilder::build_object(Scene *scene, Object *ob)
 	/* Grease pencil. */
 	if (ob->gpd != NULL) {
 		build_gpencil(ob->gpd);
+		
+		/* Temporary uber-update node, which does everything.
+		 * It is for the being we're porting old dependencies into the new system.
+		 * We'll get rid of this node as soon as all the granular update functions
+		 * are filled in.
+		 *
+		 * TODO(sergey): Get rid of this node.
+		 * XXX: This code should go as soon as gp object stores its data in obdata
+		 */
+		OperationDepsNode *op_node;
+		op_node = add_operation_node(&ob->id,
+		                             DEG_NODE_TYPE_GEOMETRY,
+		                             function_bind(BKE_object_eval_uber_data,
+		                                           _1,
+		                                           scene,
+		                                           ob),
+		                             DEG_OPCODE_GEOMETRY_UBEREVAL);
+		op_node->set_as_exit();
+
 	}
 
 	/* Object that this is a proxy for. */
@@ -1027,6 +1046,18 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, Object *ob)
 			op_node->set_as_entry();
 			break;
 		}
+		
+		case OB_GPENCIL:
+		{
+			/* GPencil evaluation operations. */
+			bGPdata *gpd = ob->gpd; /* FIXME */
+			ID *gpd_id = &gpd->id; /* No COW for now, as GP uses its own cache system. See gpencil_engine.c */
+			
+			op_node = add_operation_node(gpd_id, DEG_NODE_TYPE_GEOMETRY, NULL,
+	                             DEG_OPCODE_PLACEHOLDER, "GP Geometry Eval");
+			op_node->set_as_entry();
+			break;
+		}
 	}
 
 	op_node = add_operation_node(obdata, DEG_NODE_TYPE_GEOMETRY, NULL,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 3051efd4f79..04c0ed74bef 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -554,6 +554,43 @@ void DepsgraphRelationBuilder::build_object(Main *bmain, Scene *scene, Object *o
 	/* Grease pencil. */
 	if (ob->gpd != NULL) {
 		build_gpencil(ob->gpd);
+		
+		// XXX: Remove duplicated code... quick hack for now
+		if (ob->modifiers.first != NULL) {
+			OperationKey obdata_ubereval_key(&ob->id,
+	                                 DEG_NODE_TYPE_GEOMETRY,
+	                                 DEG_OPCODE_GEOMETRY_UBEREVAL);
+			
+			LINKLIST_FOREACH (ModifierData *, md, &ob->modifiers) {
+				const ModifierTypeInfo *mti = modifierType_getInfo((ModifierType)md->type);
+
+				if (mti->updateDepsgraph) {
+					DepsNodeHandle handle = create_node_handle(obdata_ubereval_key);
+					mti->updateDepsgraph(
+					        md,
+					        bmain,
+					        scene,
+					        ob,
+					        reinterpret_cast< ::DepsNodeHandle* >(&handle));
+				}
+
+				if (BKE_object_modifier_use_time(ob, md)) {
+					TimeSourceKey time_src_key;
+					add_relation(time_src_key, obdata_ubereval_key, "Time Source");
+
+					/* Hacky fix for T45633 (Animated modifiers aren't updated)
+					 *
+					 * This check works because BKE_object_modifier_use_time() tests
+					 * for either the modifier needing time, or that it is animated.
+					 */
+					/* XXX: Remove this hack when these links are added as part of build_animdata() instead */
+					if (modifier_dependsOnTime(md) == false && needs_animdata_node(&ob->id)) {
+						ComponentKey animation_key(&ob->id, DEG_NODE_TYPE_ANIMATION);
+						add_relation(animation_key, obdata_ubereval_key, "Modifier Animation");
+					}
+				}
+			}
+		}
 	}
 
 	/* Object that this is a proxy for. */



More information about the Bf-blender-cvs mailing list