diff --git a/r_bsp.c b/r_bsp.c index 3fcbb62d..a9640f22 100644 --- a/r_bsp.c +++ b/r_bsp.c @@ -25,7 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // current entity info // qboolean insubmodel; -vec3_t modelorg; // modelorg is the viewpoint reletive to // the currently rendering entity vec3_t r_entorigin; // the currently rendering entity in world // coordinates @@ -165,10 +164,10 @@ void R_RotateBmodel (void) // // rotate modelorg and the transformation matrix // - R_EntityRotate (modelorg); - R_EntityRotate (vpn); - R_EntityRotate (vright); - R_EntityRotate (vup); + R_EntityRotate (tr.modelorg); + R_EntityRotate (RI.vforward); + R_EntityRotate (RI.vright); + R_EntityRotate (RI.vup); R_TransformFrustum (); } @@ -495,7 +494,7 @@ void R_RecursiveClipBPoly (bedge_t *pedges, mnode_t *pnode, msurface_t *psurf) pn = pnode->children[i]; // we're done with this branch if the node or leaf isn't in the PVS - if (pn->visframe == r_visframecount) + if (pn->visframe == tr.visframecount) { if (pn->contents < 0) { @@ -667,7 +666,7 @@ void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel, mnode_t *topnode) // find which side of the node we are on pplane = psurf->plane; - dot = DotProduct (modelorg, pplane->normal) - pplane->dist; + dot = DotProduct (tr.modelorg, pplane->normal) - pplane->dist; // draw the polygon if (( !(psurf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || @@ -742,7 +741,7 @@ void R_DrawSubmodelPolygons (model_t *pmodel, int clipflags, mnode_t *topnode) // find which side of the node we are on pplane = psurf->plane; - dot = DotProduct (modelorg, pplane->normal) - pplane->dist; + dot = DotProduct (tr.modelorg, pplane->normal) - pplane->dist; // draw the polygon if (((psurf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || @@ -779,7 +778,7 @@ void R_RecursiveWorldNode (mnode_t *node, int clipflags) if (node->contents == CONTENTS_SOLID) return; // solid - if (node->visframe != r_visframecount) + if (node->visframe != tr.visframecount) return; // cull the clipping planes if not trivial accept @@ -796,14 +795,14 @@ void R_RecursiveWorldNode (mnode_t *node, int clipflags) // FIXME: do with fast look-ups or integer tests based on the sign bit // of the floating point values - pindex = pfrustum_indexes[i]; + pindex = qfrustum.pfrustum_indexes[i]; rejectpt[0] = (float)node->minmaxs[pindex[0]]; rejectpt[1] = (float)node->minmaxs[pindex[1]]; rejectpt[2] = (float)node->minmaxs[pindex[2]]; - d = DotProduct (rejectpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; + d = DotProduct (rejectpt, qfrustum.view_clipplanes[i].normal); + d -= qfrustum.view_clipplanes[i].dist; if (d <= 0) return; @@ -812,8 +811,8 @@ void R_RecursiveWorldNode (mnode_t *node, int clipflags) acceptpt[1] = (float)node->minmaxs[pindex[3+1]]; acceptpt[2] = (float)node->minmaxs[pindex[3+2]]; - d = DotProduct (acceptpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; + d = DotProduct (acceptpt, qfrustum.view_clipplanes[i].normal); + d -= qfrustum.view_clipplanes[i].dist; if (d >= 0) clipflags &= ~(1<visframe = r_framecount; + (*mark)->visframe = tr.framecount; mark++; } while (--c); } @@ -858,16 +857,16 @@ void R_RecursiveWorldNode (mnode_t *node, int clipflags) switch (plane->type) { case PLANE_X: - dot = modelorg[0] - plane->dist; + dot = tr.modelorg[0] - plane->dist; break; case PLANE_Y: - dot = modelorg[1] - plane->dist; + dot = tr.modelorg[1] - plane->dist; break; case PLANE_Z: - dot = modelorg[2] - plane->dist; + dot = tr.modelorg[2] - plane->dist; break; default: - dot = DotProduct (modelorg, plane->normal) - plane->dist; + dot = DotProduct (tr.modelorg, plane->normal) - plane->dist; break; } @@ -891,7 +890,7 @@ void R_RecursiveWorldNode (mnode_t *node, int clipflags) do { if ((surf->flags & SURF_PLANEBACK) && - (surf->visframe == r_framecount)) + (surf->visframe == tr.framecount)) { R_RenderFace (surf, clipflags); } @@ -904,7 +903,7 @@ void R_RecursiveWorldNode (mnode_t *node, int clipflags) do { if (!(surf->flags & SURF_PLANEBACK) && - (surf->visframe == r_framecount)) + (surf->visframe == tr.framecount)) { R_RenderFace (surf, clipflags); } @@ -941,7 +940,7 @@ void R_RenderWorld (void) RI.currententity = gEngfuncs.GetEntityByIndex(0); //RI.currententity->frame = (int)(gpGlobals->time*2); - VectorCopy (r_origin, modelorg); + VectorCopy (RI.vieworg, tr.modelorg); RI.currentmodel = WORLDMODEL; r_pcurrentvertbase = RI.currentmodel->vertexes; diff --git a/r_decals.c b/r_decals.c index 9bca9e18..8aba9c42 100644 --- a/r_decals.c +++ b/r_decals.c @@ -566,7 +566,7 @@ static void R_AddDecalToSurface( decal_t *pdecal, msurface_t *surf, decalinfo_t } // force surface cache rebuild - surf->dlightframe = r_framecount + 1; + surf->dlightframe = tr.framecount + 1; // tag surface pdecal->psurface = surf; diff --git a/r_edge.c b/r_edge.c index eec6f19f..4da740af 100644 --- a/r_edge.c +++ b/r_edge.c @@ -78,7 +78,6 @@ static float fv; static int miplevel; float scale_for_mip; -int ubasestep, errorterm, erroradjustup, erroradjustdown; // FIXME: should go away extern void R_RotateBmodel (void); @@ -944,9 +943,9 @@ void D_TurbulentSurf (surf_t *s) RI.currententity = NULL; // &r_worldentity; VectorCopy (world_transformed_modelorg, transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); + VectorCopy (RI.base_vpn, RI.vforward); + VectorCopy (RI.base_vup, RI.vup); + VectorCopy (RI.base_vright, RI.vright); R_TransformFrustum (); } } @@ -1081,9 +1080,9 @@ void D_AlphaSurf (surf_t *s) VectorCopy (world_transformed_modelorg, transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); + VectorCopy (RI.base_vpn, RI.vforward); + VectorCopy (RI.base_vup, RI.vup); + VectorCopy (RI.base_vright, RI.vright); R_TransformFrustum (); } @@ -1184,9 +1183,9 @@ void D_SolidSurf (surf_t *s) // VectorCopy (world_transformed_modelorg, transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); + VectorCopy (RI.base_vpn, RI.vforward); + VectorCopy (RI.base_vup, RI.vup); + VectorCopy (RI.base_vright, RI.vright); R_TransformFrustum (); RI.currententity = NULL; //&r_worldentity; } @@ -1232,8 +1231,8 @@ void D_DrawSurfaces (void) surf_t *s; // currententity = NULL; //&r_worldentity; - VectorSubtract (RI.vieworg, vec3_origin, modelorg); - TransformVector (modelorg, transformed_modelorg); + VectorSubtract (RI.vieworg, vec3_origin, tr.modelorg); + TransformVector (tr.modelorg, transformed_modelorg); VectorCopy (transformed_modelorg, world_transformed_modelorg); if (!sw_drawflat->value) @@ -1269,7 +1268,7 @@ void D_DrawSurfaces (void) D_DrawflatSurfaces (); //RI.currententity = NULL; //&r_worldentity; - VectorSubtract (RI.vieworg, vec3_origin, modelorg); + VectorSubtract (RI.vieworg, vec3_origin, tr.modelorg); R_TransformFrustum (); } diff --git a/r_light.c b/r_light.c index 010e594b..0e4c2077 100644 --- a/r_light.c +++ b/r_light.c @@ -131,10 +131,10 @@ void R_MarkLights( dlight_t *light, int bit, mnode_t *node ) if( !BoundsAndSphereIntersect( surf->info->mins, surf->info->maxs, light->origin, light->radius )) continue; // no intersection - if( surf->dlightframe != r_framecount )//tr.dlightframecount ) + if( surf->dlightframe != tr.framecount )//tr.dlightframecount ) { surf->dlightbits = 0; - surf->dlightframe = r_framecount; //tr.dlightframecount; + surf->dlightframe = tr.framecount; //tr.dlightframecount; } surf->dlightbits |= bit; } diff --git a/r_local.h b/r_local.h index d3a6610d..6b186e88 100644 --- a/r_local.h +++ b/r_local.h @@ -186,6 +186,11 @@ typedef struct vec3_t vright; vec3_t vup; + + vec3_t base_vup; + vec3_t base_vpn; + vec3_t base_vright; + vec3_t cullorigin; vec3_t cull_vforward; vec3_t cull_vright; @@ -232,13 +237,8 @@ typedef struct float fvrectright_adj, fvrectbottom_adj; // right and bottom edges, for clamping float fvrectright; // rightmost edge, for Alias clamping - float fvrectbottom; // bottommost edge, for Alias clamping - float horizontalFieldOfView; // at Z = 1.0, this many X is visible - // 2.0 = 90 degrees - float xOrigin; // should probably always be 0.5 - float yOrigin; // between be around 0.3 to 0.5 + float fvrectbottom; // bottommost edge, for Alias clampin - int ambientlight; } ref_instance_t; @@ -1067,8 +1067,6 @@ VARS ==================================================== */ -//extern int d_spanpixcount; -extern int r_framecount; // sequence # of current frame since Quake // started extern float r_aliasuvscale; // scale-up factor for screen u and v // on Alias vertices passed to driver @@ -1143,10 +1141,6 @@ extern int sintable[1280]; extern int intsintable[1280]; extern int blanktable[1280]; // PGM -extern vec3_t vup, base_vup; -extern vec3_t vpn, base_vpn; -extern vec3_t vright, base_vright; - extern surf_t *surfaces, *surface_p, *surf_max; // surfaces are generated in back to front order by the bsp, so if a surf @@ -1178,15 +1172,11 @@ extern edge_t edge_head; extern edge_t edge_tail; extern edge_t edge_aftertail; - -extern int r_frustum_indexes[4*6]; extern qboolean r_surfsonstack; -extern mleaf_t *r_viewleaf; extern int r_viewcluster, r_oldviewcluster; extern int r_clipflags; -extern int r_dlightframecount; //extern qboolean r_fov_greater_than_90; @@ -1215,19 +1205,16 @@ extern cvar_t *tracerblue; extern cvar_t *traceralpha; - -extern vec3_t modelorg; -extern vec3_t r_origin; -extern mplane_t screenedge[4]; - - -extern clipplane_t view_clipplanes[4]; -extern int *pfrustum_indexes[4]; +extern struct qfrustum_s { + mplane_t screenedge[4]; + clipplane_t view_clipplanes[4]; + int frustum_indexes[4*6]; + int *pfrustum_indexes[4]; +} qfrustum; extern cvar_t *r_fullbright; #define CACHESPOT(surf) ((surfcache_t**)surf->info->reserved) -extern int r_visframecount; extern int r_currentkey; extern int r_currentbkey; extern qboolean insubmodel; @@ -1237,7 +1224,6 @@ extern vec3_t r_entorigin; extern int r_leafkeys[MAX_MAP_LEAFS]; #define LEAF_KEY(pleaf) r_leafkeys[(pleaf - WORLDMODEL->leafs)] -extern int ubasestep, errorterm, erroradjustup, erroradjustdown; extern mvertex_t *r_pcurrentvertbase; diff --git a/r_main.c b/r_main.c index 87fc4ed9..c7d2ee6c 100644 --- a/r_main.c +++ b/r_main.c @@ -30,10 +30,6 @@ ref_instance_t RI; // view origin // -vec3_t vup, base_vup; -vec3_t vpn, base_vpn; -vec3_t vright, base_vright; -vec3_t r_origin; // // screen size info @@ -46,26 +42,18 @@ float aliasxscale, aliasyscale, aliasxcenter, aliasycenter; int r_screenwidth; -float verticalFieldOfView; -float xOrigin, yOrigin; -mplane_t screenedge[4]; // // refresh flags // -int r_framecount = 1; // so frame counts initialized to 0 don't match -int r_visframecount; + //int d_spanpixcount; //int r_polycount; //int r_drawnpolycount; //int r_wholepolycount; -int *pfrustum_indexes[4]; -int r_frustum_indexes[4*6]; - -mleaf_t *r_viewleaf; int r_viewcluster, r_oldviewcluster; cvar_t *r_lefthand; @@ -1152,14 +1140,14 @@ int R_BmodelCheckBBox (float *minmaxs) // FIXME: do with fast look-ups or integer tests based on the sign bit // of the floating point values - pindex = pfrustum_indexes[i]; + pindex = qfrustum.pfrustum_indexes[i]; rejectpt[0] = minmaxs[pindex[0]]; rejectpt[1] = minmaxs[pindex[1]]; rejectpt[2] = minmaxs[pindex[2]]; - d = DotProduct (rejectpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; + d = DotProduct (rejectpt, qfrustum.view_clipplanes[i].normal); + d -= qfrustum.view_clipplanes[i].dist; if (d <= 0) return BMODEL_FULLY_CLIPPED; @@ -1168,8 +1156,8 @@ int R_BmodelCheckBBox (float *minmaxs) acceptpt[1] = minmaxs[pindex[3+1]]; acceptpt[2] = minmaxs[pindex[3+2]]; - d = DotProduct (acceptpt, view_clipplanes[i].normal); - d -= view_clipplanes[i].dist; + d = DotProduct (acceptpt, qfrustum.view_clipplanes[i].normal); + d -= qfrustum.view_clipplanes[i].dist; if (d <= 0) clipflags |= (1<visframe != r_visframecount) + if (node->visframe != tr.visframecount) return NULL; // not visible at all if (node->contents < 0) @@ -1293,7 +1281,7 @@ void R_DrawBEntitiesOnList (void) float minmaxs[6]; mnode_t *topnode; - VectorCopy (modelorg, oldorigin); + VectorCopy (tr.modelorg, oldorigin); insubmodel = true; //r_dlightframecount = r_framecount; @@ -1335,7 +1323,7 @@ void R_DrawBEntitiesOnList (void) continue; // no part in a visible leaf VectorCopy (RI.currententity->origin, r_entorigin); - VectorSubtract (r_origin, r_entorigin, modelorg); + VectorSubtract (RI.vieworg, r_entorigin, tr.modelorg); //VectorSubtract (r_origin, RI.currententity->origin, modelorg); r_pcurrentvertbase = RI.currentmodel->vertexes; @@ -1394,10 +1382,10 @@ void R_DrawBEntitiesOnList (void) // put back world rotation and frustum clipping // FIXME: R_RotateBmodel should just work off base_vxx - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - VectorCopy (oldorigin, modelorg); + VectorCopy (RI.base_vpn, RI.vforward); + VectorCopy (RI.base_vup, RI.vup); + VectorCopy (RI.base_vright, RI.vright); + VectorCopy (oldorigin, tr.modelorg); R_TransformFrustum (); } @@ -1451,7 +1439,7 @@ void R_DrawBrushModel(cl_entity_t *pent) R_BeginEdgeFrame(); - VectorCopy (modelorg, oldorigin); + VectorCopy (tr.modelorg, oldorigin); insubmodel = true; //r_dlightframecount = r_framecount; @@ -1489,7 +1477,7 @@ void R_DrawBrushModel(cl_entity_t *pent) alphaspans = true; VectorCopy (RI.currententity->origin, r_entorigin); - VectorSubtract (r_origin, r_entorigin, modelorg); + VectorSubtract (RI.vieworg, r_entorigin, tr.modelorg); //VectorSubtract (r_origin, RI.currententity->origin, modelorg); r_pcurrentvertbase = RI.currentmodel->vertexes; @@ -1548,10 +1536,10 @@ void R_DrawBrushModel(cl_entity_t *pent) // put back world rotation and frustum clipping // FIXME: R_RotateBmodel should just work off base_vxx - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - VectorCopy (oldorigin, modelorg); + VectorCopy (RI.base_vpn, RI.vforward); + VectorCopy (RI.base_vup, RI.vup); + VectorCopy (RI.base_vright, RI.vright); + VectorCopy (oldorigin, tr.modelorg); R_TransformFrustum (); @@ -1704,7 +1692,7 @@ void R_MarkLeaves (void) if (r_oldviewcluster == r_viewcluster && !r_novis->value && r_viewcluster != -1) return; - r_visframecount++; + tr.visframecount++; r_oldviewcluster = r_viewcluster; gEngfuncs.R_FatPVS( RI.pvsorigin, REFPVS_RADIUS, RI.visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), false ); @@ -1717,9 +1705,9 @@ void R_MarkLeaves (void) node = (mnode_t *) &WORLDMODEL->leafs[i+1]; do { - if (node->visframe == r_visframecount) + if (node->visframe == tr.visframecount) break; - node->visframe = r_visframecount; + node->visframe = tr.visframecount; node = node->parent; } while (node); } @@ -2098,12 +2086,10 @@ qboolean R_Init() // init draw stack tr.draw_list = &tr.draw_stack[0]; tr.draw_stack_pos = 0; - RI.yOrigin = YCENTERING; - RI.xOrigin = XCENTERING; - view_clipplanes[0].leftedge = true; - view_clipplanes[1].rightedge = true; - view_clipplanes[1].leftedge = view_clipplanes[2].leftedge =view_clipplanes[3].leftedge = false; - view_clipplanes[0].rightedge = view_clipplanes[2].rightedge = view_clipplanes[3].rightedge = false; + qfrustum.view_clipplanes[0].leftedge = true; + qfrustum.view_clipplanes[1].rightedge = true; + qfrustum.view_clipplanes[1].leftedge = qfrustum.view_clipplanes[2].leftedge =qfrustum.view_clipplanes[3].leftedge = false; + qfrustum.view_clipplanes[0].rightedge = qfrustum.view_clipplanes[2].rightedge = qfrustum.view_clipplanes[3].rightedge = false; R_StudioInit(); R_SpriteInit(); R_InitTurb(); diff --git a/r_misc.c b/r_misc.c index 27f7f857..7e26dd29 100644 --- a/r_misc.c +++ b/r_misc.c @@ -40,7 +40,7 @@ static float basemip[NUM_MIPS-1] = {1.0, 0.5*0.8, 0.25*0.8}; int d_scantable[MAXHEIGHT]; short *zspantable[MAXHEIGHT]; - +struct qfrustum_s qfrustum; /* ================ D_Patch @@ -132,17 +132,17 @@ void R_TransformFrustum (void) for (i=0 ; i<4 ; i++) { - v[0] = screenedge[i].normal[2]; - v[1] = -screenedge[i].normal[0]; - v[2] = screenedge[i].normal[1]; + v[0] = qfrustum.screenedge[i].normal[2]; + v[1] = -qfrustum.screenedge[i].normal[0]; + v[2] = qfrustum.screenedge[i].normal[1]; - v2[0] = v[1]*vright[0] + v[2]*vup[0] + v[0]*vpn[0]; - v2[1] = v[1]*vright[1] + v[2]*vup[1] + v[0]*vpn[1]; - v2[2] = v[1]*vright[2] + v[2]*vup[2] + v[0]*vpn[2]; + v2[0] = v[1]*RI.vright[0] + v[2]*RI.vup[0] + v[0]*RI.vforward[0]; + v2[1] = v[1]*RI.vright[1] + v[2]*RI.vup[1] + v[0]*RI.vforward[1]; + v2[2] = v[1]*RI.vright[2] + v[2]*RI.vup[2] + v[0]*RI.vforward[2]; - VectorCopy (v2, view_clipplanes[i].normal); + VectorCopy (v2, qfrustum.view_clipplanes[i].normal); - view_clipplanes[i].dist = DotProduct (modelorg, v2); + qfrustum.view_clipplanes[i].dist = DotProduct (tr.modelorg, v2); } } @@ -154,9 +154,9 @@ TransformVector */ void TransformVector (vec3_t in, vec3_t out) { - out[0] = DotProduct(in,vright); - out[1] = DotProduct(in,vup); - out[2] = DotProduct(in,vpn); + out[0] = DotProduct(in,RI.vright); + out[1] = DotProduct(in,RI.vup); + out[2] = DotProduct(in,RI.vforward); } /* @@ -184,13 +184,13 @@ void R_SetUpFrustumIndexes (void) { int i, j, *pindex; - pindex = r_frustum_indexes; + pindex = qfrustum.frustum_indexes; for (i=0 ; i<4 ; i++) { for (j=0 ; j<3 ; j++) { - if (view_clipplanes[i].normal[j] < 0) + if (qfrustum.view_clipplanes[i].normal[j] < 0) { pindex[j] = j; pindex[j+3] = j+3; @@ -203,7 +203,7 @@ void R_SetUpFrustumIndexes (void) } // FIXME: do just once at start - pfrustum_indexes[i] = pindex; + qfrustum.pfrustum_indexes[i] = pindex; pindex += 6; } } @@ -219,11 +219,11 @@ Guaranteed to be called before the first refresh void R_ViewChanged (vrect_t *vr) { int i; - float verticalFieldOfView, xOrigin, yOrigin; + float verticalFieldOfView, horizontalFieldOfView, xOrigin, yOrigin; RI.vrect = *vr; - RI.horizontalFieldOfView = 2*tan((float)RI.fov_x/360*M_PI); + horizontalFieldOfView = 2*tan((float)RI.fov_x/360*M_PI); verticalFieldOfView = 2*tan((float)RI.fov_y/360*M_PI); RI.fvrectx = (float)RI.vrect.x; @@ -249,8 +249,8 @@ void R_ViewChanged (vrect_t *vr) RI.aliasvrectbottom = RI.aliasvrect.y + RI.aliasvrect.height; - xOrigin = RI.xOrigin;// = r_origin[0]; - yOrigin = RI.yOrigin;// = r_origin[1]; + xOrigin = XCENTERING; + yOrigin = YCENTERING; #define PLANE_ANYZ 5 // values for perspective projection // if math were exact, the values would range from 0.5 to to range+0.5 @@ -265,7 +265,7 @@ void R_ViewChanged (vrect_t *vr) RI.vrect.y - 0.5; aliasycenter = ycenter * r_aliasuvscale; - xscale = RI.vrect.width / RI.horizontalFieldOfView; + xscale = RI.vrect.width / horizontalFieldOfView; aliasxscale = xscale * r_aliasuvscale; xscaleinv = 1.0 / xscale; @@ -276,32 +276,32 @@ void R_ViewChanged (vrect_t *vr) //yscaleshrink = xscaleshrink; // left side clip - screenedge[0].normal[0] = -1.0 / (xOrigin*RI.horizontalFieldOfView); - screenedge[0].normal[1] = 0; - screenedge[0].normal[2] = 1; - screenedge[0].type = PLANE_ANYZ; + qfrustum.screenedge[0].normal[0] = -1.0 / (xOrigin*horizontalFieldOfView); + qfrustum.screenedge[0].normal[1] = 0; + qfrustum.screenedge[0].normal[2] = 1; + qfrustum.screenedge[0].type = PLANE_ANYZ; // right side clip - screenedge[1].normal[0] = - 1.0 / ((1.0-xOrigin)*RI.horizontalFieldOfView); - screenedge[1].normal[1] = 0; - screenedge[1].normal[2] = 1; - screenedge[1].type = PLANE_ANYZ; + qfrustum.screenedge[1].normal[0] = + 1.0 / ((1.0-xOrigin)*horizontalFieldOfView); + qfrustum.screenedge[1].normal[1] = 0; + qfrustum.screenedge[1].normal[2] = 1; + qfrustum.screenedge[1].type = PLANE_ANYZ; // top side clip - screenedge[2].normal[0] = 0; - screenedge[2].normal[1] = -1.0 / (yOrigin*verticalFieldOfView); - screenedge[2].normal[2] = 1; - screenedge[2].type = PLANE_ANYZ; + qfrustum.screenedge[2].normal[0] = 0; + qfrustum.screenedge[2].normal[1] = -1.0 / (yOrigin*verticalFieldOfView); + qfrustum.screenedge[2].normal[2] = 1; + qfrustum.screenedge[2].type = PLANE_ANYZ; // bottom side clip - screenedge[3].normal[0] = 0; - screenedge[3].normal[1] = 1.0 / ((1.0-yOrigin)*verticalFieldOfView); - screenedge[3].normal[2] = 1; - screenedge[3].type = PLANE_ANYZ; + qfrustum.screenedge[3].normal[0] = 0; + qfrustum.screenedge[3].normal[1] = 1.0 / ((1.0-yOrigin)*verticalFieldOfView); + qfrustum.screenedge[3].normal[2] = 1; + qfrustum.screenedge[3].type = PLANE_ANYZ; for (i=0 ; i<4 ; i++) - VectorNormalize (screenedge[i].normal); + VectorNormalize (qfrustum.screenedge[i].normal); D_ViewChanged (); } @@ -323,20 +323,19 @@ void R_SetupFrameQ (void) D_FlushCaches( false ); // so all lighting changes } - r_framecount++; + //tr.framecount++; // build the transformation matrix for the given view angles - VectorCopy (RI.vieworg, modelorg); - VectorCopy (RI.vieworg, r_origin); + VectorCopy (RI.vieworg, tr.modelorg); - AngleVectors (RI.viewangles, vpn, vright, vup); + //AngleVectors (RI.viewangles, RI.vforward, RI.vright, RI.vup); // current viewleaf if ( RI.drawWorld ) { - r_viewleaf = gEngfuncs.Mod_PointInLeaf (r_origin, WORLDMODEL->nodes); - r_viewcluster = r_viewleaf->cluster; + RI.viewleaf = gEngfuncs.Mod_PointInLeaf (RI.vieworg, WORLDMODEL->nodes); + r_viewcluster = RI.viewleaf->cluster; } // if (sw_waterwarp->value && (r_newrefdef.rdflags & RDF_UNDERWATER) ) @@ -372,9 +371,9 @@ void R_SetupFrameQ (void) R_SetUpFrustumIndexes (); // save base values - VectorCopy (vpn, base_vpn); - VectorCopy (vright, base_vright); - VectorCopy (vup, base_vup); + VectorCopy (RI.vforward, RI.base_vpn); + VectorCopy (RI.vright, RI.base_vright); + VectorCopy (RI.vup, RI.base_vup); // clear frame counts /* c_faceclip = 0; diff --git a/r_polyse.c b/r_polyse.c index abededfa..cd23a7f0 100644 --- a/r_polyse.c +++ b/r_polyse.c @@ -90,6 +90,8 @@ int d_sfracbasestep, d_tfracbasestep; int d_ziextrastep, d_zibasestep; int d_pzextrastep, d_pzbasestep; +static int ubasestep, errorterm, erroradjustup, erroradjustdown; + typedef struct { int quotient; int remainder; diff --git a/r_rast.c b/r_rast.c index fb326714..ba6aed4b 100644 --- a/r_rast.c +++ b/r_rast.c @@ -35,7 +35,6 @@ int c_faceclip; // number of faces clipped clipplane_t *entity_clipplanes; -clipplane_t view_clipplanes[4]; clipplane_t world_clipplanes[16]; medge_t *r_pedge; @@ -239,7 +238,7 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1) world = &pv0->position[0]; // transform and project - VectorSubtract (world, modelorg, local); + VectorSubtract (world, tr.modelorg, local); TransformVector (local, transformed); if (transformed[2] < NEAR_CLIP) @@ -268,7 +267,7 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1) world = &pv1->position[0]; // transform and project - VectorSubtract (world, modelorg, local); + VectorSubtract (world, tr.modelorg, local); TransformVector (local, transformed); if (transformed[2] < NEAR_CLIP) @@ -312,7 +311,7 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1) if (cacheoffset != 0x7FFFFFFF) { cacheoffset = FULLY_CLIPPED_CACHED | - (r_framecount & FRAMECOUNT_MASK); + (tr.framecount & FRAMECOUNT_MASK); } return; // horizontal edge @@ -471,7 +470,7 @@ void R_ClipEdge (mvertex_t *pv0, mvertex_t *pv1, clipplane_t *clip) // we do cache fully clipped edges if (!r_leftclipped) cacheoffset = FULLY_CLIPPED_CACHED | - (r_framecount & FRAMECOUNT_MASK); + (tr.framecount & FRAMECOUNT_MASK); return; } @@ -590,8 +589,8 @@ void R_RenderFace (msurface_t *fa, int clipflags) { if (clipflags & mask) { - view_clipplanes[i].next = pclip; - pclip = &view_clipplanes[i]; + qfrustum.view_clipplanes[i].next = pclip; + pclip = &qfrustum.view_clipplanes[i]; } } @@ -617,7 +616,7 @@ void R_RenderFace (msurface_t *fa, int clipflags) if (r_pedge->cachededgeoffset & FULLY_CLIPPED_CACHED) { if ((r_pedge->cachededgeoffset & FRAMECOUNT_MASK) == - r_framecount) + tr.framecount) { r_lastvertvalid = false; continue; @@ -661,7 +660,7 @@ void R_RenderFace (msurface_t *fa, int clipflags) if (r_pedge->cachededgeoffset & FULLY_CLIPPED_CACHED) { if ((r_pedge->cachededgeoffset & FRAMECOUNT_MASK) == - r_framecount) + tr.framecount) { r_lastvertvalid = false; continue; @@ -715,7 +714,7 @@ void R_RenderFace (msurface_t *fa, int clipflags) r_pedge = &tedge; r_lastvertvalid = false; r_nearzionly = true; - R_ClipEdge (&r_rightexit, &r_rightenter, view_clipplanes[1].next); + R_ClipEdge (&r_rightexit, &r_rightenter, qfrustum.view_clipplanes[1].next); } // if no edges made it out, return without posting the surface @@ -737,7 +736,7 @@ void R_RenderFace (msurface_t *fa, int clipflags) // FIXME: cache this? TransformVector (pplane->normal, p_normal); // FIXME: cache this? - distinv = 1.0 / (pplane->dist - DotProduct (modelorg, pplane->normal)); + distinv = 1.0 / (pplane->dist - DotProduct (tr.modelorg, pplane->normal)); surface_p->d_zistepu = p_normal[0] * xscaleinv * distinv; surface_p->d_zistepv = -p_normal[1] * yscaleinv * distinv; @@ -797,8 +796,8 @@ void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf) { if (r_clipflags & mask) { - view_clipplanes[i].next = pclip; - pclip = &view_clipplanes[i]; + qfrustum.view_clipplanes[i].next = pclip; + pclip = &qfrustum.view_clipplanes[i]; } } @@ -836,7 +835,7 @@ void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf) { r_pedge = &tedge; r_nearzionly = true; - R_ClipEdge (&r_rightexit, &r_rightenter, view_clipplanes[1].next); + R_ClipEdge (&r_rightexit, &r_rightenter, qfrustum.view_clipplanes[1].next); } // if no edges made it out, return without posting the surface @@ -858,7 +857,7 @@ void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf) // FIXME: cache this? TransformVector (pplane->normal, p_normal); // FIXME: cache this? - distinv = 1.0 / (pplane->dist - DotProduct (modelorg, pplane->normal)); + distinv = 1.0 / (pplane->dist - DotProduct (tr.modelorg, pplane->normal)); surface_p->d_zistepu = p_normal[0] * xscaleinv * distinv; surface_p->d_zistepv = -p_normal[1] * yscaleinv * distinv; diff --git a/r_surf.c b/r_surf.c index 533d7acf..633657e4 100644 --- a/r_surf.c +++ b/r_surf.c @@ -217,7 +217,7 @@ static void R_BuildLightMap( ) } // add all the dynamic lights - if( surf->dlightframe == r_framecount ) + if( surf->dlightframe == tr.framecount ) R_AddDynamicLights( surf ); // Put into texture format @@ -1148,12 +1148,12 @@ surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel) { if( tr.lightstylevalue[surface->styles[maps]] != surface->cached_light[maps] ) { - surface->dlightframe = r_framecount; + surface->dlightframe = tr.framecount; } } - if (cache && !cache->dlight && surface->dlightframe != r_framecount + if (cache && !cache->dlight && surface->dlightframe != tr.framecount && cache->image == r_drawsurf.image && cache->lightadj[0] == r_drawsurf.lightadj[0] && cache->lightadj[1] == r_drawsurf.lightadj[1] @@ -1161,7 +1161,7 @@ surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel) && cache->lightadj[3] == r_drawsurf.lightadj[3] ) return cache; - if( surface->dlightframe == r_framecount ) + if( surface->dlightframe == tr.framecount ) { int i; // invalidate dlight cache @@ -1193,7 +1193,7 @@ surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel) cache->mipscale = surfscale; } - if (surface->dlightframe == r_framecount) + if (surface->dlightframe == tr.framecount) cache->dlight = 1; else cache->dlight = 0; diff --git a/r_trialias.c b/r_trialias.c index 4c74c533..29fab753 100644 --- a/r_trialias.c +++ b/r_trialias.c @@ -96,9 +96,9 @@ void R_SetUpWorldTransform (void) aliasoldworldtransform[i][0] = aliasworldtransform[i][2] = s_alias_up[i]; } - aliasworldtransform[0][3] = -r_origin[0]; - aliasworldtransform[1][3] = -r_origin[1]; - aliasworldtransform[2][3] = -r_origin[2]; + aliasworldtransform[0][3] = -RI.vieworg[0]; + aliasworldtransform[1][3] = -RI.vieworg[1]; + aliasworldtransform[2][3] = -RI.vieworg[2]; //aliasoldworldtransform[0][3] = RI.currententity->oldorigin[0]-r_origin[0]; //aliasoldworldtransform[1][3] = RI.currententity->oldorigin[1]-r_origin[1]; @@ -110,11 +110,11 @@ void R_SetUpWorldTransform (void) // R_ConcatTransforms (t2matrix, tmatrix, rotationmatrix); // TODO: should be global, set when vright, etc., set - VectorCopy (vright, viewmatrix[0]); - VectorCopy (vup, viewmatrix[1]); + VectorCopy (RI.vright, viewmatrix[0]); + VectorCopy (RI.vup, viewmatrix[1]); VectorInverse (viewmatrix[1]); //VectorScale(viewmatrix[1], -1, viewmatrix[1]); - VectorCopy (vpn, viewmatrix[2]); + VectorCopy (RI.vforward, viewmatrix[2]); viewmatrix[0][3] = 0; viewmatrix[1][3] = 0; @@ -169,9 +169,9 @@ void R_AliasSetUpTransform (void) aliasoldworldtransform[i][0] = aliasworldtransform[i][2] = s_alias_up[i]; } - aliasworldtransform[0][3] = RI.currententity->origin[0]-r_origin[0]; - aliasworldtransform[1][3] = RI.currententity->origin[1]-r_origin[1]; - aliasworldtransform[2][3] = RI.currententity->origin[2]-r_origin[2]; + aliasworldtransform[0][3] = RI.currententity->origin[0]-RI.vieworg[0]; + aliasworldtransform[1][3] = RI.currententity->origin[1]-RI.vieworg[1]; + aliasworldtransform[2][3] = RI.currententity->origin[2]-RI.vieworg[2]; //aliasoldworldtransform[0][3] = RI.currententity->oldorigin[0]-r_origin[0]; //aliasoldworldtransform[1][3] = RI.currententity->oldorigin[1]-r_origin[1]; @@ -183,11 +183,11 @@ void R_AliasSetUpTransform (void) // R_ConcatTransforms (t2matrix, tmatrix, rotationmatrix); // TODO: should be global, set when vright, etc., set - VectorCopy (vright, viewmatrix[0]); - VectorCopy (vup, viewmatrix[1]); + VectorCopy (RI.vright, viewmatrix[0]); + VectorCopy (RI.vup, viewmatrix[1]); VectorInverse (viewmatrix[1]); //VectorScale(viewmatrix[1], -1, viewmatrix[1]); - VectorCopy (vpn, viewmatrix[2]); + VectorCopy (RI.vforward, viewmatrix[2]); viewmatrix[0][3] = 0; viewmatrix[1][3] = 0;