Fix lighting breaking if trying to use unavailable shaders

This commit is contained in:
Hannu Hanhi 2020-04-22 23:50:14 +03:00
parent ce1d017a73
commit 4e8349fccc
3 changed files with 9 additions and 5 deletions

View File

@ -66,7 +66,7 @@ EXPORT void HWRAPI(DrawScreenFinalTexture) (int width, int height);
EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]); EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]);
// jimita // jimita
EXPORT void HWRAPI(LoadShaders) (void); EXPORT boolean HWRAPI(LoadShaders) (void);
EXPORT void HWRAPI(KillShaders) (void); EXPORT void HWRAPI(KillShaders) (void);
EXPORT void HWRAPI(SetShader) (int shader); EXPORT void HWRAPI(SetShader) (int shader);
EXPORT void HWRAPI(UnSetShader) (void); EXPORT void HWRAPI(UnSetShader) (void);

View File

@ -119,6 +119,8 @@ static line_t *gr_linedef;
static sector_t *gr_frontsector; static sector_t *gr_frontsector;
static sector_t *gr_backsector; static sector_t *gr_backsector;
boolean gr_shadersavailable = true;
// ========================================================================== // ==========================================================================
// View position // View position
// ========================================================================== // ==========================================================================
@ -142,7 +144,7 @@ static INT32 drawcount = 0;
void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, UINT32 mixcolor, UINT32 fadecolor) void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, UINT32 mixcolor, UINT32 fadecolor)
{ {
if (!cv_grshaders.value || (cv_grshaders.value && !cv_grfog.value)) if (!cv_grshaders.value || (cv_grshaders.value && !cv_grfog.value) || !gr_shadersavailable)
{ {
RGBA_t mix_color, fog_color, final_color; RGBA_t mix_color, fog_color, final_color;
INT32 mix; INT32 mix;
@ -205,7 +207,7 @@ void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, UINT32 mixcolor, UIN
void HWR_NoColormapLighting(FSurfaceInfo *Surface, INT32 light_level, UINT32 mixcolor, UINT32 fadecolor) void HWR_NoColormapLighting(FSurfaceInfo *Surface, INT32 light_level, UINT32 mixcolor, UINT32 fadecolor)
{ {
if (!cv_grshaders.value || (cv_grshaders.value && !cv_grfog.value)) if (!cv_grshaders.value || (cv_grshaders.value && !cv_grfog.value) || !gr_shadersavailable)
{ {
RGBA_t mix_color, fog_color, final_color; RGBA_t mix_color, fog_color, final_color;
INT32 mix, fogmix, lightmix; INT32 mix, fogmix, lightmix;
@ -4947,7 +4949,8 @@ void HWR_Startup(void)
// jimita // jimita
HWD.pfnKillShaders(); HWD.pfnKillShaders();
HWD.pfnLoadShaders(); if (!HWD.pfnLoadShaders())
gr_shadersavailable = false;
} }

View File

@ -796,7 +796,7 @@ EXPORT void HWRAPI(LoadShaders) (void)
GLuint gl_vertShader, gl_fragShader; GLuint gl_vertShader, gl_fragShader;
GLint i, result; GLint i, result;
if (!pglUseProgram) return; if (!pglUseProgram) return false;
gl_customvertexshaders[0] = NULL; gl_customvertexshaders[0] = NULL;
gl_customfragmentshaders[0] = NULL; gl_customfragmentshaders[0] = NULL;
@ -904,6 +904,7 @@ EXPORT void HWRAPI(LoadShaders) (void)
#undef GETUNI #undef GETUNI
} }
#endif #endif
return true;
} }
EXPORT void HWRAPI(LoadCustomShader) (int number, char *shader, size_t size, boolean fragment) EXPORT void HWRAPI(LoadCustomShader) (int number, char *shader, size_t size, boolean fragment)