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:
authorAlexander Gavrilov <angavrilov@gmail.com>2019-08-22 16:54:51 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2019-08-22 16:55:02 +0300
commit54fd8176d7e914da9fc834b465c22bffb6f3a620 (patch)
tree7c79f39ad5f5dd0ecc344bcacbdd947120f92756 /source/blender/blenkernel/intern
parent33a287e5c0508af0fcacca2026a1e89cbbc0d385 (diff)
NodeTree: also assign the owner pointer when copying.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/light.c2
-rw-r--r--source/blender/blenkernel/intern/linestyle.c3
-rw-r--r--source/blender/blenkernel/intern/material.c6
-rw-r--r--source/blender/blenkernel/intern/node.c18
-rw-r--r--source/blender/blenkernel/intern/scene.c2
-rw-r--r--source/blender/blenkernel/intern/texture.c2
-rw-r--r--source/blender/blenkernel/intern/world.c2
7 files changed, 21 insertions, 14 deletions
diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c
index 75c9e0e42a5..654abef389d 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_id_copy_ex(bmain, (ID *)la_src->nodetree, (ID **)&la_dst->nodetree, flag);
+ BKE_nodetree_copy_owned_ex(bmain, la_src->nodetree, &la_dst->nodetree, &la_dst->id, 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 cdef24b07fb..b682e4265ad 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -178,7 +178,8 @@ 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_id_copy_ex(bmain, (ID *)linestyle_src->nodetree, (ID **)&linestyle_dst->nodetree, flag);
+ BKE_nodetree_copy_owned_ex(
+ bmain, linestyle_src->nodetree, &linestyle_dst->nodetree, &linestyle_dst->id, flag);
}
LineStyleModifier *m;
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 1545ae4f48f..01df423d9d7 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_id_copy_ex(bmain, (ID *)ma_src->nodetree, (ID **)&ma_dst->nodetree, flag);
+ BKE_nodetree_copy_owned_ex(bmain, ma_src->nodetree, &ma_dst->nodetree, &ma_dst->id, 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, false);
+ matcopybuf.nodetree = ntreeCopyTree_ex(ma->nodetree, bmain, NULL, 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, false);
+ ma->nodetree = ntreeCopyTree_ex(matcopybuf.nodetree, bmain, &ma->id, false);
}
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 59ffbbfea6f..973b30a640b 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, do_id_user);
+ bNodeTree *new_ntree = ntreeCopyTree_ex(ntree, bmain, NULL, do_id_user);
bNode *new_node = new_ntree->nodes.first;
bNode *node_src = ntree->nodes.first;
while (new_node != NULL) {
@@ -1529,16 +1529,22 @@ void BKE_node_tree_copy_data(Main *UNUSED(bmain),
ntree_dst->interface_type = NULL;
}
-bNodeTree *ntreeCopyTree_ex(const bNodeTree *ntree, Main *bmain, const bool do_id_user)
+void BKE_nodetree_copy_owned_ex(Main *bmain, bNodeTree *src, bNodeTree **dst, ID *owner, int flag)
{
- bNodeTree *ntree_copy;
+ 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;
const int flag = do_id_user ? LIB_ID_CREATE_NO_USER_REFCOUNT | LIB_ID_CREATE_NO_MAIN : 0;
- BKE_id_copy_ex(bmain, (ID *)ntree, (ID **)&ntree_copy, flag);
+ BKE_nodetree_copy_owned_ex(bmain, ntree, &ntree_copy, owner, flag);
return ntree_copy;
}
-bNodeTree *ntreeCopyTree(Main *bmain, const bNodeTree *ntree)
+bNodeTree *ntreeCopyTree(Main *bmain, const bNodeTree *ntree, ID *owner)
{
- return ntreeCopyTree_ex(ntree, bmain, true);
+ return ntreeCopyTree_ex(ntree, bmain, owner, true);
}
void ntreeUserIncrefID(bNodeTree *ntree)
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 1ef93427253..14642cb6cf5 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_id_copy_ex(bmain, (ID *)sce_src->nodetree, (ID **)&sce_dst->nodetree, flag);
+ BKE_nodetree_copy_owned_ex(bmain, sce_src->nodetree, &sce_dst->nodetree, &sce_dst->id, 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 ad7c5e3f660..4d55155ab24 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_id_copy_ex(bmain, (ID *)tex_src->nodetree, (ID **)&tex_dst->nodetree, flag);
+ BKE_nodetree_copy_owned_ex(bmain, tex_src->nodetree, &tex_dst->nodetree, &tex_dst->id, 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 109d615ae83..963905ff8e8 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_id_copy_ex(bmain, (ID *)wrld_src->nodetree, (ID **)&wrld_dst->nodetree, flag);
+ BKE_nodetree_copy_owned_ex(bmain, wrld_src->nodetree, &wrld_dst->nodetree, &wrld_dst->id, flag);
}
BLI_listbase_clear(&wrld_dst->gpumaterial);