Corner Radius become Vector4
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / graphics / shaders / gradient-visual-linear-rounded-corner-shader.frag
1 uniform sampler2D sTexture; // sampler1D?
2 uniform lowp vec4 uColor;
3 uniform lowp vec3 mixColor;
4 varying mediump vec2 vTexCoord;
5 varying mediump vec2 vPosition;
6 varying mediump vec2 vRectSize;
7 varying mediump vec2 vOptRectSize;
8 varying mediump vec4 vCornerRadius;
9
10 void main()
11 {
12   gl_FragColor = texture2D( sTexture, vec2( vTexCoord.y, 0.5 ) ) * vec4(mixColor, 1.0) * uColor;
13   if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
14   {
15     return;
16   }
17   mediump float radius =
18   mix(
19     mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5),
20     mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5),
21     sign(vPosition.y) * 0.5 + 0.5
22   );
23
24   mediump vec2 diff = abs(vPosition) - vRectSize + radius;
25   mediump float dist = length(max(diff, vec2(0.0))) - radius;
26   if(dist > 1.0)
27   {
28     gl_FragColor = vec4(0.0);
29   }
30   else if(dist > -1.0)
31   {
32     if(min(diff.x, diff.y) < 0.0)
33     {
34       dist += min(diff.x, diff.y) / max(radius, 1.0);
35     }
36     gl_FragColor *= 1.0 - smoothstep(-1.0, 1.0, dist);
37   }
38 }