1226 lines · 28.1 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <stdio.h>#include "dat.h"#include "fns.h" #define AFFINE_SPANLET_SIZE      16#define AFFINE_SPANLET_SIZE_BITS 4 typedef struct{	byte     *pbase, *pdest;	short	 *pz;	fixed16_t s, t;	fixed16_t sstep, tstep;	int       izi, izistep, izistep_times_2;	int       spancount;	unsigned  u, v;} spanletvars_t; spanletvars_t s_spanletvars; static int r_polyblendcolor; static espan_t	*s_polygon_spans; polydesc_t	r_polydesc; msurface_t *r_alpha_surfaces; extern int *r_turb_turb; static int		clip_current;vec5_t	r_clip_verts[2][MAXWORKINGVERTS+2]; static int		s_minindex, s_maxindex; static void R_DrawPoly( qboolean iswater ); /*** R_DrawSpanletOpaque*/void R_DrawSpanletOpaque( 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.pz    = s_spanletvars.izi >> 16;				*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);} /*** R_DrawSpanletTurbulentStipple33*/void R_DrawSpanletTurbulentStipple33( void ){	unsigned btemp;	int	     sturb, tturb;	byte    *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 ){	unsigned btemp;	int	     sturb, tturb;	byte    *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 ){	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);} /*** R_DrawSpanlet33Stipple*/void R_DrawSpanlet33Stipple( void ){	unsigned btemp;	byte    *pdest = s_spanletvars.pdest;	short   *pz    = s_spanletvars.pz;	int      izi   = s_spanletvars.izi;		if ( r_polydesc.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_polydesc.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;		}	}} /*** R_DrawSpanlet66Stipple*/void R_DrawSpanlet66Stipple( void ){	unsigned btemp;	byte    *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_polydesc.stipple_parity ^ ( s_spanletvars.v & 1 ) )	{		if ( r_polydesc.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--;		}	}} /*** R_ClipPolyFace**** Clips the winding at clip_verts[clip_current] and changes clip_current** Throws out the back side*/int R_ClipPolyFace (int nump, clipplane_t *pclipplane){	int		i, outcount;	float	dists[MAXWORKINGVERTS+3];	float	frac, clipdist, *pclipnormal;	float	*in, *instep, *outstep, *vert2;

Lines 1–500 of 1226.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t