1cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich/*
2cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichCopyright (C) 1996-1997 Id Software, Inc.
3cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
4cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is free software; you can redistribute it and/or
5cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichmodify it under the terms of the GNU General Public License
6cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichas published by the Free Software Foundation; either version 2
7cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichof the License, or (at your option) any later version.
8cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
9cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichThis program is distributed in the hope that it will be useful,
10cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichbut WITHOUT ANY WARRANTY; without even the implied warranty of
11cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
13cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichSee the GNU General Public License for more details.
14cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
15cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichYou should have received a copy of the GNU General Public License
16cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichalong with this program; if not, write to the Free Software
17cabb5dd768714a7df34469a096b5e1aa815a2c22Jack PalevichFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
19cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich*/
20cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// disable data conversion warnings
21cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
22cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef _WIN32
23cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#pragma warning(disable : 4244)     // MIPS
24cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#pragma warning(disable : 4136)     // X86
25cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#pragma warning(disable : 4051)     // ALPHA
26cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
27cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
28cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef _WIN32
29cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#include <windows.h>
30cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
31cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
32cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES
33cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
34cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#include <GLES/gl.h>
35cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
36cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else
37cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
38cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#include <GL/gl.h>
39cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#include <GL/glu.h>
40cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
41cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
42cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
43cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_BeginRendering (int *x, int *y, int *width, int *height);
44cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_EndRendering (void);
45cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
46cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef USE_OPENGLES
47cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
48cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#else // full OpenGL
49cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
50cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// Function prototypes for the Texture Object Extension routines
51cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *,
52cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich                    const GLboolean *);
53cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint);
54cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *);
55cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *);
56cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint);
57cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *,
58cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich                    const GLclampf *);
59cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *);
60cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
61cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	BINDTEXFUNCPTR bindTexFunc;
62cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	DELTEXFUNCPTR delTexFunc;
63cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	TEXSUBIMAGEPTR TexSubImage2DFunc;
64cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
65cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif // USE_OPENGLES
66cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
67cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int texture_extension_number;
68cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int		texture_mode;
69cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
70cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	float	gldepthmin, gldepthmax;
71cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
72cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_Upload32 (unsigned *data, int width, int height,  qboolean mipmap, qboolean alpha);
73cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_Upload8 (byte *data, int width, int height,  qboolean mipmap, qboolean alpha);
74cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_Upload8_EXT (byte *data, int width, int height,  qboolean mipmap, qboolean alpha);
75cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha);
76cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint GL_FindTexture (char *identifier);
77cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
78cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid glTexImage2DHelper( GLenum target,
79cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLint level,
80cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLint internalformat,
81cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLsizei width,
82cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLsizei height,
83cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLint border,
84cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLenum format,
85cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 GLenum type,
86cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	 const GLvoid *pixels );
87cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
88cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
89cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
90cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	x, y, z;
91cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	s, t;
92cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float	r, g, b;
93cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} glvert_t;
94cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
95cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern glvert_t glv;
96cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
97cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int glx, gly, glwidth, glheight;
98cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
99cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef _WIN32
100cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	PROC glArrayElementEXT;
101cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	PROC glColorPointerEXT;
102cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	PROC glTexturePointerEXT;
103cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	PROC glVertexPointerEXT;
104cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
105cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
106cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// r_local.h -- private refresh defs
107cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
108cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define ALIAS_BASE_SIZE_RATIO		(1.0 / 11.0)
109cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich					// normalizing factor so player model works out to about
110cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich					//  1 pixel per triangle
111cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	MAX_LBM_HEIGHT		480
112cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
113cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define TILE_SIZE		128		// size of textures generated by R_GenTiledSurf
114cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
115cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define SKYSHIFT		7
116cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define	SKYSIZE			(1 << SKYSHIFT)
117cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define SKYMASK			(SKYSIZE - 1)
118cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
119cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define BACKFACE_EPSILON	0.01
120cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
121cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
122cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_TimeRefresh_f (void);
123cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_ReadPointFile_f (void);
124cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtexture_t *R_TextureAnimation (texture_t *base);
125cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
126cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct surfcache_s
127cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
128cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct surfcache_s	*next;
129cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct surfcache_s 	**owner;		// NULL is an empty chunk of memory
130cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int					lightadj[MAXLIGHTMAPS]; // checked for strobe flush
131cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int					dlight;
132cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int					size;		// including header
133cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	unsigned			width;
134cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	unsigned			height;		// DEBUG only needed for debug
135cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float				mipscale;
136cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct texture_s	*texture;	// checked for animating textures
137cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	byte				data[4];	// width*height elements
138cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} surfcache_t;
139cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
140cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
141cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct
142cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
143cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	pixel_t		*surfdat;	// destination for generated surface
144cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			rowbytes;	// destination logical width in bytes
145cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	msurface_t	*surf;		// description for surface to generate
146cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	fixed8_t	lightadj[MAXLIGHTMAPS];
147cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich							// adjust for lightmap levels for dynamic lighting
148cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	texture_t	*texture;	// corrected for animating textures
149cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			surfmip;	// mipmapped ratio of surface texels / world pixels
150cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			surfwidth;	// in mipmapped texels
151cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	int			surfheight;	// in mipmapped texels
152cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} drawsurf_t;
153cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
154cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
155cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef enum {
156cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
157cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} ptype_t;
158cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
159cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// !!! if this is changed, it must be changed in d_ifacea.h too !!!
160cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef struct particle_s
161cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich{
162cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// driver-usable fields
163cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		org;
164cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		color;
165cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// drivers never touch the following fields
166cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	struct particle_s	*next;
167cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	vec3_t		vel;
168cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		ramp;
169cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	float		die;
170cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich	ptype_t		type;
171cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich} particle_t;
172cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
173cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
174cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//====================================================
175cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
176cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
177cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	entity_t	r_worldentity;
178cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	qboolean	r_cache_thrash;		// compatability
179cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	vec3_t		modelorg, r_entorigin;
180cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	entity_t	*currententity;
181cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int			r_visframecount;	// ??? what difs?
182cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int			r_framecount;
183cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	mplane_t	frustum[4];
184cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int		c_brush_polys, c_alias_polys;
185cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
186cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
187cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
188cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// view origin
189cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
190cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	vec3_t	vup;
191cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	vec3_t	vpn;
192cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	vec3_t	vright;
193cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	vec3_t	r_origin;
194cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
195cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
196cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// screen size info
197cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
198cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	refdef_t	r_refdef;
199cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	mleaf_t		*r_viewleaf, *r_oldviewleaf;
200cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	texture_t	*r_notexture_mip;
201cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int		d_lightstylevalue[256];	// 8.8 fraction of base light value
202cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
203cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	qboolean	envmap;
204cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int	currenttexture;
205cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int	cnttextures[2];
206cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int	particletexture;
207cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int	netgraphtexture;	// netgraph texture
208cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int	playertextures;
209cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
210cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int	skytexturenum;		// index in cl.loadmodel, not gl texture object
211cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
212cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_norefresh;
213cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_drawentities;
214cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_drawworld;
215cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_drawviewmodel;
216cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_speeds;
217cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_waterwarp;
218cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_fullbright;
219cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_lightmap;
220cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_shadows;
221cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_mirroralpha;
222cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_wateralpha;
223cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_dynamic;
224cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_novis;
225cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	r_netgraph;
226cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
227cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_clear;
228cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_cull;
229cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_poly;
230cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_texsort;
231cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_smoothmodels;
232cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_affinemodels;
233cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_polyblend;
234cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_keeptjunctions;
235cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_reporttjunctions;
236cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_flashblend;
237cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_nocolors;
238cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_finish;
239cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
240cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int		gl_lightmap_format;
241cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int		gl_solid_format;
242cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int		gl_alpha_format;
243cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
244cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_max_size;
245cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	cvar_t	gl_playermip;
246cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
247cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	int			mirrortexturenum;	// quake texturenum, not gltexturenum
248cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	qboolean	mirror;
249cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	mplane_t	*mirror_plane;
250cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
251cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	float	r_world_matrix[16];
252cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
253cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	const char *gl_vendor;
254cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	const char *gl_renderer;
255cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	const char *gl_version;
256cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern	const char *gl_extensions;
257cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
258cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_TranslatePlayerSkin (int playernum);
259cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_Bind (int texnum);
260cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
261cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// Multitexture
262cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define    TEXTURE0_SGIS				0x835E
263cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#define    TEXTURE1_SGIS				0x835F
264cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
265cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#ifdef _WIN32
266cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *lpMTexFUNC) (GLenum, GLfloat, GLfloat);
267cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichtypedef void (APIENTRY *lpSelTexFUNC) (GLenum);
268cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern lpMTexFUNC qglMTexCoord2fSGIS;
269cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern lpSelTexFUNC qglSelectTextureSGIS;
270cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich#endif
271cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
272cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichextern qboolean gl_mtexable;
273cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
274cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_DisableMultitexture(void);
275cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_EnableMultitexture(void);
276cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
277cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
278cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_warp.c
279cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
280cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_SubdivideSurface (msurface_t *fa);
281cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid EmitBothSkyLayers (msurface_t *fa);
282cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid EmitWaterPolys (msurface_t *fa);
283cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid EmitSkyPolys (msurface_t *fa);
284cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_DrawSkyChain (msurface_t *s);
285cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
286cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
287cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_draw.c
288cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
289cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint GL_LoadPicTexture (qpic_t *pic);
290cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_Set2D (void);
291cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
292cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
293cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_rmain.c
294cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
295cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichqboolean R_CullBox (vec3_t mins, vec3_t maxs);
296cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_RotateForEntity (entity_t *e);
297cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
298cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
299cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_rlight.c
300cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
301cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_MarkLights (dlight_t *light, int bit, mnode_t *node);
302cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_AnimateLight (void);
303cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_RenderDlights (void);
304cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichint R_LightPoint (vec3_t p);
305cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
306cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
307cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_refrag.c
308cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
309cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_StoreEfrags (efrag_t **ppefrag);
310cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
311cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
312cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_mesh.c
313cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
314cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr);
315cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
316cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
317cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_rsurf.c
318cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
319cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_DrawBrushModel (entity_t *e);
320cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_DrawWorld (void);
321cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid GL_BuildLightmaps (void);
322cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
323cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
324cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich// gl_ngraph.c
325cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich//
326cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevichvoid R_NetGraph (void);
327cabb5dd768714a7df34469a096b5e1aa815a2c22Jack Palevich
328