X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fgraphics%2Fshaders%2Fcolor-visual-rounded-corner-shader.frag;h=811dc1d9aaaa307c1e178aba6f4636f13293fdf6;hp=d68e66f8c5c6f7b030c5f55d45a98f006add93ff;hb=ec503e92aa01bc67f8ea118cf14aa3b1ed9d390e;hpb=35309f882c990c309b41aff6d11664c0c8637bb2 diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag b/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag index d68e66f..811dc1d 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/color-visual-rounded-corner-shader.frag @@ -1,13 +1,37 @@ INPUT mediump vec2 vPosition; INPUT mediump vec2 vRectSize; -INPUT mediump float vCornerRadius; +INPUT mediump vec2 vOptRectSize; +INPUT mediump vec4 vCornerRadius; uniform lowp vec4 uColor; uniform lowp vec3 mixColor; void main() { - mediump float dist = length( max( abs( vPosition ), vRectSize ) - vRectSize ) - vCornerRadius; OUT_COLOR = vec4(mixColor, 1.0) * uColor; - OUT_COLOR.a *= 1.0 - smoothstep( -1.0, 1.0, dist ); -} \ No newline at end of file + if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) + { + return; + } + mediump float radius = + mix( + mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), + mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5), + sign(vPosition.y) * 0.5 + 0.5 + ); + + mediump vec2 diff = abs(vPosition) - vRectSize + radius; + mediump float dist = length(max(diff, vec2(0.0))) - radius; + if(dist > 1.0) + { + OUT_COLOR.a = 0.0; + } + else if(dist > -1.0) + { + if(min(diff.x, diff.y) < 0.0) + { + dist += min(diff.x, diff.y) / max(radius, 1.0); + } + OUT_COLOR.a *= 1.0 - smoothstep(-1.0, 1.0, dist); + } +}