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;
}
|