[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