1 /* 2 Copyright (C) 1996-1997 Id Software, Inc. 3 4 This program is free software; you can redistribute it and/or 5 modify it under the terms of the GNU General Public License 6 as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13 See the GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 // r_local.h -- private refresh defs 21 22 #ifndef GLQUAKE 23 #include "r_shared.h" 24 25 #define ALIAS_BASE_SIZE_RATIO (1.0 / 11.0) 26 // normalizing factor so player model works out to about 27 // 1 pixel per triangle 28 29 #define BMODEL_FULLY_CLIPPED 0x10 // value returned by R_BmodelCheckBBox () 30 // if bbox is trivially rejected 31 32 //=========================================================================== 33 // viewmodel lighting 34 35 typedef struct { 36 int ambientlight; 37 int shadelight; 38 float *plightvec; 39 } alight_t; 40 41 //=========================================================================== 42 // clipped bmodel edges 43 44 typedef struct bedge_s 45 { 46 mvertex_t *v[2]; 47 struct bedge_s *pnext; 48 } bedge_t; 49 50 typedef struct { 51 float fv[3]; // viewspace x, y 52 } auxvert_t; 53 54 //=========================================================================== 55 56 extern cvar_t r_draworder; 57 extern cvar_t r_speeds; 58 extern cvar_t r_timegraph; 59 extern cvar_t r_graphheight; 60 extern cvar_t r_clearcolor; 61 extern cvar_t r_waterwarp; 62 extern cvar_t r_fullbright; 63 extern cvar_t r_drawentities; 64 extern cvar_t r_aliasstats; 65 extern cvar_t r_dspeeds; 66 extern cvar_t r_drawflat; 67 extern cvar_t r_ambient; 68 extern cvar_t r_reportsurfout; 69 extern cvar_t r_maxsurfs; 70 extern cvar_t r_numsurfs; 71 extern cvar_t r_reportedgeout; 72 extern cvar_t r_maxedges; 73 extern cvar_t r_numedges; 74 75 #define XCENTERING (1.0 / 2.0) 76 #define YCENTERING (1.0 / 2.0) 77 78 #define CLIP_EPSILON 0.001 79 80 #define BACKFACE_EPSILON 0.01 81 82 //=========================================================================== 83 84 #define DIST_NOT_SET 98765 85 86 // !!! if this is changed, it must be changed in asm_draw.h too !!! 87 typedef struct clipplane_s 88 { 89 vec3_t normal; 90 float dist; 91 struct clipplane_s *next; 92 byte leftedge; 93 byte rightedge; 94 byte reserved[2]; 95 } clipplane_t; 96 97 extern clipplane_t view_clipplanes[4]; 98 99 //============================================================================= 100 101 void R_RenderWorld (void); 102 103 //============================================================================= 104 105 extern mplane_t screenedge[4]; 106 107 extern vec3_t r_origin; 108 109 extern vec3_t r_entorigin; 110 111 extern float screenAspect; 112 extern float verticalFieldOfView; 113 extern float xOrigin, yOrigin; 114 115 extern int r_visframecount; 116 117 //============================================================================= 118 119 extern int vstartscan; 120 121 122 void R_ClearPolyList (void); 123 void R_DrawPolyList (void); 124 125 // 126 // current entity info 127 // 128 extern qboolean insubmodel; 129 extern vec3_t r_worldmodelorg; 130 131 132 void R_DrawSprite (void); 133 void R_RenderFace (msurface_t *fa, int clipflags); 134 void R_RenderPoly (msurface_t *fa, int clipflags); 135 void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf); 136 void R_TransformPlane (mplane_t *p, float *normal, float *dist); 137 void R_TransformFrustum (void); 138 void R_SetSkyFrame (void); 139 void R_DrawSurfaceBlock16 (void); 140 void R_DrawSurfaceBlock8 (void); 141 texture_t *R_TextureAnimation (texture_t *base); 142 143 #if id386 144 145 void R_DrawSurfaceBlock8_mip0 (void); 146 void R_DrawSurfaceBlock8_mip1 (void); 147 void R_DrawSurfaceBlock8_mip2 (void); 148 void R_DrawSurfaceBlock8_mip3 (void); 149 150 #endif 151 152 void R_GenSkyTile (void *pdest); 153 void R_GenSkyTile16 (void *pdest); 154 void R_Surf8Patch (void); 155 void R_Surf16Patch (void); 156 void R_DrawSubmodelPolygons (model_t *pmodel, int clipflags); 157 void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel); 158 159 void R_AddPolygonEdges (emitpoint_t *pverts, int numverts, int miplevel); 160 surf_t *R_GetSurf (void); 161 void R_AliasDrawModel (alight_t *plighting); 162 void R_BeginEdgeFrame (void); 163 void R_ScanEdges (void); 164 void D_DrawSurfaces (void); 165 void R_InsertNewEdges (edge_t *edgestoadd, edge_t *edgelist); 166 void R_StepActiveU (edge_t *pedge); 167 void R_RemoveEdges (edge_t *pedge); 168 169 extern void R_Surf8Start (void); 170 extern void R_Surf8End (void); 171 extern void R_Surf16Start (void); 172 extern void R_Surf16End (void); 173 extern void R_EdgeCodeStart (void); 174 extern void R_EdgeCodeEnd (void); 175 176 extern void R_RotateBmodel (void); 177 178 extern int c_faceclip; 179 extern int r_polycount; 180 extern int r_wholepolycount; 181 182 extern model_t *cl_worldmodel; 183 184 extern int *pfrustum_indexes[4]; 185 186 // !!! if this is changed, it must be changed in asm_draw.h too !!! 187 #define NEAR_CLIP 0.01 188 189 extern int ubasestep, errorterm, erroradjustup, erroradjustdown; 190 extern int vstartscan; 191 192 extern fixed16_t sadjust, tadjust; 193 extern fixed16_t bbextents, bbextentt; 194 195 #define MAXBVERTINDEXES 1000 // new clipped vertices when clipping bmodels 196 // to the world BSP 197 extern mvertex_t *r_ptverts, *r_ptvertsmax; 198 199 extern vec3_t sbaseaxis[3], tbaseaxis[3]; 200 extern float entity_rotation[3][3]; 201 202 extern int reinit_surfcache; 203 204 extern int r_currentkey; 205 extern int r_currentbkey; 206 207 typedef struct btofpoly_s { 208 int clipflags; 209 msurface_t *psurf; 210 } btofpoly_t; 211 212 #define MAX_BTOFPOLYS 5000 // FIXME: tune this 213 214 extern int numbtofpolys; 215 extern btofpoly_t *pbtofpolys; 216 217 void R_InitTurb (void); 218 void R_ZDrawSubmodelPolys (model_t *clmodel); 219 220 //========================================================= 221 // Alias models 222 //========================================================= 223 224 #define MAXALIASVERTS 2000 // TODO: tune this 225 #define ALIAS_Z_CLIP_PLANE 5 226 227 extern int numverts; 228 extern int a_skinwidth; 229 extern mtriangle_t *ptriangles; 230 extern int numtriangles; 231 extern aliashdr_t *paliashdr; 232 extern mdl_t *pmdl; 233 extern float leftclip, topclip, rightclip, bottomclip; 234 extern int r_acliptype; 235 extern finalvert_t *pfinalverts; 236 extern auxvert_t *pauxverts; 237 238 qboolean R_AliasCheckBBox (void); 239 240 //========================================================= 241 // turbulence stuff 242 243 #define AMP 8*0x10000 244 #define AMP2 3 245 #define SPEED 20 246 247 //========================================================= 248 // particle stuff 249 250 void R_DrawParticles (void); 251 void R_InitParticles (void); 252 void R_ClearParticles (void); 253 void R_ReadPointFile_f (void); 254 void R_SurfacePatch (void); 255 256 extern int r_amodels_drawn; 257 extern edge_t *auxedges; 258 extern int r_numallocatededges; 259 extern edge_t *r_edges, *edge_p, *edge_max; 260 261 extern edge_t *newedges[MAXHEIGHT]; 262 extern edge_t *removeedges[MAXHEIGHT]; 263 264 extern int screenwidth; 265 266 // FIXME: make stack vars when debugging done 267 extern edge_t edge_head; 268 extern edge_t edge_tail; 269 extern edge_t edge_aftertail; 270 extern int r_bmodelactive; 271 extern vrect_t *pconupdate; 272 273 extern float aliasxscale, aliasyscale, aliasxcenter, aliasycenter; 274 extern float r_aliastransition, r_resfudge; 275 276 extern int r_outofsurfaces; 277 extern int r_outofedges; 278 279 extern mvertex_t *r_pcurrentvertbase; 280 extern int r_maxvalidedgeoffset; 281 282 void R_AliasClipTriangle (mtriangle_t *ptri); 283 284 extern float r_time1; 285 extern float dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2; 286 extern float se_time1, se_time2, de_time1, de_time2, dv_time1, dv_time2; 287 extern int r_frustum_indexes[4*6]; 288 extern int r_maxsurfsseen, r_maxedgesseen, r_cnumsurfs; 289 extern qboolean r_surfsonstack; 290 extern cshift_t cshift_water; 291 extern qboolean r_dowarpold, r_viewchanged; 292 293 extern mleaf_t *r_viewleaf, *r_oldviewleaf; 294 295 extern vec3_t r_emins, r_emaxs; 296 extern mnode_t *r_pefragtopnode; 297 extern int r_clipflags; 298 extern int r_dlightframecount; 299 extern qboolean r_fov_greater_than_90; 300 301 void R_StoreEfrags (efrag_t **ppefrag); 302 void R_TimeRefresh_f (void); 303 void R_TimeGraph (void); 304 void R_PrintAliasStats (void); 305 void R_PrintTimes (void); 306 void R_PrintDSpeeds (void); 307 void R_AnimateLight (void); 308 int R_LightPoint (vec3_t p); 309 void R_SetupFrame (void); 310 void R_cshift_f (void); 311 void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1); 312 void R_ClipEdge (mvertex_t *pv0, mvertex_t *pv1, clipplane_t *clip); 313 void R_SplitEntityOnNode2 (mnode_t *node); 314 void R_MarkLights (dlight_t *light, int bit, mnode_t *node); 315 316 #endif 317