Fix opacity issue when we use corner radius
[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 float vCornerRadius;
5
6 uniform sampler2D sTexture;
7 uniform lowp vec4 uColor;
8 uniform lowp vec3 mixColor;
9 uniform lowp float preMultipliedAlpha;
10
11 void main()
12 {
13   mediump vec2 diff = abs( vPosition ) - vRectSize;
14   mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius;
15   mediump float opacity = 1.0;
16   if( dist > 1.0 )
17   {
18     opacity = 0.0;
19   }
20   else if( dist > -1.0 )
21   {
22     if( min( diff.x, diff.y ) < 0.0 )
23     {
24       dist += min( diff.x, diff.y ) / vCornerRadius;
25     }
26     opacity = 1.0 - smoothstep( -1.0, 1.0, dist );
27   }
28
29   OUT_COLOR = TEXTURE( sTexture, vTexCoord ) * uColor * vec4( mixColor, 1.0 );
30   OUT_COLOR.a *= opacity;
31   OUT_COLOR.rgb *= mix( 1.0, opacity, preMultipliedAlpha );
32 }