[Bf-blender-cvs] [6271c72] master: Fix T39764: cycles not rendering EXR image textures with 5 channels (RGBA + Z).

Brecht Van Lommel noreply at git.blender.org
Mon May 19 16:26:09 CEST 2014


Commit: 6271c72cafa576faf4c98e326fbed4aeccf7ab12
Author: Brecht Van Lommel
Date:   Mon May 19 16:23:37 2014 +0200
https://developer.blender.org/rB6271c72cafa576faf4c98e326fbed4aeccf7ab12

Fix T39764: cycles not rendering EXR image textures with 5 channels (RGBA + Z).

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

M	intern/cycles/render/image.cpp

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

diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp
index 4e61464..77cd6d5 100644
--- a/intern/cycles/render/image.cpp
+++ b/intern/cycles/render/image.cpp
@@ -448,7 +448,7 @@ bool ImageManager::file_load_float_image(Image *img, device_vector<float4>& tex_
 		builtin_image_info_cb(img->filename, img->builtin_data, is_float, width, height, depth, components);
 	}
 
-	if(!(components >= 1 && components <= 4)) {
+	if(components < 1 || width == 0 || height == 0) {
 		if(in) {
 			in->close();
 			delete in;
@@ -460,17 +460,36 @@ bool ImageManager::file_load_float_image(Image *img, device_vector<float4>& tex_
 	float *pixels = (float*)tex_img.resize(width, height, depth);
 
 	if(in) {
+		float *readpixels = pixels;
+		vector<float> tmppixels;
+
+		if(components > 4) {
+			tmppixels.resize(width*height*components);
+			readpixels = &tmppixels[0];
+		}
+
 		if(depth <= 1) {
 			int scanlinesize = width*components*sizeof(float);
 
 			in->read_image(TypeDesc::FLOAT,
-				(uchar*)pixels + (height-1)*scanlinesize,
+				(uchar*)readpixels + (height-1)*scanlinesize,
 				AutoStride,
 				-scanlinesize,
 				AutoStride);
 		}
 		else {
-			in->read_image(TypeDesc::FLOAT, (uchar*)pixels);
+			in->read_image(TypeDesc::FLOAT, (uchar*)readpixels);
+		}
+
+		if(components > 4) {
+			for(int i = width*height-1; i >= 0; i--) {
+				pixels[i*4+3] = tmppixels[i*components+3];
+				pixels[i*4+2] = tmppixels[i*components+2];
+				pixels[i*4+1] = tmppixels[i*components+1];
+				pixels[i*4+0] = tmppixels[i*components+0];
+			}
+
+			tmppixels.clear();
 		}
 
 		in->close();




More information about the Bf-blender-cvs mailing list