X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fgraphics%2Fshaders%2Fgradient-visual-user-space-rounded-corner-shader.vert;h=23ded26b1b9dde189f3470432ebfd0adf70d0b9f;hb=e015f32740b0efd126f0e314ee872474e1fe1e91;hp=38f05fb4e2b5bf31254ded6dbed12da394159431;hpb=35309f882c990c309b41aff6d11664c0c8637bb2;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert b/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert index 38f05fb..23ded26 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-user-space-rounded-corner-shader.vert @@ -5,7 +5,8 @@ uniform mediump mat3 uAlignmentMatrix; varying mediump vec2 vTexCoord; varying mediump vec2 vPosition; varying mediump vec2 vRectSize; -varying mediump float vCornerRadius; +varying mediump vec2 vOptRectSize; +varying mediump vec4 vCornerRadius; //Visual size and offset uniform mediump vec2 offset; @@ -13,19 +14,23 @@ uniform highp vec2 size; uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; -uniform mediump float cornerRadius; +uniform mediump vec4 cornerRadius; uniform mediump float cornerRadiusPolicy; vec4 ComputeVertexPosition() { - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ); - vec2 visualOffset = mix( offset, offset/uSize.xy, offsetSizeMode.xy); - mediump float minSize = min( visualSize.x, visualSize.y ); - vCornerRadius = mix( cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); - vCornerRadius = min( vCornerRadius, minSize * 0.5 ); - vRectSize = visualSize * 0.5 - vCornerRadius; + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw); + vec2 visualOffset = mix(offset, offset/uSize.xy, offsetSizeMode.xy); + mediump float minSize = min(visualSize.x, visualSize.y); + vCornerRadius = mix(cornerRadius * minSize, cornerRadius, cornerRadiusPolicy); + vCornerRadius = min(vCornerRadius, minSize * 0.5); + vRectSize = visualSize * 0.5; + // Optimze fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0; + vCornerRadius = max(vCornerRadius, 1.0); vPosition = aPosition * visualSize; - return vec4( (aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); + return vec4((aPosition + anchorPoint)*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0); } void main()