From aef808cdfc341b4803d54139a1da3e0c9152b171 Mon Sep 17 00:00:00 2001 From: fleroviux <fleroviux@gmail.com> Date: Sat, 17 Jun 2023 01:35:35 +0200 Subject: [PATCH] [GPU] Cleanup TEV shader code to be less redundant --- src/core/renderer_gl/renderer_gl.cpp | 35 +++++++++++----------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index a3b3cae4..42e78162 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -167,35 +167,26 @@ const char* fragmentShader = R"( void main() { if ((u_textureConfig & 1u) != 0u) tev_texture_sources[0] = texture(u_tex0, tex0_UVs); - // TODO: make TEV logic less redundant - tev_previous_buffer[0] = vec4(0.0); tev_previous_buffer[1] = u_textureEnvBufferColor; - tev_previous = tev_combine(0); - tev_previous_buffer[0] = tev_previous_buffer[1]; - if ((u_textureEnvUpdateBuffer & 0x100u) != 0u) tev_previous_buffer[1].rgb = tev_previous.rgb; - if ((u_textureEnvUpdateBuffer & 0x1000u) != 0u) tev_previous_buffer[1].a = tev_previous.a; + for (int i = 0; i < 6; i++) { + tev_previous = tev_combine(i); - tev_previous = tev_combine(1); - tev_previous_buffer[0] = tev_previous_buffer[1]; - if ((u_textureEnvUpdateBuffer & 0x200u) != 0u) tev_previous_buffer[1].rgb = tev_previous.rgb; - if ((u_textureEnvUpdateBuffer & 0x2000u) != 0u) tev_previous_buffer[1].a = tev_previous.a; + tev_previous_buffer[0] = tev_previous_buffer[1]; - tev_previous = tev_combine(2); - tev_previous_buffer[0] = tev_previous_buffer[1]; - if ((u_textureEnvUpdateBuffer & 0x400u) != 0u) tev_previous_buffer[1].rgb = tev_previous.rgb; - if ((u_textureEnvUpdateBuffer & 0x4000u) != 0u) tev_previous_buffer[1].a = tev_previous.a; + if (i < 4) { + if ((u_textureEnvUpdateBuffer & (0x100u << i)) != 0u) { + tev_previous_buffer[1].rgb = tev_previous.rgb; + } - tev_previous = tev_combine(3); - tev_previous_buffer[0] = tev_previous_buffer[1]; - if ((u_textureEnvUpdateBuffer & 0x800u) != 0u) tev_previous_buffer[1].rgb = tev_previous.rgb; - if ((u_textureEnvUpdateBuffer & 0x8000u) != 0u) tev_previous_buffer[1].a = tev_previous.a; + if ((u_textureEnvUpdateBuffer & (0x1000u << i)) != 0u) { + tev_previous_buffer[1].a = tev_previous.a; + } + } + } - tev_previous = tev_combine(4); - tev_previous_buffer[0] = tev_previous_buffer[1]; - - fragColour = tev_combine(5); + fragColour = tev_previous; if (tev_unimplemented_source) { // fragColour = vec4(1.0, 0.0, 1.0, 1.0);