Skip to content

Commit 639d444

Browse files
pijuliusyshui
authored andcommitted
backend/glx: fix anti-alising of rounded corner
Closes #1261 Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com> Co-authored-by: Istvan Petres <pijulius@users.noreply.github.com>
1 parent 5f24750 commit 639d444

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/backend/gl/shaders.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)