File: ColorKeyedTextureBlitShader.frag.txt

package info (click to toggle)
psychtoolbox-3 3.0.19.14.dfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, 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 (32 lines) | stat: -rw-r--r-- 1,325 bytes parent folder | download | duplicates (7)
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
/* ColorKeyedTextureBlitShader: Shader for masked blitting of 2D rectangle textures.
// OpenGL program has to setup the texture unit 'ColorKeyImage' with a window-
// sized texture which defines for each output pixel location the "color-key"
// value that is allowed to pass through at that location. The polygon/fragment
// color of the current fragment is compared to that key value. Only fragments
// with matching color key are allowed to pass through == their corresponding
// texel color value from the input texture 'Image' gets drawn.
//
// Texture filtering mode needs to be GL_NEAREST for defined results!
//
// (w)2007 by Mario Kleiner. Licensed under MIT license.
*/

#extension GL_ARB_texture_rectangle : enable

uniform sampler2DRect Image;
uniform sampler2DRect ColorKeyImage;
const float epsilon = 0.001;

void main()
{
    /* Fetch wanted RGB color key value at pixel position: */
    vec3 colorkey = texture2DRect(ColorKeyImage, gl_FragCoord.xy).rgb;

    /* If fragment polygon color doesn't match key --> Discard fragment */
    if (distance(gl_Color.rgb, colorkey) > epsilon) discard;

    /* Test passed: Assign textures texel RGB color to output color: */
    vec4 texcolor = texture2DRect(Image, gl_TexCoord[0].st);
    gl_FragColor.rgb = texcolor.rgb;
    gl_FragColor.a = texcolor.a * gl_Color.a;
}