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