mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-20 18:01:16 +00:00
Merge branch 'shaderless-support-next' into 'next'
Backwards compatibility for shaderless hardware See merge request STJr/SRB2!1003
This commit is contained in:
commit
8063814f1c
5 changed files with 27 additions and 19 deletions
|
@ -250,7 +250,7 @@ void HWR_RenderBatches(void)
|
|||
|
||||
// sort polygons
|
||||
rs_hw_batchsorttime = I_GetTimeMicros();
|
||||
if (cv_grshaders.value) // TODO also have the shader availability check here when its done
|
||||
if (cv_grshaders.value && gr_shadersavailable)
|
||||
qsort(polygonIndexArray, polygonArraySize, sizeof(unsigned int), comparePolygons);
|
||||
else
|
||||
qsort(polygonIndexArray, polygonArraySize, sizeof(unsigned int), comparePolygonsNoShaders);
|
||||
|
@ -272,8 +272,8 @@ void HWR_RenderBatches(void)
|
|||
// and a color array could replace the color calls.
|
||||
|
||||
// set state for first batch
|
||||
|
||||
if (cv_grshaders.value) // TODO also have the shader availability check here when its done
|
||||
|
||||
if (cv_grshaders.value && gr_shadersavailable)
|
||||
{
|
||||
HWD.pfnSetShader(currentShader);
|
||||
}
|
||||
|
@ -355,7 +355,7 @@ void HWR_RenderBatches(void)
|
|||
nextSurfaceInfo = polygonArray[nextIndex].surf;
|
||||
if (nextPolyFlags & PF_NoTexture)
|
||||
nextTexture = 0;
|
||||
if (currentShader != nextShader)
|
||||
if (currentShader != nextShader && cv_grshaders.value && gr_shadersavailable)
|
||||
{
|
||||
changeState = true;
|
||||
changeShader = true;
|
||||
|
@ -370,7 +370,7 @@ void HWR_RenderBatches(void)
|
|||
changeState = true;
|
||||
changePolyFlags = true;
|
||||
}
|
||||
if (cv_grshaders.value) // TODO also have the shader availability check here when its done
|
||||
if (cv_grshaders.value && gr_shadersavailable)
|
||||
{
|
||||
if (currentSurfaceInfo.PolyColor.rgba != nextSurfaceInfo.PolyColor.rgba ||
|
||||
currentSurfaceInfo.TintColor.rgba != nextSurfaceInfo.TintColor.rgba ||
|
||||
|
|
|
@ -68,14 +68,14 @@ EXPORT void HWRAPI(DrawScreenFinalTexture) (int width, int height);
|
|||
EXPORT void HWRAPI(PostImgRedraw) (float points[SCREENVERTS][SCREENVERTS][2]);
|
||||
|
||||
// jimita
|
||||
EXPORT void HWRAPI(LoadShaders) (void);
|
||||
EXPORT boolean HWRAPI(LoadShaders) (void);
|
||||
EXPORT void HWRAPI(KillShaders) (void);
|
||||
EXPORT void HWRAPI(SetShader) (int shader);
|
||||
EXPORT void HWRAPI(UnSetShader) (void);
|
||||
|
||||
EXPORT void HWRAPI(SetShaderInfo) (hwdshaderinfo_t info, INT32 value);
|
||||
EXPORT void HWRAPI(LoadCustomShader) (int number, char *shader, size_t size, boolean fragment);
|
||||
EXPORT void HWRAPI(InitCustomShaders) (void);
|
||||
EXPORT boolean HWRAPI(InitCustomShaders) (void);
|
||||
|
||||
// ==========================================================================
|
||||
// HWR DRIVER OBJECT, FOR CLIENT PROGRAM
|
||||
|
|
|
@ -162,6 +162,8 @@ int rs_hw_numcolors = 0;
|
|||
int rs_hw_batchsorttime = 0;
|
||||
int rs_hw_batchdrawtime = 0;
|
||||
|
||||
boolean gr_shadersavailable = true;
|
||||
|
||||
|
||||
// ==========================================================================
|
||||
// Lighting
|
||||
|
@ -176,7 +178,7 @@ void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *col
|
|||
fade_color.rgba = (colormap != NULL) ? (UINT32)colormap->fadergba : GL_DEFAULTFOG;
|
||||
|
||||
// Crappy backup coloring if you can't do shaders
|
||||
if (!cv_grshaders.value)
|
||||
if (!cv_grshaders.value || !gr_shadersavailable)
|
||||
{
|
||||
// be careful, this may get negative for high lightlevel values.
|
||||
float tint_alpha, fade_alpha;
|
||||
|
@ -227,7 +229,7 @@ UINT8 HWR_FogBlockAlpha(INT32 light, extracolormap_t *colormap) // Let's see if
|
|||
|
||||
realcolor.rgba = (colormap != NULL) ? colormap->rgba : GL_DEFAULTMIX;
|
||||
|
||||
if (cv_grshaders.value)
|
||||
if (cv_grshaders.value && gr_shadersavailable)
|
||||
{
|
||||
surfcolor.s.alpha = (255 - light);
|
||||
}
|
||||
|
@ -5887,7 +5889,8 @@ void HWR_Startup(void)
|
|||
// read every custom shader
|
||||
for (i = 0; i < numwadfiles; i++)
|
||||
HWR_ReadShaders(i, (wadfiles[i]->type == RET_PK3));
|
||||
HWR_LoadShaders();
|
||||
if (!HWR_LoadShaders())
|
||||
gr_shadersavailable = false;
|
||||
}
|
||||
|
||||
if (rendermode == render_opengl)
|
||||
|
@ -6190,9 +6193,9 @@ static inline UINT16 HWR_CheckShader(UINT16 wadnum)
|
|||
return INT16_MAX;
|
||||
}
|
||||
|
||||
void HWR_LoadShaders(void)
|
||||
boolean HWR_LoadShaders(void)
|
||||
{
|
||||
HWD.pfnInitCustomShaders();
|
||||
return HWD.pfnInitCustomShaders();
|
||||
}
|
||||
|
||||
void HWR_ReadShaders(UINT16 wadnum, boolean PK3)
|
||||
|
|
|
@ -70,7 +70,7 @@ void HWR_Lighting(FSurfaceInfo *Surface, INT32 light_level, extracolormap_t *col
|
|||
UINT8 HWR_FogBlockAlpha(INT32 light, extracolormap_t *colormap); // Let's see if this can work
|
||||
|
||||
void HWR_ReadShaders(UINT16 wadnum, boolean PK3);
|
||||
void HWR_LoadShaders(void);
|
||||
boolean HWR_LoadShaders(void);
|
||||
|
||||
extern CV_PossibleValue_t granisotropicmode_cons_t[];
|
||||
|
||||
|
@ -124,4 +124,6 @@ extern int rs_hw_numcolors;
|
|||
extern int rs_hw_batchsorttime;
|
||||
extern int rs_hw_batchdrawtime;
|
||||
|
||||
extern boolean gr_shadersavailable;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -866,12 +866,14 @@ void SetupGLFunc4(void)
|
|||
}
|
||||
|
||||
// jimita
|
||||
EXPORT void HWRAPI(LoadShaders) (void)
|
||||
EXPORT boolean HWRAPI(LoadShaders) (void)
|
||||
{
|
||||
#ifdef GL_SHADERS
|
||||
GLuint gl_vertShader, gl_fragShader;
|
||||
GLint i, result;
|
||||
|
||||
if (!pglUseProgram) return false;
|
||||
|
||||
gl_customvertexshaders[0] = NULL;
|
||||
gl_customfragmentshaders[0] = NULL;
|
||||
|
||||
|
@ -993,6 +995,7 @@ EXPORT void HWRAPI(LoadShaders) (void)
|
|||
#undef GETUNI
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -1023,6 +1026,7 @@ EXPORT void HWRAPI(SetShaderInfo) (hwdshaderinfo_t info, INT32 value)
|
|||
EXPORT void HWRAPI(LoadCustomShader) (int number, char *shader, size_t size, boolean fragment)
|
||||
{
|
||||
#ifdef GL_SHADERS
|
||||
if (!pglUseProgram) return;
|
||||
if (number < 1 || number > MAXSHADERS)
|
||||
I_Error("LoadCustomShader(): cannot load shader %d (max %d)", number, MAXSHADERS);
|
||||
|
||||
|
@ -1046,11 +1050,11 @@ EXPORT void HWRAPI(LoadCustomShader) (int number, char *shader, size_t size, boo
|
|||
#endif
|
||||
}
|
||||
|
||||
EXPORT void HWRAPI(InitCustomShaders) (void)
|
||||
EXPORT boolean HWRAPI(InitCustomShaders) (void)
|
||||
{
|
||||
#ifdef GL_SHADERS
|
||||
KillShaders();
|
||||
LoadShaders();
|
||||
return LoadShaders();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1078,6 +1082,7 @@ EXPORT void HWRAPI(UnSetShader) (void)
|
|||
#ifdef GL_SHADERS
|
||||
gl_shadersenabled = false;
|
||||
gl_currentshaderprogram = 0;
|
||||
if (!pglUseProgram) return;
|
||||
pglUseProgram(0);
|
||||
#endif
|
||||
}
|
||||
|
@ -1868,7 +1873,7 @@ EXPORT void HWRAPI(SetTexture) (FTextureInfo *pTexInfo)
|
|||
static void *Shader_Load(FSurfaceInfo *Surface, GLRGBAFloat *poly, GLRGBAFloat *tint, GLRGBAFloat *fade)
|
||||
{
|
||||
#ifdef GL_SHADERS
|
||||
if (gl_shadersenabled)
|
||||
if (gl_shadersenabled && pglUseProgram)
|
||||
{
|
||||
gl_shaderprogram_t *shader = &gl_shaderprograms[gl_currentshaderprogram];
|
||||
if (shader->program)
|
||||
|
@ -1884,8 +1889,6 @@ static void *Shader_Load(FSurfaceInfo *Surface, GLRGBAFloat *poly, GLRGBAFloat *
|
|||
else
|
||||
pglUseProgram(0);
|
||||
}
|
||||
else
|
||||
pglUseProgram(0);
|
||||
#else
|
||||
(void)Surface;
|
||||
(void)poly;
|
||||
|
|
Loading…
Reference in a new issue