Skip to content

Commit

Permalink
make sure cvar uniforms are replicated for every instance of global s…
Browse files Browse the repository at this point in the history
…hader
  • Loading branch information
RicardoLuis0 authored and nashmuhandes committed Jan 8, 2025
1 parent 65aef94 commit 0bbc0cd
Showing 1 changed file with 22 additions and 16 deletions.
38 changes: 22 additions & 16 deletions src/r_data/gldefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
{
Expand Down Expand Up @@ -1989,7 +1989,7 @@ class GLDefsParser
//
//==========================================================================

void ParseShaderUniform(TMap<FString, UserUniformValue> &Uniforms, int ShaderIndex, bool isPP)
void ParseShaderUniform(TMap<FString, UserUniformValue> &Uniforms, int ShaderIndex, bool isPP, int numShaders = 1)
{
bool is_cvar = false;
bool ok = true;
Expand Down Expand Up @@ -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++;
}
}
}

Expand Down

0 comments on commit 0bbc0cd

Please sign in to comment.