1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
/* ICMConvert_xyYToXYZ_Shader.frag.txt
*
* Implements colorspace conversion from chromacity+Luminance color space to
* tristimulus color space. Implements M-File function xyYToXYZ.m
*
* (C) 2013 Mario Kleiner - Released to you under MIT license.
*/
vec4 icmTransformColor(vec4 incolor)
{
vec4 outcolor;
vec3 XYZ, xyY;
float z;
/* Alpha is passed through unmodified: */
outcolor.a = incolor.a;
/* Direct translation of xyYToXYZ.m, just with 0-based indexing instead
* of 1-based indexing as in Matlab/Octave, so all indices shifted - 1:
*/
xyY = incolor.rgb;
z = 1.0 - xyY[0] - xyY[1];
XYZ[0] = xyY[2] * xyY[0] / xyY[1];
XYZ[1] = xyY[2];
XYZ[2] = xyY[2] * z / xyY[1];
outcolor.rgb = XYZ;
return(outcolor);
}
/* This function simply makes no sense in the context of a colorspace conversion,
* but needs to be here. Define it as no-op, always returning identity. */
float icmTransformColor1(float incolor)
{
return(incolor);
}
|