Commit: 7103c6ef3b26eb8a14889923e6429f2ebba0fbc2
Author: Sergey Sharybin
Date:   Mon Nov 13 14:43:08 2017 +0100
Branches: blender-v2.79a-release
https://developer.blender.org/rB7103c6ef3b26eb8a14889923e6429f2ebba0fbc2

Depsgraph: Fix relations for metaballs

Initially spotted and investigated by Dalai and Germano.

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

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 7a1ec96e983..dfd43a4dd2e 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -820,11 +820,11 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene 
*scene, Object *ob)
                case OB_MBALL:
                {
                        Object *mom = BKE_mball_basis_find(scene, ob);
-
-                       /* Motherball - mom depends on children! */
+                       /* NOTE: Only the motherball gets evaluated, it's 
children are
+                        * having empty placeholders for the correct relations 
being built.
+                        */
                        if (mom == ob) {
                                /* metaball evaluation operations */
-                               /* NOTE: only the motherball gets evaluated! */
                                op_node = add_operation_node(obdata,
                                                             
DEG_NODE_TYPE_GEOMETRY,
                                                             
function_bind(BKE_mball_eval_geometry,
@@ -832,6 +832,12 @@ void DepsgraphNodeBuilder::build_obdata_geom(Scene *scene, 
Object *ob)
                                                                           
(MetaBall *)obdata),
                                                             
DEG_OPCODE_PLACEHOLDER,
                                                             "Geometry Eval");
+                       } else {
+                               op_node = add_operation_node(obdata,
+                                                            
DEG_NODE_TYPE_GEOMETRY,
+                                                            NULL,
+                                                            
DEG_OPCODE_PLACEHOLDER,
+                                                            "Geometry Eval");
                                op_node->set_as_entry();
                        }
                        break;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc 
b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 9e1ffcaa20f..37c473f53be 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1501,14 +1501,19 @@ void DepsgraphRelationBuilder::build_obdata_geom(Main 
*bmain, Scene *scene, Obje
                case OB_MBALL:
                {
                        Object *mom = BKE_mball_basis_find(scene, ob);
-
+                       ComponentKey mom_geom_key(&mom->id, 
DEG_NODE_TYPE_GEOMETRY);
                        /* motherball - mom depends on children! */
-                       if (mom != ob) {
-                               /* non-motherball -> cannot be directly 
evaluated! */
-                               ComponentKey mom_key(&mom->id, 
DEG_NODE_TYPE_GEOMETRY);
+                       if (mom == ob) {
+                               ComponentKey mom_transform_key(&mom->id,
+                                                              
DEG_NODE_TYPE_TRANSFORM);
+                               add_relation(mom_transform_key,
+                                            mom_geom_key,
+                                            "Metaball Motherball Transform -> 
Geometry");
+                       }
+                       else if (mom != ob) {
                                ComponentKey transform_key(&ob->id, 
DEG_NODE_TYPE_TRANSFORM);
-                               add_relation(geom_key, mom_key, "Metaball 
Motherball");
-                               add_relation(transform_key, mom_key, "Metaball 
Motherball");
+                               add_relation(geom_key, mom_geom_key, "Metaball 
Motherball");
+                               add_relation(transform_key, mom_geom_key, 
"Metaball Motherball");
                        }
                        break;
                }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to