From 05c9daeb34145f2533fb957b38678b3488a25fcc Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Fri, 20 Dec 2024 21:57:01 -0600 Subject: [PATCH] fix: pixel art sampler texel offset in image-render-v2 --- .../image-renderer-v2/image-renderer-v2.frag.glsl | 10 ++++++---- .../image-renderer-v2/image-renderer-v2.vert.glsl | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.frag.glsl b/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.frag.glsl index 01344f432..7e58fb144 100644 --- a/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.frag.glsl +++ b/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.frag.glsl @@ -18,6 +18,8 @@ in vec4 v_tint; // texture resolution in vec2 v_res; +in vec2 v_size; + in vec2 v_uv_min; in vec2 v_uv_max; @@ -53,12 +55,12 @@ void main(){ // that do not apply to a particular sprite. vec4 color=vec4(1.,0,0,1.); + vec2 remapped_uv = v_texcoord; + remapped_uv.x = remap(0.,1., v_uv_min.x, v_uv_max.x, v_texcoord.x); + remapped_uv.y = remap(0.,1., v_uv_min.y, v_uv_max.y, v_texcoord.y); + vec2 uv = u_pixelart ? uv_iq(remapped_uv, v_size) : remapped_uv; // GLSL is templated out to pick the right texture and set the vec4 color - vec2 uv = u_pixelart ? uv_iq(v_texcoord, v_res) : v_texcoord; - uv.x = remap(0.,1., v_uv_min.x, v_uv_max.x, uv.x); - uv.y = remap(0.,1., v_uv_min.y, v_uv_max.y, uv.y); - %%texture_picker%% color.rgb = color.rgb * v_opacity; diff --git a/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.vert.glsl b/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.vert.glsl index b1fddcfda..9b5c463f9 100644 --- a/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.vert.glsl +++ b/src/engine/Graphics/Context/image-renderer-v2/image-renderer-v2.vert.glsl @@ -11,12 +11,13 @@ layout(location=5) in vec2 a_mat_column3; layout(location=6) in float a_opacity; out float v_opacity; -// Texture resolution (could be bigger than a_siz) +// Texture resolution (could be bigger than a_size) layout(location=7) in vec2 a_res; out vec2 v_res; // Final size of graphic layout(location=8) in vec2 a_size; +out vec2 v_size; layout(location=9) in lowp float a_texture_index; out lowp float v_texture_index; @@ -48,6 +49,7 @@ void main(){ v_uv_min = a_uv_min; v_uv_max = a_uv_max; v_res = a_res; + v_size = a_size; v_texture_index = a_texture_index; v_tint = a_tint; } \ No newline at end of file