[Bf-blender-cvs] [96c452b] master: Fix T43769: Envmap Texture copy looses image
Campbell Barton
noreply at git.blender.org
Mon Feb 23 08:22:57 CET 2015
Commit: 96c452bdf6ce703c6e6e42b4eae94ca0315b25e8
Author: Campbell Barton
Date: Mon Feb 23 18:22:09 2015 +1100
Branches: master
https://developer.blender.org/rB96c452bdf6ce703c6e6e42b4eae94ca0315b25e8
Fix T43769: Envmap Texture copy looses image
===================================================================
M source/blender/blenkernel/BKE_texture.h
M source/blender/blenkernel/intern/texture.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 4ad84dc..ebf85ff 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -132,6 +132,7 @@ struct OceanTex *BKE_add_oceantex(void);
struct OceanTex *BKE_copy_oceantex(struct OceanTex *ot);
bool BKE_texture_dependsOnTime(const struct Tex *texture);
+bool BKE_texture_is_image_user(const struct Tex *tex);
void BKE_texture_get_value(struct Scene *scene, struct Tex *texture, float *tex_co, struct TexResult *texres, bool use_color_management);
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 6c4cbcf..3293cca 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -832,8 +832,12 @@ Tex *BKE_texture_copy(Tex *tex)
Tex *texn;
texn = BKE_libblock_copy(&tex->id);
- if (texn->type == TEX_IMAGE) id_us_plus((ID *)texn->ima);
- else texn->ima = NULL;
+ if (BKE_texture_is_image_user(tex)) {
+ id_us_plus((ID *)texn->ima);
+ }
+ else {
+ texn->ima = NULL;
+ }
if (texn->coba) texn->coba = MEM_dupallocN(texn->coba);
if (texn->env) texn->env = BKE_copy_envmap(texn->env);
@@ -1604,6 +1608,29 @@ void BKE_free_oceantex(struct OceanTex *ot)
MEM_freeN(ot);
}
+/**
+ * \returns true if this texture can use its #Texture.ima (even if its NULL)
+ */
+bool BKE_texture_is_image_user(const struct Tex *tex)
+{
+ switch (tex->type) {
+ case TEX_IMAGE:
+ {
+ return true;
+ }
+ case TEX_ENVMAP:
+ {
+ if (tex->env) {
+ if (tex->env->stype == ENV_LOAD) {
+ return true;
+ }
+ }
+ break;
+ }
+ }
+
+ return false;
+}
/* ------------------------------------------------------------------------- */
bool BKE_texture_dependsOnTime(const struct Tex *texture)
More information about the Bf-blender-cvs
mailing list