From 6a3941b5d9ce51463a749b84895f5c88f8e64eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pa=CC=84vels=20Nadtoc=CC=8Cajevs?= <7645683+bruvzg@users.noreply.github.com> Date: Tue, 19 Aug 2025 08:28:33 +0300 Subject: [PATCH] Fix MSDF outline size clamping. --- drivers/gles3/shaders/canvas.glsl | 2 +- scene/resources/material.cpp | 2 +- servers/rendering/renderer_rd/shaders/canvas.glsl | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 60986004821..fcf290a8f33 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -609,7 +609,7 @@ void main() { float d = msdf_median(msdf_sample.r, msdf_sample.g, msdf_sample.b); if (outline_thickness > 0.0) { - float cr = clamp(outline_thickness, 0.0, px_range / 2.0) / px_range; + float cr = clamp(outline_thickness, 0.0, (px_range / 2.0) - 1.0) / px_range; d = min(d, msdf_sample.a); float a = clamp((d - 0.5 + cr) * px_size + 0.5, 0.0, 1.0); color.a = a * color.a; diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 89965eb3053..5908d815d86 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -1638,7 +1638,7 @@ void fragment() {)"; float px_size = max(0.5 * dot(msdf_size, dest_size), 1.0); float d = msdf_median(albedo_tex.r, albedo_tex.g, albedo_tex.b); if (msdf_outline_size > 0.0) { - float cr = clamp(msdf_outline_size, 0.0, msdf_pixel_range / 2.0) / msdf_pixel_range; + float cr = clamp(msdf_outline_size, 0.0, (msdf_pixel_range / 2.0) - 1.0) / msdf_pixel_range; d = min(d, albedo_tex.a); albedo_tex.a = clamp((d - 0.5 + cr) * px_size + 0.5, 0.0, 1.0); } else { diff --git a/servers/rendering/renderer_rd/shaders/canvas.glsl b/servers/rendering/renderer_rd/shaders/canvas.glsl index a3b40fa809b..3c71066cee3 100644 --- a/servers/rendering/renderer_rd/shaders/canvas.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas.glsl @@ -516,7 +516,7 @@ void main() { float d = msdf_median(msdf_sample.r, msdf_sample.g, msdf_sample.b); if (outline_thickness > 0) { - float cr = clamp(outline_thickness, 0.0, px_range / 2) / px_range; + float cr = clamp(outline_thickness, 0.0, (px_range / 2.0) - 1.0) / px_range; d = min(d, msdf_sample.a); float a = clamp((d - 0.5 + cr) * px_size + 0.5, 0.0, 1.0); color.a = a * color.a;