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. */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to