@@ -95,7 +95,7 @@ const char masking_glsl[] = GLSL(330,
95
95
if (mask_corner_radius != 0 ) {
96
96
vec2 inner_size = mask_size - vec2 (mask_corner_radius ) * 2.0f ;
97
97
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 ;
99
99
if (dist > 0.0f ) {
100
100
mask .r *= (1.0f - clamp (dist , 0.0f , 1.0f ));
101
101
}
@@ -161,8 +161,12 @@ const char blit_shader_glsl[] = GLSL(330,
161
161
162
162
vec2 outer_size = effective_size ;
163
163
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.
164
168
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 ;
166
170
if (rect_distance > 0.0f ) {
167
171
c = (1.0f - clamp (rect_distance , 0.0f , 1.0f )) * rim_color ;
168
172
} else {
0 commit comments