Behold, the great state audit, and a few other things.

First off, a cleanup in alias model rendering.
Then we have R_CullBox, which is now a inline function.
Then the big one, the state change cleanup, right now GL_BLEND.
This commit is contained in:
Zephaniah E. Hull 2000-09-26 09:03:21 +00:00
parent b0fc35b3e3
commit 68a4e60eaf
11 changed files with 43 additions and 54 deletions

View file

@ -297,9 +297,20 @@ void GL_Set2D (void);
// gl_rmain.c // gl_rmain.c
// //
void GL_CheckGamma (unsigned char *pal); void GL_CheckGamma (unsigned char *pal);
qboolean R_CullBox (vec3_t mins, vec3_t maxs); //qboolean R_CullBox (vec3_t mins, vec3_t maxs);
void R_RotateForEntity (entity_t *e); void R_RotateForEntity (entity_t *e);
extern inline qboolean R_CullBox (vec3_t mins, vec3_t maxs)
{
int i;
for (i=0 ; i<4 ; i++)
if (BoxOnPlaneSide (mins, maxs, &frustum[i]) == 2)
return true;
return false;
}
// //
// gl_rlight.c // gl_rlight.c
// //

View file

@ -30,7 +30,7 @@
/* Version strings */ /* Version strings */
#define PACKAGE "quakeforge" #define PACKAGE "quakeforge"
#define PROGRAM "QuakeForge" #define PROGRAM "QuakeForge"
#define VERSION "0.2.99beta1" #define VERSION "0.1.99pre2"
#define QW_VERSION "2.40" #define QW_VERSION "2.40"
#define QSG_VERSION "2.0" #define QSG_VERSION "2.0"

View file

@ -57,7 +57,7 @@ mtriangle_t triangles[MAXALIASTRIS];
// a pose is a single set of vertexes. a frame may be // a pose is a single set of vertexes. a frame may be
// an animating sequence of poses // an animating sequence of poses
trivertx_t *poseverts[MAXALIASFRAMES]; trivertx_t *poseverts[MAXALIASFRAMES];
int posenum; extern int posenum;
byte player_8bit_texels[320*200]; byte player_8bit_texels[320*200];

View file

@ -566,8 +566,9 @@ void R_DrawParticles (void)
} }
// hack a scale up to keep particles from disapearing // hack a scale up to keep particles from disapearing
scale = (p->org[0] - r_origin[0])*vpn[0] + (p->org[1] - r_origin[1])*vpn[1] scale = (p->org[0] - r_origin[0])*vpn[0] +
+ (p->org[2] - r_origin[2])*vpn[2]; (p->org[1] - r_origin[1])*vpn[1] +
(p->org[2] - r_origin[2])*vpn[2];
if (scale < 20) if (scale < 20)
scale = 1; scale = 1;
else else
@ -575,17 +576,12 @@ void R_DrawParticles (void)
at = (byte *)&d_8to24table[(int)p->color]; at = (byte *)&d_8to24table[(int)p->color];
if (p->type==pt_fire) if (p->type==pt_fire)
theAlpha = 255*(6-p->ramp)/6; theAlpha = 255*(6-p->ramp)/6;
// theAlpha = 192;
// else if (p->type==pt_explode || p->type==pt_explode2)
// theAlpha = 255*(8-p->ramp)/8;
else else
theAlpha = 255; theAlpha = 255;
if (lighthalf) if (lighthalf)
glColor4ub((byte) ((int) at[0] >> 1), (byte) ((int) at[1] >> 1), (byte) ((int) at[2] >> 1), theAlpha); glColor4ub((byte) ((int) at[0] >> 1), (byte) ((int) at[1] >> 1), (byte) ((int) at[2] >> 1), theAlpha);
else else
glColor4ub(at[0], at[1], at[2], theAlpha); glColor4ub(at[0], at[1], at[2], theAlpha);
// glColor3ubv (at);
// glColor3ubv ((byte *)&d_8to24table[(int)p->color]);
glTexCoord2f (0,0); glTexCoord2f (0,0);
glVertex3fv (p->org); glVertex3fv (p->org);
glTexCoord2f (1,0); glTexCoord2f (1,0);

