blob: ffeba8a692b1da1f685f4ad8a7bfeadfa5afbb4d [file] [log] [blame]
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;
}