diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-08-30 21:01:44 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-08-30 21:01:44 +0400 |
commit | 0933c6093e1a87706bf3a08803bd794c78f14639 (patch) | |
tree | 8dee7ce9aa5a59b9134589c8db9da623d077644f | |
parent | e8605f9df9423bb0a7357157736ebe59f222c38f (diff) |
Fix #36611: cycles issue loading png file with 2 channels.
-rw-r--r-- | intern/cycles/render/image.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/intern/cycles/render/image.cpp b/intern/cycles/render/image.cpp index 375d1943436..dcb28455e4a 100644 --- a/intern/cycles/render/image.cpp +++ b/intern/cycles/render/image.cpp @@ -307,7 +307,7 @@ bool ImageManager::file_load_image(Image *img, device_vector<uchar4>& tex_img) } /* we only handle certain number of components */ - if(!(components == 1 || components == 3 || components == 4)) { + if(!(components >= 1 && components <= 4)) { if(in) { in->close(); delete in; @@ -334,7 +334,15 @@ bool ImageManager::file_load_image(Image *img, device_vector<uchar4>& tex_img) builtin_image_pixels_cb(img->filename, img->builtin_data, pixels); } - if(components == 3) { + if(components == 2) { + for(int i = width*height-1; i >= 0; i--) { + pixels[i*4+3] = pixels[i*2+1]; + pixels[i*4+2] = pixels[i*2+0]; + pixels[i*4+1] = pixels[i*2+0]; + pixels[i*4+0] = pixels[i*2+0]; + } + } + else if(components == 3) { for(int i = width*height-1; i >= 0; i--) { pixels[i*4+3] = 255; pixels[i*4+2] = pixels[i*3+2]; @@ -390,7 +398,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, components); } - if(!(components == 1 || components == 3 || components == 4)) { + if(!(components >= 1 && components <= 4)) { if(in) { in->close(); delete in; @@ -416,7 +424,15 @@ bool ImageManager::file_load_float_image(Image *img, device_vector<float4>& tex_ builtin_image_float_pixels_cb(img->filename, img->builtin_data, pixels); } - if(components == 3) { + if(components == 2) { + for(int i = width*height-1; i >= 0; i--) { + pixels[i*4+3] = pixels[i*2+1]; + pixels[i*4+2] = pixels[i*2+0]; + pixels[i*4+1] = pixels[i*2+0]; + pixels[i*4+0] = pixels[i*2+0]; + } + } + else if(components == 3) { for(int i = width*height-1; i >= 0; i--) { pixels[i*4+3] = 1.0f; pixels[i*4+2] = pixels[i*3+2]; |