aboutsummaryrefslogtreecommitdiff
path: root/modules/hdr/image_loader_hdr.cpp
diff options
context:
space:
mode:
authorJuan Linietsky2017-05-29 22:11:33 -0300
committerJuan Linietsky2017-05-30 08:56:19 -0300
commit5567e898d1052c1e2c2d32d3c37dfd957f4dc4bd (patch)
treee0df9b88b6c485f846dab9ae51369288f191cab8 /modules/hdr/image_loader_hdr.cpp
parent0a6faeb4f5914061c29d946eaa29f2c50b8472fb (diff)
downloadgodot-5567e898d1052c1e2c2d32d3c37dfd957f4dc4bd.tar.gz
godot-5567e898d1052c1e2c2d32d3c37dfd957f4dc4bd.tar.zst
godot-5567e898d1052c1e2c2d32d3c37dfd957f4dc4bd.zip
Diffstat (limited to 'modules/hdr/image_loader_hdr.cpp')
-rw-r--r--modules/hdr/image_loader_hdr.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/modules/hdr/image_loader_hdr.cpp b/modules/hdr/image_loader_hdr.cpp
index 4c897e66a..85819104c 100644
--- a/modules/hdr/image_loader_hdr.cpp
+++ b/modules/hdr/image_loader_hdr.cpp
@@ -34,17 +34,23 @@
#include "thirdparty/tinyexr/tinyexr.h"
-Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f) {
+Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force_linear) {
String header = f->get_token();
print_line("HEADER: " + header);
- ERR_FAIL_COND_V(header != "#?RADIANCE", ERR_FILE_UNRECOGNIZED);
+ ERR_FAIL_COND_V(header != "#?RADIANCE" && header != "#?RGBE", ERR_FILE_UNRECOGNIZED);
- String format = f->get_token();
- print_line("FORMAT: " + format);
-
- ERR_FAIL_COND_V(format != "FORMAT=32-bit_rle_rgbe", ERR_FILE_UNRECOGNIZED);
+ while (true) {
+ String format = f->get_token();
+ ERR_FAIL_COND_V(f->eof_reached(), ERR_FILE_UNRECOGNIZED);
+ if (format.begins_with("FORMAT=") && format != "FORMAT=32-bit_rle_rgbe") {
+ ERR_EXPLAIN("Only 32-bit_rle_rgbe is supported for .hdr files.");
+ return ERR_FILE_UNRECOGNIZED;
+ }
+ if (format == "FORMAT=32-bit_rle_rgbe")
+ break;
+ }
String token = f->get_token();
@@ -132,6 +138,10 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, FileAccess *f) {
ptr[1] * exp / 255.0,
ptr[2] * exp / 255.0);
+ if (p_force_linear) {
+ c = c.to_linear();
+ }
+
*(uint32_t *)ptr = c.to_rgbe9995();
ptr += 4;
}