1 INPUT mediump vec2 vTexCoord;
2 INPUT mediump vec2 vPosition;
3 INPUT mediump vec2 vRectSize;
4 INPUT mediump vec2 vOptRectSize;
5 INPUT mediump vec4 vCornerRadius;
7 uniform sampler2D sTexture;
8 uniform lowp vec4 uColor;
9 uniform lowp vec3 mixColor;
10 uniform lowp float preMultipliedAlpha;
14 if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
16 OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
19 mediump float radius =
21 mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5),
22 mix(vCornerRadius.w, vCornerRadius.z, sign(vPosition.x) * 0.5 + 0.5),
23 sign(vPosition.y) * 0.5 + 0.5
26 mediump vec2 diff = abs(vPosition) - vRectSize + radius;
27 mediump float dist = length(max(diff, vec2(0.0))) - radius;
28 mediump float opacity = 1.0;
35 if(min(diff.x, diff.y) < 0.0)
37 dist += min(diff.x, diff.y) / max(radius, 1.0);
39 opacity = 1.0 - smoothstep(-1.0, 1.0, dist);
42 OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
43 OUT_COLOR.a *= opacity;
44 OUT_COLOR.rgb *= mix(1.0, opacity, preMultipliedAlpha);