home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / glquake_src / r_local.h < prev    next >
C/C++ Source or Header  |  1999-12-28  |  9KB  |  322 lines

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