123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- /*
- Copyright (C) 1996-1997 Id Software, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- // d_iface.h: interface header file for rasterization driver modules
- #define WARP_WIDTH 320
- #define WARP_HEIGHT 200
- #define MAX_LBM_HEIGHT 480
- typedef struct
- {
- float u, v;
- float s, t;
- float zi;
- } emitpoint_t;
- typedef enum {
- pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
- } ptype_t;
- // !!! if this is changed, it must be changed in d_ifacea.h too !!!
- typedef struct particle_s
- {
- // driver-usable fields
- vec3_t org;
- float color;
- // drivers never touch the following fields
- struct particle_s *next;
- vec3_t vel;
- float ramp;
- float die;
- ptype_t type;
- } particle_t;
- #define PARTICLE_Z_CLIP 8.0
- typedef struct polyvert_s {
- float u, v, zi, s, t;
- } polyvert_t;
- typedef struct polydesc_s {
- int numverts;
- float nearzi;
- msurface_t *pcurrentface;
- polyvert_t *pverts;
- } polydesc_t;
- // !!! if this is changed, it must be changed in d_ifacea.h too !!!
- typedef struct finalvert_s {
- int v[6]; // u, v, s, t, l, 1/z
- int flags;
- float reserved;
- } finalvert_t;
- // !!! if this is changed, it must be changed in d_ifacea.h too !!!
- typedef struct
- {
- void *pskin;
- maliasskindesc_t *pskindesc;
- int skinwidth;
- int skinheight;
- mtriangle_t *ptriangles;
- finalvert_t *pfinalverts;
- int numtriangles;
- int drawtype;
- int seamfixupX16;
- } affinetridesc_t;
- // !!! if this is changed, it must be changed in d_ifacea.h too !!!
- typedef struct {
- float u, v, zi, color;
- } screenpart_t;
- typedef struct
- {
- int nump;
- emitpoint_t *pverts; // there's room for an extra element at [nump],
- // if the driver wants to duplicate element [0] at
- // element [nump] to avoid dealing with wrapping
- mspriteframe_t *pspriteframe;
- vec3_t vup, vright, vpn; // in worldspace
- float nearzi;
- } spritedesc_t;
- typedef struct
- {
- int u, v;
- float zi;
- int color;
- } zpointdesc_t;
- extern cvar_t r_drawflat;
- extern int d_spanpixcount;
- extern int r_framecount; // sequence # of current frame since Quake
- // started
- extern qboolean r_drawpolys; // 1 if driver wants clipped polygons
- // rather than a span list
- extern qboolean r_drawculledpolys; // 1 if driver wants clipped polygons that
- // have been culled by the edge list
- extern qboolean r_worldpolysbacktofront; // 1 if driver wants polygons
- // delivered back to front rather
- // than front to back
- extern qboolean r_recursiveaffinetriangles; // true if a driver wants to use
- // recursive triangular subdivison
- // and vertex drawing via
- // D_PolysetDrawFinalVerts() past
- // a certain distance (normally
- // only used by the software
- // driver)
- extern float r_aliasuvscale; // scale-up factor for screen u and v
- // on Alias vertices passed to driver
- extern int r_pixbytes;
- extern qboolean r_dowarp;
- extern affinetridesc_t r_affinetridesc;
- extern spritedesc_t r_spritedesc;
- extern zpointdesc_t r_zpointdesc;
- extern polydesc_t r_polydesc;
- extern int d_con_indirect; // if 0, Quake will draw console directly
- // to vid.buffer; if 1, Quake will
- // draw console via D_DrawRect. Must be
- // defined by driver
- extern vec3_t r_pright, r_pup, r_ppn;
- void D_Aff8Patch (void *pcolormap);
- void D_BeginDirectRect (int x, int y, byte *pbitmap, int width, int height);
- void D_DisableBackBufferAccess (void);
- void D_EndDirectRect (int x, int y, int width, int height);
- void D_PolysetDraw (void);
- void D_PolysetDrawFinalVerts (finalvert_t *fv, int numverts);
- void D_DrawParticle (particle_t *pparticle);
- void D_DrawPoly (void);
- void D_DrawSprite (void);
- void D_DrawSurfaces (void);
- void D_DrawZPoint (void);
- void D_EnableBackBufferAccess (void);
- void D_EndParticles (void);
- void D_Init (void);
- void D_ViewChanged (void);
- void D_SetupFrame (void);
- void D_StartParticles (void);
- void D_TurnZOn (void);
- void D_WarpScreen (void);
- void D_FillRect (vrect_t *vrect, int color);
- void D_DrawRect (void);
- void D_UpdateRects (vrect_t *prect);
- // currently for internal use only, and should be a do-nothing function in
- // hardware drivers
- // FIXME: this should go away
- void D_PolysetUpdateTables (void);
- // these are currently for internal use only, and should not be used by drivers
- extern int r_skydirect;
- extern byte *r_skysource;
- // transparency types for D_DrawRect ()
- #define DR_SOLID 0
- #define DR_TRANSPARENT 1
- // !!! must be kept the same as in quakeasm.h !!!
- #define TRANSPARENT_COLOR 0xFF
- extern void *acolormap; // FIXME: should go away
- //=======================================================================//
- // callbacks to Quake
- typedef struct
- {
- pixel_t *surfdat; // destination for generated surface
- int rowbytes; // destination logical width in bytes
- msurface_t *surf; // description for surface to generate
- fixed8_t lightadj[MAXLIGHTMAPS];
- // adjust for lightmap levels for dynamic lighting
- texture_t *texture; // corrected for animating textures
- int surfmip; // mipmapped ratio of surface texels / world pixels
- int surfwidth; // in mipmapped texels
- int surfheight; // in mipmapped texels
- } drawsurf_t;
- extern drawsurf_t r_drawsurf;
- void R_DrawSurface (void);
- void R_GenTile (msurface_t *psurf, void *pdest);
- // !!! if this is changed, it must be changed in d_ifacea.h too !!!
- #define TURB_TEX_SIZE 64 // base turbulent texture size
- // !!! if this is changed, it must be changed in d_ifacea.h too !!!
- #define CYCLE 128 // turbulent cycle size
- #define TILE_SIZE 128 // size of textures generated by R_GenTiledSurf
- #define SKYSHIFT 7
- #define SKYSIZE (1 << SKYSHIFT)
- #define SKYMASK (SKYSIZE - 1)
- extern float skyspeed, skyspeed2;
- extern float skytime;
- extern int c_surf;
- extern vrect_t scr_vrect;
- extern byte *r_warpbuffer;
|