[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