From e75900e1ad1a2c699829335ad3be27b4e01afec1 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Fri, 20 Sep 2024 17:43:33 -0700 Subject: [PATCH] Calculate pixel snap in canvas space instead of world space This ensures that you are actually snapping to pixels in the viewport and not an arbitrary amount --- drivers/gles3/shaders/canvas.glsl | 4 ++-- servers/rendering/renderer_rd/shaders/canvas.glsl | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index e3582307473..76881c8032d 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -262,6 +262,8 @@ void main() { color_interp = color; + vertex = (canvas_transform * vec4(vertex, 0.0, 1.0)).xy; + if (use_pixel_snap) { vertex = floor(vertex + 0.5); // precision issue on some hardware creates artifacts within texture @@ -269,8 +271,6 @@ void main() { uv += 1e-5; } - vertex = (canvas_transform * vec4(vertex, 0.0, 1.0)).xy; - vertex_interp = vertex; uv_interp = uv; diff --git a/servers/rendering/renderer_rd/shaders/canvas.glsl b/servers/rendering/renderer_rd/shaders/canvas.glsl index 5e19c24246c..704aafdfa5d 100644 --- a/servers/rendering/renderer_rd/shaders/canvas.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas.glsl @@ -214,6 +214,8 @@ void main() { color_interp = color; + vertex = (canvas_data.canvas_transform * vec4(vertex, 0.0, 1.0)).xy; + if (canvas_data.use_pixel_snap) { vertex = floor(vertex + 0.5); // precision issue on some hardware creates artifacts within texture @@ -221,8 +223,6 @@ void main() { uv += 1e-5; } - vertex = (canvas_data.canvas_transform * vec4(vertex, 0.0, 1.0)).xy; - vertex_interp = vertex; uv_interp = uv;