From f825cc918cbf2048804b03c6be30ac62a91e0879 Mon Sep 17 00:00:00 2001 From: jacob Date: Tue, 4 Nov 2025 07:12:27 -0600 Subject: [PATCH] only run aa on corners --- src/pp/pp.c | 2 -- src/ui/ui_draw.gpu | 28 ++++++++++++++++------------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/pp/pp.c b/src/pp/pp.c index 659762f6..3d8ffad7 100644 --- a/src/pp/pp.c +++ b/src/pp/pp.c @@ -1963,8 +1963,6 @@ void PP_UpdateUser(void) UI_Push(BorderColor, 0xff343a3b); UI_Push(Border, 1); - // UI_Size padding = UI_FILL(1, 0); - // UI_Size padding = UI_PIX(10, 0); UI_Push(Width, UI_PIX(size.x, 0)); UI_Push(Height, UI_PIX(size.y, 0)); diff --git a/src/ui/ui_draw.gpu b/src/ui/ui_draw.gpu index c2bf8ffe..2ed133c5 100644 --- a/src/ui/ui_draw.gpu +++ b/src/ui/ui_draw.gpu @@ -57,6 +57,8 @@ UI_RectPS_Output PSDef(UI_RectPS, UI_RectPS_Input input) Vec2 p0 = rect.p0; Vec2 p1 = rect.p1; + b32 aa_enabled = 0; + /* Calculate rect sdf (negative means pixel is inside of rect) */ f32 rect_dist = min(min(p.x - p0.x, p1.x - p.x), min(p.y - p0.y, p1.y - p.y)); { @@ -68,10 +70,10 @@ UI_RectPS_Output PSDef(UI_RectPS, UI_RectPS_Input input) Vec2 tr = Vec2(p1.x - tr_radius, p0.y + tr_radius); Vec2 br = Vec2(p1.x - br_radius, p1.y - br_radius); Vec2 bl = Vec2(p0.x + bl_radius, p1.y - bl_radius); - if (p.x < tl.x && p.y < tl.y) rect_dist = min(rect_dist, tl_radius - length(tl - p)); - if (p.x > tr.x && p.y < tr.y) rect_dist = min(rect_dist, tr_radius - length(tr - p)); - if (p.x > br.x && p.y > br.y) rect_dist = min(rect_dist, br_radius - length(br - p)); - if (p.x < bl.x && p.y > bl.y) rect_dist = min(rect_dist, bl_radius - length(bl - p)); + if (p.x < tl.x && p.y < tl.y) { rect_dist = min(rect_dist, tl_radius - length(tl - p)); aa_enabled = 1; } + if (p.x > tr.x && p.y < tr.y) { rect_dist = min(rect_dist, tr_radius - length(tr - p)); aa_enabled = 1; } + if (p.x > br.x && p.y > br.y) { rect_dist = min(rect_dist, br_radius - length(br - p)); aa_enabled = 1; } + if (p.x < bl.x && p.y > bl.y) { rect_dist = min(rect_dist, bl_radius - length(bl - p)); aa_enabled = 1; } } rect_dist = -rect_dist; @@ -97,7 +99,15 @@ UI_RectPS_Output PSDef(UI_RectPS, UI_RectPS_Input input) } } - /* Background */ + /* Calculate border blend from derivitive */ + f32 border_dist_fwidth = fwidth(border_dist); + f32 border_blend = saturate(0.5 - border_dist / border_dist_fwidth); + if (!aa_enabled) + { + border_blend = border_dist <= 0; + } + + /* Background color */ Vec4 background_color = 0; { if (rect_dist <= 0) @@ -116,13 +126,7 @@ UI_RectPS_Output PSDef(UI_RectPS, UI_RectPS_Input input) } /* Final color */ - Vec4 final_color = 0; - { - f32 w = fwidth(border_dist); - f32 border_blend = saturate(0.5 - border_dist / w); - // f32 border_blend = 0; - final_color = lerp(background_color, border_color, border_blend); - } + Vec4 final_color = lerp(background_color, border_color, border_blend); final_color *= input.tint_lin; UI_RectPS_Output output;