File: ICMConvert_xyYToXYZ_Shader.frag.txt

package info (click to toggle)
psychtoolbox-3 3.0.19.14.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 86,796 kB
  • sloc: ansic: 176,245; cpp: 20,103; objc: 5,393; sh: 2,753; python: 1,397; php: 384; makefile: 193; java: 113
file content (36 lines) | stat: -rw-r--r-- 1,002 bytes parent folder | download | duplicates (6)
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);
}