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