/* | |
Copyright (C) 1996-1997 Id Software, Inc. | |
This program is free software; you can redistribute it and/or | |
modify it under the terms of the GNU General Public License | |
as published by the Free Software Foundation; either version 2 | |
of the License, or (at your option) any later version. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
See the GNU General Public License for more details. | |
You should have received a copy of the GNU General Public License | |
along with this program; if not, write to the Free Software | |
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
*/ | |
// r_local.h -- private refresh defs | |
#ifndef GLQUAKE | |
#include "r_shared.h" | |
#define ALIAS_BASE_SIZE_RATIO (1.0 / 11.0) | |
// normalizing factor so player model works out to about | |
// 1 pixel per triangle | |
#define BMODEL_FULLY_CLIPPED 0x10 // value returned by R_BmodelCheckBBox () | |
// if bbox is trivially rejected | |
//=========================================================================== | |
// viewmodel lighting | |
typedef struct { | |
int ambientlight; | |
int shadelight; | |
float *plightvec; | |
} alight_t; | |
//=========================================================================== | |
// clipped bmodel edges | |
typedef struct bedge_s | |
{ | |
mvertex_t *v[2]; | |
struct bedge_s *pnext; | |
} bedge_t; | |
typedef struct { | |
float fv[3]; // viewspace x, y | |
} auxvert_t; | |
//=========================================================================== | |
extern cvar_t r_draworder; | |
extern cvar_t r_speeds; | |
extern cvar_t r_timegraph; | |
extern cvar_t r_graphheight; | |
extern cvar_t r_clearcolor; | |
extern cvar_t r_waterwarp; | |
extern cvar_t r_fullbright; | |
extern cvar_t r_drawentities; | |
extern cvar_t r_aliasstats; | |
extern cvar_t r_dspeeds; | |
extern cvar_t r_drawflat; | |
extern cvar_t r_ambient; | |
extern cvar_t r_reportsurfout; | |
extern cvar_t r_maxsurfs; | |
extern cvar_t r_numsurfs; | |
extern cvar_t r_reportedgeout; | |
extern cvar_t r_maxedges; | |
extern cvar_t r_numedges; | |
#define XCENTERING (1.0 / 2.0) | |
#define YCENTERING (1.0 / 2.0) | |
#define CLIP_EPSILON 0.001 | |
#define BACKFACE_EPSILON 0.01 | |
//=========================================================================== | |
#define DIST_NOT_SET 98765 | |
// !!! if this is changed, it must be changed in asm_draw.h too !!! | |
typedef struct clipplane_s | |
{ | |
vec3_t normal; | |
float dist; | |
struct clipplane_s *next; | |
byte leftedge; | |
byte rightedge; | |
byte reserved[2]; | |
} clipplane_t; | |
extern clipplane_t view_clipplanes[4]; | |
//============================================================================= | |
void R_RenderWorld (void); | |
//============================================================================= | |
extern mplane_t screenedge[4]; | |
extern vec3_t r_origin; | |
extern vec3_t r_entorigin; | |
extern float screenAspect; | |
extern float verticalFieldOfView; | |
extern float xOrigin, yOrigin; | |
extern int r_visframecount; | |
//============================================================================= | |
extern int vstartscan; | |
void R_ClearPolyList (void); | |
void R_DrawPolyList (void); | |
// | |
// current entity info | |
// | |
extern qboolean insubmodel; | |
extern vec3_t r_worldmodelorg; | |
void R_DrawSprite (void); | |
void R_RenderFace (msurface_t *fa, int clipflags); | |
void R_RenderPoly (msurface_t *fa, int clipflags); | |
void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf); | |
void R_TransformPlane (mplane_t *p, float *normal, float *dist); | |
void R_TransformFrustum (void); | |
void R_SetSkyFrame (void); | |
void R_DrawSurfaceBlock16 (void); | |
void R_DrawSurfaceBlock8 (void); | |
texture_t *R_TextureAnimation (texture_t *base); | |
#if id386 | |
void R_DrawSurfaceBlock8_mip0 (void); | |
void R_DrawSurfaceBlock8_mip1 (void); | |
void R_DrawSurfaceBlock8_mip2 (void); | |
void R_DrawSurfaceBlock8_mip3 (void); | |
#endif | |
void R_GenSkyTile (void *pdest); | |
void R_GenSkyTile16 (void *pdest); | |
void R_Surf8Patch (void); | |
void R_Surf16Patch (void); | |
void R_DrawSubmodelPolygons (model_t *pmodel, int clipflags); | |
void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel); | |
void R_AddPolygonEdges (emitpoint_t *pverts, int numverts, int miplevel); | |
surf_t *R_GetSurf (void); | |
void R_AliasDrawModel (alight_t *plighting); | |
void R_BeginEdgeFrame (void); | |
void R_ScanEdges (void); | |
void D_DrawSurfaces (void); | |
void R_InsertNewEdges (edge_t *edgestoadd, edge_t *edgelist); | |
void R_StepActiveU (edge_t *pedge); | |
void R_RemoveEdges (edge_t *pedge); | |
extern void R_Surf8Start (void); | |
extern void R_Surf8End (void); | |
extern void R_Surf16Start (void); | |
extern void R_Surf16End (void); | |
extern void R_EdgeCodeStart (void); | |
extern void R_EdgeCodeEnd (void); | |
extern void R_RotateBmodel (void); | |
extern int c_faceclip; | |
extern int r_polycount; | |
extern int r_wholepolycount; | |
extern model_t *cl_worldmodel; | |
extern int *pfrustum_indexes[4]; | |
// !!! if this is changed, it must be changed in asm_draw.h too !!! | |
#define NEAR_CLIP 0.01 | |
extern int ubasestep, errorterm, erroradjustup, erroradjustdown; | |
extern int vstartscan; | |
extern fixed16_t sadjust, tadjust; | |
extern fixed16_t bbextents, bbextentt; | |
#define MAXBVERTINDEXES 1000 // new clipped vertices when clipping bmodels | |
// to the world BSP | |
extern mvertex_t *r_ptverts, *r_ptvertsmax; | |
extern vec3_t sbaseaxis[3], tbaseaxis[3]; | |
extern float entity_rotation[3][3]; | |
extern int reinit_surfcache; | |
extern int r_currentkey; | |
extern int r_currentbkey; | |
typedef struct btofpoly_s { | |
int clipflags; | |
msurface_t *psurf; | |
} btofpoly_t; | |
#define MAX_BTOFPOLYS 5000 // FIXME: tune this | |
extern int numbtofpolys; | |
extern btofpoly_t *pbtofpolys; | |
void R_InitTurb (void); | |
void R_ZDrawSubmodelPolys (model_t *clmodel); | |
//========================================================= | |
// Alias models | |
//========================================================= | |
#define MAXALIASVERTS 2000 // TODO: tune this | |
#define ALIAS_Z_CLIP_PLANE 5 | |
extern int numverts; | |
extern int a_skinwidth; | |
extern mtriangle_t *ptriangles; | |
extern int numtriangles; | |
extern aliashdr_t *paliashdr; | |
extern mdl_t *pmdl; | |
extern float leftclip, topclip, rightclip, bottomclip; | |
extern int r_acliptype; | |
extern finalvert_t *pfinalverts; | |
extern auxvert_t *pauxverts; | |
qboolean R_AliasCheckBBox (void); | |
//========================================================= | |
// turbulence stuff | |
#define AMP 8*0x10000 | |
#define AMP2 3 | |
#define SPEED 20 | |
//========================================================= | |
// particle stuff | |
void R_DrawParticles (void); | |
void R_InitParticles (void); | |
void R_ClearParticles (void); | |
void R_ReadPointFile_f (void); | |
void R_SurfacePatch (void); | |
extern int r_amodels_drawn; | |
extern edge_t *auxedges; | |
extern int r_numallocatededges; | |
extern edge_t *r_edges, *edge_p, *edge_max; | |
extern edge_t *newedges[MAXHEIGHT]; | |
extern edge_t *removeedges[MAXHEIGHT]; | |
extern int screenwidth; | |
// FIXME: make stack vars when debugging done | |
extern edge_t edge_head; | |
extern edge_t edge_tail; | |
extern edge_t edge_aftertail; | |
extern int r_bmodelactive; | |
extern vrect_t *pconupdate; | |
extern float aliasxscale, aliasyscale, aliasxcenter, aliasycenter; | |
extern float r_aliastransition, r_resfudge; | |
extern int r_outofsurfaces; | |
extern int r_outofedges; | |
extern mvertex_t *r_pcurrentvertbase; | |
extern int r_maxvalidedgeoffset; | |
void R_AliasClipTriangle (mtriangle_t *ptri); | |
extern float r_time1; | |
extern float dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2; | |
extern float se_time1, se_time2, de_time1, de_time2, dv_time1, dv_time2; | |
extern int r_frustum_indexes[4*6]; | |
extern int r_maxsurfsseen, r_maxedgesseen, r_cnumsurfs; | |
extern qboolean r_surfsonstack; | |
extern cshift_t cshift_water; | |
extern qboolean r_dowarpold, r_viewchanged; | |
extern mleaf_t *r_viewleaf, *r_oldviewleaf; | |
extern vec3_t r_emins, r_emaxs; | |
extern mnode_t *r_pefragtopnode; | |
extern int r_clipflags; | |
extern int r_dlightframecount; | |
extern qboolean r_fov_greater_than_90; | |
void R_StoreEfrags (efrag_t **ppefrag); | |
void R_TimeRefresh_f (void); | |
void R_TimeGraph (void); | |
void R_PrintAliasStats (void); | |
void R_PrintTimes (void); | |
void R_PrintDSpeeds (void); | |
void R_AnimateLight (void); | |
int R_LightPoint (vec3_t p); | |
void R_SetupFrame (void); | |
void R_cshift_f (void); | |
void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1); | |
void R_ClipEdge (mvertex_t *pv0, mvertex_t *pv1, clipplane_t *clip); | |
void R_SplitEntityOnNode2 (mnode_t *node); | |
void R_MarkLights (dlight_t *light, int bit, mnode_t *node); | |
#endif |