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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to