diff options
Diffstat (limited to 'WinQuake/d_iface.h')
| -rw-r--r-- | WinQuake/d_iface.h | 458 |
1 files changed, 229 insertions, 229 deletions
diff --git a/WinQuake/d_iface.h b/WinQuake/d_iface.h index 0096c39..8f826b6 100644 --- a/WinQuake/d_iface.h +++ b/WinQuake/d_iface.h @@ -1,229 +1,229 @@ -/* -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; - +/*
+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;
+
|
