From b2eb45f4e5a8dab908163115274fbe698b2411d8 Mon Sep 17 00:00:00 2001 From: Tyler Young Date: Fri, 13 Jan 2023 20:10:17 -0500 Subject: [PATCH 1/6] Fixed Skybox and laid groundwork for unified fog values on Vita/NX --- source/cl_parse.c | 2 +- source/gl_fog.c | 239 +++++++++++++++++++++++++++++++++++----------- source/gl_model.c | 2 +- source/gl_sky.c | 62 ++++++------ source/r_alias.c | 20 ++-- source/r_brush.c | 31 +++--- source/r_sprite.c | 4 + source/r_world.c | 52 +++++----- 8 files changed, 277 insertions(+), 135 deletions(-) diff --git a/source/cl_parse.c b/source/cl_parse.c index c720e07..5ebe148 100644 --- a/source/cl_parse.c +++ b/source/cl_parse.c @@ -76,7 +76,7 @@ const char *svc_strings[] = "svc_useprint", // 38 "", // 39 "svc_bf", // 40 // no data - "svc_fog", // 41 // [byte] density [byte] red [byte] green [byte] blue [float] time + "svc_fog", // 41 // [byte] start [byte] end [byte] red [byte] green [byte] blue [float] time "svc_spawnbaseline2", //42 // support for large modelindex, large framenum, alpha, using flags "svc_spawnstatic2", // 43 // support for large modelindex, large framenum, alpha, using flags "svc_spawnstaticsound2", // 44 // [coord3] [short] samp [byte] vol [byte] aten diff --git a/source/gl_fog.c b/source/gl_fog.c index eae38c5..58bb39b 100644 --- a/source/gl_fog.c +++ b/source/gl_fog.c @@ -21,6 +21,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ //gl_fog.c -- global and volumetric fog +//sB EDITED THIS AND GOT RID OF VOLUMETRIC FOG IN ORDER TO ADD CONSISTENCY TO NZP BUILDS. SWITCHED TO A START/END VALUE. + #include "quakedef.h" //============================================================================== @@ -29,17 +31,23 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // //============================================================================== -#define DEFAULT_DENSITY 0.0 +#define DEFAULT_DENSITY 1.0 #define DEFAULT_GRAY 0.3 -float fog_start; -float fog_end; +//extern refdef_t r_refdef; + +float density = 1.0; float fog_density_gl; -float fog_red; -float fog_green; -float fog_blue; + +float fog_start; +float fog_end; +float fog_red; +float fog_green; +float fog_blue; float old_density; +float old_start; +float old_end; float old_red; float old_green; float old_blue; @@ -54,7 +62,7 @@ Fog_Update update internal variables ============= */ -void Fog_Update (float density, float red, float green, float blue, float time) +void Fog_Update (float start, float end, float red, float green, float blue, float time) { //save previous settings for fade if (time > 0) @@ -65,26 +73,32 @@ void Fog_Update (float density, float red, float green, float blue, float time) float f; f = (fade_done - cl.time) / fade_time; - old_density = f * old_density + (1.0 - f) * fog_density_gl; + old_start = f * old_start + (1.0 - f) * fog_start; + old_end = f * old_end + (1.0 - f) * fog_end; old_red = f * old_red + (1.0 - f) * fog_red; old_green = f * old_green + (1.0 - f) * fog_green; old_blue = f * old_blue + (1.0 - f) * fog_blue; + old_density = f * old_density + (1.0 - f) * fog_density_gl; } else { - old_density = fog_density_gl; + old_start = fog_start; + old_end = fog_end; old_red = fog_red; old_green = fog_green; old_blue = fog_blue; + old_density = fog_density_gl; } } - fog_density_gl = density; + fog_start = start; + fog_end = end; fog_red = red; fog_green = green; fog_blue = blue; fade_time = time; fade_done = cl.time + time; + fog_density_gl = ((fog_start / fog_end))/3.5; } /* @@ -96,15 +110,16 @@ handle an SVC_FOG message from server */ void Fog_ParseServerMessage (void) { - float density, red, green, blue, time; + float start, end, red, green, blue, time; - density = MSG_ReadByte() / 255.0; + start = MSG_ReadByte() / 255.0; + end = MSG_ReadByte() / 255.0; red = MSG_ReadByte() / 255.0; green = MSG_ReadByte() / 255.0; blue = MSG_ReadByte() / 255.0; time = q_max(0.0, MSG_ReadShort() / 100.0); - Fog_Update (density, red, green, blue, time); + Fog_Update (start, end, red, green, blue, time); } /* @@ -121,49 +136,67 @@ void Fog_FogCommand_f (void) default: case 1: Con_Printf("usage:\n"); - Con_Printf(" fog \n"); + Con_Printf(" fog \n"); + Con_Printf(" fog \n"); Con_Printf(" fog \n"); - Con_Printf(" fog \n"); + Con_Printf(" fog \n"); + Con_Printf(" fog \n"); + Con_Printf(" fog \n"); Con_Printf("current values:\n"); - Con_Printf(" \"density\" is \"%f\"\n", fog_density_gl); + Con_Printf(" \"start\" is \"%f\"\n", fog_start); + Con_Printf(" \"end\" is \"%f\"\n", fog_end); Con_Printf(" \"red\" is \"%f\"\n", fog_red); Con_Printf(" \"green\" is \"%f\"\n", fog_green); Con_Printf(" \"blue\" is \"%f\"\n", fog_blue); + Con_Printf(" \"fade\" is \"%f\"\n", fade_time); break; - case 2: + case 2: //TEST + Fog_Update(fog_start, + fog_end, + fog_red, + fog_green, + fog_blue, + q_max(0.0, atof(Cmd_Argv(1)))); + break; + case 3: Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), + q_max(0.0, atof(Cmd_Argv(2))), fog_red, fog_green, fog_blue, 0.0); break; - case 3: //TEST - Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), - fog_red, - fog_green, - fog_blue, - atof(Cmd_Argv(2))); - break; case 4: - Fog_Update(fog_density_gl, - CLAMP(0.0, atof(Cmd_Argv(1)), 1.0), - CLAMP(0.0, atof(Cmd_Argv(2)), 1.0), - CLAMP(0.0, atof(Cmd_Argv(3)), 1.0), + Fog_Update(fog_start, + fog_end, + CLAMP(0.0, atof(Cmd_Argv(1)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(2)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(3)), 255.0), 0.0); break; - case 5: + case 5: //TEST + Fog_Update(fog_start, + fog_end, + CLAMP(0.0, atof(Cmd_Argv(1)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(2)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(3)), 255.0), + q_max(0.0, atof(Cmd_Argv(4)))); + break; + case 6: Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), - CLAMP(0.0, atof(Cmd_Argv(2)), 1.0), - CLAMP(0.0, atof(Cmd_Argv(3)), 1.0), - CLAMP(0.0, atof(Cmd_Argv(4)), 1.0), + q_max(0.0, atof(Cmd_Argv(2))), + CLAMP(0.0, atof(Cmd_Argv(3)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(4)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(5)), 255.0), 0.0); break; - case 6: //TEST + case 7: Fog_Update(q_max(0.0, atof(Cmd_Argv(1))), - CLAMP(0.0, atof(Cmd_Argv(2)), 1.0), - CLAMP(0.0, atof(Cmd_Argv(3)), 1.0), - CLAMP(0.0, atof(Cmd_Argv(4)), 1.0), - atof(Cmd_Argv(5))); + q_max(0.0, atof(Cmd_Argv(2))), + CLAMP(0.0, atof(Cmd_Argv(3)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(4)), 255.0), + CLAMP(0.0, atof(Cmd_Argv(5)), 255.0), + q_max(0.0, atof(Cmd_Argv(6)))); break; } } @@ -180,16 +213,22 @@ void Fog_ParseWorldspawn (void) char key[128], value[4096]; const char *data; - //initially no fog fog_density_gl = DEFAULT_DENSITY; - fog_red = DEFAULT_GRAY; - fog_green = DEFAULT_GRAY; - fog_blue = DEFAULT_GRAY; + //initially no fog + fog_start = 0; + old_start = 0; - old_density = DEFAULT_DENSITY; - old_red = DEFAULT_GRAY; - old_green = DEFAULT_GRAY; - old_blue = DEFAULT_GRAY; + fog_end = -1; + old_end = -1; + + fog_red = 0.0; + old_red = 0.0; + + fog_green = 0.0; + old_green = 0.0; + + fog_blue = 0.0; + old_blue = 0.0; fade_time = 0.0; fade_done = 0.0; @@ -222,7 +261,7 @@ void Fog_ParseWorldspawn (void) sscanf(value, "%f %f %f %f %f", &fog_start, &fog_end, &fog_red, &fog_green, &fog_blue); } - fog_density_gl = ((fog_end - fog_start))/6000; + fog_density_gl = ((fog_start / fog_end))/3.5; } } @@ -235,8 +274,8 @@ calculates fog color for this frame, taking into account fade times */ float *Fog_GetColor (void) { - static float c[4] = {0.3f, 0.3f, 0.3f, 1.0f}; -#ifndef VITA + static float c[4]; // = {0.1f, 0.1f, 0.1f, 1.0f} +//#ifndef VITA float f; int i; @@ -257,9 +296,9 @@ float *Fog_GetColor (void) } //find closest 24-bit RGB value, so solid-colored sky can match the fog perfectly - for (i=0;i<3;i++) - c[i] = (float)(Q_rint(c[i] * 255)) / 255.0f; -#endif + //for (i=0;i<3;i++) + //c[i] = (float)(Q_rint(c[i] * 255)) / 255.0f; +//#endif return c; } @@ -268,6 +307,7 @@ float *Fog_GetColor (void) Fog_GetDensity returns current density of fog + ============= */ float Fog_GetDensity (void) @@ -292,8 +332,81 @@ called at the beginning of each frame */ void Fog_SetupFrame (void) { + //glFogfv(GL_FOG_COLOR, Fog_GetColor()); + //glFogf(GL_FOG_DENSITY, Fog_GetDensity() / 64.0); + + /*float c[4]; + float f, s, e; + + if (fade_done > cl.time) + { + f = (fade_done - cl.time) / fade_time; + s = f * old_start + (1.0 - f) * fog_start; + e = f * old_end + (1.0 - f) * fog_end; + c[0] = f * old_red + (1.0 - f) * fog_red; + c[1] = f * old_green + (1.0 - f) * fog_green; + c[2] = f * old_blue + (1.0 - f) * fog_blue; + c[3] = 1.0; + //c[3] = r_skyfog.value; + } + else + { + s = fog_start; + e = fog_end; + c[0] = fog_red; + c[1] = fog_green; + c[2] = fog_blue; + c[3] = 1.0; + //c[3] = r_skyfog.value; + } + + if(e == 0) + e = -1;*/ + glFogfv(GL_FOG_COLOR, Fog_GetColor()); - glFogf(GL_FOG_DENSITY, Fog_GetDensity() / 64.0); + glFogf(GL_FOG_DENSITY, fog_density_gl); + //glFogf(GL_FOG_COLOR, *c); + + //if(s == 0 || e < 0) + //glDisable(GL_FOG); +} + +/* +============= +Fog_GetStart +returns current start of fog +============= +*/ +float Fog_GetStart (void) +{ + float f; + + if (fade_done > cl.time) + { + f = (fade_done - cl.time) / fade_time; + return f * old_start + (1.0 - f) * fog_start; + } + else + return fog_start; +} + +/* +============= +Fog_GetEnd +returns current end of fog +============= +*/ +float Fog_GetEnd (void) +{ + float f; + + if (fade_done > cl.time) + { + f = (fade_done - cl.time) / fade_time; + return f * old_start + (1.0 - f) * fog_end; + } + else + return fog_end; } /* @@ -305,7 +418,7 @@ called before drawing stuff that should be fogged */ void Fog_EnableGFog (void) { - if (Fog_GetDensity() > 0) + if (Fog_GetDensity() > 0 || !Fog_GetStart() == 0 || (!Fog_GetEnd()) <= 0) glEnable(GL_FOG); } @@ -318,7 +431,7 @@ called after drawing stuff that should be fogged */ void Fog_DisableGFog (void) { - if (Fog_GetDensity() > 0) + if (!Fog_GetStart() == 0 || (!Fog_GetEnd()) <= 0) glDisable(GL_FOG); } @@ -346,6 +459,8 @@ called after drawing stuff that is additive blended -- restores fog color */ void Fog_StopAdditive (void) { + vec3_t color = {0,0,0}; + if (Fog_GetDensity() > 0) glFogfv(GL_FOG_COLOR, Fog_GetColor()); } @@ -358,8 +473,8 @@ void Fog_StopAdditive (void) cvar_t r_vfog = {"r_vfog", "1", CVAR_NONE}; -void Fog_DrawVFog (void){} -void Fog_MarkModels (void){} +//void Fog_DrawVFog (void){} +//void Fog_MarkModels (void){} //============================================================================== // @@ -377,7 +492,7 @@ called whenever a map is loaded void Fog_NewMap (void) { Fog_ParseWorldspawn (); //for global fog - Fog_MarkModels (); //for volumetric fog + //Fog_MarkModels (); //for volumetric fog } /* @@ -394,10 +509,20 @@ void Fog_Init (void) //Cvar_RegisterVariable (&r_vfog); //set up global fog + /* fog_density_gl = DEFAULT_DENSITY; fog_red = DEFAULT_GRAY; fog_green = DEFAULT_GRAY; fog_blue = DEFAULT_GRAY; + */ + + fog_start = 0; + fog_end = -1; + fog_red = 0.5; + fog_green = 0.5; + fog_blue = 0.5; + fade_time = 1; + fog_density_gl = DEFAULT_DENSITY; Fog_SetupState (); } diff --git a/source/gl_model.c b/source/gl_model.c index 762571b..ed4d146 100644 --- a/source/gl_model.c +++ b/source/gl_model.c @@ -700,7 +700,7 @@ void Mod_LoadTextures (lump_t *l) } } strcpy(loading_name, mt->name); - //free (tx_pixels); + //free (pixels); loading_cur_step++; SCR_UpdateScreen(); //johnfitz diff --git a/source/gl_sky.c b/source/gl_sky.c index 7c9cf63..c24f0a0 100644 --- a/source/gl_sky.c +++ b/source/gl_sky.c @@ -717,7 +717,7 @@ void Sky_DrawSkyBox (void) rs_skypolys++; rs_skypasses++; - if (Fog_GetDensity() > 0 && skyfog > 0) + /*if (Fog_GetDensity() > 0 && skyfog > 0) { float *c; @@ -738,7 +738,7 @@ void Sky_DrawSkyBox (void) glDisable (GL_BLEND); rs_skypasses++; - } + }*/ } } @@ -835,7 +835,7 @@ void Sky_DrawFaceQuad (glpoly_t *p) { GL_Bind (solidskytexture); - if (r_skyalpha.value < 1.0) + //if (r_skyalpha.value < 1.0) glColor3f (1, 1, 1); glBegin (GL_QUADS); @@ -847,28 +847,28 @@ void Sky_DrawFaceQuad (glpoly_t *p) } glEnd (); - GL_Bind (alphaskytexture); - glEnable (GL_BLEND); + //GL_Bind (alphaskytexture); + //glEnable (GL_BLEND); - if (r_skyalpha.value < 1.0) - glColor4f (1, 1, 1, r_skyalpha.value); + //if (r_skyalpha.value < 1.0) + //glColor4f (1, 1, 1, r_skyalpha.value); - glBegin (GL_QUADS); - for (i=0, v=p->verts[0] ; i<4 ; i++, v+=VERTEXSIZE) - { - Sky_GetTexCoord (v, 16, &s, &t); - glTexCoord2f (s, t); - glVertex3fv (v); - } - glEnd (); + //glBegin (GL_QUADS); + //for (i=0, v=p->verts[0] ; i<4 ; i++, v+=VERTEXSIZE) + //{ + //Sky_GetTexCoord (v, 16, &s, &t); + //glTexCoord2f (s, t); + //glVertex3fv (v); + //} + //glEnd (); - glDisable (GL_BLEND); + //glDisable (GL_BLEND); rs_skypolys++; rs_skypasses += 2; } - if (Fog_GetDensity() > 0 && skyfog > 0) + /*if (Fog_GetDensity() > 0 && skyfog > 0) { float *c; @@ -887,7 +887,7 @@ void Sky_DrawFaceQuad (glpoly_t *p) glDisable (GL_BLEND); rs_skypasses++; - } + }*/ } /* @@ -959,15 +959,15 @@ void Sky_DrawSkyLayers (void) { int i; - if (r_skyalpha.value < 1.0) - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + //if (r_skyalpha.value < 1.0) + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); for (i=0 ; i<6 ; i++) if (skymins[0][i] < skymaxs[0][i] && skymins[1][i] < skymaxs[1][i]) Sky_DrawFace (i); - if (r_skyalpha.value < 1.0) - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + //if (r_skyalpha.value < 1.0) + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); } /* @@ -999,10 +999,12 @@ void Sky_DrawSky (void) // Fog_DisableGFog (); glDisable (GL_TEXTURE_2D); - if (Fog_GetDensity() > 0) + /*if (Fog_GetDensity() > 0) glColor3fv (Fog_GetColor()); - else - glColor3fv (skyflatcolor); + else*/ + //glColor3fv (skyflatcolor); + + //glColor3fv (Fog_GetColor()); Sky_ProcessTextureChains (); Sky_ProcessEntities (); glColor3f (1, 1, 1); @@ -1011,7 +1013,7 @@ void Sky_DrawSky (void) // // render slow sky: cloud layers or skybox // - if (!r_fastsky.value && !(Fog_GetDensity() > 0 && skyfog >= 1)) + /*if (!r_fastsky.value && !(Fog_GetDensity() > 0)) { glDepthFunc(GL_GEQUAL); glDepthMask(0); @@ -1023,7 +1025,11 @@ void Sky_DrawSky (void) glDepthMask(1); glDepthFunc(GL_LEQUAL); - } - + }*/ + glDepthFunc(GL_GEQUAL); + glDepthMask(0); + Sky_DrawSkyBox (); + glDepthMask(1); + glDepthFunc(GL_LEQUAL); Fog_EnableGFog (); } diff --git a/source/r_alias.c b/source/r_alias.c index 319056e..ffae52a 100644 --- a/source/r_alias.c +++ b/source/r_alias.c @@ -1191,9 +1191,9 @@ void R_DrawAliasModel (entity_t *e) glBlendFunc (GL_ONE, GL_ONE); glDepthMask(GL_FALSE); glColor3f(entalpha,entalpha,entalpha); - Fog_StartAdditive (); + //Fog_StartAdditive (); GL_DrawAliasFrame (paliashdr, lerpdata); - Fog_StopAdditive (); + //Fog_StopAdditive (); glDepthMask(GL_TRUE); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_BLEND); @@ -1254,9 +1254,9 @@ void R_DrawAliasModel (entity_t *e) glDepthMask(GL_FALSE); shading = false; glColor3f(entalpha,entalpha,entalpha); - Fog_StartAdditive (); + //Fog_StartAdditive (); GL_DrawAliasFrame (paliashdr, lerpdata); - Fog_StopAdditive (); + //Fog_StopAdditive (); glDepthMask(GL_TRUE); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_BLEND); @@ -1273,9 +1273,9 @@ void R_DrawAliasModel (entity_t *e) glEnable(GL_BLEND); glBlendFunc (GL_ONE, GL_ONE); glDepthMask(GL_FALSE); - Fog_StartAdditive (); + //Fog_StartAdditive (); GL_DrawAliasFrame (paliashdr, lerpdata); - Fog_StopAdditive (); + //Fog_StopAdditive (); glDepthMask(GL_TRUE); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -1290,9 +1290,9 @@ void R_DrawAliasModel (entity_t *e) glDepthMask(GL_FALSE); shading = false; glColor3f(entalpha,entalpha,entalpha); - Fog_StartAdditive (); + //Fog_StartAdditive (); GL_DrawAliasFrame (paliashdr, lerpdata); - Fog_StopAdditive (); + //Fog_StopAdditive (); glDepthMask(GL_TRUE); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_BLEND); @@ -1331,9 +1331,9 @@ void R_DrawAliasModel (entity_t *e) glDepthMask(GL_FALSE); shading = false; glColor3f(entalpha,entalpha,entalpha); - Fog_StartAdditive (); + //Fog_StartAdditive (); GL_DrawAliasFrame (paliashdr, lerpdata); - Fog_StopAdditive (); + //Fog_StopAdditive (); glDepthMask(GL_TRUE); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_BLEND); diff --git a/source/r_brush.c b/source/r_brush.c index 441b576..d98f52a 100644 --- a/source/r_brush.c +++ b/source/r_brush.c @@ -373,7 +373,7 @@ void R_DrawSequentialPoly (msurface_t *s) Fog_DisableGFog (); GL_Bind (t->gltexture); DrawGLPoly (s->polys); - Fog_EnableGFog (); + // rs_brushpasses++; //second pass -- lightmap with black fog, modulate blended @@ -382,7 +382,7 @@ void R_DrawSequentialPoly (msurface_t *s) glDepthMask (GL_FALSE); glEnable (GL_BLEND); glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR); //2x modulate - Fog_StartAdditive (); + //Fog_StartAdditive (); #ifdef VITA glBegin(GL_TRIANGLE_FAN); #else @@ -395,11 +395,11 @@ void R_DrawSequentialPoly (msurface_t *s) glVertex3fv (v); } glEnd (); - Fog_StopAdditive (); + //Fog_StopAdditive (); rs_brushpasses++; //third pass -- black geo with normal fog, additive blended - if (Fog_GetDensity() > 0) + /*if (Fog_GetDensity() > 0) { glBlendFunc(GL_ONE, GL_ONE); //add glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -408,17 +408,19 @@ void R_DrawSequentialPoly (msurface_t *s) glColor3f(1,1,1); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); rs_brushpasses++; - } + }*/ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_BLEND); glDepthMask (GL_TRUE); + Fog_EnableGFog (); } } else { if (gl_mtexable) //case 4: texture and lightmap in one pass, regular modulation { + Fog_DisableGFog (); GL_DisableMultitexture(); // selects TEXTURE0 GL_Bind (t->gltexture); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -441,12 +443,15 @@ void R_DrawSequentialPoly (msurface_t *s) glEnd (); GL_DisableMultitexture (); rs_brushpasses++; + Fog_EnableGFog (); } else if (entalpha < 1 || (s->flags & SURF_DRAWFENCE)) //case 5: can't do multipass if entity has alpha, so just draw the texture { + Fog_DisableGFog (); GL_Bind (t->gltexture); DrawGLPoly (s->polys); rs_brushpasses++; + Fog_EnableGFog (); } else //case 6: texture in one pass, lightmap in a second pass, fog in third pass { @@ -454,7 +459,7 @@ void R_DrawSequentialPoly (msurface_t *s) Fog_DisableGFog (); GL_Bind (t->gltexture); DrawGLPoly (s->polys); - Fog_EnableGFog (); + // rs_brushpasses++; //second pass -- lightmap with black fog, modulate blended @@ -463,7 +468,7 @@ void R_DrawSequentialPoly (msurface_t *s) glDepthMask (GL_FALSE); glEnable (GL_BLEND); glBlendFunc (GL_ZERO, GL_SRC_COLOR); //modulate - Fog_StartAdditive (); + //Fog_StartAdditive (); #ifdef VITA glBegin(GL_TRIANGLE_FAN); #else @@ -476,11 +481,11 @@ void R_DrawSequentialPoly (msurface_t *s) glVertex3fv (v); } glEnd (); - Fog_StopAdditive (); + //Fog_StopAdditive (); rs_brushpasses++; //third pass -- black geo with normal fog, additive blended - if (Fog_GetDensity() > 0) + /*if (Fog_GetDensity() > 0) { glBlendFunc(GL_ONE, GL_ONE); //add glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -489,11 +494,13 @@ void R_DrawSequentialPoly (msurface_t *s) glColor3f(1,1,1); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); rs_brushpasses++; - } + }*/ glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_BLEND); glDepthMask (GL_TRUE); + + Fog_EnableGFog (); } } @@ -517,9 +524,9 @@ fullbrights: glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor3f (entalpha, entalpha, entalpha); GL_Bind (t->fullbright); - Fog_StartAdditive (); + //Fog_StartAdditive (); DrawGLPoly (s->polys); - Fog_StopAdditive (); + //Fog_StopAdditive (); glColor3f(1, 1, 1); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); diff --git a/source/r_sprite.c b/source/r_sprite.c index 6765e97..e2b2d53 100644 --- a/source/r_sprite.c +++ b/source/r_sprite.c @@ -139,6 +139,8 @@ void R_DrawSpriteModel (entity_t *e) default: return; } + + Fog_DisableGFog (); //johnfitz: offset decals if (psprite->type == SPR_ORIENTED) @@ -179,4 +181,6 @@ void R_DrawSpriteModel (entity_t *e) //johnfitz: offset decals if (psprite->type == SPR_ORIENTED) GL_PolygonOffset (OFFSET_NONE); + + Fog_EnableGFog (); } diff --git a/source/r_world.c b/source/r_world.c index 6d2fe69..2bc3ddc 100644 --- a/source/r_world.c +++ b/source/r_world.c @@ -1197,24 +1197,24 @@ void R_DrawTextureChains (qmodel_t *model, entity_t *ent, texchain_t chain) //to make fog work with multipass lightmapping, need to do one pass //with no fog, one modulate pass with black fog, and one additive //pass with black geometry and normal fog - Fog_DisableGFog (); + //Fog_DisableGFog (); R_DrawTextureChains_TextureOnly (model, ent, chain); - Fog_EnableGFog (); + //Fog_EnableGFog (); glDepthMask (GL_FALSE); glEnable (GL_BLEND); glBlendFunc (GL_DST_COLOR, GL_SRC_COLOR); //2x modulate - Fog_StartAdditive (); + //Fog_StartAdditive (); R_DrawLightmapChains (); - Fog_StopAdditive (); - if (Fog_GetDensity() > 0) - { - glBlendFunc(GL_ONE, GL_ONE); //add - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glColor3f(0,0,0); + //Fog_StopAdditive (); + //if (Fog_GetDensity() > 0) + //{ + //glBlendFunc(GL_ONE, GL_ONE); //add + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + //glColor3f(0,0,0); R_DrawTextureChains_TextureOnly (model, ent, chain); - glColor3f(1,1,1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - } + //glColor3f(1,1,1); + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + //} glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_BLEND); glDepthMask (GL_TRUE); @@ -1239,24 +1239,24 @@ void R_DrawTextureChains (qmodel_t *model, entity_t *ent, texchain_t chain) //to make fog work with multipass lightmapping, need to do one pass //with no fog, one modulate pass with black fog, and one additive //pass with black geometry and normal fog - Fog_DisableGFog (); + //Fog_DisableGFog (); R_DrawTextureChains_TextureOnly (model, ent, chain); - Fog_EnableGFog (); + //Fog_EnableGFog (); glDepthMask (GL_FALSE); glEnable (GL_BLEND); glBlendFunc(GL_ZERO, GL_SRC_COLOR); //modulate - Fog_StartAdditive (); + //Fog_StartAdditive (); R_DrawLightmapChains (); - Fog_StopAdditive (); - if (Fog_GetDensity() > 0) - { - glBlendFunc(GL_ONE, GL_ONE); //add - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glColor3f(0,0,0); + //Fog_StopAdditive (); + //if (Fog_GetDensity() > 0) + //{ + //glBlendFunc(GL_ONE, GL_ONE); //add + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + //glColor3f(0,0,0); R_DrawTextureChains_TextureOnly (model, ent, chain); - glColor3f(1,1,1); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - } + //glColor3f(1,1,1); + //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + //} glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_BLEND); glDepthMask (GL_TRUE); @@ -1273,9 +1273,9 @@ fullbrights: glBlendFunc (GL_ONE, GL_ONE); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glColor3f (entalpha, entalpha, entalpha); - Fog_StartAdditive (); + //Fog_StartAdditive (); R_DrawTextureChains_Glow (model, ent, chain); - Fog_StopAdditive (); + //Fog_StopAdditive (); glColor3f (1, 1, 1); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); From cc76d04b841c442f22288ed174419988b01e289e Mon Sep 17 00:00:00 2001 From: Tyler Young Date: Fri, 13 Jan 2023 20:59:19 -0500 Subject: [PATCH 2/6] Attempting to fix console background on switch Plus add buffers --- source/gl_draw.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/source/gl_draw.c b/source/gl_draw.c index 275fa24..c54f18b 100644 --- a/source/gl_draw.c +++ b/source/gl_draw.c @@ -868,9 +868,13 @@ void Draw_ConsoleBackground (void) //pic->width = vid.conwidth; //pic->height = vid.conheight; - alpha = (con_forcedup) ? 1.0 : scr_conalpha.value; + #ifdef VITA + alpha = (con_forcedup) ? 1.0 : scr_conalpha.value; + #else + alpha = 1.0; + #endif - GL_SetCanvas (CANVAS_CONSOLE); //in case this is called from weird places + //GL_SetCanvas (CANVAS_CONSOLE); //in case this is called from weird places if (alpha > 0.0) { @@ -1232,6 +1236,11 @@ gltexture_t *loadtextureimage (char* filename) int w, h; data = Image_LoadImage (filename, &w, &h); + if(data == NULL) + { + Sys_Error("loadtextureimage: Cannot load the image %s\n", filename); + return 0; + } gl.gltexture = TexMgr_LoadImage (NULL, filename, w, h, SRC_RGBA, data, filename, sizeof(int)*2, TEXPREF_ALPHA | TEXPREF_NEAREST | TEXPREF_NOPICMIP); From 3646b8f4214e2fdfbc63ec265a4ea9cce1db4a76 Mon Sep 17 00:00:00 2001 From: Tyler Young Date: Fri, 13 Jan 2023 21:29:39 -0500 Subject: [PATCH 3/6] Update gl_draw.c --- source/gl_draw.c | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/source/gl_draw.c b/source/gl_draw.c index c54f18b..c11dacb 100644 --- a/source/gl_draw.c +++ b/source/gl_draw.c @@ -862,41 +862,10 @@ Draw_ConsoleBackground -- johnfitz -- rewritten */ void Draw_ConsoleBackground (void) { - float alpha; - - //pic = Draw_CachePic ("gfx/conback.lmp"); - //pic->width = vid.conwidth; - //pic->height = vid.conheight; - - #ifdef VITA - alpha = (con_forcedup) ? 1.0 : scr_conalpha.value; - #else - alpha = 1.0; - #endif //GL_SetCanvas (CANVAS_CONSOLE); //in case this is called from weird places - if (alpha > 0.0) - { - if (alpha < 1.0) - { - glEnable (GL_BLEND); - glColor4f (1,1,1,alpha); - glDisable (GL_ALPHA_TEST); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - - Draw_FillByColor (0, 0, vid.conwidth, vid.conheight, 0, 0, 0, alpha); - - - if (alpha < 1.0) - { - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - glEnable(GL_ALPHA_TEST); - glDisable (GL_BLEND); - glColor4f (1,1,1,1); - } - } + Draw_FillByColor (0, 0, vid.conwidth, vid.conheight, 0, 0, 0, 1); } /* From 98e4595d0e25ac077ca8fc2fc6600b79b2f085db Mon Sep 17 00:00:00 2001 From: Tyler Young Date: Sat, 14 Jan 2023 13:56:37 -0500 Subject: [PATCH 4/6] Add support for replacing missing models Replaces with missing_model.mdl. --- source/console.c | 4 +++- source/gl_model.c | 10 ++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/source/console.c b/source/console.c index add7243..4645149 100644 --- a/source/console.c +++ b/source/console.c @@ -1203,9 +1203,11 @@ void Con_DrawConsole (int lines, qboolean drawinput) GL_SetCanvas (CANVAS_CONSOLE); // draw the background - Draw_ConsoleBackground (); + if (!console_enabled && !developer.value) return; + + Draw_ConsoleBackground (); // draw the buffer text rows = (con_vislines +7)/8; diff --git a/source/gl_model.c b/source/gl_model.c index ed4d146..5eb18ef 100644 --- a/source/gl_model.c +++ b/source/gl_model.c @@ -334,9 +334,11 @@ qmodel_t *Mod_LoadModel (qmodel_t *mod, qboolean crash) buf = COM_LoadStackFile (mod->name, stackbuf, sizeof(stackbuf), & mod->path_id); if (!buf) { - if (crash) - Host_Error ("Mod_LoadModel: %s not found", mod->name); //johnfitz -- was "Mod_NumForName" - return NULL; + buf = (unsigned*)COM_LoadStackFile ("models/missing_model.mdl", stackbuf, sizeof(stackbuf), NULL); + if (buf){ + Con_Printf ("Missing model %s substituted\n", mod->name); + } + return mod; } // @@ -382,7 +384,7 @@ Loads in a model for the given name qmodel_t *Mod_ForName (const char *name, qboolean crash) { qmodel_t *mod; - + mod = Mod_FindName (name); return Mod_LoadModel (mod, crash); From 9ff92c413bfc01299f638dba8111b5b17e92f71f Mon Sep 17 00:00:00 2001 From: Tyler Young Date: Sat, 14 Jan 2023 14:12:59 -0500 Subject: [PATCH 5/6] Fix exit text to reflect correct platform --- source/menu.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/menu.c b/source/menu.c index 61343f0..64d0a99 100644 --- a/source/menu.c +++ b/source/menu.c @@ -580,7 +580,13 @@ void M_Main_Draw (void) case 1: Draw_ColoredStringScale(10, y + 305, "Adjust your Settings to Optimize your Experience.", 1, 1, 1, 1, 1.5f); break; //case 2: Draw_ColoredStringScale(10, y + 305, "View locked or unlocked Achievements.", 1, 1, 1, 1, 1.5f); break; case 2: Draw_ColoredStringScale(10, y + 305, "See who made NZ:P possible.", 1, 1, 1, 1, 1.5f); break; - case 3: Draw_ColoredStringScale(10, y + 305, "Return to Horizon (SwitchOS).", 1, 1, 1, 1, 1.5f); break; + case 3: + #ifdef NX + Draw_ColoredStringScale(10, y + 305, "Return to Horizon (SwitchOS).", 1, 1, 1, 1, 1.5f); + #else + Draw_ColoredStringScale(10, y + 305, "Return to Vita Homescreen.", 1, 1, 1, 1, 1.5f); + #endif + break; default: break; } } From 9a6054865e7695a2e43f087f5b37da7968000b7d Mon Sep 17 00:00:00 2001 From: Tyler Young Date: Sat, 14 Jan 2023 15:18:32 -0500 Subject: [PATCH 6/6] Allow user to close pause menu with back key. --- source/menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/menu.c b/source/menu.c index 64d0a99..29549de 100644 --- a/source/menu.c +++ b/source/menu.c @@ -411,13 +411,13 @@ void M_Paused_Menu_Key (int key) { switch (key) { - /*case K_BBUTTON: + case K_BBUTTON: case K_ESCAPE: paused_hack = false; key_dest = key_game; m_state = m_none; break; -*/ + case K_DOWNARROW: S_LocalSound ("sounds/menu/navigate.wav"); if (++M_Paused_Cusor >= Max_Paused_Items)