diff options
| author | Franklin Wei <git@fwei.tk> | 2018-02-11 15:34:30 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2018-02-11 15:34:30 -0500 |
| commit | 33bfba86222efb6cc5b271b3e12b6cf3f38836c5 (patch) | |
| tree | 8a7f11e101af6a094b4b86d3c0b9d72793005ed3 /apps/plugins/sdl/progs/quake/d_iface.h | |
| parent | 8dd00a02d49a99997165a4c38a967738e90ba72f (diff) | |
| download | rockbox-duke3d.zip rockbox-duke3d.tar.gz rockbox-duke3d.tar.bz2 rockbox-duke3d.tar.xz | |
Quake: attempt 2duke3d
Change-Id: I4285036e967d7f0722802d43cf2096c808ca5799
Diffstat (limited to 'apps/plugins/sdl/progs/quake/d_iface.h')
| -rw-r--r-- | apps/plugins/sdl/progs/quake/d_iface.h | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/d_iface.h b/apps/plugins/sdl/progs/quake/d_iface.h new file mode 100644 index 0000000..0096c39 --- /dev/null +++ b/apps/plugins/sdl/progs/quake/d_iface.h @@ -0,0 +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; + |