Commit: ced20b74e58f3dd33840f2a62f6f1f19714b35d7
Author: Sergey Sharybin
Date:   Wed Jan 25 14:02:59 2017 +0100
Branches: master
https://developer.blender.org/rBced20b74e58f3dd33840f2a62f6f1f19714b35d7

Fix T50032: Wrong render result when same image is used with and without alpha

===================================================================

M       intern/cycles/blender/blender_shader.cpp
M       intern/cycles/render/image.cpp
M       intern/cycles/render/image.h
M       intern/cycles/render/nodes.cpp

===================================================================

diff --git a/intern/cycles/blender/blender_shader.cpp 
b/intern/cycles/blender/blender_shader.cpp
index f63f94ab37..f6ec015e1b 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -640,7 +640,8 @@ static ShaderNode *add_node(Scene *scene,
                                        image->filename.string(),
                                        image->builtin_data,
                                        get_image_interpolation(b_image_node),
-                                       get_image_extension(b_image_node));
+                                       get_image_extension(b_image_node),
+                                       image->use_alpha);
                        }
                }
                image->color_space = 
(NodeImageColorSpace)b_image_node.color_space();
@@ -686,7 +687,8 @@ static ShaderNode *add_node(Scene *scene,
                                        env->filename.string(),
                                        env->builtin_data,
                                        get_image_interpolation(b_env_node),
-                                       EXTENSION_REPEAT);
+                                       EXTENSION_REPEAT,
+                                       env->use_alpha);
                        }
                }
                env->color_space = 
(NodeImageColorSpace)b_env_node.color_space();
@@ -823,7 +825,8 @@ static ShaderNode *add_node(Scene *scene,
                                point_density->filename.string(),
                                point_density->builtin_data,
                                point_density->interpolation,
-                               EXTENSION_CLIP);
+                               EXTENSION_CLIP,
+                               true);
                }
                node = point_density;
 
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index ab830b19c5..fd8a126220 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -258,12 +258,14 @@ static bool image_equals(ImageManager::Image *image,
                          const string& filename,
                          void *builtin_data,
                          InterpolationType interpolation,
-                         ExtensionType extension)
+                         ExtensionType extension,
+                         bool use_alpha)
 {
        return image->filename == filename &&
               image->builtin_data == builtin_data &&
               image->interpolation == interpolation &&
-              image->extension == extension;
+              image->extension == extension &&
+              image->use_alpha == use_alpha;
 }
 
 int ImageManager::add_image(const string& filename,
@@ -305,7 +307,8 @@ int ImageManager::add_image(const string& filename,
                                       filename,
                                       builtin_data,
                                       interpolation,
-                                      extension))
+                                      extension,
+                                      use_alpha))
                {
                        if(img->frame != frame) {
                                img->frame = frame;
@@ -377,7 +380,8 @@ void ImageManager::remove_image(int flat_slot)
 void ImageManager::remove_image(const string& filename,
                                 void *builtin_data,
                                 InterpolationType interpolation,
-                                ExtensionType extension)
+                                ExtensionType extension,
+                                bool use_alpha)
 {
        size_t slot;
 
@@ -387,7 +391,8 @@ void ImageManager::remove_image(const string& filename,
                                                              filename,
                                                              builtin_data,
                                                              interpolation,
-                                                             extension))
+                                                             extension,
+                                                             use_alpha))
                        {
                                remove_image(type_index_to_flattened_slot(slot, 
(ImageDataType)type));
                                return;
@@ -403,7 +408,8 @@ void ImageManager::remove_image(const string& filename,
 void ImageManager::tag_reload_image(const string& filename,
                                     void *builtin_data,
                                     InterpolationType interpolation,
-                                    ExtensionType extension)
+                                    ExtensionType extension,
+                                    bool use_alpha)
 {
        for(size_t type = 0; type < IMAGE_DATA_NUM_TYPES; type++) {
                for(size_t slot = 0; slot < images[type].size(); slot++) {
@@ -411,7 +417,8 @@ void ImageManager::tag_reload_image(const string& filename,
                                                              filename,
                                                              builtin_data,
                                                              interpolation,
-                                                             extension))
+                                                             extension,
+                                                             use_alpha))
                        {
                                images[type][slot]->need_load = true;
                                break;
diff --git a/intern/cycles/render/image.h b/intern/cycles/render/image.h
index 47bbd92347..494c74f0cd 100644
--- a/intern/cycles/render/image.h
+++ b/intern/cycles/render/image.h
@@ -61,11 +61,13 @@ public:
        void remove_image(const string& filename,
                          void *builtin_data,
                          InterpolationType interpolation,
-                         ExtensionType extension);
+                         ExtensionType extension,
+                         bool use_alpha);
        void tag_reload_image(const string& filename,
                              void *builtin_data,
                              InterpolationType interpolation,
-                             ExtensionType extension);
+                             ExtensionType extension,
+                             bool use_alpha);
        ImageDataType get_image_metadata(const string& filename, void 
*builtin_data, bool& is_linear);
 
        void device_update(Device *device,
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 1e4a9fd300..13b149eddf 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -263,7 +263,8 @@ ImageTextureNode::~ImageTextureNode()
                image_manager->remove_image(filename.string(),
                                            builtin_data,
                                            interpolation,
-                                           extension);
+                                           extension,
+                                           use_alpha);
        }
 }
 
@@ -462,7 +463,8 @@ EnvironmentTextureNode::~EnvironmentTextureNode()
                image_manager->remove_image(filename.string(),
                                            builtin_data,
                                            interpolation,
-                                           EXTENSION_REPEAT);
+                                           EXTENSION_REPEAT,
+                                           use_alpha);
        }
 }
 
@@ -1381,7 +1383,8 @@ PointDensityTextureNode::~PointDensityTextureNode()
                image_manager->remove_image(filename.string(),
                                            builtin_data,
                                            interpolation,
-                                           EXTENSION_CLIP);
+                                           EXTENSION_CLIP,
+                                           true);
        }
 }

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

Reply via email to