[Bf-blender-cvs] [ced20b74e5] master: Fix T50032: Wrong render result when same image is used with and without alpha

Sergey Sharybin noreply at git.blender.org
Wed Jan 25 14:13:55 CET 2017


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);
 	}
 }




More information about the Bf-blender-cvs mailing list