diff options
author | Patrick Owen <patowen95@gmail.com> | 2024-09-28 19:02:06 -0400 |
---|---|---|
committer | Patrick Owen <patowen95@gmail.com> | 2024-09-29 05:57:19 -0400 |
commit | d720eb80e176bf7455f37cfff9e336c95bc911f4 (patch) | |
tree | 7a628f6a934ff7bd1e77e3a522e0f4517a0927c8 | |
parent | 1fc82087658066935bed9e1350d62e334c7e0309 (diff) | |
download | redot-engine-d720eb80e176bf7455f37cfff9e336c95bc911f4.tar.gz |
Clamp UV-coordinates to centers of outermost texels when configured to do so
In addition, fix region_filter_clip_enabled documentation to be consistent with AtlasTexture.xml, since that is the option whose behavior was fixed
-rw-r--r-- | doc/classes/Sprite2D.xml | 2 | ||||
-rw-r--r-- | drivers/gles3/shaders/canvas.glsl | 3 | ||||
-rw-r--r-- | servers/rendering/renderer_rd/shaders/canvas.glsl | 3 |
3 files changed, 5 insertions, 3 deletions
diff --git a/doc/classes/Sprite2D.xml b/doc/classes/Sprite2D.xml index d73cb02d94..239c4dcf09 100644 --- a/doc/classes/Sprite2D.xml +++ b/doc/classes/Sprite2D.xml @@ -76,7 +76,7 @@ If [code]true[/code], texture is cut from a larger atlas texture. See [member region_rect]. </member> <member name="region_filter_clip_enabled" type="bool" setter="set_region_filter_clip_enabled" getter="is_region_filter_clip_enabled" default="false"> - If [code]true[/code], the outermost pixels get blurred out. [member region_enabled] must be [code]true[/code]. + If [code]true[/code], the area outside of the [member region_rect] is clipped to avoid bleeding of the surrounding texture pixels. [member region_enabled] must be [code]true[/code]. </member> <member name="region_rect" type="Rect2" setter="set_region_rect" getter="get_region_rect" default="Rect2(0, 0, 0, 0)"> The region of the atlas texture to display. [member region_enabled] must be [code]true[/code]. diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 76881c8032..5e7fb3b338 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -579,7 +579,8 @@ void main() { #endif if (bool(read_draw_data_flags & FLAGS_CLIP_RECT_UV)) { - uv = clamp(uv, read_draw_data_src_rect.xy, read_draw_data_src_rect.xy + abs(read_draw_data_src_rect.zw)); + vec2 half_texpixel = read_draw_data_color_texture_pixel_size * 0.5; + uv = clamp(uv, read_draw_data_src_rect.xy + half_texpixel, read_draw_data_src_rect.xy + abs(read_draw_data_src_rect.zw) - half_texpixel); } #endif diff --git a/servers/rendering/renderer_rd/shaders/canvas.glsl b/servers/rendering/renderer_rd/shaders/canvas.glsl index 704aafdfa5..fd0cd5bfad 100644 --- a/servers/rendering/renderer_rd/shaders/canvas.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas.glsl @@ -493,7 +493,8 @@ void main() { #endif if (bool(draw_data.flags & FLAGS_CLIP_RECT_UV)) { - uv = clamp(uv, draw_data.src_rect.xy, draw_data.src_rect.xy + abs(draw_data.src_rect.zw)); + vec2 half_texpixel = draw_data.color_texture_pixel_size * 0.5; + uv = clamp(uv, draw_data.src_rect.xy + half_texpixel, draw_data.src_rect.xy + abs(draw_data.src_rect.zw) - half_texpixel); } #endif |