19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// disable data conversion warnings
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#pragma warning(disable : 4244)     // MIPS
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#pragma warning(disable : 4136)     // X86
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#pragma warning(disable : 4051)     // ALPHA
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <windows.h>
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <gl\gl.h>
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include <gl\glu.h>
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_BeginRendering (int *x, int *y, int *width, int *height);
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_EndRendering (void);
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Function prototypes for the Texture Object Extension routines
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *,
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                    const GLboolean *);
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint);
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *);
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *);
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint);
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *,
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream                    const GLclampf *);
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *);
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	BINDTEXFUNCPTR bindTexFunc;
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	DELTEXFUNCPTR delTexFunc;
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	TEXSUBIMAGEPTR TexSubImage2DFunc;
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int texture_extension_number;
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		texture_mode;
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	float	gldepthmin, gldepthmax;
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload32 (unsigned *data, int width, int height,  qboolean mipmap, qboolean alpha, qboolean modulate);
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Upload8 (byte *data, int width, int height,  qboolean mipmap, qboolean alpha, qboolean modulate);
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_LoadTexture (char *identifier, int width, int height, byte *data, int mipmap, int alpha, int modulate);
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamint GL_FindTexture (char *identifier);
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	x, y, z;
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	s, t;
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float	r, g, b;
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} glvert_t;
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern glvert_t glv;
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int glx, gly, glwidth, glheight;
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	PROC glArrayElementEXT;
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	PROC glColorPointerEXT;
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	PROC glTexturePointerEXT;
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	PROC glVertexPointerEXT;
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// r_local.h -- private refresh defs
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define MAXALIASVERTS		2000	// TODO: tune this
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define ALIAS_BASE_SIZE_RATIO		(1.0 / 11.0)
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream					// normalizing factor so player model works out to about
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream					//  1 pixel per triangle
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	MAX_LBM_HEIGHT		480
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define TILE_SIZE		128		// size of textures generated by R_GenTiledSurf
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SKYSHIFT		7
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define	SKYSIZE			(1 << SKYSHIFT)
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define SKYMASK			(SKYSIZE - 1)
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define BACKFACE_EPSILON	0.01
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TimeRefresh_f (void);
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_ReadPointFile_f (void);
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtexture_t *R_TextureAnimation (texture_t *base);
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct surfcache_s
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct surfcache_s	*next;
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct surfcache_s 	**owner;		// NULL is an empty chunk of memory
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int					lightadj[MAXLIGHTMAPS]; // checked for strobe flush
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int					dlight;
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int					size;		// including header
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned			width;
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	unsigned			height;		// DEBUG only needed for debug
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float				mipscale;
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct texture_s	*texture;	// checked for animating textures
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	byte				data[4];	// width*height elements
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} surfcache_t;
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pixel_t		*surfdat;	// destination for generated surface
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			rowbytes;	// destination logical width in bytes
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	msurface_t	*surf;		// description for surface to generate
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fixed8_t	lightadj[MAXLIGHTMAPS];
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							// adjust for lightmap levels for dynamic lighting
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	texture_t	*texture;	// corrected for animating textures
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			surfmip;	// mipmapped ratio of surface texels / world pixels
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			surfwidth;	// in mipmapped texels
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	int			surfheight;	// in mipmapped texels
1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} drawsurf_t;
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef enum {
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} ptype_t;
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// !!! if this is changed, it must be changed in d_ifacea.h too !!!
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamtypedef struct particle_s
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream{
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// driver-usable fields
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		org;
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		color;
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// drivers never touch the following fields
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	struct particle_s	*next;
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	vec3_t		vel;
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		ramp;
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	float		die;
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ptype_t		type;
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream} particle_t;
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//====================================================
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	entity_t	r_worldentity;
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	qboolean	r_cache_thrash;		// compatability
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	vec3_t		modelorg, r_entorigin;
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	entity_t	*currententity;
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int			r_visframecount;	// ??? what difs?
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int			r_framecount;
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	mplane_t	frustum[4];
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		c_brush_polys, c_alias_polys;
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// view origin
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	vec3_t	vup;
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	vec3_t	vpn;
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	vec3_t	vright;
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	vec3_t	r_origin;
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// screen size info
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	refdef_t	r_refdef;
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	mleaf_t		*r_viewleaf, *r_oldviewleaf;
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	texture_t	*r_notexture_mip;
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		d_lightstylevalue[256];	// 8.8 fraction of base light value
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	qboolean	envmap;
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int	currenttexture;
1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int	particletexture;
1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int	playertextures;
1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int	skytexturenum;		// index in cl.loadmodel, not gl texture object
1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_drawentities;
1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_drawworld;
1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_drawviewmodel;
1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_speeds;
1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_waterwarp;
1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_fullbright;
1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_lightmap;
1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_shadows;
1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	r_dynamic;
1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_clear;
1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_cull;
1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_poly;
1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_texsort;
1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_smoothmodels;
1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_affinemodels;
1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_fogblend;
1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_polyblend;
1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_keeptjunctions;
1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	cvar_t	gl_reporttjunctions;
1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		gl_lightmap_format;
1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		gl_solid_format;
1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamextern	int		gl_alpha_format;
1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid R_TranslatePlayerSkin (int playernum);
1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamvoid GL_Bind (int texnum);
191