View file

@ -186,6 +186,7 @@ R_CullBox
Returns true if the box is completely outside the frustom Returns true if the box is completely outside the frustom
================= =================
*/ */
/*
qboolean R_CullBox (vec3_t mins, vec3_t maxs) qboolean R_CullBox (vec3_t mins, vec3_t maxs)
{ {
int i; int i;
@ -195,6 +196,7 @@ qboolean R_CullBox (vec3_t mins, vec3_t maxs)
return true; return true;
return false; return false;
} }
*/
void R_RotateForEntity (entity_t *e) void R_RotateForEntity (entity_t *e)
@ -308,9 +310,6 @@ static void R_DrawSpriteModel (entity_t *e)
glEnable (GL_ALPHA_TEST); glEnable (GL_ALPHA_TEST);
glBegin (GL_QUADS); glBegin (GL_QUADS);
glEnable (GL_ALPHA_TEST);
glBegin (GL_QUADS);
glTexCoord2f (0, 1); glTexCoord2f (0, 1);
VectorMA (e->origin, frame->down, up, point); VectorMA (e->origin, frame->down, up, point);
VectorMA (point, frame->left, right, point); VectorMA (point, frame->left, right, point);
@ -352,7 +351,7 @@ float r_avertexnormals[NUMVERTEXNORMALS][3] = {
}; };
vec3_t shadevector; vec3_t shadevector;
float shadelight, ambientlight; float shadelight;
// precalculated dot products for quantized angles // precalculated dot products for quantized angles
#define SHADEDOT_QUANT 16 #define SHADEDOT_QUANT 16
@ -565,11 +564,11 @@ static void R_DrawAliasModel (entity_t *e)
// get lighting information // get lighting information
// //
ambientlight = shadelight = R_LightPoint (currententity->origin); shadelight = R_LightPoint (currententity->origin);
// allways give the gun some light // allways give the gun some light
if (e == &cl.viewent && ambientlight < 24) if (e == &cl.viewent)
ambientlight = shadelight = 24; shadelight = min(shadelight, 24);
for (lnum=0 ; lnum<MAX_DLIGHTS ; lnum++) for (lnum=0 ; lnum<MAX_DLIGHTS ; lnum++)
{ {
@ -582,33 +581,27 @@ static void R_DrawAliasModel (entity_t *e)
if (add > 0) if (add > 0)
{ {
ambientlight += add;
//ZOID models should be affected by dlights as well
shadelight += add; shadelight += add;
} }
} }
} }
// clamp lighting so it doesn't overbright as much // clamp lighting so it doesn't overbright as much
if (ambientlight > 128) shadelight = min(shadelight, 100);
ambientlight = 128;
if (ambientlight + shadelight > 192)
shadelight = 192 - ambientlight;
// ZOID: never allow players to go totally black // ZOID: never allow players to go totally black
if (!strcmp(clmodel->name, "progs/player.mdl")) if (!strcmp(clmodel->name, "progs/player.mdl"))
{ {
if (ambientlight < 8) shadelight = max(shadelight, 8);
ambientlight = shadelight = 8;
} else if (!gl_fb_models->value && ( } else if (!gl_fb_models->value && (
!strcmp (clmodel->name, "progs/flame.mdl") || !strcmp (clmodel->name, "progs/flame.mdl") ||
!strcmp (clmodel->name, "progs/flame2.mdl"))) { !strcmp (clmodel->name, "progs/flame2.mdl"))) {
// HACK HACK HACK -- no fullbright colors, so make torches full light // HACK HACK HACK -- no fullbright colors, so make torches full light
ambientlight = shadelight = 256; shadelight = 256;
} }
shadedots = r_avertexnormal_dots[((int)(e->angles[1] * (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)]; shadedots = r_avertexnormal_dots[((int)(e->angles[1] * (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)];
shadelight = shadelight / 200.0; shadelight /= 200.0;
an = e->angles[1]/180*M_PI; an = e->angles[1]/180*M_PI;
shadevector[0] = cos(-an); shadevector[0] = cos(-an);
@ -671,14 +664,11 @@ static void R_DrawAliasModel (entity_t *e)
if (clmodel->hasfullbrights && gl_fb_models->value && if (clmodel->hasfullbrights && gl_fb_models->value &&
paliashdr->gl_fb_texturenum[currententity->skinnum][anim]) { paliashdr->gl_fb_texturenum[currententity->skinnum][anim]) {
/* /*
glEnable (GL_BLEND);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
*/ */
glBindTexture (GL_TEXTURE_2D, paliashdr->gl_fb_texturenum[currententity->skinnum][anim]); glBindTexture (GL_TEXTURE_2D, paliashdr->gl_fb_texturenum[currententity->skinnum][anim]);
R_SetupAliasFrame (currententity->frame, paliashdr, true); R_SetupAliasFrame (currententity->frame, paliashdr, true);
//glDisable (GL_BLEND);
} }
glShadeModel (GL_FLAT); glShadeModel (GL_FLAT);

View file

@ -486,9 +486,7 @@ void R_BlendLightmaps (void)
glDepthMask (0); // don't bother writing Z glDepthMask (0); // don't bother writing Z
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc (GL_ZERO, GL_SRC_COLOR); glBlendFunc (GL_ZERO, GL_SRC_COLOR);
glEnable(GL_BLEND);
for (i=0 ; i<MAX_LIGHTMAPS ; i++) for (i=0 ; i<MAX_LIGHTMAPS ; i++)
{ {
@ -531,9 +529,8 @@ R_RenderFullbrights (void)
glpoly_t *p; glpoly_t *p;
float *v; float *v;
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glBlendFunc(GL_ONE, GL_ONE); glBlendFunc(GL_ONE, GL_ONE);
glEnable (GL_BLEND);
glColor3f(1,1,1); glColor3f(1,1,1);
for (i=1; i<MAX_GLTEXTURES; i++) { for (i=1; i<MAX_GLTEXTURES; i++) {
@ -550,7 +547,7 @@ R_RenderFullbrights (void)
} }
} }
glDisable (GL_BLEND); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
} }
@ -703,6 +700,9 @@ void DrawTextureChains (void)
int i; int i;
msurface_t *s; msurface_t *s;
glDisable(GL_BLEND);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
for (i=0 ; i<cl.worldmodel->numtextures ; i++) for (i=0 ; i<cl.worldmodel->numtextures ; i++)
{ {
if (!cl.worldmodel->textures[i]) if (!cl.worldmodel->textures[i])
@ -712,6 +712,10 @@ void DrawTextureChains (void)
cl.worldmodel->textures[i]->texturechain = NULL; cl.worldmodel->textures[i]->texturechain = NULL;
} }
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
} }
/* /*
@ -827,16 +831,15 @@ void R_DrawBrushModel (entity_t *e)
} }
} }
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if (gl_texsort->value) if (gl_texsort->value)
R_BlendLightmaps (); R_BlendLightmaps ();
if (gl_fb_bmodels->value) if (gl_fb_bmodels->value)
R_RenderFullbrights (); R_RenderFullbrights ();
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glPopMatrix (); glPopMatrix ();
} }
@ -990,9 +993,6 @@ void R_DrawWorld (void)
// Be sure to clear the skybox --KB // Be sure to clear the skybox --KB
R_DrawSky (); R_DrawSky ();
glDisable(GL_BLEND);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
R_RecursiveWorldNode (cl.worldmodel->nodes); R_RecursiveWorldNode (cl.worldmodel->nodes);
DrawTextureChains (); DrawTextureChains ();
@ -1002,10 +1002,6 @@ void R_DrawWorld (void)
if (gl_fb_bmodels->value) if (gl_fb_bmodels->value)
R_RenderFullbrights (); R_RenderFullbrights ();
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
} }

View file

@ -1233,7 +1233,6 @@ void SCR_UpdateScreen (void)
// LordHavoc: adjustable brightness and contrast, // LordHavoc: adjustable brightness and contrast,
// also makes polyblend apply to whole screen // also makes polyblend apply to whole screen
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
Cvar_SetValue (brightness, bound (1, brightness->value, 5)); Cvar_SetValue (brightness, bound (1, brightness->value, 5));
if (lighthalf) // LordHavoc: render was done at half brightness if (lighthalf) // LordHavoc: render was done at half brightness
f = brightness->value * 2; f = brightness->value * 2;
@ -1280,7 +1279,6 @@ void SCR_UpdateScreen (void)
glEnd (); glEnd ();
} }
glDisable(GL_BLEND);
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
V_UpdatePalette (); V_UpdatePalette ();

View file

@ -652,8 +652,6 @@ R_DrawSkyBox (void)
glEnable (GL_DEPTH_TEST); glEnable (GL_DEPTH_TEST);
glDepthFunc (GL_ALWAYS); glDepthFunc (GL_ALWAYS);
// glDisable (GL_BLEND);
// glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glDepthRange (gldepthmax, gldepthmax); glDepthRange (gldepthmax, gldepthmax);
if (lighthalf) if (lighthalf)
glColor3f(0.5,0.5,0.5); glColor3f(0.5,0.5,0.5);
@ -733,8 +731,6 @@ R_DrawSkyDome (void)
{ {
glEnable (GL_DEPTH_TEST); glEnable (GL_DEPTH_TEST);
glDepthFunc (GL_ALWAYS); glDepthFunc (GL_ALWAYS);
// glDisable (GL_BLEND);
// glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDepthRange (gldepthmax, gldepthmax); glDepthRange (gldepthmax, gldepthmax);
glDisable (GL_BLEND); glDisable (GL_BLEND);
@ -764,7 +760,6 @@ R_DrawSkyDome (void)
R_DrawSkyLayer (speedscale); R_DrawSkyLayer (speedscale);
} }
// glDisable (GL_BLEND);
glColor3f (1,1,1); glColor3f (1,1,1);
glDepthFunc (GL_LEQUAL); glDepthFunc (GL_LEQUAL);
glEnable (GL_DEPTH_TEST); glEnable (GL_DEPTH_TEST);

View file

@ -24,6 +24,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include "protocol.h"
#ifdef HAVE_LINUX_JOYSTICK_H #ifdef HAVE_LINUX_JOYSTICK_H
#include <linux/joystick.h> #include <linux/joystick.h>

View file

@ -197,6 +197,7 @@ model_t *Mod_ForName (char *name, qboolean crash)
mod = Mod_FindName (name); mod = Mod_FindName (name);
Con_DPrintf("Mod_ForName: %s, %p\n", name, mod);
return Mod_LoadModel (mod, crash); return Mod_LoadModel (mod, crash);
} }

View file

@ -65,7 +65,7 @@ mtriangle_t triangles[MAXALIASTRIS];
// a pose is a single set of vertexes. a frame may be // a pose is a single set of vertexes. a frame may be
// an animating sequence of poses // an animating sequence of poses
trivertx_t *poseverts[MAXALIASFRAMES]; trivertx_t *poseverts[MAXALIASFRAMES];
int posenum; int posenum = 0;
void *Mod_LoadAliasFrame (void * pin, maliasframedesc_t *frame); void *Mod_LoadAliasFrame (void * pin, maliasframedesc_t *frame);
void *Mod_LoadAliasGroup (void * pin, maliasframedesc_t *frame); void *Mod_LoadAliasGroup (void * pin, maliasframedesc_t *frame);