uniform float Side; vec3 Rainbow( float t ) { t = clamp( t, 0., 1. ); vec3 rgb; // b -> c rgb.r = 0.; rgb.g = 4. * ( t - (0./4.) ); rgb.b = 1.; // c -> g if( t >= (1./4.) ) { rgb.r = 0.; rgb.g = 1.; rgb.b = 1. - 4. * ( t - (1./4.) ); } // g -> y if( t >= (2./4.) ) { rgb.r = 4. * ( t - (2./4.) ); rgb.g = 1.; rgb.b = 0.; } // y -> r if( t >= (3./4.) ) { rgb.r = 1.; rgb.g = 1. - 4. * ( t - (3./4.) ); rgb.b = 0.; } return rgb; } void main() { vec2 st = gl_TexCoord[0].st; vec2 xy = Side * gl_FragCoord.xy; float z = dot( xy, xy ); int c = int( z ); if( ( c % 2 ) != 0 ) discard; float t = float( c % 360 ) / 359.; vec3 rgb = Rainbow( t );; gl_FragColor = vec4( rgb, 1. ); }