[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50974] trunk/blender/source/blender: fix for some errors when unlinking.
Campbell Barton
ideasman42 at gmail.com
Mon Oct 1 09:54:37 CEST 2012
Revision: 50974
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50974
Author: campbellbarton
Date: 2012-10-01 07:54:37 +0000 (Mon, 01 Oct 2012)
Log Message:
-----------
fix for some errors when unlinking.
- movieclip unlink didn't clear node ID pointers from the scene (leaving dangling pointers).
- mask datablock unlink was clearning references from scene nodes twice.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_node.h
trunk/blender/source/blender/blenkernel/intern/mask.c
trunk/blender/source/blender/blenkernel/intern/movieclip.c
trunk/blender/source/blender/nodes/intern/node_common.c
Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_node.h 2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/blenkernel/BKE_node.h 2012-10-01 07:54:37 UTC (rev 50974)
@@ -475,6 +475,8 @@
void register_node_type_frame(struct bNodeTreeType *ttype);
void register_node_type_reroute(struct bNodeTreeType *ttype);
+void BKE_node_tree_unlink_id_cb(void *calldata, struct ID *owner_id, struct bNodeTree *ntree);
+
/* ************** SHADER NODES *************** */
struct ShadeInput;
Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c 2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c 2012-10-01 07:54:37 UTC (rev 50974)
@@ -916,19 +916,6 @@
BKE_mask_layer_free_list(&mask->masklayers);
}
-
-static void ntree_unlink_mask_cb(void *calldata, struct ID *UNUSED(owner_id), struct bNodeTree *ntree)
-{
- ID *id = (ID *)calldata;
- bNode *node;
-
- for (node = ntree->nodes.first; node; node = node->next) {
- if (node->id == id) {
- node->id = NULL;
- }
- }
-}
-
void BKE_mask_free(Main *bmain, Mask *mask)
{
bScreen *scr;
@@ -975,21 +962,11 @@
}
SEQ_END
}
-
-
- if (scene->nodetree) {
- bNode *node;
- for (node = scene->nodetree->nodes.first; node; node = node->next) {
- if (node->id == &mask->id) {
- node->id = NULL;
- }
- }
- }
}
{
bNodeTreeType *treetype = ntreeGetType(NTREE_COMPOSIT);
- treetype->foreach_nodetree(bmain, (void *)mask, &ntree_unlink_mask_cb);
+ treetype->foreach_nodetree(bmain, (void *)mask, &BKE_node_tree_unlink_id_cb);
}
/* free mask data */
Modified: trunk/blender/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/movieclip.c 2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/blenkernel/intern/movieclip.c 2012-10-01 07:54:37 UTC (rev 50974)
@@ -52,6 +52,7 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_movieclip_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_view3d_types.h"
@@ -71,6 +72,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_movieclip.h"
+#include "BKE_node.h"
#include "BKE_image.h" /* openanim */
#include "BKE_tracking.h"
@@ -1326,6 +1328,11 @@
}
}
+ {
+ bNodeTreeType *treetype = ntreeGetType(NTREE_COMPOSIT);
+ treetype->foreach_nodetree(bmain, (void *)clip, &BKE_node_tree_unlink_id_cb);
+ }
+
clip->id.us = 0;
}
Modified: trunk/blender/source/blender/nodes/intern/node_common.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_common.c 2012-10-01 07:53:54 UTC (rev 50973)
+++ trunk/blender/source/blender/nodes/intern/node_common.c 2012-10-01 07:54:37 UTC (rev 50974)
@@ -650,3 +650,15 @@
if (node->type == NODE_REROUTE && !node->done)
node_reroute_inherit_type_recursive(ntree, node);
}
+
+void BKE_node_tree_unlink_id_cb(void *calldata, struct ID *UNUSED(owner_id), struct bNodeTree *ntree)
+{
+ ID *id = (ID *)calldata;
+ bNode *node;
+
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->id == id) {
+ node->id = NULL;
+ }
+ }
+}
More information about the Bf-blender-cvs
mailing list