diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index d8604cc632..d2329c77fb 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -2830,7 +2830,7 @@ static void RB_RenderPostProcess() static void SetFrameUniforms() { // This can happen with glsl_restart/vid_restart in R_SyncRenderThread() - if ( !stagingBuffer.Active() ) { + if ( !stagingBuffer.Active() || globalUBOProxy == nullptr ) { return; } diff --git a/src/engine/renderer/tr_shade.cpp b/src/engine/renderer/tr_shade.cpp index b2c95800e5..b40416751c 100644 --- a/src/engine/renderer/tr_shade.cpp +++ b/src/engine/renderer/tr_shade.cpp @@ -198,7 +198,7 @@ static void EnableAvailableFeatures() glConfig.usingGeometryCache = glConfig.usingMaterialSystem && glConfig.geometryCacheAvailable; } -// For shaders that require map data for compile-time values +// For shaders that require map data for compile-time values void GLSL_InitWorldShaders() { // make sure the render thread is stopped R_SyncRenderThread(); @@ -256,11 +256,6 @@ static void GLSL_InitGPUShadersOrError() gl_depthReductionShader->MarkProgramForBuilding(); } - if ( tr.world ) // this only happens with /glsl_restart - { - GLSL_InitWorldShaders(); - } - if ( glConfig.realtimeLighting ) { gl_shaderManager.LoadShader( gl_depthtile1Shader ); @@ -331,7 +326,7 @@ static void GLSL_InitGPUShadersOrError() gl_contrastShader->MarkProgramForBuilding(); } - + // portal process effect gl_shaderManager.LoadShader( gl_portalShader ); @@ -384,6 +379,12 @@ static void GLSL_InitGPUShadersOrError() gl_shaderManager.PostProcessGlobalUniforms(); gl_shaderManager.InitShaders(); + // Init world shaders last so that everyhthing is already initialized. + if ( tr.world ) // this only happens with /glsl_restart + { + GLSL_InitWorldShaders(); + } + if ( r_lazyShaders.Get() == 0 ) { gl_shaderManager.BuildAll( false ); @@ -1447,7 +1448,7 @@ void Render_heatHaze( shaderStage_t *pStage ) // bind u_NormalMap gl_heatHazeShader->SetUniform_NormalMapBindless( - GL_BindToTMU( 0, pStage->bundle[TB_NORMALMAP].image[0] ) + GL_BindToTMU( 0, pStage->bundle[TB_NORMALMAP].image[0] ) ); if ( pStage->enableNormalMapping ) @@ -1463,7 +1464,7 @@ void Render_heatHaze( shaderStage_t *pStage ) // bind u_CurrentMap gl_heatHazeShader->SetUniform_CurrentMapBindless( - GL_BindToTMU( 1, tr.currentRenderImage[backEnd.currentMainFBO] ) + GL_BindToTMU( 1, tr.currentRenderImage[backEnd.currentMainFBO] ) ); gl_heatHazeShader->SetRequiredVertexPointers(); @@ -1473,7 +1474,7 @@ void Render_heatHaze( shaderStage_t *pStage ) // copy to foreground image R_BindFBO( tr.mainFBO[ backEnd.currentMainFBO ] ); gl_heatHazeShader->SetUniform_CurrentMapBindless( - GL_BindToTMU( 1, tr.currentRenderImage[1 - backEnd.currentMainFBO] ) + GL_BindToTMU( 1, tr.currentRenderImage[1 - backEnd.currentMainFBO] ) ); gl_heatHazeShader->SetUniform_DeformMagnitude( 0.0f ); Tess_DrawElements();