summaryrefslogtreecommitdiff
path: root/indra/llmath/llmath.h
diff options
context:
space:
mode:
authorGeenz <geenz@geenzo.com>2019-03-29 02:51:41 -0700
committerGeenz <geenz@geenzo.com>2019-03-29 02:51:41 -0700
commit3fa8b844c39311a2e4e319a8d4f7ab2c848ae140 (patch)
tree286b6ccf73bc961093d609da0ff5e21c8ef6c11c /indra/llmath/llmath.h
parent2bbb6c7e027ae12d18bef5db2cdc3e7ba41e8630 (diff)
Fixing gamma correction in EEP Step 1:
Thou shall always read the sky cubemap as sRGB using hardware sampling.
Diffstat (limited to 'indra/llmath/llmath.h')
-rw-r--r--indra/llmath/llmath.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h
index e508c9a199..bb19248f1f 100644
--- a/indra/llmath/llmath.h
+++ b/indra/llmath/llmath.h
@@ -537,6 +537,26 @@ inline void ll_remove_outliers(std::vector<VEC_TYPE>& data, F32 k)
}
}
+// This converts from a non-linear sRGB floating point value (0..1) to a linear value.
+// Useful for gamma correction and such. Note: any values passed through this should not be serialized. You should also ideally cache the output of this.
+inline float sRGBtoLinear(const float val) {
+ if (val < 0.0031308f) {
+ return val * 12.92f;
+ }
+ else {
+ return 1.055f * pow(val, 1.0f / 2.4f) - 0.055f;
+ }
+}
+
+inline float linearTosRGB(const float val) {
+ if (val < 0.04045f) {
+ return val / 12.92f;
+ }
+ else {
+ return pow((val + 0.055f) / 1.055f, 2.4f);
+ }
+}
+
// Include simd math header
#include "llsimdmath.h"