diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-08-29 16:47:42 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2012-08-29 16:47:42 +0400 |
commit | 7a13bc2196336c4ec45e86947d9fcb0b8d61f74e (patch) | |
tree | 4e1073ef726392cd1604861da38bcbde93d2a678 | |
parent | 635db3b3066b71d4c9c0f4a67d20aeff0d4b3810 (diff) |
Fix wrong user counter in world node trees
World is being localized without increasing ID users, so no need
to decrease ID users on localized world free.
-rw-r--r-- | source/blender/blenkernel/BKE_world.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/world.c | 10 | ||||
-rw-r--r-- | source/blender/editors/render/render_preview.c | 2 |
3 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_world.h b/source/blender/blenkernel/BKE_world.h index 67896fffc4d..7a23bff0184 100644 --- a/source/blender/blenkernel/BKE_world.h +++ b/source/blender/blenkernel/BKE_world.h @@ -35,7 +35,8 @@ struct World; -void BKE_world_free(struct World *sc); +void BKE_world_free(struct World *sc); +void BKE_world_free_ex(struct World *sc, int do_id_user); struct World *add_world(const char *name); struct World *BKE_world_copy(struct World *wrld); struct World *localize_world(struct World *wrld); diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index dd71e43182e..434bfe19c1f 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -51,14 +51,14 @@ #include "BKE_node.h" #include "BKE_world.h" -void BKE_world_free(World *wrld) +void BKE_world_free_ex(World *wrld, int do_id_user) { MTex *mtex; int a; for (a = 0; a < MAX_MTEX; a++) { mtex = wrld->mtex[a]; - if (mtex && mtex->tex) mtex->tex->id.us--; + if (do_id_user && mtex && mtex->tex) mtex->tex->id.us--; if (mtex) MEM_freeN(mtex); } BKE_previewimg_free(&wrld->preview); @@ -67,7 +67,7 @@ void BKE_world_free(World *wrld) /* is no lib link block, but world extension */ if (wrld->nodetree) { - ntreeFreeTree(wrld->nodetree); + ntreeFreeTree_ex(wrld->nodetree, do_id_user); MEM_freeN(wrld->nodetree); } @@ -75,6 +75,10 @@ void BKE_world_free(World *wrld) wrld->id.icon_id = 0; } +void BKE_world_free(World *wrld) +{ + BKE_world_free_ex(wrld, TRUE); +} World *add_world(const char *name) { diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index add2cbd566b..068a7aaa50a 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -788,7 +788,7 @@ static void shader_preview_free(void *customdata) /* get rid of copied world */ BLI_remlink(&pr_main->world, sp->worldcopy); - BKE_world_free(sp->worldcopy); + BKE_world_free_ex(sp->worldcopy, FALSE); properties = IDP_GetProperties((ID *)sp->worldcopy, FALSE); if (properties) { |