diff options
author | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
commit | 1526e22e4ff29153e9c127081e8ea8d9e2f33b8c (patch) | |
tree | b361766433d4a7b4a111865afd52803e2bbf7754 /source/sw_poly.c | |
parent | e826e5f176f21cd18b3bbc22887a266835ada57c (diff) |
Split some monolithic include files into smaller ones.
Use single BSP models cache for refresh and collision subsystems.
Refresh libraries may not longer be dynamically loaded.
Made gi.TagMalloc use separate tag namespace to avoid
conflicts with engine reserverd tags.
Fixed listing order of MVD channels in chooser menu.
A lot of misc changes... MSVC build is definitely broken now.
Diffstat (limited to 'source/sw_poly.c')
-rw-r--r-- | source/sw_poly.c | 163 |
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; |