[Bf-blender-cvs] [eac0f358454] master: Fix T65134: Duplicated proxies in several scenes don't work
Sergey Sharybin
noreply at git.blender.org
Thu Oct 10 16:20:42 CEST 2019
Commit: eac0f3584545e9e5d9674d2fd9b74c256ce841f3
Author: Sergey Sharybin
Date: Thu Oct 10 15:40:25 2019 +0200
Branches: master
https://developer.blender.org/rBeac0f3584545e9e5d9674d2fd9b74c256ce841f3
Fix T65134: Duplicated proxies in several scenes don't work
This is something which worked in Blender 2.79.
Need to do special trickery to ensure peoxy_from points to a
proper object.
Differential Revision: https://developer.blender.org/D6040
===================================================================
M source/blender/blenkernel/intern/armature_update.c
M source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M source/blender/depsgraph/intern/depsgraph_tag.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c
index 00975976130..b4f5b1e2ec4 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -643,6 +643,10 @@ void BKE_pose_eval_init(struct Depsgraph *depsgraph, Scene *UNUSED(scene), Objec
}
BLI_assert(pose->chan_array != NULL || BLI_listbase_is_empty(&pose->chanbase));
+
+ if (object->proxy != NULL) {
+ object->proxy->proxy_from = object;
+ }
}
void BKE_pose_eval_init_ik(struct Depsgraph *depsgraph, Scene *scene, Object *object)
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 7dfc863b847..d0e40d49527 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -527,6 +527,9 @@ void DepsgraphNodeBuilder::build_object(int base_index,
eDepsNode_LinkedState_Type linked_state,
bool is_visible)
{
+ if (object->proxy != NULL) {
+ object->proxy->proxy_from = object;
+ }
const bool has_object = built_map_.checkIsBuiltAndTag(object);
/* Skip rest of components if the ID node was already there. */
if (has_object) {
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index 058ee4e9076..b67629cde9e 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -511,6 +511,14 @@ void deg_graph_on_visible_update(Main *bmain, Depsgraph *graph, const bool do_ti
* to evaluation though) with `do_time=true`. This means early output checks should be aware of
* this. */
for (DEG::IDNode *id_node : graph->id_nodes) {
+ const ID_Type id_type = GS(id_node->id_orig->name);
+ if (id_type == ID_OB) {
+ Object *object_orig = reinterpret_cast<Object *>(id_node->id_orig);
+ if (object_orig->proxy != NULL) {
+ object_orig->proxy->proxy_from = object_orig;
+ }
+ }
+
if (!id_node->visible_components_mask) {
/* ID has no components which affects anything visible.
* No need bother with it to tag or anything. */
@@ -537,7 +545,6 @@ void deg_graph_on_visible_update(Main *bmain, Depsgraph *graph, const bool do_ti
* other type of cache).
*
* TODO(sergey): Need to generalize this somehow. */
- const ID_Type id_type = GS(id_node->id_orig->name);
if (id_type == ID_OB) {
flag |= ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY;
}
More information about the Bf-blender-cvs
mailing list