From 8714b36171ed0e1f13b163e2f8a50b62b6cc0c76 Mon Sep 17 00:00:00 2001 From: BlueCube3310 <53150244+BlueCube3310@users.noreply.github.com> Date: Thu, 6 Feb 2025 20:17:49 +0100 Subject: [PATCH] Fix rendering material when UV2 is compressed --- drivers/gles3/shaders/scene.glsl | 9 ++++++++- .../forward_clustered/scene_forward_clustered.glsl | 9 ++++++++- .../shaders/forward_mobile/scene_forward_mobile.glsl | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index f61bb73a85a..03e8a7c03ad 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -713,7 +713,14 @@ void main() { #endif #ifdef RENDER_MATERIAL - gl_Position.xy = (uv2_attrib.xy + uv_offset) * 2.0 - 1.0; + vec2 uv_dest_attrib; + if (uv_scale != vec4(0.0)) { + uv_dest_attrib = (uv2_attrib.xy - 0.5) * uv_scale.zw; + } else { + uv_dest_attrib = uv2_attrib.xy; + } + + gl_Position.xy = (uv_dest_attrib + uv_offset) * 2.0 - 1.0; gl_Position.z = 0.00001; gl_Position.w = 1.0; #endif diff --git a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl index 242d29d047b..f31a8de16b8 100644 --- a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl +++ b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl @@ -652,8 +652,15 @@ void vertex_shader(vec3 vertex_input, #endif #ifdef MODE_RENDER_MATERIAL if (scene_data.material_uv2_mode) { + vec2 uv_dest_attrib; + if (uv_scale != vec4(0.0)) { + uv_dest_attrib = (uv2_attrib.xy - 0.5) * uv_scale.zw; + } else { + uv_dest_attrib = uv2_attrib.xy; + } + vec2 uv_offset = unpackHalf2x16(draw_call.uv_offset); - gl_Position.xy = (uv2_attrib.xy + uv_offset) * 2.0 - 1.0; + gl_Position.xy = (uv_dest_attrib + uv_offset) * 2.0 - 1.0; gl_Position.z = 0.00001; gl_Position.w = 1.0; } diff --git a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl index 6ca6ad8fac0..dfcc285297a 100644 --- a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl +++ b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl @@ -557,7 +557,14 @@ void main() { #endif // MODE_RENDER_DEPTH #ifdef MODE_RENDER_MATERIAL if (scene_data.material_uv2_mode) { - gl_Position.xy = (uv2_attrib.xy + draw_call.uv_offset) * 2.0 - 1.0; + vec2 uv_dest_attrib; + if (uv_scale != vec4(0.0)) { + uv_dest_attrib = (uv2_attrib.xy - 0.5) * uv_scale.zw; + } else { + uv_dest_attrib = uv2_attrib.xy; + } + + gl_Position.xy = (uv_dest_attrib + draw_call.uv_offset) * 2.0 - 1.0; gl_Position.z = 0.00001; gl_Position.w = 1.0; }