summaryrefslogtreecommitdiff
path: root/source/sw_poly.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/sw_poly.c')
-rw-r--r--source/sw_poly.c163
1 files changed, 24 insertions, 139 deletions
diff --git a/source/sw_poly.c b/source/sw_poly.c
index e3f662b..ab988d4 100644
--- a/source/sw_poly.c
+++ b/source/sw_poly.c
@@ -41,7 +41,7 @@ static espan_t *s_polygon_spans;
polydesc_t r_polydesc;
-msurface_t *r_alpha_surfaces;
+mface_t *r_alpha_surfaces;
extern int *r_turb_turb;
@@ -52,109 +52,6 @@ static int s_minindex, s_maxindex;
static void R_DrawPoly( int iswater );
-#ifdef TRUECOLOR_RENDERER
-
-void R_DrawSpanletOpaque( void ) {
- byte *btemp;
- unsigned ts, tt;
-
- do {
- ts = s_spanletvars.s >> 16;
- tt = s_spanletvars.t >> 16;
-
- btemp = s_spanletvars.pbase + ( ts << VID_SHIFT ) + tt * cachewidth;
-
- if( *s_spanletvars.pz <= ( s_spanletvars.izi >> 16 ) ) {
- byte *alphaTable, *oneMinusAlphaTable;
-
- alphaTable = r_alphaTable[btemp[3]];
- oneMinusAlphaTable = r_alphaTable[255 - btemp[3]];
-
- *s_spanletvars.pz = s_spanletvars.izi >> 16;
- s_spanletvars.pdest[0] = oneMinusAlphaTable[s_spanletvars.pdest[0]] + alphaTable[btemp[2]];
- s_spanletvars.pdest[1] = oneMinusAlphaTable[s_spanletvars.pdest[1]] + alphaTable[btemp[1]];
- s_spanletvars.pdest[2] = oneMinusAlphaTable[s_spanletvars.pdest[2]] + alphaTable[btemp[0]];
- }
-
- s_spanletvars.izi += s_spanletvars.izistep;
- s_spanletvars.pdest += VID_BYTES;
- s_spanletvars.pz++;
- s_spanletvars.s += s_spanletvars.sstep;
- s_spanletvars.t += s_spanletvars.tstep;
- } while( --s_spanletvars.spancount > 0 );
-}
-
-
-
-void R_DrawSpanletBlended( void ) {
- byte *btemp;
- unsigned ts, tt;
-
- do {
- ts = s_spanletvars.s >> 16;
- tt = s_spanletvars.t >> 16;
-
- btemp = s_spanletvars.pbase + ( ts << VID_SHIFT ) + tt * cachewidth;
-
- if( *s_spanletvars.pz <= ( s_spanletvars.izi >> 16 ) ) {
- s_spanletvars.pdest[0] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[0]] + s_spanletvars.alphaTable[btemp[2]];
- s_spanletvars.pdest[1] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[1]] + s_spanletvars.alphaTable[btemp[1]];
- s_spanletvars.pdest[2] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[2]] + s_spanletvars.alphaTable[btemp[0]];
- }
-
- s_spanletvars.izi += s_spanletvars.izistep;
- s_spanletvars.pdest += VID_BYTES;
- s_spanletvars.pz++;
- s_spanletvars.s += s_spanletvars.sstep;
- s_spanletvars.t += s_spanletvars.tstep;
- } while( --s_spanletvars.spancount > 0 );
-
-}
-
-
-
-void R_DrawSpanletConstant( void ) {
- do {
- if( *s_spanletvars.pz <= ( s_spanletvars.izi >> 16 ) ) {
- s_spanletvars.pdest[0] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[0]] + r_polyblendcolor[2];
- s_spanletvars.pdest[1] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[1]] + r_polyblendcolor[1];
- s_spanletvars.pdest[2] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[2]] + r_polyblendcolor[0];
- }
-
- s_spanletvars.izi += s_spanletvars.izistep;
- s_spanletvars.pdest += VID_BYTES;
- s_spanletvars.pz++;
- } while( --s_spanletvars.spancount > 0 );
-}
-
-
-
-void R_DrawSpanletTurbulentBlended( void ) {
- byte *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 << VID_SHIFT ) + ( tturb << ( 6 + VID_SHIFT ) );
-
- if( *s_spanletvars.pz <= ( s_spanletvars.izi >> 16 ) ) {
- s_spanletvars.pdest[0] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[0]] + s_spanletvars.alphaTable[btemp[2]];
- s_spanletvars.pdest[1] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[1]] + s_spanletvars.alphaTable[btemp[1]];
- s_spanletvars.pdest[2] = s_spanletvars.oneMinusAlphaTable[s_spanletvars.pdest[2]] + s_spanletvars.alphaTable[btemp[0]];
- }
-
- s_spanletvars.izi += s_spanletvars.izistep;
- s_spanletvars.pdest += VID_BYTES;
- s_spanletvars.pz++;
- s_spanletvars.s += s_spanletvars.sstep;
- s_spanletvars.t += s_spanletvars.tstep;
- } while( --s_spanletvars.spancount > 0 );
-}
-
-#else /* TRUECOLOR_RENDERER */
-
/*
** R_DrawSpanletOpaque
*/
@@ -604,8 +501,6 @@ void R_DrawSpanlet66Stipple( void )
}
}
-#endif /* !TRUECOLOR_RENDERER */
-
/*
** R_ClipPolyFace
**
@@ -1111,10 +1006,11 @@ void R_ClipAndDrawPoly ( float alpha, int isturbulent, qboolean textured )
/*
** R_BuildPolygonFromSurface
*/
-void R_BuildPolygonFromSurface(msurface_t *fa)
+void R_BuildPolygonFromSurface(mface_t *fa)
{
- int i, lindex, lnumverts;
- medge_t *pedges, *r_pedge;
+ int i, lnumverts;
+ medge_t *pedges;
+ msurfedge_t *surfedge;
int vertpage;
float *vec;
vec5_t *pverts;
@@ -1123,42 +1019,31 @@ void R_BuildPolygonFromSurface(msurface_t *fa)
r_polydesc.nump = 0;
// reconstruct the polygon
- pedges = currentmodel->edges;
- lnumverts = fa->numedges;
+ pedges = r_worldmodel->edges;
+ lnumverts = fa->numsurfedges;
vertpage = 0;
pverts = r_clip_verts[0];
- for (i=0 ; i<lnumverts ; i++)
+ surfedge = fa->firstsurfedge;
+ for (i=0 ; i<lnumverts ; i++, surfedge++)
{
- lindex = currentmodel->surfedges[fa->firstedge + i];
-
- if (lindex > 0)
- {
- r_pedge = &pedges[lindex];
- vec = currentmodel->vertexes[r_pedge->v[0]].position;
- }
- else
- {
- r_pedge = &pedges[-lindex];
- vec = currentmodel->vertexes[r_pedge->v[1]].position;
- }
-
+ vec = surfedge->edge->v[surfedge->vert]->point;
VectorCopy (vec, pverts[i] );
}
- VectorCopy( fa->texinfo->vecs[0], r_polydesc.vright );
- VectorCopy( fa->texinfo->vecs[1], r_polydesc.vup );
+ VectorCopy( fa->texinfo->axis[0], r_polydesc.vright );
+ VectorCopy( fa->texinfo->axis[1], r_polydesc.vup );
VectorCopy( fa->plane->normal, r_polydesc.vpn );
VectorCopy( r_origin, r_polydesc.viewer_position );
- if ( fa->flags & SURF_PLANEBACK )
+ if ( fa->drawflags & DSURF_PLANEBACK )
{
- VectorSubtract( vec3_origin, r_polydesc.vpn, r_polydesc.vpn );
+ VectorInverse( r_polydesc.vpn );
}
// PGM 09/16/98
- if ( fa->texinfo->flags & (SURF_WARP|SURF_FLOWING) )
+ if ( fa->texinfo->c.flags & (SURF_WARP|SURF_FLOWING) )
{
r_polydesc.pixels = fa->texinfo->image->pixels[0];
r_polydesc.pixel_width = fa->texinfo->image->width;
@@ -1181,11 +1066,11 @@ void R_BuildPolygonFromSurface(msurface_t *fa)
r_polydesc.dist = DotProduct( r_polydesc.vpn, pverts[0] );
- r_polydesc.s_offset = fa->texinfo->vecs[0][3] - tmins[0];
- r_polydesc.t_offset = fa->texinfo->vecs[1][3] - tmins[1];
+ r_polydesc.s_offset = fa->texinfo->offset[0] - tmins[0];
+ r_polydesc.t_offset = fa->texinfo->offset[1] - tmins[1];
// scrolling texture addition
- if (fa->texinfo->flags & SURF_FLOWING)
+ if (fa->texinfo->c.flags & SURF_FLOWING)
{
r_polydesc.s_offset += -128 * ( (r_newrefdef.time*0.25) - (int)(r_newrefdef.time*0.25) );
}
@@ -1295,9 +1180,9 @@ static void R_DrawPoly( int iswater )
*/
void R_DrawAlphaSurfaces( void )
{
- msurface_t *s = r_alpha_surfaces;
+ mface_t *s = r_alpha_surfaces;
- currentmodel = r_worldmodel;
+ //currentmodel = r_worldmodel;
modelorg[0] = -r_origin[0];
modelorg[1] = -r_origin[1];
@@ -1315,14 +1200,14 @@ void R_DrawAlphaSurfaces( void )
// R_ClipAndDrawPoly( 0.30f, ( s->texinfo->flags & SURF_WARP) != 0, qtrue );
// PGM - pass down all the texinfo flags, not just SURF_WARP.
- if (s->texinfo->flags & SURF_TRANS66)
- R_ClipAndDrawPoly( 0.60f, (s->texinfo->flags & (SURF_WARP|SURF_FLOWING)), qtrue );
+ if (s->texinfo->c.flags & SURF_TRANS66)
+ R_ClipAndDrawPoly( 0.60f, (s->texinfo->c.flags & (SURF_WARP|SURF_FLOWING)), qtrue );
else
- R_ClipAndDrawPoly( 0.30f, (s->texinfo->flags & (SURF_WARP|SURF_FLOWING)), qtrue );
+ R_ClipAndDrawPoly( 0.30f, (s->texinfo->c.flags & (SURF_WARP|SURF_FLOWING)), qtrue );
//PGM
//=======
- s = s->nextalphasurface;
+ s = s->next;
}
r_alpha_surfaces = NULL;