v4k-git-backup/demos/art/fx/fxColorblind.fs

30 lines
1.1 KiB
Forth
Raw Normal View History

// [ref] https://www.inf.ufrgs.br/~oliveira/pubs_files/CVD_Simulation/CVD_Simulation.html
2023-09-27 06:49:59 +00:00
uniform int colorblind_mode; /// set:2 min:0 max:4 tip:"off, achromatopsia, protanomaly, deuteranomaly, tritanomaly"
uniform mat3 colorblind_matrices[5] = mat3[5](
mat3(1.000,0.000,0.000, 0.000,1.000,0.000, 0.000,0.000,1.000), // 0 no colorblind
mat3(0.299,0.587,0.114, 0.299,0.587,0.114, 0.299,0.587,0.114), // 1 achromatopsia (luma)
mat3( // 2 protanomaly (no red cone)
0.152286, 1.052583,-0.204868,
0.114503, 0.786281, 0.099216,
-0.003882,-0.048116, 1.051998
),
mat3( // 3 deuteranomaly (no green cone)
0.367322, 0.860646, -0.227968,
0.280085, 0.672501, 0.047413,
-0.011820, 0.042940, 0.968881
),
mat3( // 4 tritanomaly (no blue cone)
1.255528,-0.076749,-0.178779,
-0.078411, 0.930809, 0.147602,
0.004733, 0.691367, 0.303900
)
);
void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
vec2 uv = fragCoord.xy / iResolution.xy;
vec4 src = texture(iChannel0, uv);
fragColor = vec4( src.rgb * colorblind_matrices[colorblind_mode], src.a );
}