#version 150 in vec4 color; in vec2 texCoord; out vec4 fragColor; uniform vec4 color1; uniform vec4 color2; uniform vec4 color3; uniform vec2 color3Spacing; float gridStep(float texCoord, float unitSize) { float width = fwidth(texCoord) / unitSize; float fraction = mod(texCoord, unitSize) / unitSize; return min(smoothstep(width * 0.875, width * 1.125, fraction), 1.0 - smoothstep(1.0 - width * 1.125, 1.0 - width * 0.875, fraction)); } void main() { float colorMix3X = gridStep(texCoord.x, color3Spacing.x); float colorMix3Y = gridStep(texCoord.y, color3Spacing.y); float colorMix3 = 1.0 - min(colorMix3X, colorMix3Y); float colorMix2X = gridStep(texCoord.x, 1); float colorMix2Y = gridStep(texCoord.y, 1); float colorMix2 = min(min(colorMix2X, colorMix2Y), 1.0 - colorMix3); float colorMix1 = 1.0 - max(colorMix2, colorMix3); fragColor = (color1 * colorMix1 + color2 * colorMix2 + color3 * colorMix3); }