@@ -95,7 +95,7 @@ const char masking_glsl[] = GLSL(330,
9595 if (mask_corner_radius != 0 ) {
9696 vec2 inner_size = mask_size - vec2 (mask_corner_radius ) * 2.0f ;
9797 float dist = mask_rectangle_sdf (maskcoord - mask_size / 2.0f ,
98- inner_size / 2.0f ) - mask_corner_radius ;
98+ inner_size / 2.0f ) - mask_corner_radius + 1.0f ;
9999 if (dist > 0.0f ) {
100100 mask .r *= (1.0f - clamp (dist , 0.0f , 1.0f ));
101101 }
@@ -161,8 +161,12 @@ const char blit_shader_glsl[] = GLSL(330,
161161
162162 vec2 outer_size = effective_size ;
163163 vec2 inner_size = outer_size - vec2 (corner_radius ) * 2.0f ;
164+ // +1.0 so the last 1-pixel ring of the rounded rectangle will transition
165+ // smoothly from 1 to 0 for anti-aliasing. If we don't do this, everything
166+ // inside the corner radius will be solid, and we will have an extra 1-pixel
167+ // feathering outside the corner radius, which makes it look bad.
164168 float rect_distance = rectangle_sdf (texcoord - outer_size / 2.0f ,
165- inner_size / 2.0f ) - corner_radius ;
169+ inner_size / 2.0f ) - corner_radius + 1.0f ;
166170 if (rect_distance > 0.0f ) {
167171 c = (1.0f - clamp (rect_distance , 0.0f , 1.0f )) * rim_color ;
168172 } else {
0 commit comments