aboutsummaryrefslogtreecommitdiff
path: root/tests/glmark2/data/shaders/light-basic-tex-bilinear.frag
blob: ffeba8a692b1da1f685f4ad8a7bfeadfa5afbb4d (plain)
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
uniform sampler2D MaterialTexture0;

varying vec4 Color;
varying vec2 TextureCoord;

const vec2 TexelSize = vec2(1.0 / TextureSize.x, 1.0 / TextureSize.y); 

/*
 * See http://www.gamerendering.com/2008/10/05/bilinear-interpolation/
 * for a more thorough explanation of how this works.
 */
vec4 texture2DBilinear(sampler2D sampler, vec2 uv)
{
    // Get the needed texture samples
    vec4 tl = texture2D(sampler, uv);
    vec4 tr = texture2D(sampler, uv + vec2(TexelSize.x, 0));
    vec4 bl = texture2D(sampler, uv + vec2(0, TexelSize.y));
    vec4 br = texture2D(sampler, uv + vec2(TexelSize.x , TexelSize.y));

    // Mix the samples according to the GL specification
    vec2 f = fract(uv * TextureSize);
    vec4 tA = mix(tl, tr, f.x);
    vec4 tB = mix(bl, br, f.x);
    return mix(tA, tB, f.y);
}

void main(void)
{
    vec4 texel = texture2DBilinear(MaterialTexture0, TextureCoord);
    gl_FragColor = texel * Color;
}