19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCopyright (C) 1996-1997 Id Software, Inc.
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is free software; you can redistribute it and/or
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammodify it under the terms of the GNU General Public License
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamas published by the Free Software Foundation; either version 2
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the License, or (at your option) any later version.
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is distributed in the hope that it will be useful,
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambut WITHOUT ANY WARRANTY; without even the implied warranty of
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSee the GNU General Public License for more details.
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamYou should have received a copy of the GNU General Public License
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamalong with this program; if not, write to the Free Software
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// refresh.h -- public interface to refresh functions
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAXCLIPPLANES	11
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	TOP_RANGE		16			// soldier uniform colors
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	BOTTOM_RANGE	96
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//=============================================================================
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct efrag_s
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct mleaf_s		*leaf;
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct efrag_s		*leafnext;
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct entity_s		*entity;
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct efrag_s		*entnext;
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} efrag_t;
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct entity_s
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	qboolean				forcelink;		// model changed
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						update_type;
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	entity_state_t			baseline;		// to fill in defaults in updates
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	double					msgtime;		// time of last update
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t					msg_origins[2];	// last two updates (0 is newest)
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t					origin;
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t					msg_angles[2];	// last two updates (0 is newest)
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t					angles;
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct model_s			*model;			// NULL = no model
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct efrag_s			*efrag;			// linked list of efrags
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						frame;
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float					syncbase;		// for client-side animations
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	byte					*colormap;
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						effects;		// light, particals, etc
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						skinnum;		// for Alias models
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						visframe;		// last frame this entity was
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream											//  found in an active leaf
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						dlightframe;	// dynamic lighting
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						dlightbits;
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// FIXME: could turn these into a union
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int						trivial_accept;
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct mnode_s			*topnode;		// for bmodels, first world node
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream											//  that splits bmodel, or NULL if
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream											//  not split
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} entity_t;
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// !!! if this is changed, it must be changed in asm_draw.h too !!!
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vrect_t		vrect;				// subwindow in video for refresh
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream									// FIXME: not need vrect next field here?
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vrect_t		aliasvrect;			// scaled Alias version
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			vrectright, vrectbottom;	// right & bottom screen coords
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			aliasvrectright, aliasvrectbottom;	// scaled Alias versions
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		vrectrightedge;			// rightmost right edge we care about,
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream										//  for use in edge list
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		fvrectx, fvrecty;		// for floating-point compares
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		fvrectx_adj, fvrecty_adj; // left and top edges, for clamping
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			vrect_x_adj_shift20;	// (vrect.x + 0.5 - epsilon) << 20
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			vrectright_adj_shift20;	// (vrectright + 0.5 - epsilon) << 20
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		fvrectright_adj, fvrectbottom_adj;
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream										// right and bottom edges, for clamping
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		fvrectright;			// rightmost edge, for Alias clamping
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		fvrectbottom;			// bottommost edge, for Alias clamping
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		horizontalFieldOfView;	// at Z = 1.0, this many X is visible
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream										// 2.0 = 90 degrees
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		xOrigin;			// should probably allways be 0.5
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		yOrigin;			// between be around 0.3 to 0.5
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		vieworg;
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		viewangles;
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		fov_x, fov_y;
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			ambientlight;
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} refdef_t;
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// refresh
1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		reinit_surfcache;
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	refdef_t	r_refdef;
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern vec3_t	r_origin, vpn, vright, vup;
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	struct texture_s	*r_notexture_mip;
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_Init (void);
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_InitTextures (void);
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_InitEfrags (void);
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_RenderView (void);		// must set r_refdef first
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_ViewChanged (vrect_t *pvrect, int lineadj, float aspect);
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// called whenever r_refdef or vid change
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_InitSky (struct texture_s *mt);	// called at level load
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_AddEfrags (entity_t *ent);
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_RemoveEfrags (entity_t *ent);
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_NewMap (void);
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_ParseParticleEffect (void);
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count);
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_RocketTrail (vec3_t start, vec3_t end, int type);
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#ifdef QUAKE2
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_DarkFieldParticles (entity_t *ent);
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_EntityParticles (entity_t *ent);
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_BlobExplosion (vec3_t org);
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_ParticleExplosion (vec3_t org);
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_ParticleExplosion2 (vec3_t org, int colorStart, int colorLength);
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_LavaSplash (vec3_t org);
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TeleportSplash (vec3_t org);
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_PushDlights (void);
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// surface cache related
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		reinit_surfcache;	// if 1, surface cache is currently empty and
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern qboolean	r_cache_thrash;	// set if thrashing the surface cache
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint	D_SurfaceCacheForRes (int width, int height);
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid D_FlushCaches (void);
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid D_DeleteSurfaceCache (void);
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid D_InitCaches (void *buffer, int size);
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_SetVrect (vrect_t *pvrect, vrect_t *pvrectin, int lineadj);
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159