precision highp float; varying vec2 uv; varying vec2 position_background; uniform sampler2D image; uniform vec4 background_color; void main() { vec2 frac = position_background - floor(position_background); float checkerboard = ((frac.x > .5) == (frac.y > .5)) ? 0.4 : 0.5; vec4 background = (1.0 - background_color.a) * vec4(vec3(checkerboard), 1.0) + background_color.a * vec4(background_color.rgb, 1.0); vec4 value = texture2D(image, uv); gl_FragColor = (1.0 - value.a) * background + value.a * vec4(value.rgb, 1.0); }