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
index 1e3a1a7..0e2c1d8 100644 (file)
@@ -10,10 +10,23 @@ uniform lowp float preMultipliedAlpha;
 
 void main()
 {
-  mediump float dist = length( max( abs( vPosition ), vRectSize ) - vRectSize ) - vCornerRadius;
-  mediump float opacity = 1.0 - smoothstep( -1.0, 1.0, dist );
+  mediump vec2 diff = abs( vPosition ) - vRectSize;
+  mediump float dist = length( max( diff, vec2( 0.0 ) ) ) - vCornerRadius;
+  mediump float opacity = 1.0;
+  if( dist > 1.0 )
+  {
+    opacity = 0.0;
+  }
+  else if( dist > -1.0 )
+  {
+    if( min( diff.x, diff.y ) < 0.0 )
+    {
+      dist += min( diff.x, diff.y ) / vCornerRadius;
+    }
+    opacity = 1.0 - smoothstep( -1.0, 1.0, dist );
+  }
 
   OUT_COLOR = TEXTURE( sTexture, vTexCoord ) * uColor * vec4( mixColor, 1.0 );
   OUT_COLOR.a *= opacity;
   OUT_COLOR.rgb *= mix( 1.0, opacity, preMultipliedAlpha );
-}
\ No newline at end of file
+}