Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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