[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