Skip to content

Commit

Permalink
Fix glsl_restart with material system
Browse files Browse the repository at this point in the history
  • Loading branch information
VReaperV committed Jan 28, 2025
1 parent efe9430 commit fddf9d2
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/engine/renderer/Material.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1394,6 +1394,9 @@ void MaterialSystem::ProcessStage( drawSurf_t* drawSurf, shaderStage_t* pStage,
pStage->materialProcessor( &material, pStage, drawSurf );
pStage->paddedSize = material.shader->GetPaddedSize();

material.refStage = pStage;
material.refDrawSurf = *drawSurf;

std::vector<Material>& materials = materialPacks[materialPack].materials;
std::vector<Material>::iterator currentSearchIt = materials.begin();
std::vector<Material>::iterator materialIt;
Expand Down Expand Up @@ -1541,6 +1544,15 @@ void MaterialSystem::AddAllWorldSurfaces() {
generatingWorldCommandBuffer = false;
}

void MaterialSystem::GLSLRestart() {
for ( MaterialPack& materialPack : materialPacks ) {
for ( Material& material : materialPack.materials ) {
// We only really need to reset material.shader here
material.refStage->materialProcessor( &material, material.refStage, &material.refDrawSurf );
}
}
}

void MaterialSystem::AddStageTextures( drawSurf_t* drawSurf, const uint32_t stage, Material* material ) {
TextureData textureData;
const shaderStage_t* pStage = &drawSurf->shader->stages[stage];
Expand Down
6 changes: 6 additions & 0 deletions src/engine/renderer/Material.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ struct Material {
GLuint program = 0;
GLShader* shader;

// Used only for glsl_restart
shaderStage_t* refStage;
drawSurf_t refDrawSurf;

int deformIndex;
bool tcGenEnvironment;
bool tcGen_Lightmap;
Expand Down Expand Up @@ -347,6 +351,8 @@ class MaterialSystem {

void AddAllWorldSurfaces();

void GLSLRestart();

void Free();

private:
Expand Down
6 changes: 6 additions & 0 deletions src/engine/renderer/tr_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1118,6 +1118,12 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p
stage->deformIndex = deformIndex;
}
}

if ( glConfig2.usingMaterialSystem ) {
/* GLSL shaders linked to materials will be invalidated by glsl_restart,
so we need to reset them here */
materialSystem.GLSLRestart();
}
}
};
static GlslRestartCmd glslRestartCmdRegistration;
Expand Down

0 comments on commit fddf9d2

Please sign in to comment.