Blob Blame Raw
#ifdef GL_ES
precision mediump float;
#endif

uniform mat3  outputToWorld;

uniform vec4  color;
uniform int   blades;
uniform float intensity;
uniform float angle;
uniform float bias;
uniform float sharpness;

float blades_ = float(blades);
float angle_  = radians(angle);
float bias_   = .01 * bias;


// never watch into the sun ;)

void main( void )
{
  vec2 p = .03 * (outputToWorld * vec3(gl_FragCoord.xy, 1.0)).xy;

  float a = atan(p.y, p.x) - angle_;
	float blade  = intensity * clamp(pow(sin(a * blades_) + bias_, sharpness), 0.0, 1.0);

  gl_FragColor = vec4(color.rgb * color.a, color.a);            // Premultiplication
  gl_FragColor = gl_FragColor * (1.0 + blade) / length(p);
}