0,0 → 1,316 |
/* |
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 |