33 lines
881 B
GLSL
33 lines
881 B
GLSL
const float GAMMA = 2.2;
|
|
const float INV_GAMMA = 1.0 / GAMMA;
|
|
|
|
// linear to sRGB approximation
|
|
// see http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html
|
|
vec3 Linear2sRGB(vec3 color)
|
|
{
|
|
return pow(color, vec3(INV_GAMMA));
|
|
}
|
|
|
|
// sRGB to linear approximation
|
|
// see http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html
|
|
vec3 sRGB2Linear(vec3 srgbIn)
|
|
{
|
|
return vec3(pow(srgbIn.xyz, vec3(GAMMA)));
|
|
}
|
|
|
|
vec3 sRGB2LinearAccurate(vec3 _rgb)
|
|
{
|
|
vec3 lo = _rgb / 12.92;
|
|
vec3 hi = pow( (_rgb + 0.055) / 1.055, vec3_splat(2.4) );
|
|
vec3 rgb = mix(hi, lo, vec3(lessThanEqual(_rgb, vec3_splat(0.04045) ) ) );
|
|
return rgb;
|
|
}
|
|
|
|
vec3 Linear2sRGBAccurate(vec3 _rgb)
|
|
{
|
|
vec3 lo = _rgb * 12.92;
|
|
vec3 hi = pow(abs(_rgb), vec3_splat(1.0/2.4) ) * 1.055 - 0.055;
|
|
vec3 rgb = mix(hi, lo, vec3(lessThanEqual(_rgb, vec3_splat(0.0031308) ) ) );
|
|
return rgb;
|
|
}
|