From 0bbc0cd8b47ca8179b31e8c766666fe6c255e08b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Lu=C3=ADs=20Vaz=20Silva?= Date: Wed, 8 Jan 2025 06:35:48 -0300 Subject: [PATCH] make sure cvar uniforms are replicated for every instance of global shader --- src/r_data/gldefs.cpp | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/r_data/gldefs.cpp b/src/r_data/gldefs.cpp index f806ae8d9..120aea0ca 100644 --- a/src/r_data/gldefs.cpp +++ b/src/r_data/gldefs.cpp @@ -1632,7 +1632,7 @@ class GLDefsParser { isProperty = true; hasUniforms = true; - ParseShaderUniform(Uniforms, usershaders.Size(), false); + ParseShaderUniform(Uniforms, usershaders.Size(), false, is_globalshader ? globaltargets.Size() : 1); } else if (sc.Compare("texture")) { @@ -1989,7 +1989,7 @@ class GLDefsParser // //========================================================================== - void ParseShaderUniform(TMap &Uniforms, int ShaderIndex, bool isPP) + void ParseShaderUniform(TMap &Uniforms, int ShaderIndex, bool isPP, int numShaders = 1) { bool is_cvar = false; bool ok = true; @@ -2195,23 +2195,29 @@ class GLDefsParser if(ok) { - ExtraUniformCVARData* oldextra = (ExtraUniformCVARData*) cvar->GetExtraDataPointer2(); + while(numShaders > 0) + { + ExtraUniformCVARData* oldextra = (ExtraUniformCVARData*) cvar->GetExtraDataPointer2(); - ExtraUniformCVARData* extra = new ExtraUniformCVARData; - extra->isPP = isPP; - extra->ShaderIndex = ShaderIndex; - extra->Uniform = uniformName.GetChars(); - extra->OldCallback = oldextra ? oldextra->OldCallback : cvar->m_Callback; - extra->Next = oldextra; + ExtraUniformCVARData* extra = new ExtraUniformCVARData; + extra->isPP = isPP; + extra->ShaderIndex = ShaderIndex; + extra->Uniform = uniformName.GetChars(); + extra->OldCallback = oldextra ? oldextra->OldCallback : cvar->m_Callback; + extra->Next = oldextra; - cvar->SetCallback(callback); - cvar->SetExtraDataPointer2(extra); + cvar->SetCallback(callback); + cvar->SetExtraDataPointer2(extra); - Uniforms[uniformName].Type = parsedType; - Uniforms[uniformName].Values[0] = Values[0]; - Uniforms[uniformName].Values[1] = Values[1]; - Uniforms[uniformName].Values[2] = Values[2]; - Uniforms[uniformName].Values[3] = Values[3]; + Uniforms[uniformName].Type = parsedType; + Uniforms[uniformName].Values[0] = Values[0]; + Uniforms[uniformName].Values[1] = Values[1]; + Uniforms[uniformName].Values[2] = Values[2]; + Uniforms[uniformName].Values[3] = Values[3]; + + numShaders--; + ShaderIndex++; + } } }