mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-01-31 12:40:43 +00:00
r_drawflat/r_floorcolour/r_wallcolour for software, use alpha blending instead of stippling for alpha surfaces in software, misc cleanups
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2277 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
244084ad32
commit
0634baab20
8 changed files with 161 additions and 815 deletions
|
@ -2439,290 +2439,6 @@ void Cvar_Inc_f (void)
|
||||||
Cvar_SetValue (var, var->value + delta);
|
Cvar_SetValue (var, var->value + delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////
|
|
||||||
/*
|
|
||||||
typedef struct msg_trigger_s {
|
|
||||||
char *match;
|
|
||||||
char *command;
|
|
||||||
struct msg_trigger_s *next;
|
|
||||||
} msg_trigger_t;
|
|
||||||
msg_trigger_t *msg_trigger;
|
|
||||||
void Cmd_MessageTrigger (char *message, int type)
|
|
||||||
{
|
|
||||||
msg_trigger_t *trigger;
|
|
||||||
for (trigger = msg_trigger; trigger; trigger = trigger->next)
|
|
||||||
if (strstr(message, trigger->match))
|
|
||||||
{
|
|
||||||
Cbuf_AddText(trigger->command, RESTRICT_LOCAL);
|
|
||||||
Cbuf_AddText("\n", RESTRICT_LOCAL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Cmd_Msg_Trigger_f (void)
|
|
||||||
{
|
|
||||||
char *command;
|
|
||||||
char *match;
|
|
||||||
char *parm;
|
|
||||||
qboolean dup=false;
|
|
||||||
int i;
|
|
||||||
msg_trigger_t *trigger, *parent;
|
|
||||||
|
|
||||||
if (Cmd_Argc() == 1)
|
|
||||||
{
|
|
||||||
if (!msg_trigger)
|
|
||||||
{
|
|
||||||
Con_Printf("No message triggers are set\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Con_Printf("Message triggers are:\n");
|
|
||||||
for (trigger = msg_trigger; trigger; trigger = trigger->next)
|
|
||||||
{
|
|
||||||
Con_Printf("%s: %s\n", trigger->command, trigger->match);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Cmd_Argc() < 3)
|
|
||||||
{
|
|
||||||
Con_Printf("Usage: %s execcommand match [-d]\n", Cmd_Argv(0));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
command = Cmd_Argv(1);
|
|
||||||
match = Cmd_Argv(2);
|
|
||||||
for (i = 3; i < Cmd_Argc(); i++)
|
|
||||||
{
|
|
||||||
parm = Cmd_Argv(i);
|
|
||||||
if (!strcmp(parm, "-d"))
|
|
||||||
dup = true;
|
|
||||||
//print unknown parms?
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dup)
|
|
||||||
trigger = NULL;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (trigger = msg_trigger; trigger; trigger = trigger->next)
|
|
||||||
{ //find previous (by command text)
|
|
||||||
if (!strcmp(trigger->command, command))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!*match) //remove.
|
|
||||||
{
|
|
||||||
if (!trigger)
|
|
||||||
{
|
|
||||||
Con_Printf("Trigger not found\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (msg_trigger == trigger)
|
|
||||||
{
|
|
||||||
parent = NULL;
|
|
||||||
msg_trigger = trigger->next;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (parent = msg_trigger; parent; parent = parent->next)
|
|
||||||
{
|
|
||||||
if (parent->next == trigger)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!parent)
|
|
||||||
{
|
|
||||||
Con_Printf("Something strange happening in Cmd_Msg_Trigger_f\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
parent->next = trigger->next;
|
|
||||||
}
|
|
||||||
Z_Free(trigger->match);
|
|
||||||
Z_Free(trigger);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!trigger)
|
|
||||||
{
|
|
||||||
trigger = Z_Malloc(sizeof(msg_trigger_t) + strlen(command) + 1);
|
|
||||||
trigger->next = msg_trigger;
|
|
||||||
msg_trigger = trigger;
|
|
||||||
|
|
||||||
trigger->command = (char *)(trigger+1);
|
|
||||||
strcpy(trigger->command, command);
|
|
||||||
}
|
|
||||||
if (trigger->match)
|
|
||||||
Z_Free(trigger->match);
|
|
||||||
trigger->match = CopyString(match);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MAX_FILTER_LEN 4
|
|
||||||
typedef struct msg_filter_s {
|
|
||||||
struct msg_filter_s *next;
|
|
||||||
char *name;
|
|
||||||
} msg_filter_t;
|
|
||||||
msg_filter_t *msg_filter;
|
|
||||||
void Cmd_Msg_Filter_Add (char *name)
|
|
||||||
{
|
|
||||||
msg_filter_t *f;
|
|
||||||
if (strchr(name, ' '))
|
|
||||||
{
|
|
||||||
Con_Printf("Filter's may not contain spaces.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (strchr(name, '#'))
|
|
||||||
{
|
|
||||||
Con_Printf("Filter's may not contain hashes internally.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (f = msg_filter; f; f = f->next) //check if it already exists
|
|
||||||
{
|
|
||||||
if (!strcmp(f->name, name))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
f = Z_Malloc(sizeof(msg_filter_t) + strlen(name)+1);
|
|
||||||
f->next = msg_filter;
|
|
||||||
msg_filter = f;
|
|
||||||
f->name = (char *)(f+1);
|
|
||||||
strcpy(f->name, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Cmd_Msg_Filter_Remove (char *name)
|
|
||||||
{
|
|
||||||
msg_filter_t *f;
|
|
||||||
msg_filter_t *old = NULL;
|
|
||||||
for (f = msg_filter; f; f = f->next)
|
|
||||||
{
|
|
||||||
if (!strcmp(f->name, name))
|
|
||||||
{
|
|
||||||
if (old)
|
|
||||||
old->next = f->next;
|
|
||||||
else
|
|
||||||
msg_filter = f->next;
|
|
||||||
Z_Free(f);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
old = f;
|
|
||||||
}
|
|
||||||
Con_Printf("Couldn't remove filter \'%s\'.\n", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Cmd_Msg_Filter_ClearAll (void)
|
|
||||||
{
|
|
||||||
msg_filter_t *old;
|
|
||||||
while(msg_filter)
|
|
||||||
{
|
|
||||||
old = msg_filter;
|
|
||||||
msg_filter = msg_filter->next;
|
|
||||||
Z_Free(old);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Cmd_Msg_Filter_f (void)
|
|
||||||
{
|
|
||||||
int first, i;
|
|
||||||
msg_filter_t *f;
|
|
||||||
char *name;
|
|
||||||
qboolean clearem = true;
|
|
||||||
if (Cmd_Argc()==1)
|
|
||||||
{ //print em
|
|
||||||
if (!msg_filter)
|
|
||||||
Con_Printf("Filtering not enabled\n");
|
|
||||||
Con_Printf("Current filters:");
|
|
||||||
for (f = msg_filter; f; f = f->next)
|
|
||||||
Con_Printf(" %s", f->name);
|
|
||||||
Con_Printf("\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
first = 1;
|
|
||||||
if (!strcmp(Cmd_Argv(1), "clear"))
|
|
||||||
{
|
|
||||||
Cmd_Msg_Filter_ClearAll();
|
|
||||||
first++;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = first; i < Cmd_Argc(); i++)
|
|
||||||
{
|
|
||||||
name = Cmd_Argv(i);
|
|
||||||
if (*name != '#') //go for ZQuake stylie.
|
|
||||||
{
|
|
||||||
clearem = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clearem)
|
|
||||||
Cmd_Msg_Filter_ClearAll();
|
|
||||||
|
|
||||||
for(i = first; i < Cmd_Argc(); i++)
|
|
||||||
{
|
|
||||||
name = Cmd_Argv(i);
|
|
||||||
if (strchr(name, ' '))
|
|
||||||
{
|
|
||||||
Con_Printf("Filter's may not contain spaces.");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (*name == '#' || *name == '+')
|
|
||||||
Cmd_Msg_Filter_Add(name+1);
|
|
||||||
else if (*name == '-')
|
|
||||||
Cmd_Msg_Filter_Remove(name+1);
|
|
||||||
else
|
|
||||||
Cmd_Msg_Filter_Add(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qboolean Cmd_FilterMessage (char *message, qboolean sameteam) //returns true if the message was filtered.
|
|
||||||
{
|
|
||||||
msg_filter_t *f;
|
|
||||||
char *filter;
|
|
||||||
char *earliest, *end;
|
|
||||||
int len, msglen;
|
|
||||||
char trimmedfilter[MAX_FILTER_LEN+1];
|
|
||||||
if (!msg_filter) //filtering is off.
|
|
||||||
return false;
|
|
||||||
|
|
||||||
msglen = strlen(message);
|
|
||||||
for(filter = message+strlen(message)-1; filter>=message; filter--)
|
|
||||||
{
|
|
||||||
if (!*filter) //that's not right is it?
|
|
||||||
break;
|
|
||||||
if (*filter <= ' ') //ignore whitespace
|
|
||||||
msglen--;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
len = msglen - MAX_FILTER_LEN;
|
|
||||||
if (len < 0)
|
|
||||||
len = 0;
|
|
||||||
earliest = message+len-1;
|
|
||||||
for(filter = message+msglen-1; filter>=earliest; filter--)
|
|
||||||
{
|
|
||||||
if (*filter == '#') //start of filter.
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (*filter <= ' ') //not a filter
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (filter<=earliest || *filter != '#') //not a filterable message, so don't filter it.
|
|
||||||
return false;
|
|
||||||
|
|
||||||
filter++;
|
|
||||||
|
|
||||||
Q_strncpyz(trimmedfilter, filter, sizeof(trimmedfilter)); //might have whitespace.
|
|
||||||
|
|
||||||
for (end = trimmedfilter + strlen(filter)-1; end >= trimmedfilter && *end <= ' '; end--) //skip trailing
|
|
||||||
*end = '\0';
|
|
||||||
|
|
||||||
for (f = msg_filter; f; f = f->next)
|
|
||||||
{
|
|
||||||
if (!strcmp(trimmedfilter, f->name))
|
|
||||||
{
|
|
||||||
//hide the filter part of the message.
|
|
||||||
memmove(filter-1, message + msglen, strlen(message)-msglen+1);
|
|
||||||
return false; //allow it.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true; //not on our list of allowed.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
void Cmd_WriteConfig_f(void)
|
void Cmd_WriteConfig_f(void)
|
||||||
{
|
{
|
||||||
vfsfile_t *f;
|
vfsfile_t *f;
|
||||||
|
|
|
@ -3195,16 +3195,21 @@ void SV_InitLocal (void)
|
||||||
|
|
||||||
Cvar_Register (&sv_public, cvargroup_servercontrol);
|
Cvar_Register (&sv_public, cvargroup_servercontrol);
|
||||||
Cvar_Register (&sv_listen, cvargroup_servercontrol);
|
Cvar_Register (&sv_listen, cvargroup_servercontrol);
|
||||||
|
sv_listen.restriction = RESTRICT_MAX;
|
||||||
#ifdef TCPCONNECT
|
#ifdef TCPCONNECT
|
||||||
Cvar_Register (&sv_port_tcp, cvargroup_servercontrol);
|
Cvar_Register (&sv_port_tcp, cvargroup_servercontrol);
|
||||||
|
sv_port_tcp.restriction = RESTRICT_MAX;
|
||||||
#endif
|
#endif
|
||||||
#ifdef IPPROTO_IPV6
|
#ifdef IPPROTO_IPV6
|
||||||
Cvar_Register (&sv_port_ipv6, cvargroup_servercontrol);
|
Cvar_Register (&sv_port_ipv6, cvargroup_servercontrol);
|
||||||
|
sv_port_ipv6.restriction = RESTRICT_MAX;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USEIPX
|
#ifdef USEIPX
|
||||||
Cvar_Register (&sv_port_ipx, cvargroup_servercontrol);
|
Cvar_Register (&sv_port_ipx, cvargroup_servercontrol);
|
||||||
|
sv_port_ipx.restriction = RESTRICT_MAX;
|
||||||
#endif
|
#endif
|
||||||
Cvar_Register (&sv_port, cvargroup_servercontrol);
|
Cvar_Register (&sv_port, cvargroup_servercontrol);
|
||||||
|
sv_port.restriction = RESTRICT_MAX;
|
||||||
|
|
||||||
Cvar_Register (&sv_reportheartbeats, cvargroup_servercontrol);
|
Cvar_Register (&sv_reportheartbeats, cvargroup_servercontrol);
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ float scale_for_mip;
|
||||||
int screenwidth;
|
int screenwidth;
|
||||||
int ubasestep, errorterm, erroradjustup, erroradjustdown;
|
int ubasestep, errorterm, erroradjustup, erroradjustdown;
|
||||||
int vstartscan;
|
int vstartscan;
|
||||||
|
int r_wallindex, r_floorindex;
|
||||||
|
|
||||||
// FIXME: should go away
|
// FIXME: should go away
|
||||||
extern void R_RotateBmodel (void);
|
extern void R_RotateBmodel (void);
|
||||||
|
@ -78,7 +79,6 @@ D_DrawSolidSurface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// FIXME: clean this up
|
// FIXME: clean this up
|
||||||
|
|
||||||
void D_DrawSolidSurface (surf_t *surf, int color)
|
void D_DrawSolidSurface (surf_t *surf, int color)
|
||||||
{
|
{
|
||||||
espan_t *span;
|
espan_t *span;
|
||||||
|
@ -197,6 +197,22 @@ void D_CalcGradients (msurface_t *pface)
|
||||||
bbextentt = ((pface->extents[1] << 16) >> miplevel) - 1;
|
bbextentt = ((pface->extents[1] << 16) >> miplevel) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SWR_Drawflat_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
D_FlushCaches();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SWR_Floorcolour_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
r_floorindex = fbremapidx(SCR_StringToPalIndex(var->string, 255));
|
||||||
|
D_FlushCaches();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SWR_Wallcolour_Callback(struct cvar_s *var, char *oldvalue)
|
||||||
|
{
|
||||||
|
r_wallindex = fbremapidx(SCR_StringToPalIndex(var->string, 255));
|
||||||
|
D_FlushCaches();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==============
|
==============
|
||||||
|
@ -212,7 +228,7 @@ void D_DrawSurfaces (void)
|
||||||
vec3_t world_transformed_modelorg;
|
vec3_t world_transformed_modelorg;
|
||||||
vec3_t local_modelorg;
|
vec3_t local_modelorg;
|
||||||
extern int r_dosirds;
|
extern int r_dosirds;
|
||||||
extern cvar_t r_fastsky, r_fastskycolour;
|
extern cvar_t r_fastsky, r_fastskycolour, r_drawflat;
|
||||||
|
|
||||||
currententity = &r_worldentity;
|
currententity = &r_worldentity;
|
||||||
TransformVector (modelorg, transformed_modelorg);
|
TransformVector (modelorg, transformed_modelorg);
|
||||||
|
@ -402,7 +418,6 @@ void D_DrawSurfaces (void)
|
||||||
|
|
||||||
cacheheight = pcurrentcache->height;
|
cacheheight = pcurrentcache->height;
|
||||||
|
|
||||||
|
|
||||||
// if (s->entity == &r_worldentity) //temporary
|
// if (s->entity == &r_worldentity) //temporary
|
||||||
// {
|
// {
|
||||||
D_CalcGradients (pface);
|
D_CalcGradients (pface);
|
||||||
|
|
|
@ -127,12 +127,6 @@ extern void (*d_drawspans) (espan_t *pspan);
|
||||||
|
|
||||||
#define REMAP_MAX 64
|
#define REMAP_MAX 64
|
||||||
|
|
||||||
#ifdef _fastcall
|
|
||||||
#define FASTCALL _fastcall
|
|
||||||
#else
|
|
||||||
#define FASTCALL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// palette remap cache
|
// palette remap cache
|
||||||
typedef struct palremap_s {
|
typedef struct palremap_s {
|
||||||
int r;
|
int r;
|
||||||
|
@ -159,11 +153,10 @@ void D_DereferenceRemap(palremap_t *palremap);
|
||||||
void D_InitTrans(void);
|
void D_InitTrans(void);
|
||||||
// void Set_TransLevelI(int level);
|
// void Set_TransLevelI(int level);
|
||||||
void D_SetTransLevel(float level, blendmode_t blend);
|
void D_SetTransLevel(float level, blendmode_t blend);
|
||||||
extern qbyte FASTCALL Trans(qbyte p, qbyte p2);
|
extern qbyte Trans(qbyte p, qbyte p2);
|
||||||
extern qbyte FASTCALL AddBlend(qbyte p, qbyte p2);
|
extern qbyte AddBlend(qbyte p, qbyte p2);
|
||||||
|
|
||||||
extern qbyte *pal555to8;
|
extern qbyte *pal555to8;
|
||||||
|
|
||||||
|
|
||||||
void D_ShutdownTrans(void);
|
void D_ShutdownTrans(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -56,7 +56,7 @@ void D_InitTrans(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: INLINE THESE FUNCTIONS
|
// TODO: INLINE THESE FUNCTIONS
|
||||||
qbyte FASTCALL Trans(qbyte p, qbyte p2)
|
qbyte Trans(qbyte p, qbyte p2)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ qbyte FASTCALL Trans(qbyte p, qbyte p2)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qbyte FASTCALL AddBlend(qbyte p, qbyte p2)
|
qbyte AddBlend(qbyte p, qbyte p2)
|
||||||
{
|
{
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
|
|
|
@ -1247,282 +1247,6 @@ typedef struct
|
||||||
|
|
||||||
spanletvars_t s_spanletvars;
|
spanletvars_t s_spanletvars;
|
||||||
|
|
||||||
void R_DrawSpanletTurbulentStipple33( void )
|
|
||||||
{
|
|
||||||
extern int *r_turb_turb;
|
|
||||||
unsigned btemp;
|
|
||||||
int sturb, tturb;
|
|
||||||
qbyte *pdest = s_spanletvars.pdest;
|
|
||||||
short *pz = s_spanletvars.pz;
|
|
||||||
int izi = s_spanletvars.izi;
|
|
||||||
|
|
||||||
if ( s_spanletvars.v & 1 )
|
|
||||||
{
|
|
||||||
s_spanletvars.pdest += s_spanletvars.spancount;
|
|
||||||
s_spanletvars.pz += s_spanletvars.spancount;
|
|
||||||
|
|
||||||
if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE )
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS;
|
|
||||||
else
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep;
|
|
||||||
|
|
||||||
if ( s_spanletvars.u & 1 )
|
|
||||||
{
|
|
||||||
izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest++;
|
|
||||||
pz++;
|
|
||||||
s_spanletvars.spancount--;
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.sstep *= 2;
|
|
||||||
s_spanletvars.tstep *= 2;
|
|
||||||
|
|
||||||
while ( s_spanletvars.spancount > 0 )
|
|
||||||
{
|
|
||||||
sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) );
|
|
||||||
|
|
||||||
if ( *pz <= ( izi >> 16 ) )
|
|
||||||
*pdest = btemp;
|
|
||||||
|
|
||||||
izi += s_spanletvars.izistep_times_2;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest += 2;
|
|
||||||
pz += 2;
|
|
||||||
|
|
||||||
s_spanletvars.spancount -= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** R_DrawSpanletTurbulentStipple66
|
|
||||||
*/
|
|
||||||
void R_DrawSpanletTurbulentStipple66( void )
|
|
||||||
{
|
|
||||||
extern int *r_turb_turb;
|
|
||||||
unsigned btemp;
|
|
||||||
int sturb, tturb;
|
|
||||||
qbyte *pdest = s_spanletvars.pdest;
|
|
||||||
short *pz = s_spanletvars.pz;
|
|
||||||
int izi = s_spanletvars.izi;
|
|
||||||
|
|
||||||
if ( !( s_spanletvars.v & 1 ) )
|
|
||||||
{
|
|
||||||
s_spanletvars.pdest += s_spanletvars.spancount;
|
|
||||||
s_spanletvars.pz += s_spanletvars.spancount;
|
|
||||||
|
|
||||||
if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE )
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS;
|
|
||||||
else
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep;
|
|
||||||
|
|
||||||
if ( s_spanletvars.u & 1 )
|
|
||||||
{
|
|
||||||
izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest++;
|
|
||||||
pz++;
|
|
||||||
s_spanletvars.spancount--;
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.sstep *= 2;
|
|
||||||
s_spanletvars.tstep *= 2;
|
|
||||||
|
|
||||||
while ( s_spanletvars.spancount > 0 )
|
|
||||||
{
|
|
||||||
sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) );
|
|
||||||
|
|
||||||
if ( *pz <= ( izi >> 16 ) )
|
|
||||||
*pdest = btemp;
|
|
||||||
|
|
||||||
izi += s_spanletvars.izistep_times_2;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest += 2;
|
|
||||||
pz += 2;
|
|
||||||
|
|
||||||
s_spanletvars.spancount -= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s_spanletvars.pdest += s_spanletvars.spancount;
|
|
||||||
s_spanletvars.pz += s_spanletvars.spancount;
|
|
||||||
|
|
||||||
if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE )
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS;
|
|
||||||
else
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep;
|
|
||||||
|
|
||||||
while ( s_spanletvars.spancount > 0 )
|
|
||||||
{
|
|
||||||
sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) );
|
|
||||||
|
|
||||||
if ( *pz <= ( izi >> 16 ) )
|
|
||||||
*pdest = btemp;
|
|
||||||
|
|
||||||
izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest++;
|
|
||||||
pz++;
|
|
||||||
|
|
||||||
s_spanletvars.spancount--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** R_DrawSpanletTurbulentBlended
|
|
||||||
*/
|
|
||||||
/*void R_DrawSpanletTurbulentBlended66( void )
|
|
||||||
{
|
|
||||||
extern int *r_turb_turb;
|
|
||||||
unsigned btemp;
|
|
||||||
int sturb, tturb;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) );
|
|
||||||
|
|
||||||
if ( *s_spanletvars.pz <= ( s_spanletvars.izi >> 16 ) )
|
|
||||||
*s_spanletvars.pdest = vid.alphamap[btemp*256+*s_spanletvars.pdest];
|
|
||||||
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.pdest++;
|
|
||||||
s_spanletvars.pz++;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
} while ( --s_spanletvars.spancount > 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void R_DrawSpanletTurbulentBlended33( void )
|
|
||||||
{
|
|
||||||
unsigned btemp;
|
|
||||||
int sturb, tturb;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
sturb = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
tturb = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( sturb ) + ( tturb << 6 ) );
|
|
||||||
|
|
||||||
if ( *s_spanletvars.pz <= ( s_spanletvars.izi >> 16 ) )
|
|
||||||
*s_spanletvars.pdest = vid.alphamap[btemp+*s_spanletvars.pdest*256];
|
|
||||||
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.pdest++;
|
|
||||||
s_spanletvars.pz++;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
} while ( --s_spanletvars.spancount > 0 );
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
** R_DrawSpanlet33
|
|
||||||
*/
|
|
||||||
/*void R_DrawSpanlet33( void )
|
|
||||||
{
|
|
||||||
unsigned btemp;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
unsigned ts, tt;
|
|
||||||
|
|
||||||
ts = s_spanletvars.s >> 16;
|
|
||||||
tt = s_spanletvars.t >> 16;
|
|
||||||
|
|
||||||
btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth);
|
|
||||||
|
|
||||||
if ( btemp != 255 )
|
|
||||||
{
|
|
||||||
if (*s_spanletvars.pz <= (s_spanletvars.izi >> 16))
|
|
||||||
{
|
|
||||||
*s_spanletvars.pdest = vid.alphamap[btemp+*s_spanletvars.pdest*256];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.pdest++;
|
|
||||||
s_spanletvars.pz++;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
} while (--s_spanletvars.spancount > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void R_DrawSpanletConstant33( void )
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (*s_spanletvars.pz <= (s_spanletvars.izi >> 16))
|
|
||||||
{
|
|
||||||
*s_spanletvars.pdest = vid.alphamap[r_polyblendcolor+*s_spanletvars.pdest*256];
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.pdest++;
|
|
||||||
s_spanletvars.pz++;
|
|
||||||
} while (--s_spanletvars.spancount > 0);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
** R_DrawSpanlet66
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
void R_DrawSpanlet66( void )
|
|
||||||
{
|
|
||||||
unsigned btemp;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
unsigned ts, tt;
|
|
||||||
|
|
||||||
ts = s_spanletvars.s >> 16;
|
|
||||||
tt = s_spanletvars.t >> 16;
|
|
||||||
|
|
||||||
btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth);
|
|
||||||
|
|
||||||
if ( btemp != 255 )
|
|
||||||
{
|
|
||||||
if (*s_spanletvars.pz <= (s_spanletvars.izi >> 16))
|
|
||||||
{
|
|
||||||
*s_spanletvars.pdest = vid.alphamap[btemp*256+*s_spanletvars.pdest];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.pdest++;
|
|
||||||
s_spanletvars.pz++;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
} while (--s_spanletvars.spancount > 0);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void R_DrawSpanletConstant( void )
|
void R_DrawSpanletConstant( void )
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
|
@ -1537,64 +1261,7 @@ void R_DrawSpanletConstant( void )
|
||||||
s_spanletvars.pz++;
|
s_spanletvars.pz++;
|
||||||
} while (--s_spanletvars.spancount > 0);
|
} while (--s_spanletvars.spancount > 0);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
** R_DrawSpanlet33Stipple
|
|
||||||
*/
|
|
||||||
void R_DrawSpanlet33Stipple( void )
|
|
||||||
{
|
|
||||||
unsigned btemp;
|
|
||||||
qbyte *pdest = s_spanletvars.pdest;
|
|
||||||
short *pz = s_spanletvars.pz;
|
|
||||||
int izi = s_spanletvars.izi;
|
|
||||||
|
|
||||||
if ( r_q2polydesc.stipple_parity ^ ( s_spanletvars.v & 1 ) )
|
|
||||||
{
|
|
||||||
s_spanletvars.pdest += s_spanletvars.spancount;
|
|
||||||
s_spanletvars.pz += s_spanletvars.spancount;
|
|
||||||
|
|
||||||
if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE )
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS;
|
|
||||||
else
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep;
|
|
||||||
|
|
||||||
if ( r_q2polydesc.stipple_parity ^ ( s_spanletvars.u & 1 ) )
|
|
||||||
{
|
|
||||||
izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest++;
|
|
||||||
pz++;
|
|
||||||
s_spanletvars.spancount--;
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.sstep *= 2;
|
|
||||||
s_spanletvars.tstep *= 2;
|
|
||||||
|
|
||||||
while ( s_spanletvars.spancount > 0 )
|
|
||||||
{
|
|
||||||
unsigned s = s_spanletvars.s >> 16;
|
|
||||||
unsigned t = s_spanletvars.t >> 16;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( s ) + ( t * cachewidth ) );
|
|
||||||
|
|
||||||
if ( btemp != 255 )
|
|
||||||
{
|
|
||||||
if ( *pz <= ( izi >> 16 ) )
|
|
||||||
*pdest = btemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
izi += s_spanletvars.izistep_times_2;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest += 2;
|
|
||||||
pz += 2;
|
|
||||||
|
|
||||||
s_spanletvars.spancount -= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void R_16DrawSpanlet33Stipple( void )
|
void R_16DrawSpanlet33Stipple( void )
|
||||||
{
|
{
|
||||||
unsigned btemp;
|
unsigned btemp;
|
||||||
|
@ -1680,6 +1347,70 @@ void R_8DrawSpanletAlphaTest( void ) //8 bit rendering only
|
||||||
} while (--s_spanletvars.spancount > 0);
|
} while (--s_spanletvars.spancount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void R_8DrawSpanletAlphaBlend( void ) //8 bit rendering only
|
||||||
|
{
|
||||||
|
unsigned btemp;
|
||||||
|
|
||||||
|
D_SetTransLevel(r_q2polydesc.alpha*255.0, BM_BLEND);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
unsigned ts, tt;
|
||||||
|
|
||||||
|
ts = s_spanletvars.s >> 16;
|
||||||
|
tt = s_spanletvars.t >> 16;
|
||||||
|
|
||||||
|
btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth);
|
||||||
|
|
||||||
|
if ( btemp != 255 )
|
||||||
|
{
|
||||||
|
if (*s_spanletvars.pz <= (s_spanletvars.izi >> 16))
|
||||||
|
{
|
||||||
|
*s_spanletvars.pdest = Trans(*s_spanletvars.pdest, btemp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s_spanletvars.izi += s_spanletvars.izistep;
|
||||||
|
s_spanletvars.pdest++;
|
||||||
|
s_spanletvars.pz++;
|
||||||
|
s_spanletvars.s += s_spanletvars.sstep;
|
||||||
|
s_spanletvars.t += s_spanletvars.tstep;
|
||||||
|
} while (--s_spanletvars.spancount > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void R_8DrawSpanletTurbulentAlphaBlend( void )
|
||||||
|
{
|
||||||
|
extern int *r_turb_turb;
|
||||||
|
unsigned btemp;
|
||||||
|
|
||||||
|
D_SetTransLevel(r_q2polydesc.alpha*255.0, BM_BLEND);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
unsigned ts, tt;
|
||||||
|
|
||||||
|
ts = ((s_spanletvars.s + r_turb_turb[(s_spanletvars.t>>16)&(CYCLE-1)])>>16)&63;
|
||||||
|
tt = ((s_spanletvars.t + r_turb_turb[(s_spanletvars.s>>16)&(CYCLE-1)])>>16)&63;
|
||||||
|
|
||||||
|
btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth);
|
||||||
|
|
||||||
|
if ( btemp != 255 )
|
||||||
|
{
|
||||||
|
if (*s_spanletvars.pz <= (s_spanletvars.izi >> 16))
|
||||||
|
{
|
||||||
|
*s_spanletvars.pdest = Trans(*s_spanletvars.pdest, btemp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s_spanletvars.izi += s_spanletvars.izistep;
|
||||||
|
s_spanletvars.pdest++;
|
||||||
|
s_spanletvars.pz++;
|
||||||
|
s_spanletvars.s += s_spanletvars.sstep;
|
||||||
|
s_spanletvars.t += s_spanletvars.tstep;
|
||||||
|
} while (--s_spanletvars.spancount > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void R_16DrawSpanletAlphaTest( void ) //16 bit rendering only
|
void R_16DrawSpanletAlphaTest( void ) //16 bit rendering only
|
||||||
{
|
{
|
||||||
unsigned btemp;
|
unsigned btemp;
|
||||||
|
@ -1709,37 +1440,6 @@ void R_16DrawSpanletAlphaTest( void ) //16 bit rendering only
|
||||||
} while (--s_spanletvars.spancount > 0);
|
} while (--s_spanletvars.spancount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void R_8DrawSpanletBlended( void ) //8 bit FIXME
|
|
||||||
{
|
|
||||||
unsigned btemp;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
unsigned ts, tt;
|
|
||||||
|
|
||||||
ts = s_spanletvars.s >> 16;
|
|
||||||
tt = s_spanletvars.t >> 16;
|
|
||||||
|
|
||||||
btemp = *(s_spanletvars.pbase + (ts) + (tt) * cachewidth);
|
|
||||||
|
|
||||||
// if ( btemp != 255 )
|
|
||||||
{
|
|
||||||
if (*s_spanletvars.pz <= (s_spanletvars.izi >> 16))
|
|
||||||
{
|
|
||||||
*s_spanletvars.pdest = t_lookup[1][btemp][*s_spanletvars.pdest];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.pdest++;
|
|
||||||
s_spanletvars.pz++;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
} while (--s_spanletvars.spancount > 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void R_32DrawSpanletAlphaTest( void )
|
void R_32DrawSpanletAlphaTest( void )
|
||||||
{
|
{
|
||||||
unsigned btemp;
|
unsigned btemp;
|
||||||
|
@ -1830,87 +1530,6 @@ void R_32DrawSpanletTurbulentBlended( void )
|
||||||
/*
|
/*
|
||||||
** R_DrawSpanlet66Stipple
|
** R_DrawSpanlet66Stipple
|
||||||
*/
|
*/
|
||||||
void R_DrawSpanlet66Stipple( void )
|
|
||||||
{
|
|
||||||
unsigned btemp;
|
|
||||||
qbyte *pdest = s_spanletvars.pdest;
|
|
||||||
short *pz = s_spanletvars.pz;
|
|
||||||
int izi = s_spanletvars.izi;
|
|
||||||
|
|
||||||
s_spanletvars.pdest += s_spanletvars.spancount;
|
|
||||||
s_spanletvars.pz += s_spanletvars.spancount;
|
|
||||||
|
|
||||||
if ( s_spanletvars.spancount == AFFINE_SPANLET_SIZE )
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep << AFFINE_SPANLET_SIZE_BITS;
|
|
||||||
else
|
|
||||||
s_spanletvars.izi += s_spanletvars.izistep * s_spanletvars.izistep;
|
|
||||||
|
|
||||||
if ( r_q2polydesc.stipple_parity ^ ( s_spanletvars.v & 1 ) )
|
|
||||||
{
|
|
||||||
if ( r_q2polydesc.stipple_parity ^ ( s_spanletvars.u & 1 ) )
|
|
||||||
{
|
|
||||||
izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest++;
|
|
||||||
pz++;
|
|
||||||
s_spanletvars.spancount--;
|
|
||||||
}
|
|
||||||
|
|
||||||
s_spanletvars.sstep *= 2;
|
|
||||||
s_spanletvars.tstep *= 2;
|
|
||||||
|
|
||||||
while ( s_spanletvars.spancount > 0 )
|
|
||||||
{
|
|
||||||
unsigned s = s_spanletvars.s >> 16;
|
|
||||||
unsigned t = s_spanletvars.t >> 16;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( s ) + ( t * cachewidth ) );
|
|
||||||
|
|
||||||
if ( btemp != 255 )
|
|
||||||
{
|
|
||||||
if ( *pz <= ( izi >> 16 ) )
|
|
||||||
*pdest = btemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
izi += s_spanletvars.izistep_times_2;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest += 2;
|
|
||||||
pz += 2;
|
|
||||||
|
|
||||||
s_spanletvars.spancount -= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
while ( s_spanletvars.spancount > 0 )
|
|
||||||
{
|
|
||||||
unsigned s = s_spanletvars.s >> 16;
|
|
||||||
unsigned t = s_spanletvars.t >> 16;
|
|
||||||
|
|
||||||
btemp = *( s_spanletvars.pbase + ( s ) + ( t * cachewidth ) );
|
|
||||||
|
|
||||||
if ( btemp != 255 )
|
|
||||||
{
|
|
||||||
if ( *pz <= ( izi >> 16 ) )
|
|
||||||
*pdest = btemp;
|
|
||||||
}
|
|
||||||
|
|
||||||
izi += s_spanletvars.izistep;
|
|
||||||
s_spanletvars.s += s_spanletvars.sstep;
|
|
||||||
s_spanletvars.t += s_spanletvars.tstep;
|
|
||||||
|
|
||||||
pdest++;
|
|
||||||
pz++;
|
|
||||||
|
|
||||||
s_spanletvars.spancount--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void R_16DrawSpanlet66Stipple( void )
|
void R_16DrawSpanlet66Stipple( void )
|
||||||
{
|
{
|
||||||
unsigned btemp;
|
unsigned btemp;
|
||||||
|
@ -2500,81 +2119,18 @@ void R_ClipAndDrawPoly ( float alpha, int isturbulent, qboolean textured )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (isturbulent)
|
if (alpha >= TRANS_UPPER_CAP)
|
||||||
|
r_q2polydesc.drawspanlet = R_8DrawSpanletAlphaTest;
|
||||||
|
else if (isturbulent)
|
||||||
{
|
{
|
||||||
if (alpha < 0.5)
|
r_q2polydesc.alpha = alpha*255;
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletTurbulentStipple33;
|
r_q2polydesc.drawspanlet = R_8DrawSpanletTurbulentAlphaBlend;
|
||||||
else if (alpha < 0.9)
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletTurbulentStipple66;
|
|
||||||
else
|
|
||||||
r_q2polydesc.drawspanlet = R_8DrawSpanletAlphaTest;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (alpha < 0.5)
|
r_q2polydesc.alpha = alpha*255;
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanlet33Stipple;
|
r_q2polydesc.drawspanlet = R_8DrawSpanletAlphaBlend;
|
||||||
else if (alpha < 0.9)
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanlet66Stipple;
|
|
||||||
else
|
|
||||||
r_q2polydesc.drawspanlet = R_8DrawSpanletAlphaTest;
|
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
if ( !textured )
|
|
||||||
{
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletConstant;//R_DrawSpanletConstant33;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// choose the correct spanlet routine based on alpha
|
|
||||||
//
|
|
||||||
if ( alpha == 1 )
|
|
||||||
{
|
|
||||||
// isturbulent is ignored because we know that turbulent surfaces
|
|
||||||
// can't be opaque
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletConstant;//R_DrawSpanletOpaque;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (1)// sw_stipplealpha->value )
|
|
||||||
{
|
|
||||||
if ( isturbulent )
|
|
||||||
{
|
|
||||||
if ( alpha > 0.33 )
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletTurbulentStipple66;
|
|
||||||
else
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletTurbulentStipple33;
|
|
||||||
}
|
|
||||||
else if (1)
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletAlphaTest;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( alpha > 0.33 )
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanlet66Stipple;
|
|
||||||
else
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanlet33Stipple;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( isturbulent )
|
|
||||||
{
|
|
||||||
if ( alpha > 0.33 )
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletConstant;//R_DrawSpanletTurbulentBlended66;
|
|
||||||
else
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletConstant;//R_DrawSpanletTurbulentBlended33;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( alpha > 0.33 )
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletConstant;//R_DrawSpanlet66;
|
|
||||||
else
|
|
||||||
r_q2polydesc.drawspanlet = R_DrawSpanletConstant;//R_DrawSpanlet33;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// clip to the frustum in worldspace
|
// clip to the frustum in worldspace
|
||||||
|
|
|
@ -205,10 +205,14 @@ void SWR_InitTextures (void)
|
||||||
|
|
||||||
// callback declares
|
// callback declares
|
||||||
extern cvar_t crosshaircolor, r_skyboxname, r_menutint, v_contrast;
|
extern cvar_t crosshaircolor, r_skyboxname, r_menutint, v_contrast;
|
||||||
|
extern cvar_t r_floorcolour, r_wallcolour, r_drawflat;
|
||||||
void SWCrosshaircolor_Callback(struct cvar_s *var, char *oldvalue);
|
void SWCrosshaircolor_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
void SWR_Skyboxname_Callback(struct cvar_s *var, char *oldvalue);
|
void SWR_Skyboxname_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
void SWR_Menutint_Callback(struct cvar_s *var, char *oldvalue);
|
void SWR_Menutint_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
void SWV_Gamma_Callback(struct cvar_s *var, char *oldvalue);
|
void SWV_Gamma_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void SWR_Floorcolour_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void SWR_Wallcolour_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
void SWR_Drawflat_Callback(struct cvar_s *var, char *oldvalue);
|
||||||
|
|
||||||
void SWR_DeInit (void)
|
void SWR_DeInit (void)
|
||||||
{
|
{
|
||||||
|
@ -220,6 +224,9 @@ void SWR_DeInit (void)
|
||||||
Cvar_Unhook(&r_menutint);
|
Cvar_Unhook(&r_menutint);
|
||||||
Cvar_Unhook(&v_gamma);
|
Cvar_Unhook(&v_gamma);
|
||||||
Cvar_Unhook(&v_contrast);
|
Cvar_Unhook(&v_contrast);
|
||||||
|
Cvar_Unhook(&r_floorcolour);
|
||||||
|
Cvar_Unhook(&r_wallcolour);
|
||||||
|
Cvar_Unhook(&r_drawflat);
|
||||||
|
|
||||||
SWDraw_Shutdown();
|
SWDraw_Shutdown();
|
||||||
D_Shutdown();
|
D_Shutdown();
|
||||||
|
@ -246,6 +253,9 @@ void SWR_Init (void)
|
||||||
Cvar_Hook(&r_menutint, SWR_Menutint_Callback);
|
Cvar_Hook(&r_menutint, SWR_Menutint_Callback);
|
||||||
Cvar_Hook(&v_gamma, SWV_Gamma_Callback);
|
Cvar_Hook(&v_gamma, SWV_Gamma_Callback);
|
||||||
Cvar_Hook(&v_contrast, SWV_Gamma_Callback);
|
Cvar_Hook(&v_contrast, SWV_Gamma_Callback);
|
||||||
|
Cvar_Hook(&r_floorcolour, SWR_Floorcolour_Callback);
|
||||||
|
Cvar_Hook(&r_wallcolour, SWR_Wallcolour_Callback);
|
||||||
|
Cvar_Hook(&r_drawflat, SWR_Drawflat_Callback);
|
||||||
|
|
||||||
if (!r_maxedges.value)
|
if (!r_maxedges.value)
|
||||||
Cvar_SetValue (&r_maxedges, (float)NUMSTACKEDGES);
|
Cvar_SetValue (&r_maxedges, (float)NUMSTACKEDGES);
|
||||||
|
|
|
@ -44,6 +44,7 @@ int lightright, lightleftstep, lightrightstep, blockdivshift;
|
||||||
unsigned blockdivmask;
|
unsigned blockdivmask;
|
||||||
void *prowdestbase;
|
void *prowdestbase;
|
||||||
unsigned char *pbasesource;
|
unsigned char *pbasesource;
|
||||||
|
unsigned char ptexcolor;
|
||||||
int surfrowbytes; // used by ASM files
|
int surfrowbytes; // used by ASM files
|
||||||
unsigned *r_lightptr;
|
unsigned *r_lightptr;
|
||||||
int r_stepback;
|
int r_stepback;
|
||||||
|
@ -59,6 +60,7 @@ void R_DrawSurfaceBlock16From8 (void);
|
||||||
void R_DrawSurfaceBlock32From8 (void);
|
void R_DrawSurfaceBlock32From8 (void);
|
||||||
void R_DrawSurfaceBlock32From8Lit (void);
|
void R_DrawSurfaceBlock32From8Lit (void);
|
||||||
void R_DrawSurfaceBlock32From32Lit (void);
|
void R_DrawSurfaceBlock32From32Lit (void);
|
||||||
|
void R_DrawSurfaceBlock8_notex (void);
|
||||||
|
|
||||||
static void (*surfmiptable[4])(void) = {
|
static void (*surfmiptable[4])(void) = {
|
||||||
R_DrawSurfaceBlock8_mip0,
|
R_DrawSurfaceBlock8_mip0,
|
||||||
|
@ -1052,7 +1054,6 @@ texture_t *SWR_TextureAnimation (texture_t *base)
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
R_DrawSurface
|
R_DrawSurface
|
||||||
|
@ -1060,6 +1061,9 @@ R_DrawSurface
|
||||||
*/
|
*/
|
||||||
void R_DrawSurface (void)
|
void R_DrawSurface (void)
|
||||||
{
|
{
|
||||||
|
extern cvar_t r_drawflat;
|
||||||
|
extern int r_wallindex, r_floorindex;
|
||||||
|
extern unsigned char ptexcolor;
|
||||||
unsigned char *basetptr;
|
unsigned char *basetptr;
|
||||||
int smax, tmax, twidth;
|
int smax, tmax, twidth;
|
||||||
int u;
|
int u;
|
||||||
|
@ -1099,7 +1103,16 @@ void R_DrawSurface (void)
|
||||||
|
|
||||||
if (r_pixbytes == 1 || r_pixbytes == 4) //if we are using 4, textures are stored as 1 and expanded acording to palette
|
if (r_pixbytes == 1 || r_pixbytes == 4) //if we are using 4, textures are stored as 1 and expanded acording to palette
|
||||||
{
|
{
|
||||||
pblockdrawer = surfmiptable[r_drawsurf.surfmip];
|
if (r_drawflat.value)
|
||||||
|
{
|
||||||
|
if (r_drawsurf.surf->plane->normal[2] <= 0.5)
|
||||||
|
ptexcolor = r_wallindex;
|
||||||
|
else
|
||||||
|
ptexcolor = r_floorindex;
|
||||||
|
pblockdrawer = R_DrawSurfaceBlock8_notex;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pblockdrawer = surfmiptable[r_drawsurf.surfmip];
|
||||||
// TODO: only needs to be set when there is a display settings change
|
// TODO: only needs to be set when there is a display settings change
|
||||||
horzblockstep = blocksize;
|
horzblockstep = blocksize;
|
||||||
}
|
}
|
||||||
|
@ -1260,6 +1273,44 @@ void R_DrawSurface32 (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
void R_DrawSurfaceBlock8_notex (void)
|
||||||
|
{
|
||||||
|
int v, i, b, lightstep, lighttemp, light;
|
||||||
|
unsigned char pix, *prowdest;
|
||||||
|
|
||||||
|
pix = ptexcolor;
|
||||||
|
prowdest = prowdestbase;
|
||||||
|
|
||||||
|
for (v=0 ; v<r_numvblocks ; v++)
|
||||||
|
{
|
||||||
|
// FIXME: make these locals?
|
||||||
|
// FIXME: use delta rather than both right and left, like ASM?
|
||||||
|
lightleft = r_lightptr[0];
|
||||||
|
lightright = r_lightptr[1];
|
||||||
|
r_lightptr += r_lightwidth;
|
||||||
|
lightleftstep = (r_lightptr[0] - lightleft) >> blockdivshift;
|
||||||
|
lightrightstep = (r_lightptr[1] - lightright) >> blockdivshift;
|
||||||
|
|
||||||
|
for (i=0 ; i<blocksize ; i++)
|
||||||
|
{
|
||||||
|
lighttemp = lightleft - lightright;
|
||||||
|
lightstep = lighttemp >> blockdivshift;
|
||||||
|
|
||||||
|
light = lightright;
|
||||||
|
|
||||||
|
for (b=blocksize-1; b>=0; b--)
|
||||||
|
{
|
||||||
|
prowdest[b] = ((unsigned char *)vid.colormap)
|
||||||
|
[(light & 0xFF00) + pix];
|
||||||
|
light += lightstep;
|
||||||
|
}
|
||||||
|
|
||||||
|
lightright += lightrightstep;
|
||||||
|
lightleft += lightleftstep;
|
||||||
|
prowdest += surfrowbytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if !id386
|
#if !id386
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue