INPUT mediump vec2 vTexCoord; INPUT mediump vec2 vPosition; INPUT mediump vec2 vRectSize; INPUT mediump float vCornerRadius; uniform sampler2D sTexture; uniform lowp vec4 uColor; uniform lowp vec3 mixColor; uniform lowp float preMultipliedAlpha; void main() { mediump float dist = length( max( abs( vPosition ), vRectSize ) - vRectSize ) - vCornerRadius; mediump float 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 ); }