Skip to content

Commit aea7820

Browse files
committed
Fix glsl_restart with material system
1 parent efe9430 commit aea7820

File tree

4 files changed

+56
-37
lines changed

4 files changed

+56
-37
lines changed

src/engine/renderer/Material.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,6 +1876,42 @@ void MaterialSystem::GeneratePortalBoundingSpheres() {
18761876
portalSurfacesTmp.clear();
18771877
}
18781878

1879+
void MaterialSystem::InitGLBuffers() {
1880+
materialsUBO.GenBuffer();
1881+
texDataBuffer.GenBuffer();
1882+
lightMapDataUBO.GenBuffer();
1883+
1884+
surfaceDescriptorsSSBO.GenBuffer();
1885+
surfaceCommandsSSBO.GenBuffer();
1886+
culledCommandsBuffer.GenBuffer();
1887+
surfaceBatchesUBO.GenBuffer();
1888+
atomicCommandCountersBuffer.GenBuffer();
1889+
1890+
portalSurfacesSSBO.GenBuffer();
1891+
1892+
if ( r_materialDebug.Get() ) {
1893+
debugSSBO.GenBuffer();
1894+
}
1895+
}
1896+
1897+
void MaterialSystem::FreeGLBuffers() {
1898+
materialsUBO.DelBuffer();
1899+
texDataBuffer.DelBuffer();
1900+
lightMapDataUBO.DelBuffer();
1901+
1902+
surfaceDescriptorsSSBO.DelBuffer();
1903+
surfaceCommandsSSBO.DelBuffer();
1904+
culledCommandsBuffer.DelBuffer();
1905+
surfaceBatchesUBO.DelBuffer();
1906+
atomicCommandCountersBuffer.DelBuffer();
1907+
1908+
portalSurfacesSSBO.DelBuffer();
1909+
1910+
if ( r_materialDebug.Get() ) {
1911+
debugSSBO.DelBuffer();
1912+
}
1913+
}
1914+
18791915
void MaterialSystem::Free() {
18801916
generatedWorldCommandBuffer = false;
18811917

src/engine/renderer/Material.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@ class MaterialSystem {
332332

333333
void GenerateDepthImages( const int width, const int height, imageParams_t imageParms );
334334

335+
void InitGLBuffers();
336+
void FreeGLBuffers();
337+
335338
void AddStageTextures( drawSurf_t* drawSurf, const uint32_t stage, Material* material );
336339
void AddStage( drawSurf_t* drawSurf, shaderStage_t* pStage, uint32_t stage,
337340
const bool mayUseVertexOverbright, const bool vertexLit, const bool fullbright );

src/engine/renderer/tr_init.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,6 +1118,19 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p
11181118
stage->deformIndex = deformIndex;
11191119
}
11201120
}
1121+
1122+
if ( glConfig2.usingMaterialSystem ) {
1123+
/* GLSL shaders linked to materials will be invalidated by glsl_restart,
1124+
so regenerate all the material stuff here */
1125+
const uint8_t maxStages = materialSystem.maxStages;
1126+
materialSystem.Free();
1127+
materialSystem.FreeGLBuffers();
1128+
1129+
materialSystem.InitGLBuffers();
1130+
materialSystem.maxStages = maxStages;
1131+
1132+
materialSystem.GenerateWorldMaterials();
1133+
}
11211134
}
11221135
};
11231136
static GlslRestartCmd glslRestartCmdRegistration;

src/engine/renderer/tr_vbo.cpp

Lines changed: 4 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -726,27 +726,6 @@ static void R_InitLightUBO()
726726
glBindBuffer( GL_UNIFORM_BUFFER, 0 );
727727
}
728728
}
729-
730-
static void R_InitMaterialBuffers() {
731-
if( glConfig2.usingMaterialSystem ) {
732-
materialsUBO.GenBuffer();
733-
texDataBuffer.GenBuffer();
734-
lightMapDataUBO.GenBuffer();
735-
736-
surfaceDescriptorsSSBO.GenBuffer();
737-
surfaceCommandsSSBO.GenBuffer();
738-
culledCommandsBuffer.GenBuffer();
739-
surfaceBatchesUBO.GenBuffer();
740-
atomicCommandCountersBuffer.GenBuffer();
741-
742-
portalSurfacesSSBO.GenBuffer();
743-
744-
if ( r_materialDebug.Get() ) {
745-
debugSSBO.GenBuffer();
746-
}
747-
}
748-
}
749-
750729
/*
751730
============
752731
R_InitVBOs
@@ -790,7 +769,9 @@ void R_InitVBOs()
790769

791770
R_InitLightUBO();
792771

793-
R_InitMaterialBuffers();
772+
if ( glConfig2.usingMaterialSystem ) {
773+
materialSystem.InitGLBuffers();
774+
}
794775

795776
GL_CheckErrors();
796777
}
@@ -861,21 +842,7 @@ void R_ShutdownVBOs()
861842
}
862843

863844
if ( glConfig2.usingMaterialSystem ) {
864-
materialsUBO.DelBuffer();
865-
texDataBuffer.DelBuffer();
866-
lightMapDataUBO.DelBuffer();
867-
868-
surfaceDescriptorsSSBO.DelBuffer();
869-
surfaceCommandsSSBO.DelBuffer();
870-
culledCommandsBuffer.DelBuffer();
871-
surfaceBatchesUBO.DelBuffer();
872-
atomicCommandCountersBuffer.DelBuffer();
873-
874-
portalSurfacesSSBO.DelBuffer();
875-
876-
if ( r_materialDebug.Get() ) {
877-
debugSSBO.DelBuffer();
878-
}
845+
materialSystem.FreeGLBuffers();
879846
}
880847

881848
tess.verts = tess.vertsBuffer = nullptr;

0 commit comments

Comments
 (0)