1 INPUT mediump vec2 vPosition;
3 uniform lowp vec4 uColor;
4 uniform lowp vec3 mixColor;
5 uniform mediump float thickness;
6 uniform mediump float radius;
7 uniform mediump float startAngle;
8 uniform mediump float sweepAngle;
10 const mediump float M_PI_OVER_2 = 1.57079632679;
11 const mediump float M_PI_2 = 6.28318530718;
13 mediump float GetOpacity()
15 mediump float start = radians( mod( startAngle, 360.0 ) );
16 mediump float angle = mod( atan( vPosition.y, vPosition.x ) + M_PI_OVER_2 - start, M_PI_2 );
17 mediump float dist = length( vPosition );
18 if( angle <= radians( sweepAngle ) )
20 return smoothstep( -1.0, 1.0, thickness / 2.0 - ( abs( dist - radius ) ) );
22 mediump float end = radians( mod( startAngle + sweepAngle, 360.0 ) );
23 mediump vec2 q0 = vec2( radius * cos( start - M_PI_OVER_2 ), radius * sin( start - M_PI_OVER_2 ) );
24 mediump vec2 q1 = vec2( radius * cos( end - M_PI_OVER_2 ), radius * sin( end - M_PI_OVER_2 ) );
25 return smoothstep( -1.0, 1.0, thickness / 2.0 - min( length( vPosition - q0 ), length( vPosition - q1 ) ) );
30 OUT_COLOR = vec4( mixColor, 1.0 ) * uColor;
31 OUT_COLOR.a *= GetOpacity();