#version 150 in vec2 vertTexCoord; out vec4 fragColor; uniform vec4 color1; uniform vec4 color2; uniform vec4 color3; uniform vec2 color2Spacing; 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(vertTexCoord.x, color3Spacing.x); float colorMix3Y = gridStep(vertTexCoord.y, color3Spacing.y); float colorMix3 = 1.0 - min(colorMix3X, colorMix3Y); float colorMix2X = gridStep(vertTexCoord.x, color2Spacing.x); float colorMix2Y = gridStep(vertTexCoord.y, color2Spacing.y); float colorMix2 = min(1.0 - min(colorMix2X, colorMix2Y), 1.0 - colorMix3); float colorMix1X = gridStep(vertTexCoord.x, 1); float colorMix1Y = gridStep(vertTexCoord.y, 1); float colorMix1 = min(min(1.0 - min(colorMix1X, colorMix1Y), 1.0 - colorMix3), 1.0 - colorMix2); fragColor = (color1 * colorMix1 + color2 * colorMix2 + color3 * colorMix3); }