From 0ca6957d0c551967319dcfd100a7978b0a7520a9 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 18 Aug 2023 18:33:30 -0700 Subject: [PATCH] renderer/{metal,opengl}: need to premult our cell alpha to have effect --- src/renderer/shaders/cell.f.glsl | 3 ++- src/renderer/shaders/cell.metal | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/renderer/shaders/cell.f.glsl b/src/renderer/shaders/cell.f.glsl index 336fd073c..c261d03e5 100644 --- a/src/renderer/shaders/cell.f.glsl +++ b/src/renderer/shaders/cell.f.glsl @@ -39,7 +39,8 @@ void main() { case MODE_FG: a = texture(text, glyph_tex_coords).r; - out_FragColor = vec4(color.rgb*a, color.a*a); + vec3 premult = color.rgb * color.a; + out_FragColor = vec4(premult.rgb*a, a); break; case MODE_FG_COLOR: diff --git a/src/renderer/shaders/cell.metal b/src/renderer/shaders/cell.metal index 2e50f4938..4e76f264d 100644 --- a/src/renderer/shaders/cell.metal +++ b/src/renderer/shaders/cell.metal @@ -160,8 +160,12 @@ fragment float4 uber_fragment( // We premult the alpha to our whole color since our blend function // uses One/OneMinusSourceAlpha to avoid blurry edges. + // We first premult our given color. + float4 premult = float4(in.color.rgb * in.color.a, 1); + // Then premult the texture color float a = textureGreyscale.sample(textureSampler, coord).r; - return in.color * a; + premult = premult * a; + return premult; } case MODE_FG_COLOR: {