Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-02-07 14:26:30 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-02-07 14:26:30 +0300
commit84155ab21a53f51b55b395e16301388f47094805 (patch)
treef57a3499c4b2b57d51ac247dc21c45b2bae003bf
parent5892efa88304803faf6d816568d0a071b79147a3 (diff)
Depsgraph: Fix crash with shape keys and lattices
Only crash is fixed, still need to do something about missing recalc or something like that.
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc16
-rw-r--r--source/blender/depsgraph/intern/depsgraph_tag.cc1
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc6
3 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 31c85a40f0e..12560fa8aa1 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -2105,6 +2105,22 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
if (op_node->inlinks.size() == 0) {
graph_->add_new_relation(op_cow, op_node, "CoW Dependency");
}
+ else {
+ bool has_same_id_dependency = false;
+ foreach (DepsRelation *rel, op_node->inlinks) {
+ if (rel->from->type != DEG_NODE_TYPE_OPERATION) {
+ continue;
+ }
+ OperationDepsNode *op_node_from = (OperationDepsNode *)rel->from;
+ if (op_node_from->owner->owner == op_node->owner->owner) {
+ has_same_id_dependency = true;
+ break;
+ }
+ }
+ if (!has_same_id_dependency) {
+ graph_->add_new_relation(op_cow, op_node, "CoW Dependency");
+ }
+ }
}
GHASH_FOREACH_END();
/* NOTE: We currently ignore implicit relations to an external
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index f9d76fb6002..851b666a00a 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -92,6 +92,7 @@ void depsgraph_geometry_tag_to_component(const ID *id,
case OB_CURVE:
case OB_SURF:
case OB_FONT:
+ case OB_LATTICE:
case OB_MBALL:
*component_type = DEG_NODE_TYPE_GEOMETRY;
break;
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index a6668208574..290fb15443a 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -65,6 +65,7 @@ extern "C" {
#ifdef NESTED_ID_NASTY_WORKAROUND
# include "DNA_key_types.h"
# include "DNA_lamp_types.h"
+# include "DNA_lattice_types.h"
# include "DNA_linestyle_types.h"
# include "DNA_material_types.h"
# include "DNA_node_types.h"
@@ -93,6 +94,7 @@ namespace {
union NestedIDHackTempStorage {
FreestyleLineStyle linestyle;
Lamp lamp;
+ Lattice lattice;
Material material;
Mesh mesh;
Scene scene;
@@ -119,6 +121,7 @@ void nested_id_hack_discard_pointers(ID *id_cow)
SPECIAL_CASE(ID_WO, World, nodetree)
SPECIAL_CASE(ID_ME, Mesh, key)
+ SPECIAL_CASE(ID_LT, Lattice, key)
# undef SPECIAL_CASE
@@ -151,6 +154,7 @@ const ID *nested_id_hack_get_discarded_pointers(NestedIDHackTempStorage *storage
SPECIAL_CASE(ID_WO, World, nodetree, world)
SPECIAL_CASE(ID_ME, Mesh, key, mesh)
+ SPECIAL_CASE(ID_LT, Lattice, key, lattice)
# undef SPECIAL_CASE
@@ -183,6 +187,7 @@ void nested_id_hack_restore_pointers(const ID *old_id, ID *new_id)
SPECIAL_CASE(ID_WO, World, nodetree)
SPECIAL_CASE(ID_ME, Mesh, key)
+ SPECIAL_CASE(ID_LT, Lattice, key)
#undef SPECIAL_CASE
default:
@@ -219,6 +224,7 @@ void ntree_hack_remap_pointers(const Depsgraph *depsgraph, ID *id_cow)
SPECIAL_CASE(ID_WO, World, nodetree, bNodeTree)
SPECIAL_CASE(ID_ME, Mesh, key, Key)
+ SPECIAL_CASE(ID_LT, Lattice, key, Key)
#undef SPECIAL_CASE
default: