[Bf-blender-cvs] [e6f3d8b3e11] master: Revert "Fix T68971: Copy As New Driver from Material node creates a bad reference."

Bastien Montagne noreply at git.blender.org
Thu Aug 22 16:07:42 CEST 2019


Commit: e6f3d8b3e1158ebdc89ceae1de5ce7bc5c420f51
Author: Bastien Montagne
Date:   Thu Aug 22 16:00:59 2019 +0200
Branches: master
https://developer.blender.org/rBe6f3d8b3e1158ebdc89ceae1de5ce7bc5c420f51

Revert "Fix T68971: Copy As New Driver from Material node creates a bad reference."

This reverts commits 54fd8176d7e91, 4c5becb6b1 and 8f578150e.

Those kind of commits must be reviewed and approved by project owners.

That one:
* Broke Collada building by not properly updating all calls to modified
function.
* Broke *whole* ID management by not properly updating library_query.c.

And in general, I am strongly against backward ID pointers, those are
*always* a serious PITA for ID management. Sometimes  they cannot be
avoided, but in general other ways to get that kind of info should be
investigated first.

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

M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/light.c
M	source/blender/blenkernel/intern/linestyle.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/texture.c
M	source/blender/blenkernel/intern/world.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/editors/animation/drivers.c
M	source/blender/editors/include/ED_keyframing.h
M	source/blender/editors/interface/interface_ops.c
M	source/blender/editors/space_node/node_add.c
M	source/blender/editors/space_node/node_edit.c
M	source/blender/editors/space_node/node_group.c
M	source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index a593f0f2ca6..e3d0588b607 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -366,10 +366,7 @@ struct GHashIterator *ntreeTypeGetIterator(void);
 void ntreeSetTypes(const struct bContext *C, struct bNodeTree *ntree);
 
 void ntreeInitDefault(struct bNodeTree *ntree);
-struct bNodeTree *ntreeAddTree(struct Main *bmain,
-                               const char *name,
-                               const char *idname,
-                               struct ID *owner);
+struct bNodeTree *ntreeAddTree(struct Main *bmain, const char *name, const char *idname);
 
 /* copy/free funcs, need to manage ID users */
 void ntreeFreeTree(struct bNodeTree *ntree);
@@ -379,15 +376,10 @@ void BKE_node_tree_copy_data(struct Main *bmain,
                              struct bNodeTree *ntree_dst,
                              const struct bNodeTree *ntree_src,
                              const int flag);
-void BKE_nodetree_copy_owned_ex(
-    struct Main *bmain, struct bNodeTree *src, struct bNodeTree **dst, struct ID *owner, int flag);
 struct bNodeTree *ntreeCopyTree_ex(const struct bNodeTree *ntree,
                                    struct Main *bmain,
-                                   struct ID *owner,
                                    const bool do_id_user);
-struct bNodeTree *ntreeCopyTree(struct Main *bmain,
-                                const struct bNodeTree *ntree,
-                                struct ID *owner);
+struct bNodeTree *ntreeCopyTree(struct Main *bmain, const struct bNodeTree *ntree);
 /* node->id user count */
 void ntreeUserIncrefID(struct bNodeTree *ntree);
 void ntreeUserDecrefID(struct bNodeTree *ntree);
diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c
index 654abef389d..75c9e0e42a5 100644
--- a/source/blender/blenkernel/intern/light.c
+++ b/source/blender/blenkernel/intern/light.c
@@ -113,7 +113,7 @@ void BKE_light_copy_data(Main *bmain, Light *la_dst, const Light *la_src, const
   if (la_src->nodetree) {
     /* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
      *       (see BKE_libblock_copy_ex()). */
-    BKE_nodetree_copy_owned_ex(bmain, la_src->nodetree, &la_dst->nodetree, &la_dst->id, flag);
+    BKE_id_copy_ex(bmain, (ID *)la_src->nodetree, (ID **)&la_dst->nodetree, flag);
   }
 
   if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) {
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index b682e4265ad..7bfe5a7c8ff 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -178,8 +178,7 @@ void BKE_linestyle_copy_data(struct Main *bmain,
   if (linestyle_src->nodetree) {
     /* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
      *       (see BKE_libblock_copy_ex()). */
-    BKE_nodetree_copy_owned_ex(
-        bmain, linestyle_src->nodetree, &linestyle_dst->nodetree, &linestyle_dst->id, flag);
+    BKE_id_copy_ex(bmain, (ID *)linestyle_src->nodetree, (ID **)&linestyle_dst->nodetree, flag);
   }
 
   LineStyleModifier *m;
@@ -1457,7 +1456,7 @@ void BKE_linestyle_default_shader(const bContext *C, FreestyleLineStyle *linesty
 
   BLI_assert(linestyle->nodetree == NULL);
 
-  ntree = ntreeAddTree(NULL, "stroke_shader", "ShaderNodeTree", &linestyle->id);
+  ntree = ntreeAddTree(NULL, "stroke_shader", "ShaderNodeTree");
 
   linestyle->nodetree = ntree;
 
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 01df423d9d7..1545ae4f48f 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -183,7 +183,7 @@ void BKE_material_copy_data(Main *bmain, Material *ma_dst, const Material *ma_sr
   if (ma_src->nodetree) {
     /* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
      *       (see BKE_libblock_copy_ex()). */
-    BKE_nodetree_copy_owned_ex(bmain, ma_src->nodetree, &ma_dst->nodetree, &ma_dst->id, flag);
+    BKE_id_copy_ex(bmain, (ID *)ma_src->nodetree, (ID **)&ma_dst->nodetree, flag);
   }
 
   if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) {
@@ -1562,7 +1562,7 @@ void copy_matcopybuf(Main *bmain, Material *ma)
   memcpy(&matcopybuf, ma, sizeof(Material));
 
   if (ma->nodetree != NULL) {
-    matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, bmain, NULL, false);
+    matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, bmain, false);
   }
 
   matcopybuf.preview = NULL;
@@ -1592,7 +1592,7 @@ void paste_matcopybuf(Main *bmain, Material *ma)
   (ma->id) = id;
 
   if (matcopybuf.nodetree != NULL) {
-    ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, bmain, &ma->id, false);
+    ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, bmain, false);
   }
 }
 
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 973b30a640b..206c59c110a 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1132,7 +1132,7 @@ bNodeTree *ntreeCopyTree_ex_new_pointers(const bNodeTree *ntree,
                                          Main *bmain,
                                          const bool do_id_user)
 {
-  bNodeTree *new_ntree = ntreeCopyTree_ex(ntree, bmain, NULL, do_id_user);
+  bNodeTree *new_ntree = ntreeCopyTree_ex(ntree, bmain, do_id_user);
   bNode *new_node = new_ntree->nodes.first;
   bNode *node_src = ntree->nodes.first;
   while (new_node != NULL) {
@@ -1394,7 +1394,7 @@ void ntreeInitDefault(bNodeTree *ntree)
   ntree_set_typeinfo(ntree, NULL);
 }
 
-bNodeTree *ntreeAddTree(Main *bmain, const char *name, const char *idname, ID *owner)
+bNodeTree *ntreeAddTree(Main *bmain, const char *name, const char *idname)
 {
   bNodeTree *ntree;
 
@@ -1408,7 +1408,6 @@ bNodeTree *ntreeAddTree(Main *bmain, const char *name, const char *idname, ID *o
     ntree = MEM_callocN(sizeof(bNodeTree), "new node tree");
     *((short *)ntree->id.name) = ID_NT;
     BLI_strncpy(ntree->id.name + 2, name, sizeof(ntree->id.name));
-    ntree->owner = owner;
   }
 
   /* Types are fully initialized at this point,
@@ -1529,22 +1528,16 @@ void BKE_node_tree_copy_data(Main *UNUSED(bmain),
   ntree_dst->interface_type = NULL;
 }
 
-void BKE_nodetree_copy_owned_ex(Main *bmain, bNodeTree *src, bNodeTree **dst, ID *owner, int flag)
+bNodeTree *ntreeCopyTree_ex(const bNodeTree *ntree, Main *bmain, const bool do_id_user)
 {
-  if (BKE_id_copy_ex(bmain, (ID *)src, (ID **)dst, flag)) {
-    (*dst)->owner = owner;
-  }
-}
-bNodeTree *ntreeCopyTree_ex(const bNodeTree *ntree, Main *bmain, ID *owner, const bool do_id_user)
-{
-  bNodeTree *ntree_copy = NULL;
+  bNodeTree *ntree_copy;
   const int flag = do_id_user ? LIB_ID_CREATE_NO_USER_REFCOUNT | LIB_ID_CREATE_NO_MAIN : 0;
-  BKE_nodetree_copy_owned_ex(bmain, ntree, &ntree_copy, owner, flag);
+  BKE_id_copy_ex(bmain, (ID *)ntree, (ID **)&ntree_copy, flag);
   return ntree_copy;
 }
-bNodeTree *ntreeCopyTree(Main *bmain, const bNodeTree *ntree, ID *owner)
+bNodeTree *ntreeCopyTree(Main *bmain, const bNodeTree *ntree)
 {
-  return ntreeCopyTree_ex(ntree, bmain, owner, true);
+  return ntreeCopyTree_ex(ntree, bmain, true);
 }
 
 void ntreeUserIncrefID(bNodeTree *ntree)
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 14642cb6cf5..1ef93427253 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -267,7 +267,7 @@ void BKE_scene_copy_data(Main *bmain, Scene *sce_dst, const Scene *sce_src, cons
   if (sce_src->nodetree) {
     /* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
      *       (see BKE_libblock_copy_ex()). */
-    BKE_nodetree_copy_owned_ex(bmain, sce_src->nodetree, &sce_dst->nodetree, &sce_dst->id, flag);
+    BKE_id_copy_ex(bmain, (ID *)sce_src->nodetree, (ID **)&sce_dst->nodetree, flag);
     BKE_libblock_relink_ex(bmain, sce_dst->nodetree, (void *)(&sce_src->id), &sce_dst->id, false);
   }
 
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 4d55155ab24..ad7c5e3f660 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -436,7 +436,7 @@ void BKE_texture_copy_data(Main *bmain, Tex *tex_dst, const Tex *tex_src, const
     }
     /* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
      *       (see BKE_libblock_copy_ex()). */
-    BKE_nodetree_copy_owned_ex(bmain, tex_src->nodetree, &tex_dst->nodetree, &tex_dst->id, flag);
+    BKE_id_copy_ex(bmain, (ID *)tex_src->nodetree, (ID **)&tex_dst->nodetree, flag);
   }
 
   if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) {
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 963905ff8e8..109d615ae83 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -109,7 +109,7 @@ void BKE_world_copy_data(Main *bmain, World *wrld_dst, const World *wrld_src, co
   if (wrld_src->nodetree) {
     /* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
      *       (see BKE_libblock_copy_ex()). */
-    BKE_nodetree_copy_owned_ex(bmain, wrld_src->nodetree, &wrld_dst->nodetree, &wrld_dst->id, flag);
+    BKE_id_copy_ex(bmain, (ID *)wrld_src->nodetree, (ID **)&wrld_dst->nodetree, flag);
   }
 
   BLI_listbase_clear(&wrld_dst->gpumaterial);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 47fa8704df9..1e3342cef04 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3477,15 +3477,13 @@ static void direct_link_node_socket(FileData *fd, bNodeSocket *sock)
 }
 
 /* ntree itself has been read! */
-static void direct_link_nodetree(FileData *fd, bNodeTree *ntree, ID *owner)
+static void direct_link_nodetree(FileData *fd, bNodeTree *ntree)
 {
   /* note: writ

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list