INPUT mediump vec2 vTexCoord;
INPUT mediump vec2 vPosition;
INPUT mediump vec2 vRectSize;
-INPUT mediump float vCornerRadius;
+INPUT mediump vec2 vOptRectSize;
+INPUT mediump vec4 vCornerRadius;
uniform sampler2D sTexture;
uniform lowp vec4 uColor;
void main()
{
- mediump float dist = length( max( abs( vPosition ), vRectSize ) - vRectSize ) - vCornerRadius;
- mediump float opacity = 1.0 - smoothstep( -1.0, 1.0, dist );
+ if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y)
+ {
+ OUT_COLOR = TEXTURE(sTexture, vTexCoord) * uColor * vec4(mixColor, 1.0);
+ 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
+ );
- OUT_COLOR = TEXTURE( sTexture, vTexCoord ) * uColor * vec4( mixColor, 1.0 );
+ mediump vec2 diff = abs(vPosition) - vRectSize + radius;
+ mediump float dist = length(max(diff, vec2(0.0))) - radius;
+ 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) / max(radius, 1.0);
+ }
+ 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
+ OUT_COLOR.rgb *= mix(1.0, opacity, preMultipliedAlpha);
+}