Skip to content

Commit d50f74a

Browse files
committed
Also mark material system shaders for building
1 parent 521756c commit d50f74a

5 files changed

Lines changed: 18 additions & 11 deletions

File tree

src/engine/renderer/GeometryOptimiser.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ std::vector<MaterialSurface> OptimiseMapGeometryMaterial(bspSurface_t** renderer
451451
// std::unordered_map<TriEdge, TriIndex> triEdges;
452452

453453
vec3_t worldBounds[2] = {};
454+
materialSystem.buildOneShader = false;
454455
for ( int i = 0; i < numSurfaces; i++ ) {
455456
bspSurface_t* surface = rendererSurfaces[i];
456457

@@ -486,6 +487,8 @@ std::vector<MaterialSurface> OptimiseMapGeometryMaterial(bspSurface_t** renderer
486487
materialSurfaces.emplace_back( srf );
487488
}
488489

490+
materialSystem.buildOneShader = true;
491+
489492
materialSystem.GenerateWorldMaterialsBuffer();
490493
materialSystem.GeneratePortalBoundingSpheres();
491494
materialSystem.SetWorldBounds( worldBounds );

src/engine/renderer/Material.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ void ProcessMaterialGeneric3D( Material* material, shaderStage_t* pStage, Materi
10111011
material->hasDepthFade = hasDepthFade;
10121012
gl_genericShaderMaterial->SetDepthFade( hasDepthFade );
10131013

1014-
material->program = gl_genericShaderMaterial->GetProgram( pStage->deformIndex );
1014+
material->program = gl_genericShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10151015
}
10161016

10171017
void ProcessMaterialLightMapping( Material* material, shaderStage_t* pStage, MaterialSurface* surface ) {
@@ -1053,7 +1053,7 @@ void ProcessMaterialLightMapping( Material* material, shaderStage_t* pStage, Mat
10531053

10541054
gl_lightMappingShaderMaterial->SetPhysicalShading( pStage->enablePhysicalMapping );
10551055

1056-
material->program = gl_lightMappingShaderMaterial->GetProgram( pStage->deformIndex );
1056+
material->program = gl_lightMappingShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10571057
}
10581058

10591059
void ProcessMaterialReflection( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ ) {
@@ -1067,31 +1067,31 @@ void ProcessMaterialReflection( Material* material, shaderStage_t* pStage, Mater
10671067

10681068
gl_reflectionShaderMaterial->SetReliefMapping( pStage->enableReliefMapping );
10691069

1070-
material->program = gl_reflectionShaderMaterial->GetProgram( pStage->deformIndex );
1070+
material->program = gl_reflectionShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10711071
}
10721072

10731073
void ProcessMaterialSkybox( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ ) {
10741074
material->shader = gl_skyboxShaderMaterial;
10751075

10761076
material->deformIndex = pStage->deformIndex;
10771077

1078-
material->program = gl_skyboxShaderMaterial->GetProgram( pStage->deformIndex );
1078+
material->program = gl_skyboxShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10791079
}
10801080

10811081
void ProcessMaterialScreen( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ ) {
10821082
material->shader = gl_screenShaderMaterial;
10831083

10841084
material->deformIndex = pStage->deformIndex;
10851085

1086-
material->program = gl_screenShaderMaterial->GetProgram( pStage->deformIndex );
1086+
material->program = gl_screenShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10871087
}
10881088

10891089
void ProcessMaterialHeatHaze( Material* material, shaderStage_t* pStage, MaterialSurface* ) {
10901090
material->shader = gl_heatHazeShaderMaterial;
10911091

10921092
material->deformIndex = pStage->deformIndex;
10931093

1094-
material->program = gl_heatHazeShaderMaterial->GetProgram( pStage->deformIndex );
1094+
material->program = gl_heatHazeShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10951095
}
10961096

10971097
void ProcessMaterialLiquid( Material* material, shaderStage_t* pStage, MaterialSurface* surface ) {
@@ -1115,14 +1115,14 @@ void ProcessMaterialLiquid( Material* material, shaderStage_t* pStage, MaterialS
11151115

11161116
gl_liquidShaderMaterial->SetGridLighting( lightMode == lightMode_t::GRID );
11171117

1118-
material->program = gl_liquidShaderMaterial->GetProgram( pStage->deformIndex );
1118+
material->program = gl_liquidShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
11191119
}
11201120

11211121
void ProcessMaterialFog( Material* material, shaderStage_t* pStage, MaterialSurface* surface ) {
11221122
material->shader = gl_fogQuake3ShaderMaterial;
11231123
material->fog = surface->fog;
11241124

1125-
material->program = gl_fogQuake3ShaderMaterial->GetProgram( pStage->deformIndex );
1125+
material->program = gl_fogQuake3ShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
11261126
}
11271127

11281128
void MaterialSystem::AddStage( MaterialSurface* surface, shaderStage_t* pStage, uint32_t stage,
@@ -1742,6 +1742,8 @@ void MaterialSystem::Free() {
17421742
}
17431743
}
17441744

1745+
buildOneShader = true;
1746+
17451747
totalDrawSurfs = 0;
17461748

17471749
currentFrame = 0;

src/engine/renderer/Material.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,8 @@ class MaterialSystem {
339339
uint32_t totalPortals;
340340
std::vector<shader_t*> skyShaders;
341341

342+
bool buildOneShader = true;
343+
342344
std::vector<Material*> renderedMaterials;
343345

344346
/* MaterialPack is an abstraction to match a range of materials with the 3 different calls to RB_RenderDrawSurfaces()

src/engine/renderer/gl_shader.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2353,14 +2353,14 @@ void GLShader::MarkProgramForBuilding( int deformIndex ) {
23532353
shaderProgramsToBuild[index] = true;
23542354
}
23552355

2356-
GLuint GLShader::GetProgram( int deformIndex ) {
2356+
GLuint GLShader::GetProgram( int deformIndex, const bool buildOneShader ) {
23572357
int macroIndex = SelectProgram();
23582358
size_t index = macroIndex + ( size_t( deformIndex ) << _compileMacros.size() );
23592359

23602360
// program may not be loaded yet because the shader manager hasn't yet gotten to it
23612361
// so try to load it now
23622362
if ( index >= shaderPrograms.size() || !shaderPrograms[index].id ) {
2363-
gl_shaderManager.BuildPermutation( this, macroIndex, deformIndex, true );
2363+
gl_shaderManager.BuildPermutation( this, macroIndex, deformIndex, buildOneShader );
23642364
}
23652365

23662366
// program is still not loaded

src/engine/renderer/gl_shader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ class GLShader {
186186
int SelectProgram();
187187
public:
188188
void MarkProgramForBuilding( int deformIndex );
189-
GLuint GetProgram( int deformIndex );
189+
GLuint GetProgram( int deformIndex, const bool buildOneShader );
190190
void BindProgram( int deformIndex );
191191
void DispatchCompute( const GLuint globalWorkgroupX, const GLuint globalWorkgroupY, const GLuint globalWorkgroupZ );
192192
void DispatchComputeIndirect( const GLintptr indirectBuffer );

0 commit comments

Comments
 (0)