#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. Load more
#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;