Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-08-30 21:01:44 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-08-30 21:01:44 +0400
commit0933c6093e1a87706bf3a08803bd794c78f14639 (patch)
tree8dee7ce9aa5a59b9134589c8db9da623d077644f /intern/cycles/render/image.cpp
parente8605f9df9423bb0a7357157736ebe59f222c38f (diff)
Fix #36611: cycles issue loading png file with 2 channels.
Diffstat (limited to 'intern/cycles/render/image.cpp')
-rw-r--r--intern/cycles/render/image.cpp24
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];