diff options
author | Vivatchai Kaveeta <goodytong@gmail.com> | 2019-03-22 23:31:25 +0700 |
---|---|---|
committer | Vivatchai Kaveeta <goodytong@gmail.com> | 2019-03-22 23:31:25 +0700 |
commit | f0562a5ef61d9e0e13ad1408b1cb5c6ae901552d (patch) | |
tree | 11102f430dec882c18396c385f86718c5339941a /modules/tinyexr | |
parent | 9c3ddf05cb9c59817d885e9daca6e8f61c89dc97 (diff) |
Fix import grayscale EXR
Fix #27299
Diffstat (limited to 'modules/tinyexr')
-rw-r--r-- | modules/tinyexr/image_loader_tinyexr.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/modules/tinyexr/image_loader_tinyexr.cpp b/modules/tinyexr/image_loader_tinyexr.cpp index e69d9a0ae3..bd84a28c84 100644 --- a/modules/tinyexr/image_loader_tinyexr.cpp +++ b/modules/tinyexr/image_loader_tinyexr.cpp @@ -107,22 +107,31 @@ Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_f } } - if (idxR == -1) { - ERR_PRINT("TinyEXR: R channel not found."); - // @todo { free exr_image } - return ERR_FILE_CORRUPT; - } + if (exr_header.num_channels == 1) { + // Grayscale channel only. + idxR = 0; + idxG = 0; + idxB = 0; + idxA = 0; + } else { + // Assume RGB(A) + if (idxR == -1) { + ERR_PRINT("TinyEXR: R channel not found."); + // @todo { free exr_image } + return ERR_FILE_CORRUPT; + } - if (idxG == -1) { - ERR_PRINT("TinyEXR: G channel not found.") - // @todo { free exr_image } - return ERR_FILE_CORRUPT; - } + if (idxG == -1) { + ERR_PRINT("TinyEXR: G channel not found.") + // @todo { free exr_image } + return ERR_FILE_CORRUPT; + } - if (idxB == -1) { - ERR_PRINT("TinyEXR: B channel not found.") - // @todo { free exr_image } - return ERR_FILE_CORRUPT; + if (idxB == -1) { + ERR_PRINT("TinyEXR: B channel not found.") + // @todo { free exr_image } + return ERR_FILE_CORRUPT; + } } // EXR image data loaded, now parse it into Godot-friendly image data |