From 2fc22bed24e05e4d60d589a4272e9d872b5493ad Mon Sep 17 00:00:00 2001 From: fleroviux <fleroviux@gmail.com> Date: Tue, 20 Jun 2023 22:18:23 +0200 Subject: [PATCH] [GPU] Decode GPUREG_TEXENVi_COLOR in the vertex shader as well --- src/core/renderer_gl/renderer_gl.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index 06a64879..416bc8d0 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -22,9 +22,11 @@ const char* vertexShader = R"( out vec3 texcoord0; out vec2 texcoord1; out vec2 texcoord2; + flat out vec4 v_textureEnvColor[6]; flat out vec4 v_textureEnvBufferColor; // TEV uniforms + uniform uint u_textureEnvColor[6]; uniform uint u_textureEnvBufferColor; vec4 abgr8888_to_vec4(uint abgr) { @@ -47,6 +49,10 @@ const char* vertexShader = R"( texcoord1 = vec2(in_texcoord1.x, 1.0 - in_texcoord1.y); texcoord2 = vec2(in_texcoord2.x, 1.0 - in_texcoord2.y); + for (int i = 0; i < 6; i++) { + v_textureEnvColor[i] = abgr8888_to_vec4(u_textureEnvColor[i]); + } + v_textureEnvBufferColor = abgr8888_to_vec4(u_textureEnvBufferColor); } )"; @@ -58,6 +64,7 @@ const char* fragmentShader = R"( in vec3 texcoord0; in vec2 texcoord1; in vec2 texcoord2; + flat in vec4 v_textureEnvColor[6]; flat in vec4 v_textureEnvBufferColor; out vec4 fragColour; @@ -69,7 +76,6 @@ const char* fragmentShader = R"( uniform uint u_textureEnvSource[6]; uniform uint u_textureEnvOperand[6]; uniform uint u_textureEnvCombiner[6]; - uniform vec4 u_textureEnvColor[6]; uniform uint u_textureEnvScale[6]; uniform uint u_textureEnvUpdateBuffer; @@ -201,7 +207,7 @@ const char* fragmentShader = R"( tev_next_previous_buffer = v_textureEnvBufferColor; for (int i = 0; i < 6; i++) { - tev_sources[14] = u_textureEnvColor[i]; // Constant color + tev_sources[14] = v_textureEnvColor[i]; // Constant color tev_sources[15] = tev_combine(i); tev_sources[13] = tev_next_previous_buffer; @@ -483,7 +489,7 @@ void Renderer::setupTextureEnvState() { u32 textureEnvSourceRegs[6]; u32 textureEnvOperandRegs[6]; u32 textureEnvCombinerRegs[6]; - float textureEnvColourRegs[6][4]; + u32 textureEnvColourRegs[6]; u32 textureEnvScaleRegs[6]; for (int i = 0; i < 6; i++) { @@ -492,20 +498,14 @@ void Renderer::setupTextureEnvState() { textureEnvSourceRegs[i] = regs[ioBase]; textureEnvOperandRegs[i] = regs[ioBase + 1]; textureEnvCombinerRegs[i] = regs[ioBase + 2]; - - const u32 constantColor = regs[ioBase + 3]; - textureEnvColourRegs[i][0] = (float)(constantColor & 0xff) / 255.0f; - textureEnvColourRegs[i][1] = (float)getBits<8, 8>(constantColor) / 255.0f; - textureEnvColourRegs[i][2] = (float)getBits<16, 8>(constantColor) / 255.0f; - textureEnvColourRegs[i][3] = (float)getBits<24, 8>(constantColor) / 255.0f; - + textureEnvColourRegs[i] = regs[ioBase + 3]; textureEnvScaleRegs[i] = regs[ioBase + 4]; } glUniform1uiv(textureEnvSourceLoc, 6, textureEnvSourceRegs); glUniform1uiv(textureEnvOperandLoc, 6, textureEnvOperandRegs); glUniform1uiv(textureEnvCombinerLoc, 6, textureEnvCombinerRegs); - glUniform4fv(textureEnvColorLoc, 6, (const GLfloat*)textureEnvColourRegs); + glUniform1uiv(textureEnvColorLoc, 6, textureEnvColourRegs); glUniform1uiv(textureEnvScaleLoc, 6, textureEnvScaleRegs); glUniform1ui(textureEnvUpdateBufferLoc, regs[0xe0]); glUniform1ui(textureEnvBufferColorLoc, regs[0xfd]);