6eacb9382c868c1e2fdc3f3e5cd03c64875454d0
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / graphics / shaders / image-visual-rounded-corner-shader.frag
1 INPUT mediump vec2 vTexCoord;
2 INPUT mediump vec2 vPosition;
3 INPUT mediump vec2 vRectSize;
4 INPUT mediump vec2 vOptRectSize;
5 INPUT mediump vec4 vCornerRadius;
6
7 uniform sampler2D sTexture;
8 uniform lowp vec4 uColor;
9 uniform lowp vec3 mixColor;
10 uniform lowp float preMultipliedAlpha;
11
12 void main()
13 {
14   if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
15   {
16     OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
17     return;
18   }
19   mediump float radius =
20   mix(
21     mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5),
22     mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5),
23     sign(vPosition.y) * 0.5 + 0.5
24   );
25
26   mediump vec2 diff = abs(vPosition) - vRectSize + radius;
27   mediump float dist = length(max(diff, vec2(0.0))) - radius;
28   mediump float opacity = 1.0;
29   if(dist > 1.0)
30   {
31     opacity = 0.0;
32   }
33   else if(dist > -1.0)
34   {
35     if(min(diff.x, diff.y) < 0.0)
36     {
37       dist += min(diff.x, diff.y) / max(radius, 1.0);
38     }
39     opacity = 1.0 - smoothstep(-1.0, 1.0, dist);
40   }
41
42   OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
43   OUT_COLOR.a *= opacity;
44   OUT_COLOR.rgb *= mix(1.0, opacity, preMultipliedAlpha);
45 }