summaryrefslogtreecommitdiff
path: root/indra/llmath/llmath.h
diff options
context:
space:
mode:
authorDave Parks <davep@lindenlab.com>2020-03-26 22:00:54 +0000
committerDave Parks <davep@lindenlab.com>2020-03-26 22:00:54 +0000
commit964597af05b63057a7ddeff9aa8a6cea40421165 (patch)
treeb8fd89cfdb0f80d31fdd32b9cb423665aeecf02b /indra/llmath/llmath.h
parenta248018d6d761025482b3cc6579da5fed185f124 (diff)
parentd756e185730f46fd78e88215e0b4b9fd282fd1d7 (diff)
Merged in davep/DRTVWR-440 (pull request #48)
SL-12902 Fix for doing the technically correct but compatibility wrong thing WRT light color values.
Diffstat (limited to 'indra/llmath/llmath.h')
-rw-r--r--indra/llmath/llmath.h17
1 files changed, 13 insertions, 4 deletions
diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h
index 57f2489a2d..8f01ad6c1c 100644
--- a/indra/llmath/llmath.h
+++ b/indra/llmath/llmath.h
@@ -537,9 +537,12 @@ 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) {
+// Converts given value from a linear RGB floating point value (0..1) to a gamma corrected (sRGB) value.
+// Some shaders require color values in linear space, while others require color values in gamma corrected (sRGB) space.
+// Note: in our code, values labeled as sRGB are ALWAYS gamma corrected linear values, NOT linear values with monitor gamma applied
+// Note: stored color values should always be gamma corrected linear (i.e. the values returned from an on-screen color swatch)
+// Note: DO NOT cache the conversion. This leads to error prone synchronization and is actually slower in the typical case due to cache misses
+inline float linearTosRGB(const float val) {
if (val < 0.0031308f) {
return val * 12.92f;
}
@@ -548,7 +551,13 @@ inline float sRGBtoLinear(const float val) {
}
}
-inline float linearTosRGB(const float val) {
+// Converts given value from a gamma corrected (sRGB) floating point value (0..1) to a linear color value.
+// Some shaders require color values in linear space, while others require color values in gamma corrected (sRGB) space.
+// Note: In our code, values labeled as sRGB are gamma corrected linear values, NOT linear values with monitor gamma applied
+// Note: Stored color values should generally be gamma corrected sRGB.
+// If you're serializing the return value of this function, you're probably doing it wrong.
+// Note: DO NOT cache the conversion. This leads to error prone synchronization and is actually slower in the typical case due to cache misses.
+inline float sRGBtoLinear(const float val) {
if (val < 0.04045f) {
return val / 12.92f;
}