summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/hdr/image_loader_hdr.cpp32
-rw-r--r--modules/hdr/image_loader_hdr.h1
-rw-r--r--modules/openxr/extensions/platform/openxr_opengl_extension.cpp22
-rw-r--r--modules/openxr/extensions/platform/openxr_opengl_extension.h6
4 files changed, 22 insertions, 39 deletions
diff --git a/modules/hdr/image_loader_hdr.cpp b/modules/hdr/image_loader_hdr.cpp
index c49c62a08b..ba59bb25ee 100644
--- a/modules/hdr/image_loader_hdr.cpp
+++ b/modules/hdr/image_loader_hdr.cpp
@@ -68,9 +68,11 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, Ref<FileAccess> f, BitField
imgdata.resize(height * width * (int)sizeof(uint32_t));
{
- uint8_t *w = imgdata.ptrw();
+ uint8_t *ptr = imgdata.ptrw();
- uint8_t *ptr = (uint8_t *)w;
+ Vector<uint8_t> temp_read_data;
+ temp_read_data.resize(128);
+ uint8_t *temp_read_ptr = temp_read_data.ptrw();
if (width < 8 || width >= 32768) {
// Read flat data
@@ -113,8 +115,9 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, Ref<FileAccess> f, BitField
}
} else {
// Dump
+ f->get_buffer(temp_read_ptr, count);
for (int z = 0; z < count; ++z) {
- ptr[(j * width + i++) * 4 + k] = f->get_8();
+ ptr[(j * width + i++) * 4 + k] = temp_read_ptr[z];
}
}
}
@@ -122,20 +125,27 @@ Error ImageLoaderHDR::load_image(Ref<Image> p_image, Ref<FileAccess> f, BitField
}
}
+ const bool force_linear = p_flags & FLAG_FORCE_LINEAR;
+
//convert
for (int i = 0; i < width * height; i++) {
- float exp = pow(2.0f, ptr[3] - 128.0f);
+ int e = ptr[3] - 128;
+
+ if (force_linear || (e < -15 || e > 15)) {
+ float exp = pow(2.0f, e);
+ Color c(ptr[0] * exp / 255.0, ptr[1] * exp / 255.0, ptr[2] * exp / 255.0);
- Color c(
- ptr[0] * exp / 255.0,
- ptr[1] * exp / 255.0,
- ptr[2] * exp / 255.0);
+ if (force_linear) {
+ c = c.srgb_to_linear();
+ }
- if (p_flags & FLAG_FORCE_LINEAR) {
- c = c.srgb_to_linear();
+ *(uint32_t *)ptr = c.to_rgbe9995();
+ } else {
+ // https://github.com/george-steel/rgbe-rs/blob/e7cc33b7f42b4eb3272c166dac75385e48687c92/src/types.rs#L123-L129
+ uint32_t e5 = (uint32_t)(e + 15);
+ *(uint32_t *)ptr = ((e5 << 27) | ((uint32_t)ptr[2] << 19) | ((uint32_t)ptr[1] << 10) | ((uint32_t)ptr[0] << 1));
}
- *(uint32_t *)ptr = c.to_rgbe9995();
ptr += 4;
}
}
diff --git a/modules/hdr/image_loader_hdr.h b/modules/hdr/image_loader_hdr.h
index 9821db059e..0a8e91fb9e 100644
--- a/modules/hdr/image_loader_hdr.h
+++ b/modules/hdr/image_loader_hdr.h
@@ -37,6 +37,7 @@ class ImageLoaderHDR : public ImageFormatLoader {
public:
virtual Error load_image(Ref<Image> p_image, Ref<FileAccess> f, BitField<ImageFormatLoader::LoaderFlags> p_flags, float p_scale);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
+
ImageLoaderHDR();
};
diff --git a/modules/openxr/extensions/platform/openxr_opengl_extension.cpp b/modules/openxr/extensions/platform/openxr_opengl_extension.cpp
index d92084a220..de4a9e4b8e 100644
--- a/modules/openxr/extensions/platform/openxr_opengl_extension.cpp
+++ b/modules/openxr/extensions/platform/openxr_opengl_extension.cpp
@@ -56,11 +56,6 @@
// feature off.
// See: https://registry.khronos.org/OpenGL/extensions/EXT/EXT_sRGB_write_control.txt
-// On OpenGLES this is not defined in our standard headers..
-#ifndef GL_FRAMEBUFFER_SRGB
-#define GL_FRAMEBUFFER_SRGB 0x8DB9
-#endif
-
HashMap<String, bool *> OpenXROpenGLExtension::get_requested_extensions() {
HashMap<String, bool *> request_extensions;
@@ -196,23 +191,6 @@ void OpenXROpenGLExtension::get_usable_depth_formats(Vector<int64_t> &p_usable_d
p_usable_depth_formats.push_back(GL_DEPTH_COMPONENT24);
}
-void OpenXROpenGLExtension::on_pre_draw_viewport(RID p_render_target) {
- if (srgb_ext_is_available) {
- hw_linear_to_srgb_is_enabled = glIsEnabled(GL_FRAMEBUFFER_SRGB);
- if (hw_linear_to_srgb_is_enabled) {
- // Disable this.
- glDisable(GL_FRAMEBUFFER_SRGB);
- }
- }
-}
-
-void OpenXROpenGLExtension::on_post_draw_viewport(RID p_render_target) {
- if (srgb_ext_is_available && hw_linear_to_srgb_is_enabled) {
- // Re-enable this.
- glEnable(GL_FRAMEBUFFER_SRGB);
- }
-}
-
bool OpenXROpenGLExtension::get_swapchain_image_data(XrSwapchain p_swapchain, int64_t p_swapchain_format, uint32_t p_width, uint32_t p_height, uint32_t p_sample_count, uint32_t p_array_size, void **r_swapchain_graphics_data) {
GLES3::TextureStorage *texture_storage = GLES3::TextureStorage::get_singleton();
ERR_FAIL_NULL_V(texture_storage, false);
diff --git a/modules/openxr/extensions/platform/openxr_opengl_extension.h b/modules/openxr/extensions/platform/openxr_opengl_extension.h
index a3052d3f53..8da3ca48f4 100644
--- a/modules/openxr/extensions/platform/openxr_opengl_extension.h
+++ b/modules/openxr/extensions/platform/openxr_opengl_extension.h
@@ -49,9 +49,6 @@ public:
virtual void on_instance_created(const XrInstance p_instance) override;
virtual void *set_session_create_and_get_next_pointer(void *p_next_pointer) override;
- virtual void on_pre_draw_viewport(RID p_render_target) override;
- virtual void on_post_draw_viewport(RID p_render_target) override;
-
virtual void get_usable_swapchain_formats(Vector<int64_t> &p_usable_swap_chains) override;
virtual void get_usable_depth_formats(Vector<int64_t> &p_usable_swap_chains) override;
virtual String get_swapchain_format_name(int64_t p_swapchain_format) const override;
@@ -76,9 +73,6 @@ private:
Vector<RID> texture_rids;
};
- bool srgb_ext_is_available = true;
- bool hw_linear_to_srgb_is_enabled = false;
-
bool check_graphics_api_support(XrVersion p_desired_version);
#ifdef ANDROID_ENABLED