File: ICMConvert_xyYToXYZ_Shader.frag.txt

package info (click to toggle)
psychtoolbox-3 3.0.14.20170103%2Bgit6-g605ff5c.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 103,044 kB
  • ctags: 69,483
  • sloc: ansic: 167,371; cpp: 11,232; objc: 4,708; sh: 1,875; python: 383; php: 344; makefile: 207; 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);
}