X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fgraphics%2Fshaders%2Fcolor-visual-blur-edge-shader.vert;h=5306aefe88ba4fcdae9d1994058f19efeb3c19a8;hb=be75977689673c6a0467c051984f1b482f9f00b8;hp=65849eb5454348c7c0b93861e043353fc26fdd14;hpb=e4d638dd0b325673bbd504aef409676fc5593a9d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert b/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert index 65849eb..5306aef 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert +++ b/dali-toolkit/internal/graphics/shaders/color-visual-blur-edge-shader.vert @@ -1,8 +1,10 @@ INPUT mediump vec2 aPosition; OUTPUT mediump vec2 vPosition; OUTPUT mediump vec2 vRectSize; +OUTPUT mediump vec2 vOptRectSize; +OUTPUT mediump vec4 vCornerRadius; -uniform highp mat4 uMvpMatrix; +uniform highp mat4 uMvpMatrix; uniform highp vec3 uSize; //Visual size and offset @@ -13,17 +15,26 @@ uniform mediump vec4 offsetSizeMode; uniform mediump vec2 origin; uniform mediump vec2 anchorPoint; uniform mediump float blurRadius; +uniform mediump vec4 cornerRadius; +uniform mediump float cornerRadiusPolicy; vec4 ComputeVertexPosition() { - vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize + blurRadius * 2.0; + vec2 visualSize = mix(uSize.xy*size, size, offsetSizeMode.zw ) + extraSize; 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 / 2.0; - vPosition = aPosition* visualSize; + // optimize fragment shader + mediump float maxRadius = max(max(vCornerRadius.x, vCornerRadius.y), max(vCornerRadius.z, vCornerRadius.w)); + vOptRectSize = vRectSize - 0.2929 * maxRadius - 1.0 - blurRadius; + + vPosition = aPosition * (visualSize + 2.0 * blurRadius); return vec4( vPosition + anchorPoint*visualSize + (visualOffset + origin)*uSize.xy, 0.0, 1.0 ); } void main() { gl_Position = uMvpMatrix * ComputeVertexPosition(); -} \ No newline at end of file +}