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. // d_iface.h: interface header file for rasterization driver modules
  21.  
  22. #define WARP_WIDTH              320
  23. #define WARP_HEIGHT             200
  24.  
  25. #define MAX_LBM_HEIGHT  480
  26.  
  27. typedef struct
  28. {
  29.         float   u, v;
  30.         float   s, t;
  31.         float   zi;
  32. } emitpoint_t;
  33.  
  34. typedef enum {
  35.         pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
  36. } ptype_t;
  37.  
  38. // !!! if this is changed, it must be changed in d_ifacea.h too !!!
  39. typedef struct particle_s
  40. {
  41. // driver-usable fields
  42.         vec3_t          org;
  43.         float           color;
  44. // drivers never touch the following fields
  45.         struct particle_s       *next;
  46.         vec3_t          vel;
  47.         float           ramp;
  48.         float           die;
  49.         ptype_t         type;
  50. } particle_t;
  51.  
  52. #define PARTICLE_Z_CLIP 8.0
  53.  
  54. typedef struct polyvert_s {
  55.         float   u, v, zi, s, t;
  56. } polyvert_t;
  57.  
  58. typedef struct polydesc_s {
  59.         int                     numverts;
  60.         float           nearzi;
  61.         msurface_t      *pcurrentface;
  62.         polyvert_t      *pverts;
  63. } polydesc_t;
  64.  
  65. // !!! if this is changed, it must be changed in d_ifacea.h too !!!
  66. typedef struct finalvert_s {
  67.         int             v[6];           // u, v, s, t, l, 1/z
  68.         int             flags;
  69.         float   reserved;
  70. } finalvert_t;
  71.  
  72. // !!! if this is changed, it must be changed in d_ifacea.h too !!!
  73. typedef struct
  74. {
  75.         void                            *pskin;
  76.         maliasskindesc_t        *pskindesc;
  77.         int                                     skinwidth;
  78.         int                                     skinheight;
  79.         mtriangle_t                     *ptriangles;
  80.         finalvert_t                     *pfinalverts;
  81.         int                                     numtriangles;
  82.         int                                     drawtype;
  83.         int                                     seamfixupX16;
  84. } affinetridesc_t;
  85.  
  86. // !!! if this is changed, it must be changed in d_ifacea.h too !!!
  87. typedef struct {
  88.         float   u, v, zi, color;
  89. } screenpart_t;
  90.  
  91. typedef struct
  92. {
  93.         int                     nump;
  94.         emitpoint_t     *pverts;        // there's room for an extra element at [nump],
  95.                                                         //  if the driver wants to duplicate element [0] at
  96.                                                         //  element [nump] to avoid dealing with wrapping
  97.         mspriteframe_t  *pspriteframe;
  98.         vec3_t                  vup, vright, vpn;       // in worldspace
  99.         float                   nearzi;
  100. } spritedesc_t;
  101.  
  102. typedef struct
  103. {
  104.         int             u, v;
  105.         float   zi;
  106.         int             color;
  107. } zpointdesc_t;
  108.  
  109. extern cvar_t   r_drawflat;
  110. extern int              d_spanpixcount;
  111. extern int              r_framecount;           // sequence # of current frame since Quake
  112.                                                                         //  started
  113. extern qboolean r_drawpolys;            // 1 if driver wants clipped polygons
  114.                                                                         //  rather than a span list
  115. extern qboolean r_drawculledpolys;      // 1 if driver wants clipped polygons that
  116.                                                                         //  have been culled by the edge list
  117. extern qboolean r_worldpolysbacktofront;        // 1 if driver wants polygons
  118.                                                                                         //  delivered back to front rather
  119.                                                                                         //  than front to back
  120. extern qboolean r_recursiveaffinetriangles;     // true if a driver wants to use
  121.                                                                                         //  recursive triangular subdivison
  122.                                                                                         //  and vertex drawing via
  123.                                                                                         //  D_PolysetDrawFinalVerts() past
  124.                                                                                         //  a certain distance (normally
  125.                                                                                         //  only used by the software
  126.                                                                                         //  driver)
  127. extern float    r_aliasuvscale;         // scale-up factor for screen u and v
  128.                                                                         //  on Alias vertices passed to driver
  129. extern int              r_pixbytes;
  130. extern qboolean r_dowarp;
  131.  
  132. extern affinetridesc_t  r_affinetridesc;
  133. extern spritedesc_t             r_spritedesc;
  134. extern zpointdesc_t             r_zpointdesc;
  135. extern polydesc_t               r_polydesc;
  136.  
  137. extern int              d_con_indirect; // if 0, Quake will draw console directly
  138.                                                                 //  to vid.buffer; if 1, Quake will
  139.                                                                 //  draw console via D_DrawRect. Must be
  140.                                                                 //  defined by driver
  141.  
  142. extern vec3_t   r_pright, r_pup, r_ppn;
  143.  
  144.  
  145. void D_Aff8Patch (void *pcolormap);
  146. void D_BeginDirectRect (int x, int y, byte *pbitmap, int width, int height);
  147. void D_DisableBackBufferAccess (void);
  148. void D_EndDirectRect (int x, int y, int width, int height);
  149. void D_PolysetDraw (void);
  150. void D_PolysetDrawFinalVerts (finalvert_t *fv, int numverts);
  151. void D_DrawParticle (particle_t *pparticle);
  152. void D_DrawPoly (void);
  153. void D_DrawSprite (void);
  154. void D_DrawSurfaces (void);
  155. void D_DrawZPoint (void);
  156. void D_EnableBackBufferAccess (void);
  157. void D_EndParticles (void);
  158. void D_Init (void);
  159. void D_ViewChanged (void);
  160. void D_SetupFrame (void);
  161. void D_StartParticles (void);
  162. void D_TurnZOn (void);
  163. void D_WarpScreen (void);
  164.  
  165. void D_FillRect (vrect_t *vrect, int color);
  166. void D_DrawRect (void);
  167. void D_UpdateRects (vrect_t *prect);
  168.  
  169. // currently for internal use only, and should be a do-nothing function in
  170. // hardware drivers
  171. // FIXME: this should go away
  172. void D_PolysetUpdateTables (void);
  173.  
  174. // these are currently for internal use only, and should not be used by drivers
  175. extern int                              r_skydirect;
  176. extern byte                             *r_skysource;
  177.  
  178. // transparency types for D_DrawRect ()
  179. #define DR_SOLID                0
  180. #define DR_TRANSPARENT  1
  181.  
  182. // !!! must be kept the same as in quakeasm.h !!!
  183. #define TRANSPARENT_COLOR       0xFF
  184.  
  185. extern void *acolormap; // FIXME: should go away
  186.  
  187. //=======================================================================//
  188.  
  189. // callbacks to Quake
  190.  
  191. typedef struct
  192. {
  193.         pixel_t         *surfdat;       // destination for generated surface
  194.         int                     rowbytes;       // destination logical width in bytes
  195.         msurface_t      *surf;          // description for surface to generate
  196.         fixed8_t        lightadj[MAXLIGHTMAPS];
  197.                                                         // adjust for lightmap levels for dynamic lighting
  198.         texture_t       *texture;       // corrected for animating textures
  199.         int                     surfmip;        // mipmapped ratio of surface texels / world pixels
  200.         int                     surfwidth;      // in mipmapped texels
  201.         int                     surfheight;     // in mipmapped texels
  202. } drawsurf_t;
  203.  
  204. extern drawsurf_t       r_drawsurf;
  205.  
  206. void R_DrawSurface (void);
  207. void R_GenTile (msurface_t *psurf, void *pdest);
  208.  
  209.  
  210. // !!! if this is changed, it must be changed in d_ifacea.h too !!!
  211. #define TURB_TEX_SIZE   64              // base turbulent texture size
  212.  
  213. // !!! if this is changed, it must be changed in d_ifacea.h too !!!
  214. #define CYCLE                   128             // turbulent cycle size
  215.  
  216. #define TILE_SIZE               128             // size of textures generated by R_GenTiledSurf
  217.  
  218. #define SKYSHIFT                7
  219. #define SKYSIZE                 (1 << SKYSHIFT)
  220. #define SKYMASK                 (SKYSIZE - 1)
  221.  
  222. extern float    skyspeed, skyspeed2;
  223. extern float    skytime;
  224.  
  225. extern int              c_surf;
  226. extern vrect_t  scr_vrect;
  227.  
  228. extern byte             *r_warpbuffer;
  229.  
  230.