1 /*
2 Copyright (C) 1996-1997 Id Software, Inc.
3 
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8 
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 
13 See the GNU General Public License for more details.
14 
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18 
19 */
20 // disable data conversion warnings
21 
22 #pragma warning(disable : 4244)     // MIPS
23 #pragma warning(disable : 4136)     // X86
24 #pragma warning(disable : 4051)     // ALPHA
25 
26 #ifdef _WIN32
27 #include <windows.h>
28 #endif
29 
30 #if defined (__APPLE__) || defined (MACOSX)
31 #include <OpenGL/gl.h>
32 #include <OpenGL/glu.h>
33 #include <OpenGL/glext.h>
34 #else
35 #include <GL/gl.h>
36 #include <GL/glu.h>
37 #endif /* __APPLE__ ||�MACOSX */
38 
39 /* use the correct dynamic function address binder */
40 #if defined (SDL)
41 #define SAFE_GET_PROC( func, type, name)     \
42    func = (type) SDL_GL_GetProcAddress (name)
43 #elif defined (__glx__)
44 #define SAFE_GET_PROC( func, type, name)     \
45    func = (type) glXGetProcAddressARB (name)
46 #else
47 #define SAFE_GET_PROC( func, type, name)     \
48    func = (type) wglGetProcAddress( name)
49 #endif
50 
51 
52 // - DC -
53 #if defined (SDL)
54 #include <SDL/SDL_opengl.h>
55 #endif
56 
57 #if defined (__glx__)
58 #include <GL/glx.h>
59 #endif
60 
61 void GL_BeginRendering (int *x, int *y, int *width, int *height);
62 void GL_EndRendering (void);
63 
64 
65 #ifdef _WIN32
66 // Function prototypes for the Texture Object Extension routines
67 typedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *,
68                     const GLboolean *);
69 typedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint);
70 typedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *);
71 typedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *);
72 typedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint);
73 typedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *,
74                     const GLclampf *);
75 typedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *);
76 
77 extern	BINDTEXFUNCPTR bindTexFunc;
78 extern	DELTEXFUNCPTR delTexFunc;
79 extern	TEXSUBIMAGEPTR TexSubImage2DFunc;
80 #endif
81 
82 extern	int texture_extension_number;
83 extern	int		texture_mode;
84 extern	int	glow_texture_object;	//PENTA: gl texture object of the glow texture
85 extern	int normcube_texture_object;//PENTA: gl texture object of the normalization cubemap
86 extern	int halo_texture_object;	//PENTA: Halo light texture
87 extern  int	atten1d_texture_object;
88 extern  int	atten2d_texture_object;
89 extern  int	atten3d_texture_object;
90 extern	float	gldepthmin, gldepthmax;
91 
92 void GL_Upload32 (unsigned *data, int width, int height,  qboolean mipmap, qboolean alpha);
93 void GL_Upload8 (byte *data,char *identifier, int width, int height,  qboolean mipmap, qboolean alpha, qboolean bump);
94 int GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha, qboolean bump);
95 int GL_FindTexture (char *identifier);
96 
97 typedef struct
98 {
99 	float	x, y, z;
100 	float	s, t;
101 	float	r, g, b;
102 } glvert_t;
103 
104 extern glvert_t glv;
105 
106 extern	int glx, gly, glwidth, glheight;
107 
108 #ifdef _WIN32
109 extern	PROC glArrayElementEXT;
110 extern	PROC glColorPointerEXT;
111 extern	PROC glTexturePointerEXT;
112 extern	PROC glVertexPointerEXT;
113 #endif
114 
115 // r_local.h -- private refresh defs
116 
117 #define ALIAS_BASE_SIZE_RATIO		(1.0 / 11.0)
118 					// normalizing factor so player model works out to about
119 					//  1 pixel per triangle
120 #define	MAX_LBM_HEIGHT		480
121 
122 #define TILE_SIZE		128		// size of textures generated by R_GenTiledSurf
123 
124 #define SKYSHIFT		7
125 #define	SKYSIZE			(1 << SKYSHIFT)
126 #define SKYMASK			(SKYSIZE - 1)
127 
128 #define BACKFACE_EPSILON	0.01
129 
130 
131 void R_TimeRefresh_f (void);
132 void R_ReadPointFile_f (void);
133 texture_t *R_TextureAnimation (texture_t *base);
134 
135 typedef struct surfcache_s
136 {
137 	struct surfcache_s	*next;
138 	struct surfcache_s 	**owner;		// NULL is an empty chunk of memory
139 	int					lightadj[MAXLIGHTMAPS]; // checked for strobe flush
140 	int					dlight;
141 	int					size;		// including header
142 	unsigned			width;
143 	unsigned			height;		// DEBUG only needed for debug
144 	float				mipscale;
145 	struct texture_s	*texture;	// checked for animating textures
146 	byte				data[4];	// width*height elements
147 } surfcache_t;
148 
149 
150 typedef struct
151 {
152 	pixel_t		*surfdat;	// destination for generated surface
153 	int			rowbytes;	// destination logical width in bytes
154 	msurface_t	*surf;		// description for surface to generate
155 	fixed8_t	lightadj[MAXLIGHTMAPS];
156 							// adjust for lightmap levels for dynamic lighting
157 	texture_t	*texture;	// corrected for animating textures
158 	int			surfmip;	// mipmapped ratio of surface texels / world pixels
159 	int			surfwidth;	// in mipmapped texels
160 	int			surfheight;	// in mipmapped texels
161 } drawsurf_t;
162 
163 
164 typedef enum {
165 	pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2
166 } ptype_t;
167 
168 typedef enum {
169 	pb_add, pb_subtract
170 } pblend_t;
171 
172 
173 typedef enum {
174 	emt_box
175 } emtype_t;
176 
177 typedef enum {
178 	align_view, align_vel, align_surf
179 } align_t;
180 
181 typedef struct ParticleEffect_s {
182 	char name[64];
183 	vec3_t emmiterParams1, emmiterParams2; //mins maxs of emmiter box
184 	emtype_t emmiterType; //currently only box is supported
185 	vec3_t startcolormin, startcolormax, endcolormin, endcolormax;
186 	vec3_t velocitymin, velocitymax; //min max velocity
187 	float	lifemin, lifemax; //min max life
188 	int	movetype; //how it moves (gravity/collision...)
189 	vec3_t	gravity;
190 	float	rotmin, rotmax;//rotaiton speed
191 	float	growmin, growmax;//scale speed (make second smaller to shrink)
192 	float	sizemin, sizemax;//scale speed (make second smaller to shrink)
193 	vec3_t	drag; //drag of particle (how fast it looses it's speed)
194 	int	srcblend, dstblend; // gl enums for blend modes
195 	int	numbounces; //number of bounces before particle is deleted
196 	int	texture; //gl object of the texture
197 	align_t	align;//particle is aligned with its velocity
198 	float	velscale;
199 	struct ParticleEffect_s *spawn; //particle effect to spawn on hit
200 	struct ParticleEffect_s *next;
201 } ParticleEffect_t;
202 
203 // !!! if this is changed, it must be changed in d_ifacea.h too !!!
204 typedef struct particle_s
205 {
206 // driver-usable fields
207 	vec3_t		org;
208 	vec3_t		color;
209 // drivers never touch the following fields
210 	struct particle_s	*next;
211 	vec3_t		vel;
212         //float		ramp;
213 	float		die, lifetime;
214         //ptype_t		type;
215 //PENTA: Nicer particles (tm)
216 	int			texture; //texture object of particle
217 	int			numbounces; //number of bounces left before deletion set to zero for no bounce
218 	float		rot;
219 	float		rspeed;
220 	float		size;
221 	float		growspeed;
222 	qboolean	velaligned;
223 	//pblend_t	blendfunc;
224 	vec3_t		startcolor, endcolor;
225 	int			srcblend, dstblend;
226 	vec3_t		gravity;
227 	vec3_t		drag;
228 	float		velscale;
229 	ParticleEffect_t *spawn;
230 } particle_t;
231 
232 typedef enum {
233 	dt_blood
234 } dtype_t;
235 
236 #define MAX_DECAL_VERTICES 128
237 #define MAX_DECAL_TRIANGLES 64
238 //PENTA: Decals
239 typedef struct decal_s
240 {
241 	vec3_t		origin;
242 	vec3_t		normal;
243 	vec3_t		tangent;
244 	float		radius;
245 
246 	float		color[4], startcolor[4], endcolor[4];
247 	struct decal_s	*next;
248 	float		die;
249 	float		lifetime;
250 	dtype_t		type;
251 	int			texture; //texture object of particle
252 	int			srcblend;
253 	int			dstblend;
254 
255 	//geometry of decail
256 	int	vertexCount, triangleCount;
257 	vec3_t		vertexArray[MAX_DECAL_VERTICES];
258 	float		texcoordArray[MAX_DECAL_VERTICES][2];
259 	int			triangleArray[MAX_DECAL_TRIANGLES][3];
260 } decal_t;
261 
262 void R_SpawnDecal(vec3_t center, vec3_t normal, vec3_t tangent, ParticleEffect_t *effect);
263 float RandomMinMax(float min, float max);
264 
265 //====================================================
266 
267 
268 extern	entity_t	r_worldentity;
269 extern	qboolean	r_cache_thrash;		// compatability
270 extern	vec3_t		modelorg, r_entorigin;
271 extern	entity_t	*currententity;
272 extern	int			r_visframecount;	// ??? what difs?
273 extern	int			r_framecount;
274 extern	int			r_lightTimestamp;//PENTA: we need this in different files
275 extern	mplane_t	frustum[4];
276 extern	int		c_brush_polys, c_alias_polys;
277 
278 
279 //
280 // view origin
281 //
282 extern	vec3_t	vup;
283 extern	vec3_t	vpn;
284 extern	vec3_t	vright;
285 extern	vec3_t	r_origin;
286 
287 //
288 // screen size info
289 //
290 extern	refdef_t	r_refdef;
291 extern	mleaf_t		*r_viewleaf, *r_oldviewleaf;
292 extern	texture_t	*r_notexture_mip;
293 extern	int		d_lightstylevalue[256];	// 8.8 fraction of base light value
294 
295 extern	qboolean	envmap;
296 extern	int	currenttexture;
297 extern	int	cnttextures[16];
298 extern	int	particletexture;
299 extern	int	particletexture_smoke;
300 extern	int	particletexture_glow;
301 extern	int	particletexture_glow2;
302 extern	int	particletexture_tele;
303 extern	int	particletexture_blood;
304 extern	int	particletexture_dirblood;
305 extern	int	playertextures;
306 extern	int	gl_filter_min;
307 extern	int	gl_filter_max;
308 
309 extern	int	skytexturenum;		// index in cl.loadmodel, not gl texture object
310 
311 extern	cvar_t	r_norefresh;
312 extern	cvar_t	r_drawentities;
313 extern	cvar_t	r_drawworld;
314 extern	cvar_t	r_drawviewmodel;
315 extern	cvar_t	r_waterwarp;
316 extern	cvar_t	r_fullbright;
317 extern	cvar_t	r_lightmap;
318 extern	cvar_t	r_shadows;
319 extern	cvar_t	r_mirroralpha;
320 extern	cvar_t	r_wateralpha;
321 extern	cvar_t	r_dynamic;
322 extern	cvar_t	r_novis;
323 
324 extern	cvar_t	gl_clear;
325 extern	cvar_t	gl_cull;
326 extern	cvar_t	gl_poly;
327 //extern	cvar_t	gl_texsort;
328 extern	cvar_t	gl_smoothmodels;
329 extern	cvar_t	gl_affinemodels;
330 extern	cvar_t	gl_polyblend;
331 //extern	cvar_t	gl_keeptjunctions; PENTA: dont remove t-junctions
332 extern	cvar_t	gl_reporttjunctions;
333 extern	cvar_t	gl_flashblend;
334 extern	cvar_t	gl_nocolors;
335 extern	cvar_t	gl_doubleeyes;
336 
337 extern	int		gl_lightmap_format;
338 extern	int		gl_solid_format;
339 extern	int		gl_alpha_format;
340 
341 extern	cvar_t	gl_max_size;
342 extern	cvar_t	gl_playermip;
343 
344 extern  cvar_t	gl_watershader; //PENTA:
345 extern  cvar_t	gl_calcdepth;
346 
347 extern  cvar_t	sh_lightmapbright; //PENTA:
348 extern  cvar_t	sh_radiusscale;
349 extern  cvar_t	sh_visiblevolumes;
350 extern  cvar_t  sh_entityshadows;
351 extern  cvar_t  sh_worldshadows;
352 extern  cvar_t  sh_showlightnum;
353 extern  cvar_t  sh_glows;
354 extern	cvar_t  sh_fps;	// set for running times - muff
355 extern	cvar_t  sh_debuginfo;
356 extern	cvar_t	sh_norevis; //PENTA: no recalculating the vis for light positions
357 extern	cvar_t	sh_nosvbsp; //PENTA: no shadow bsp
358 extern	cvar_t	sh_noeclip; //PENTA: no entity/leaf clipping for shadows
359 extern  cvar_t  sh_infinitevolumes;//PENTA:
360 extern  cvar_t  sh_noscissor;
361 extern	cvar_t	sh_nocleversave;
362 extern	cvar_t	sh_bumpmaps;//PENTA: enable disable bump mapping
363 extern	cvar_t	sh_colormaps;//PENTA: enable disable textures on the world (light will remain)
364 extern	cvar_t	sh_playershadow;//PENTA: the player casts a shadow (the one YOU are playing with, others always cast shadows)
365 extern	cvar_t	sh_nocache;
366 extern	cvar_t	sh_glares;
367 extern	cvar_t	sh_noefrags;
368 extern  cvar_t  sh_showtangent;
369 extern  cvar_t	sh_noshadowpopping;
370 extern	cvar_t	fog_waterfog;
371 extern	cvar_t	gl_caustics;
372 extern	cvar_t	gl_truform;
373 extern	cvar_t	gl_truform_tesselation;
374 extern	cvar_t	gl_transformlerp;
375 extern	cvar_t	gl_compress_textures;
376 extern  cvar_t	scr_fov;	// 10 - 170
377 extern	cvar_t	mir_detail; //PENTA: mirror detail level
378 							//0: no mirrors
379 							//1: World only
380 							//2: World & player
381 							//3: Full
382 extern	cvar_t	mir_frameskip; //PENTA: mirror is updated every i'th frame
383 extern	cvar_t	mir_forcewater; //Forces all quake's water to be reflecting.
384 extern	cvar_t	mir_distance; //maximum drawing distance
385 extern  cvar_t	gl_wireframe;
386 extern  cvar_t	fog_r;
387 extern  cvar_t	fog_g;
388 extern  cvar_t	fog_b;
389 extern  cvar_t	fog_start;
390 extern  cvar_t	fog_end;
391 extern  cvar_t	fog_enabled;
392 extern	float	fog_color[4];
393 
394 extern	int			mirrortexturenum;	// quake texturenum, not gltexturenum
395 extern	qboolean	mirror;
396 extern	qboolean	glare;
397 extern	mplane_t	*mirror_plane;
398 extern  mplane_t	mirror_far_plane;
399 extern	int			mirror_clipside;
400 extern  float vid_gamma;
401 
402 extern	float	r_world_matrix[16];
403 extern	double	r_Dproject_matrix[16];			//PENTA	<AWE> added "extern".
404 extern	double	r_Dworld_matrix[16];			//PENTA	<AWE> added "extern".
405 extern  int 	r_Iviewport[4];				//PENTA
406 
407 extern	float color_black[4];
408 
409 #define NUMVERTEXNORMALS	162
410 
411 extern float	r_avertexnormals[NUMVERTEXNORMALS][3];
412 
413 
414 extern	const char *gl_vendor;
415 extern	const char *gl_renderer;
416 extern	const char *gl_version;
417 extern	const char *gl_extensions;
418 
419 void R_TranslatePlayerSkin (int playernum);
420 void GL_Bind (int texnum);
421 
422 #ifndef APIENTRY
423 #define APIENTRY
424 #endif
425 
426 #if !defined (__APPLE__) && !defined (MACOSX)
427 
428 
429 // Multitexture
430 //#define    TEXTURE0_SGIS				0x835E
431 //#define    TEXTURE1_SGIS				0x835F
432 
433 /* ARB_multitexture defines and prototypes from <GL/gl.h> */
434 #define GL_ACTIVE_TEXTURE_ARB               0x84E0
435 #define GL_CLIENT_ACTIVE_TEXTURE_ARB        0x84E1
436 #define GL_MAX_ACTIVE_TEXTURES_ARB          0x84E2
437 #define GL_TEXTURE0_ARB                     0x84C0
438 #define GL_TEXTURE1_ARB                     0x84C1
439 #define GL_TEXTURE2_ARB                     0x84C2
440 #define GL_TEXTURE3_ARB                     0x84C3
441 #define GL_TEXTURE4_ARB                     0x84C4
442 #define GL_TEXTURE5_ARB                     0x84C5
443 #define GL_TEXTURE6_ARB                     0x84C6
444 #define GL_TEXTURE7_ARB                     0x84C7
445 #define GL_TEXTURE8_ARB                     0x84C8
446 #define GL_TEXTURE9_ARB                     0x84C9
447 #define GL_TEXTURE10_ARB                    0x84CA
448 #define GL_TEXTURE11_ARB                    0x84CB
449 #define GL_TEXTURE12_ARB                    0x84CC
450 #define GL_TEXTURE13_ARB                    0x84CD
451 #define GL_TEXTURE14_ARB                    0x84CE
452 #define GL_TEXTURE15_ARB                    0x84CF
453 #define GL_TEXTURE16_ARB                    0x84D0
454 #define GL_TEXTURE17_ARB                    0x84D1
455 #define GL_TEXTURE18_ARB                    0x84D2
456 #define GL_TEXTURE19_ARB                    0x84D3
457 #define GL_TEXTURE20_ARB                    0x84D4
458 #define GL_TEXTURE21_ARB                    0x84D5
459 #define GL_TEXTURE22_ARB                    0x84D6
460 #define GL_TEXTURE23_ARB                    0x84D7
461 #define GL_TEXTURE24_ARB                    0x84D8
462 #define GL_TEXTURE25_ARB                    0x84D9
463 #define GL_TEXTURE26_ARB                    0x84DA
464 #define GL_TEXTURE27_ARB                    0x84DB
465 #define GL_TEXTURE28_ARB                    0x84DC
466 #define GL_TEXTURE29_ARB                    0x84DD
467 #define GL_TEXTURE30_ARB                    0x84DE
468 #define GL_TEXTURE31_ARB                    0x84DF
469 
470 // ARB_texture_compression defines
471 #define GL_COMPRESSED_RGBA_ARB                0x84EE
472 
473 #ifndef GL_ATI_separate_stencil
474 #define GL_ATI_separate_stencil 1
475 
476 #define GL_STENCIL_BACK_FUNC_ATI                    0x8800
477 #define GL_STENCIL_BACK_FAIL_ATI                    0x8801
478 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI         0x8802
479 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI         0x8803
480 
481 typedef void (APIENTRY *PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
482 typedef void (APIENTRY *PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
483 
484 #endif
485 
486 extern PFNGLSTENCILOPSEPARATEATIPROC qglStencilOpSeparateATI;
487 extern PFNGLSTENCILFUNCSEPARATEATIPROC qglStencilFuncSeparateATI;
488 
489 #endif /* !__APPLE__ && !MACOSX */
490 
491 #ifndef GL_VERSION_1_3
492 typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
493 typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
494 typedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
495 typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
496 typedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
497 typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
498 typedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
499 typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
500 typedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
501 typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
502 typedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
503 typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
504 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
505 typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
506 typedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
507 typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
508 typedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
509 typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
510 typedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
511 typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
512 typedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
513 typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
514 typedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
515 typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
516 typedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
517 typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
518 typedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
519 typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
520 typedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
521 typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
522 typedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
523 typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
524 typedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
525 typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
526 #endif
527 
528 extern PFNGLACTIVETEXTUREARBPROC qglActiveTextureARB;
529 extern PFNGLCLIENTACTIVETEXTUREARBPROC qglClientActiveTextureARB;
530 extern PFNGLMULTITEXCOORD1FARBPROC qglMultiTexCoord1fARB;
531 extern PFNGLMULTITEXCOORD2FARBPROC qglMultiTexCoord2fARB;
532 extern PFNGLMULTITEXCOORD2FVARBPROC qglMultiTexCoord2fvARB;
533 extern PFNGLMULTITEXCOORD3FARBPROC qglMultiTexCoord3fARB;
534 extern PFNGLMULTITEXCOORD3FVARBPROC qglMultiTexCoord3fvARB;
535 
536 // <AWE> : MacOS X 10.2: defined in <OpenGL/glext.h>
537 #if !defined (__APPLE__) && !defined (MACOSX)
538 
539 //PENTA: Texture env combine/ Texture env dot3
540 #define GL_COMBINE_ARB                    0x8570
541 #define GL_COMBINE_RGB_ARB                0x8571
542 #define GL_COMBINE_ALPHA_ARB              0x8572
543 #define GL_RGB_SCALE_ARB                  0x8573
544 #define GL_ADD_SIGNED_ARB                 0x8574
545 #define GL_INTERPOLATE_ARB                0x8575
546 #define GL_SUBTRACT_ARB                   0x84E7
547 #define GL_CONSTANT_ARB                   0x8576
548 #define GL_PRIMARY_COLOR_ARB              0x8577
549 #define GL_PREVIOUS_ARB                   0x8578
550 #define GL_SOURCE0_RGB_ARB                0x8580
551 #define GL_SOURCE1_RGB_ARB                0x8581
552 #define GL_SOURCE2_RGB_ARB                0x8582
553 #define GL_SOURCE3_RGB_ARB                0x8583
554 #define GL_SOURCE4_RGB_ARB                0x8584
555 #define GL_SOURCE5_RGB_ARB                0x8585
556 #define GL_SOURCE6_RGB_ARB                0x8586
557 #define GL_SOURCE7_RGB_ARB                0x8587
558 #define GL_SOURCE0_ALPHA_ARB              0x8588
559 #define GL_SOURCE1_ALPHA_ARB              0x8589
560 #define GL_SOURCE2_ALPHA_ARB              0x858A
561 #define GL_SOURCE3_ALPHA_ARB              0x858B
562 #define GL_SOURCE4_ALPHA_ARB              0x858C
563 #define GL_SOURCE5_ALPHA_ARB              0x858D
564 #define GL_SOURCE6_ALPHA_ARB              0x858E
565 #define GL_SOURCE7_ALPHA_ARB              0x858F
566 #define GL_OPERAND0_RGB_ARB               0x8590
567 #define GL_OPERAND1_RGB_ARB               0x8591
568 #define GL_OPERAND2_RGB_ARB               0x8592
569 #define GL_OPERAND3_RGB_ARB               0x8593
570 #define GL_OPERAND4_RGB_ARB               0x8594
571 #define GL_OPERAND5_RGB_ARB               0x8595
572 #define GL_OPERAND6_RGB_ARB               0x8596
573 #define GL_OPERAND7_RGB_ARB               0x8597
574 #define GL_OPERAND0_ALPHA_ARB             0x8598
575 #define GL_OPERAND1_ALPHA_ARB             0x8599
576 #define GL_OPERAND2_ALPHA_ARB             0x859A
577 #define GL_OPERAND3_ALPHA_ARB             0x859B
578 #define GL_OPERAND4_ALPHA_ARB             0x859C
579 #define GL_OPERAND5_ALPHA_ARB             0x859D
580 #define GL_OPERAND6_ALPHA_ARB             0x859E
581 #define GL_OPERAND7_ALPHA_ARB             0x859F
582 
583 /*
584 #define	GL_DOT3_RGB_EXT					  0x8740
585 #define	GL_DOT3_RGBA_EXT				  0x8741
586 */
587 #define GL_DOT3_RGB_ARB					0x86AE
588 #define GL_DOT3_RGBA_ARB				0x86AF
589 
590 
591 //PENTA: Cube mapping
592 #define GL_NORMAL_MAP_ARB                 0x8511
593 #define GL_REFLECTION_MAP_ARB             0x8512
594 #define GL_TEXTURE_CUBE_MAP_ARB           0x8513
595 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514
596 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
597 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
598 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
599 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
600 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
601 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
602 #define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B
603 #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C
604 
605 //PENTA: NV register combiners
606 #define GL_REGISTER_COMBINERS_NV          0x8522
607 #define GL_VARIABLE_A_NV                  0x8523
608 #define GL_VARIABLE_B_NV                  0x8524
609 #define GL_VARIABLE_C_NV                  0x8525
610 #define GL_VARIABLE_D_NV                  0x8526
611 #define GL_VARIABLE_E_NV                  0x8527
612 #define GL_VARIABLE_F_NV                  0x8528
613 #define GL_VARIABLE_G_NV                  0x8529
614 #define GL_CONSTANT_COLOR0_NV             0x852A
615 #define GL_CONSTANT_COLOR1_NV             0x852B
616 #define GL_PRIMARY_COLOR_NV               0x852C
617 #define GL_SECONDARY_COLOR_NV             0x852D
618 #define GL_SPARE0_NV                      0x852E
619 #define GL_SPARE1_NV                      0x852F
620 #define GL_DISCARD_NV                     0x8530
621 #define GL_E_TIMES_F_NV                   0x8531
622 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
623 #define GL_UNSIGNED_IDENTITY_NV           0x8536
624 #define GL_UNSIGNED_INVERT_NV             0x8537
625 #define GL_EXPAND_NORMAL_NV               0x8538
626 #define GL_EXPAND_NEGATE_NV               0x8539
627 #define GL_HALF_BIAS_NORMAL_NV            0x853A
628 #define GL_HALF_BIAS_NEGATE_NV            0x853B
629 #define GL_SIGNED_IDENTITY_NV             0x853C
630 #define GL_SIGNED_NEGATE_NV               0x853D
631 #define GL_SCALE_BY_TWO_NV                0x853E
632 #define GL_SCALE_BY_FOUR_NV               0x853F
633 #define GL_SCALE_BY_ONE_HALF_NV           0x8540
634 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541
635 #define GL_COMBINER_INPUT_NV              0x8542
636 #define GL_COMBINER_MAPPING_NV            0x8543
637 #define GL_COMBINER_COMPONENT_USAGE_NV    0x8544
638 #define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545
639 #define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546
640 #define GL_COMBINER_MUX_SUM_NV            0x8547
641 #define GL_COMBINER_SCALE_NV              0x8548
642 #define GL_COMBINER_BIAS_NV               0x8549
643 #define GL_COMBINER_AB_OUTPUT_NV          0x854A
644 #define GL_COMBINER_CD_OUTPUT_NV          0x854B
645 #define GL_COMBINER_SUM_OUTPUT_NV         0x854C
646 #define GL_MAX_GENERAL_COMBINERS_NV       0x854D
647 #define GL_NUM_GENERAL_COMBINERS_NV       0x854E
648 #define GL_COLOR_SUM_CLAMP_NV             0x854F
649 #define GL_COMBINER0_NV                   0x8550
650 #define GL_COMBINER1_NV                   0x8551
651 #define GL_COMBINER2_NV                   0x8552
652 #define GL_COMBINER3_NV                   0x8553
653 #define GL_COMBINER4_NV                   0x8554
654 #define GL_COMBINER5_NV                   0x8555
655 #define GL_COMBINER6_NV                   0x8556
656 #define GL_COMBINER7_NV                   0x8557
657 
658 #define GL_TEXTURE_MAX_ANISOTROPY_EXT		0x84FE
659 #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT	0x84FF
660 
661 
662 #endif /* !__APPLE__ && !MACOSX */
663 
664 // - DC -
665 #if !defined(SDL) && !defined (__glx__)
666 typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
667 typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
668 typedef void (APIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
669 typedef void (APIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
670 typedef void (APIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
671 typedef void (APIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
672 typedef void (APIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
673 typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
674 typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
675 typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
676 typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
677 typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
678 typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
679 #endif
680 
681 extern PFNGLCOMBINERPARAMETERFVNVPROC qglCombinerParameterfvNV;
682 extern PFNGLCOMBINERPARAMETERIVNVPROC qglCombinerParameterivNV;
683 extern PFNGLCOMBINERPARAMETERFNVPROC qglCombinerParameterfNV;
684 extern PFNGLCOMBINERPARAMETERINVPROC qglCombinerParameteriNV;
685 extern PFNGLCOMBINERINPUTNVPROC qglCombinerInputNV;
686 extern PFNGLCOMBINEROUTPUTNVPROC qglCombinerOutputNV;
687 extern PFNGLFINALCOMBINERINPUTNVPROC qglFinalCombinerInputNV;
688 extern PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC qglGetCombinerInputParameterfvNV;
689 extern PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC qglGetCombinerInputParameterivNV;
690 extern PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC qglGetCombinerOutputParameterfvNV;
691 extern PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC qglGetCombinerOutputParameterivNV;
692 extern PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC qglGetFinalCombinerInputParameterfvNV;
693 extern PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC qglGetFinalCombinerInputParameterivNV;
694 
695 
696 // <AWE> : MacOS X 10.2: defined in <OpenGL/glext.h>
697 #if !defined (__APPLE__) && !defined (MACOSX) && !defined(SDL) && !defined (__glx__)
698 
699 //PENTA: texture3d
700 #define GL_PACK_SKIP_IMAGES               0x806B
701 #define GL_PACK_SKIP_IMAGES_EXT           0x806B
702 #define GL_PACK_IMAGE_HEIGHT              0x806C
703 #define GL_PACK_IMAGE_HEIGHT_EXT          0x806C
704 #define GL_UNPACK_SKIP_IMAGES             0x806D
705 #define GL_UNPACK_SKIP_IMAGES_EXT         0x806D
706 #define GL_UNPACK_IMAGE_HEIGHT            0x806E
707 #define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E
708 #define GL_TEXTURE_3D                     0x806F
709 #define GL_TEXTURE_3D_EXT                 0x806F
710 #define GL_PROXY_TEXTURE_3D               0x8070
711 #define GL_PROXY_TEXTURE_3D_EXT           0x8070
712 #define GL_TEXTURE_DEPTH                  0x8071
713 #define GL_TEXTURE_DEPTH_EXT              0x8071
714 #define GL_TEXTURE_WRAP_R                 0x8072
715 #define GL_TEXTURE_WRAP_R_EXT             0x8072
716 #define GL_MAX_3D_TEXTURE_SIZE            0x8073
717 #define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073
718 
719 #endif /* !__APPLE__ && !MACOSX && !SDL && !__glx__ */
720 
721 typedef void (APIENTRY * PFNGLTEXIMAGE3DEXT)(GLenum target, GLint level, GLenum internalformat,
722 											 GLsizei width, GLsizei height, GLsizei depth,
723 											 GLint border, GLenum format, GLenum type,
724 											 const GLvoid* pixels);
725 extern PFNGLTEXIMAGE3DEXT qglTexImage3DEXT;
726 
727 //gldepthbounds stuff
728 typedef void (APIENTRY * PFNGLDEPTHBOUNDSNV)(GLclampd zmin, GLclampd zmax);
729 
730 extern PFNGLDEPTHBOUNDSNV qglDepthBoundsNV;
731 
732 
733 
734 // <AWE> : NV_vertex_program will never be supported under any other OS than Windows, because it got
735 //	   replaced by the official ARB spec "ARB_vertex_program".
736 //
737 //	   Todo: - Add hybrid support for NV & ARB vertex_programs.
738 //		 - Port the current vertex program from NV to ARB.
739 
740 /* ARB_vertex_program */
741 /*
742 #define GL_VERTEX_PROGRAM_ARB                            0x8620
743 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB                 0x8642
744 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB                   0x8643
745 #define GL_PROGRAM_FORMAT_ASCII_ARB                      0x8875
746 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB               0x8622
747 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB                  0x8623
748 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB                0x8624
749 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB                  0x8625
750 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB            0x886A
751 #define GL_CURRENT_VERTEX_ATTRIB_ARB                     0x8626
752 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB               0x8645
753 #define GL_PROGRAM_LENGTH_ARB                            0x8627
754 #define GL_PROGRAM_FORMAT_ARB                            0x8876
755 #define GL_PROGRAM_NAME_ARB                              0x8677
756 #define GL_PROGRAM_INSTRUCTIONS_ARB                      0x88A0
757 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB                  0x88A1
758 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB               0x88A2
759 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB           0x88A3
760 #define GL_PROGRAM_TEMPORARIES_ARB                       0x88A4
761 #define GL_MAX_PROGRAM_TEMPORARIES_ARB                   0x88A5
762 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB                0x88A6
763 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB            0x88A7
764 #define GL_PROGRAM_PARAMETERS_ARB                        0x88A8
765 #define GL_MAX_PROGRAM_PARAMETERS_ARB                    0x88A9
766 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB                 0x88AA
767 #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB             0x88AB
768 #define GL_PROGRAM_ATTRIBS_ARB                           0x88AC
769 #define GL_MAX_PROGRAM_ATTRIBS_ARB                       0x88AD
770 #define GL_PROGRAM_NATIVE_ATTRIBS_ARB                    0x88AE
771 #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB                0x88AF
772 #define GL_PROGRAM_ADDRESS_REGISTERS_ARB                 0x88B0
773 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB             0x88B1
774 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB          0x88B2
775 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB      0x88B3
776 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB              0x88B4
777 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB                0x88B5
778 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB               0x88B6
779 #define GL_PROGRAM_STRING_ARB                            0x8628
780 #define GL_PROGRAM_ERROR_POSITION_ARB                    0x864B
781 #define GL_CURRENT_MATRIX_ARB                            0x8641
782 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB                  0x88B7
783 #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB                0x8640
784 #define GL_MAX_VERTEX_ATTRIBS_ARB                        0x8869
785 #define GL_MAX_PROGRAM_MATRICES_ARB                      0x862F
786 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB            0x862E
787 #define GL_PROGRAM_ERROR_STRING_ARB                      0x8874
788 
789 #define GL_MATRIX0_ARB                                   0x88C0
790 #define GL_MATRIX1_ARB                                   0x88C1
791 #define GL_MATRIX2_ARB                                   0x88C2
792 #define GL_MATRIX3_ARB                                   0x88C3
793 #define GL_MATRIX4_ARB                                   0x88C4
794 #define GL_MATRIX5_ARB                                   0x88C5
795 #define GL_MATRIX6_ARB                                   0x88C6
796 #define GL_MATRIX7_ARB                                   0x88C7
797 #define GL_MATRIX8_ARB                                   0x88C8
798 #define GL_MATRIX9_ARB                                   0x88C9
799 #define GL_MATRIX10_ARB                                  0x88CA
800 #define GL_MATRIX11_ARB                                  0x88CB
801 #define GL_MATRIX12_ARB                                  0x88CC
802 #define GL_MATRIX13_ARB                                  0x88CD
803 #define GL_MATRIX14_ARB                                  0x88CE
804 #define GL_MATRIX15_ARB                                  0x88CF
805 #define GL_MATRIX16_ARB                                  0x88D0
806 #define GL_MATRIX17_ARB                                  0x88D1
807 #define GL_MATRIX18_ARB                                  0x88D2
808 #define GL_MATRIX19_ARB                                  0x88D3
809 #define GL_MATRIX20_ARB                                  0x88D4
810 #define GL_MATRIX21_ARB                                  0x88D5
811 #define GL_MATRIX22_ARB                                  0x88D6
812 #define GL_MATRIX23_ARB                                  0x88D7
813 #define GL_MATRIX24_ARB                                  0x88D8
814 #define GL_MATRIX25_ARB                                  0x88D9
815 #define GL_MATRIX26_ARB                                  0x88DA
816 #define GL_MATRIX27_ARB                                  0x88DB
817 #define GL_MATRIX28_ARB                                  0x88DC
818 #define GL_MATRIX29_ARB                                  0x88DD
819 #define GL_MATRIX30_ARB                                  0x88DE
820 #define GL_MATRIX31_ARB                                  0x88DF
821 
822 typedef void (APIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint id);
823 typedef void (APIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
824 typedef void (APIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
825 typedef void (APIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
826 typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);
827 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
828 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
829 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
830 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid **pointer);
831 typedef GLboolean (APIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program);
832 typedef void (APIENTRY * PFNGPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
833 typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
834 typedef void (APIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
835 typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
836 typedef void (APIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
837 typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
838 typedef void (APIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
839 typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
840 typedef void (APIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
841 typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
842 typedef void (APIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
843 typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
844 typedef void (APIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
845 typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
846 typedef void (APIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
847 typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
848 typedef void (APIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
849 typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
850 typedef void (APIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
851 typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
852 typedef void (APIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
853 typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
854 typedef void (APIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
855 typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
856 typedef void (APIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
857 typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
858 typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
859 
860 extern PFNGLBINDPROGRAMARBPROC 			qglBindProgramARB;
861 extern PFNGLDELETEPROGRAMSARBPROC 		qglDeleteProgramsARB;
862 extern PFNGLGENPROGRAMSARBPROC 			qglGenProgramsARB;
863 extern PFNGLGETPROGRAMIVARBPROC 		qglGetProgramivARB;
864 extern PFNGLGETPROGRAMSTRINGARBPROC 		qglGetProgramStringARB;
865 extern PFNGLGETVERTEXATTRIBDVARBPROC 		qglGetVertexAttribdvARB;
866 extern PFNGLGETVERTEXATTRIBFVARBPROC 		qglGetVertexAttribfvARB;
867 extern PFNGLGETVERTEXATTRIBIVARBPROC 		qglGetVertexAttribivARB;
868 extern PFNGLGETVERTEXATTRIBPOINTERVARBPROC	qglGetVertexAttribPointervARB;
869 extern PFNGLISPROGRAMARBPROC 			qglIsProgramARB;
870 extern PFNGPROGRAMSTRINGARBPROC 		qglProgramStringARB;
871 extern PFNGLVERTEXATTRIB1DARBPROC		qglVertexAttrib1dARB;
872 extern PFNGLVERTEXATTRIB1DVARBPROC 		qglVertexAttrib1dvARB;
873 extern PFNGLVERTEXATTRIB1FARBPROC		qglVertexAttrib1fARB;
874 extern PFNGLVERTEXATTRIB1FVARBPROC		qglVertexAttrib1fvARB;
875 extern PFNGLVERTEXATTRIB1SARBPROC		qglVertexAttrib1sARB;
876 extern PFNGLVERTEXATTRIB1SVARBPROC		qglVertexAttrib1svARB;
877 extern PFNGLVERTEXATTRIB2DARBPROC		qglVertexAttrib2dARB;
878 extern PFNGLVERTEXATTRIB2DVARBPROC		qglVertexAttrib2dvARB;
879 extern PFNGLVERTEXATTRIB2FARBPROC		qglVertexAttrib2fARB;
880 extern PFNGLVERTEXATTRIB2FVARBPROC		qglVertexAttrib2fvARB;
881 extern PFNGLVERTEXATTRIB2SARBPROC		qglVertexAttrib2sARB;
882 extern PFNGLVERTEXATTRIB2SVARBPROC		qglVertexAttrib2svARB;
883 extern PFNGLVERTEXATTRIB3DARBPROC		qglVertexAttrib3dARB;
884 extern PFNGLVERTEXATTRIB3DVARBPROC		qglVertexAttrib3dvARB;
885 extern PFNGLVERTEXATTRIB3FARBPROC		qglVertexAttrib3fARB;
886 extern PFNGLVERTEXATTRIB3FVARBPROC		qglVertexAttrib3fvARB;
887 extern PFNGLVERTEXATTRIB3SARBPROC		qglVertexAttrib3sARB;
888 extern PFNGLVERTEXATTRIB3SVARBPROC		qglVertexAttrib3svARB;
889 extern PFNGLVERTEXATTRIB4DARBPROC		qglVertexAttrib4dARB;
890 extern PFNGLVERTEXATTRIB4DVARBPROC		qglVertexAttrib4dvARB;
891 extern PFNGLVERTEXATTRIB4FARBPROC		qglVertexAttrib4fARB;
892 extern PFNGLVERTEXATTRIB4FVARBPROC		qglVertexAttrib4fvARB;
893 extern PFNGLVERTEXATTRIB4SARBPROC		qglVertexAttrib4sARB;
894 extern PFNGLVERTEXATTRIB4SVARBPROC		qglVertexAttrib4svARB;
895 extern PFNGLVERTEXATTRIB4UBVARBPROC		qglVertexAttrib4ubvARB;
896 */
897 
898 //PENTA: VERTEX_PROGRAM
899 
900 #ifndef GL_NV_vertex_program
901 /* NV_vertex_program */
902 #define GL_VERTEX_PROGRAM_NV              0x8620
903 #define GL_VERTEX_STATE_PROGRAM_NV        0x8621
904 #define GL_ATTRIB_ARRAY_SIZE_NV           0x8623
905 #define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624
906 #define GL_ATTRIB_ARRAY_TYPE_NV           0x8625
907 #define GL_CURRENT_ATTRIB_NV              0x8626
908 #define GL_PROGRAM_LENGTH_NV              0x8627
909 #define GL_PROGRAM_STRING_NV              0x8628
910 #define GL_MODELVIEW_PROJECTION_NV        0x8629
911 #define GL_IDENTITY_NV                    0x862A
912 #define GL_INVERSE_NV                     0x862B
913 #define GL_TRANSPOSE_NV                   0x862C
914 #define GL_INVERSE_TRANSPOSE_NV           0x862D
915 #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
916 #define GL_MAX_TRACK_MATRICES_NV          0x862F
917 #define GL_MATRIX0_NV                     0x8630
918 #define GL_MATRIX1_NV                     0x8631
919 #define GL_MATRIX2_NV                     0x8632
920 #define GL_MATRIX3_NV                     0x8633
921 #define GL_MATRIX4_NV                     0x8634
922 #define GL_MATRIX5_NV                     0x8635
923 #define GL_MATRIX6_NV                     0x8636
924 #define GL_MATRIX7_NV                     0x8637
925 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640
926 #define GL_CURRENT_MATRIX_NV              0x8641
927 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642
928 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643
929 #define GL_PROGRAM_PARAMETER_NV           0x8644
930 #define GL_ATTRIB_ARRAY_POINTER_NV        0x8645
931 #define GL_PROGRAM_TARGET_NV              0x8646
932 #define GL_PROGRAM_RESIDENT_NV            0x8647
933 #define GL_TRACK_MATRIX_NV                0x8648
934 #define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649
935 #define GL_VERTEX_PROGRAM_BINDING_NV      0x864A
936 #define GL_PROGRAM_ERROR_POSITION_NV      0x864B
937 #define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650
938 #define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651
939 #define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652
940 #define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653
941 #define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654
942 #define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655
943 #define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656
944 #define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657
945 #define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658
946 #define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659
947 #define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A
948 #define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B
949 #define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C
950 #define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D
951 #define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E
952 #define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F
953 #define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660
954 #define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661
955 #define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662
956 #define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663
957 #define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664
958 #define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665
959 #define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666
960 #define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667
961 #define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668
962 #define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669
963 #define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A
964 #define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B
965 #define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C
966 #define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D
967 #define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E
968 #define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F
969 #define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670
970 #define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671
971 #define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672
972 #define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673
973 #define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674
974 #define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675
975 #define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676
976 #define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677
977 #define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678
978 #define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679
979 #define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A
980 #define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B
981 #define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C
982 #define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D
983 #define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E
984 #define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F
985 
986 /* NV_vertex_program */
987 typedef GLboolean (APIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
988 typedef void (APIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
989 typedef void (APIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
990 typedef void (APIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
991 typedef void (APIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
992 typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
993 typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
994 typedef void (APIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
995 typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
996 typedef void (APIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
997 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
998 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
999 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
1000 typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
1001 typedef GLboolean (APIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);
1002 typedef void (APIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
1003 typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
1004 typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
1005 typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
1006 typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
1007 typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);
1008 typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);
1009 typedef void (APIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
1010 typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
1011 typedef void (APIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
1012 typedef void (APIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
1013 typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
1014 typedef void (APIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
1015 typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
1016 typedef void (APIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
1017 typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
1018 typedef void (APIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
1019 typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
1020 typedef void (APIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
1021 typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
1022 typedef void (APIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
1023 typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
1024 typedef void (APIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
1025 typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
1026 typedef void (APIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
1027 typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
1028 typedef void (APIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
1029 typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
1030 typedef void (APIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
1031 typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
1032 typedef void (APIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
1033 typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
1034 typedef void (APIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
1035 typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
1036 typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
1037 typedef void (APIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
1038 typedef void (APIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
1039 typedef void (APIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
1040 typedef void (APIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
1041 typedef void (APIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
1042 typedef void (APIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
1043 typedef void (APIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
1044 typedef void (APIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
1045 typedef void (APIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
1046 typedef void (APIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
1047 typedef void (APIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
1048 typedef void (APIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
1049 typedef void (APIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
1050 #endif
1051 
1052 extern PFNGLAREPROGRAMSRESIDENTNVPROC qglAreProgramsResidentNV ;
1053 extern PFNGLBINDPROGRAMNVPROC qglBindProgramNV ;
1054 extern PFNGLDELETEPROGRAMSNVPROC qglDeleteProgramsNV ;
1055 extern PFNGLEXECUTEPROGRAMNVPROC qglExecuteProgramNV ;
1056 extern PFNGLGENPROGRAMSNVPROC qglGenProgramsNV ;
1057 extern PFNGLGETPROGRAMPARAMETERDVNVPROC qglGetProgramParameterdvNV ;
1058 extern PFNGLGETPROGRAMPARAMETERFVNVPROC qglGetProgramParameterfvNV ;
1059 extern PFNGLGETPROGRAMIVNVPROC qglGetProgramivNV ;
1060 extern PFNGLGETPROGRAMSTRINGNVPROC qglGetProgramStringNV ;
1061 extern PFNGLGETTRACKMATRIXIVNVPROC qglGetTrackMatrixivNV ;
1062 extern PFNGLGETVERTEXATTRIBDVNVPROC qglGetVertexAttribdvNV ;
1063 extern PFNGLGETVERTEXATTRIBFVNVPROC qglGetVertexAttribfvNV ;
1064 extern PFNGLGETVERTEXATTRIBIVNVPROC qglGetVertexAttribivNV ;
1065 extern PFNGLGETVERTEXATTRIBPOINTERVNVPROC qglGetVertexAttribPointervNV ;
1066 extern PFNGLISPROGRAMNVPROC qglIsProgramNV ;
1067 extern PFNGLLOADPROGRAMNVPROC qglLoadProgramNV ;
1068 extern PFNGLPROGRAMPARAMETER4DNVPROC qglProgramParameter4dNV ;
1069 extern PFNGLPROGRAMPARAMETER4DVNVPROC qglProgramParameter4dvNV ;
1070 extern PFNGLPROGRAMPARAMETER4FNVPROC qglProgramParameter4fNV ;
1071 extern PFNGLPROGRAMPARAMETER4FVNVPROC qglProgramParameter4fvNV ;
1072 extern PFNGLPROGRAMPARAMETERS4DVNVPROC qglProgramParameters4dvNV ;
1073 extern PFNGLPROGRAMPARAMETERS4FVNVPROC qglProgramParameters4fvNV ;
1074 extern PFNGLREQUESTRESIDENTPROGRAMSNVPROC qglRequestResidentProgramsNV ;
1075 extern PFNGLTRACKMATRIXNVPROC qglTrackMatrixNV ;
1076 extern PFNGLVERTEXATTRIBPOINTERNVPROC qglVertexAttribPointerNV ;
1077 extern PFNGLVERTEXATTRIB1DNVPROC qglVertexAttrib1dNV ;
1078 extern PFNGLVERTEXATTRIB1DVNVPROC qglVertexAttrib1dvNV ;
1079 extern PFNGLVERTEXATTRIB1FNVPROC qglVertexAttrib1fNV ;
1080 extern PFNGLVERTEXATTRIB1FVNVPROC qglVertexAttrib1fvNV ;
1081 extern PFNGLVERTEXATTRIB1SNVPROC qglVertexAttrib1sNV ;
1082 extern PFNGLVERTEXATTRIB1SVNVPROC qglVertexAttrib1svNV ;
1083 extern PFNGLVERTEXATTRIB2DNVPROC qglVertexAttrib2dNV ;
1084 extern PFNGLVERTEXATTRIB2DVNVPROC qglVertexAttrib2dvNV ;
1085 extern PFNGLVERTEXATTRIB2FNVPROC qglVertexAttrib2fNV ;
1086 extern PFNGLVERTEXATTRIB2FVNVPROC qglVertexAttrib2fvNV ;
1087 extern PFNGLVERTEXATTRIB2SNVPROC qglVertexAttrib2sNV ;
1088 extern PFNGLVERTEXATTRIB2SVNVPROC qglVertexAttrib2svNV ;
1089 extern PFNGLVERTEXATTRIB3DNVPROC qglVertexAttrib3dNV ;
1090 extern PFNGLVERTEXATTRIB3DVNVPROC qglVertexAttrib3dvNV ;
1091 extern PFNGLVERTEXATTRIB3FNVPROC qglVertexAttrib3fNV ;
1092 extern PFNGLVERTEXATTRIB3FVNVPROC qglVertexAttrib3fvNV ;
1093 extern PFNGLVERTEXATTRIB3SNVPROC qglVertexAttrib3sNV ;
1094 extern PFNGLVERTEXATTRIB3SVNVPROC qglVertexAttrib3svNV ;
1095 extern PFNGLVERTEXATTRIB4DNVPROC qglVertexAttrib4dNV ;
1096 extern PFNGLVERTEXATTRIB4DVNVPROC qglVertexAttrib4dvNV ;
1097 extern PFNGLVERTEXATTRIB4FNVPROC qglVertexAttrib4fNV ;
1098 extern PFNGLVERTEXATTRIB4FVNVPROC qglVertexAttrib4fvNV ;
1099 extern PFNGLVERTEXATTRIB4SNVPROC qglVertexAttrib4sNV ;
1100 extern PFNGLVERTEXATTRIB4SVNVPROC qglVertexAttrib4svNV ;
1101 extern PFNGLVERTEXATTRIB4UBVNVPROC qglVertexAttrib4ubvNV ;
1102 extern PFNGLVERTEXATTRIBS1DVNVPROC qglVertexAttribs1dvNV ;
1103 extern PFNGLVERTEXATTRIBS1FVNVPROC qglVertexAttribs1fvNV ;
1104 extern PFNGLVERTEXATTRIBS1SVNVPROC qglVertexAttribs1svNV ;
1105 extern PFNGLVERTEXATTRIBS2DVNVPROC qglVertexAttribs2dvNV ;
1106 extern PFNGLVERTEXATTRIBS2FVNVPROC qglVertexAttribs2fvNV ;
1107 extern PFNGLVERTEXATTRIBS2SVNVPROC qglVertexAttribs2svNV ;
1108 extern PFNGLVERTEXATTRIBS3DVNVPROC qglVertexAttribs3dvNV ;
1109 extern PFNGLVERTEXATTRIBS3FVNVPROC qglVertexAttribs3fvNV ;
1110 extern PFNGLVERTEXATTRIBS3SVNVPROC qglVertexAttribs3svNV ;
1111 extern PFNGLVERTEXATTRIBS4DVNVPROC qglVertexAttribs4dvNV ;
1112 extern PFNGLVERTEXATTRIBS4FVNVPROC qglVertexAttribs4fvNV ;
1113 extern PFNGLVERTEXATTRIBS4SVNVPROC qglVertexAttribs4svNV ;
1114 extern PFNGLVERTEXATTRIBS4UBVNVPROC qglVertexAttribs4ubvNV ;
1115 
1116 // <AWE> : MacOS X 10.2: defined in <OpenGL/glext.h> as APPLE extension:
1117 #if defined (__APPLE__) || defined (MACOSX)
1118 
1119 // GL_NV_vertex_array_range = GL_APPLE_vertex_array_range
1120 #define GL_VERTEX_ARRAY_RANGE_NV		GL_VERTEX_ARRAY_RANGE_APPLE
1121 #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV		GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE
1122 #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV	GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE
1123 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV	GL_VERTEX_ARRAY_RANGE_POINTER_APPLE
1124 #define GL_VERTEX_ARRAY_RANGE_VALID_NV		GL_VERTEX_ARRAY_STORAGE_HINT_APPLE
1125 
1126 #else
1127 
1128 #define GL_CLAMP_TO_EDGE                	0x812F
1129 
1130 // GL_NV_vertex_array_range
1131 #define GL_VERTEX_ARRAY_RANGE_NV          	0x851D
1132 #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   	0x851E
1133 #define GL_VERTEX_ARRAY_RANGE_VALID_NV    	0x851F
1134 #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 	0x8520
1135 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV  	0x8521
1136 
1137 #endif /* !__APPLE__ && !MACOSX */
1138 
1139 // <AWE> There are some diffs with the function parameters. wgl stuff not present with MacOS X. -DC- and SDL
1140 #if defined (__APPLE__) || defined (MACOSX) || defined(SDL) || defined (__glx__)
1141 
1142 #ifndef GL_APPLE_vertex_array_range
1143 #define GL_APPLE_vertex_array_range 1
1144 
1145 typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, const GLvoid *pointer);
1146 typedef void (APIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei size, const GLvoid *pointer);
1147 
1148 #endif
1149 
1150 extern PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC qglFlushVertexArrayRangeAPPLE;
1151 extern PFNGLVERTEXARRAYRANGEAPPLEPROC qglVertexArrayRangeAPPLE;
1152 
1153 #define qglVertexArrayRangeNV	qglVertexArrayRangeAPPLE
1154 
1155 #else
1156 
1157 typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
1158 typedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei size, const GLvoid *pointer);
1159 typedef void * (APIENTRY * PFNWGLALLOCATEMEMORYNVPROC) (int size, float readfreq, float writefreq, float priority);
1160 typedef void (APIENTRY * PFNWGLFREEMEMORYNVPROC) (void *pointer);
1161 
1162 extern PFNGLFLUSHVERTEXARRAYRANGENVPROC qglFlushVertexArrayRangeNV;
1163 extern PFNGLVERTEXARRAYRANGENVPROC glVertexArrayRangeNV;
1164 extern PFNWGLALLOCATEMEMORYNVPROC wglAllocateMemoryNV;
1165 extern PFNWGLFREEMEMORYNVPROC wglFreeMemoryNV;
1166 
1167 #endif /* __APPLE__ || MACOSX */
1168 
1169 /*
1170 
1171 */
1172 
1173 typedef void (APIENTRY *lpMTexFUNC) (GLenum, GLfloat, GLfloat);
1174 typedef void (APIENTRY *lpSelTexFUNC) (GLenum);
1175 //extern lpMTexFUNC qglMTexCoord2fSGIS;
1176 //extern lpSelTexFUNC qglSelectTextureSGIS;
1177 
1178 extern qboolean gl_mtexable;
1179 extern qboolean gl_palettedtex; // <AWE>: true if EXT_paletted_texture present [for GL_Upload8_EXT ()].
1180 extern qboolean gl_texturefilteranisotropic; // <AWE> true if anisotropic texture filtering available.
1181 
1182 typedef enum
1183 {
1184 	GENERIC = 0,
1185 	GEFORCE,
1186 	GEFORCE3,
1187 	RADEON,
1188 	PARHELIA,
1189 	ARB
1190 } qcardtype;
1191 extern qcardtype gl_cardtype;
1192 
1193 //extern qboolean gl_nvcombiner; //PENTA: true if nvdida texture shaders are present
1194 //extern qboolean gl_geforce3;
1195 //extern qboolean gl_radeon;//PA:
1196 extern qboolean gl_var;
1197 extern qboolean gl_texcomp;
1198 
1199 extern GLfloat	gl_textureanisotropylevel; // <AWE> required for anisotropic textures.
1200 
1201 void GL_DisableMultitexture(void);
1202 void GL_EnableMultitexture(void);
1203 
1204 //PENTA: Stencil shadows
1205 
1206 typedef struct screenrect_s {
1207 	int coords [4];
1208 	struct screenrect_s *next;
1209 } screenrect_t;
1210 
1211 
1212 typedef union lightcmd_u {
1213   int asInt;
1214   float asFloat;
1215   vec_t asVec;
1216   void *asVoid;
1217 } lightcmd_t;
1218 
1219 
1220 typedef struct shadowlight_s {
1221 	vec3_t	origin;		//position of light source
1222 	vec3_t	baseColor, color;		//light color, animated color
1223 	float	radius;		//radius of light source (doesn't light anyting out of that circle)
1224 						//so we can "clip" our shadowvolumes against that circle
1225 	float	brightness;
1226 	qboolean visible;	//light is "visible" this frame
1227 	qboolean isStatic;	//light is static and has a precalc volume
1228 	qboolean castShadow;//lights casts shadows
1229 	qboolean halo;		//light has a halo
1230 	mleaf_t	*leaf;		//leaf this light is in
1231 	byte vis[MAX_MAP_LEAFS/8];//redone pvs for light, only poly's in nodes
1232 	byte entvis[MAX_MAP_LEAFS/8];//original pvs a light origin
1233 	msurface_t	**visSurf; //the surfaces that should cast shadows for this light (only when static)
1234 	int		*volumeCmds;  //gl commands to draw the shadow volume
1235 	float	*volumeVerts;
1236 	int		numVolumeVerts;
1237 	lightcmd_t	*lightCmds;	//gl commands to draw the cap/lighted volumes
1238 	int		 numVisSurf;
1239 	int		style;
1240 	entity_t *owner;
1241 	screenrect_t scizz;
1242 	int		filtercube;	//texture object of this light's cubemap filter
1243 	vec3_t	angles; //angles of the cubemap filter
1244 	float	rspeed; //rotation speed of cube map;
1245 	float	cubescale; //scale factor of cube map;
1246 	float	haloalpha; //alpha of halo
1247 	vec3_t	oldlightorigin;
1248 } shadowlight_t;
1249 
1250 //PENTA: new
1251 typedef struct aliaslightinstant_s {
1252 
1253 	int lockframe;	//number of the frame when it was last locked.
1254 	vec3_t lasteorg, lastlorg, lasteangles, lastvorg;
1255 	float lastlradius;
1256 	entity_t	*lastent;
1257 	aliashdr_t * lasthdr;
1258 	shadowlight_t *lastlight;
1259 	vec3_t	lightpos, vieworg; //Object space light position
1260 	void *lastframeinstant;
1261 
1262 	//Per light stuff
1263 	vec3_t	extvertices[MAXALIASVERTS]; //extruded vertices (volumes)
1264 	vec3_t	tslights[MAXALIASVERTS]; //per vertex tangent space light vector
1265 	vec3_t	tshalfangles[MAXALIASVERTS]; //per vertex half angle vector
1266 	vec3_t	colors[MAXALIASVERTS]; //per vertex attenuation for non gf3 cards
1267 	qboolean triangleVis[MAXALIASTRIS]; //triangle facingness for lights
1268 
1269 	int		indecies[MAXALIASTRIS*3];//light visibility list
1270 	int numtris;
1271 
1272 } aliaslightinstant_t;
1273 
1274 typedef struct aliasframeinstant_s {
1275 
1276      // chain of frameinstant for multiple surfaces
1277         struct aliasframeinstant_s *_next;
1278 
1279 	int lockframe;	//number of the frame when it was last locked.
1280 	int	updateframe; //number of the fame when it was last recalculated
1281 	aliashdr_t *paliashdr;
1282 	int lastpose1, lastpose2;
1283 	float lastblend;
1284 	entity_t	*lastent;
1285 	qboolean lastshadowonly;
1286 	aliashdr_t *lastpaliashdr;
1287 
1288 	qboolean	shadowonly; //We only need the instant for shadow volume drawing
1289 							//we use this for ents out of the frustum but e.g. behind the player
1290 	//Per entity stuff
1291 	vec3_t	vertices[MAXALIASVERTS]; //interpolated vertices
1292 	vec3_t	normals[MAXALIASVERTS]; //interpolated vertex normals
1293 	vec3_t	tangents[MAXALIASVERTS]; //interpolated vertex tangents
1294 	vec3_t	binomials[MAXALIASVERTS]; //interpolated vertex binomials
1295 	plane_t	triplanes[MAXALIASTRIS]; //triangle plane equatations
1296 
1297 	aliaslightinstant_t *lightinstant;
1298 } aliasframeinstant_t;
1299 
1300 typedef struct brushlightinstant_s {
1301 
1302 	int lockframe;	//number of the frame when it was last locked.
1303 	vec3_t lasteorg, lastlorg, lasteangles, lastvorg;
1304 	float lastlradius;
1305 	entity_t	*lastent;
1306 	shadowlight_t *lastlight;
1307 	vec3_t	lightpos, vieworg; //Object space light position
1308 	qboolean shadowonly, lastshadowonly;
1309 
1310 	//Per light stuff
1311 	vec3_t	extvertices[MAXALIASVERTS]; //extruded vertices (volumes)
1312 	vec3_t	tslights[MAXALIASVERTS]; //per vertex tangent space light vector
1313 	vec3_t	tshalfangles[MAXALIASVERTS]; //per vertex half angle vector
1314 	float	atencoords[MAXALIASVERTS][2]; //per vertex attenuation texture coords for non gf3 cards
1315 	float	colorscales[MAXALIASVERTS]; //per vertex attenuation texture coords for non gf3 cards
1316 	qboolean polygonVis[MAXALIASTRIS]; //polygon facingness for lights
1317 	qboolean neighbourVis[MAXALIASTRIS]; //polygon facingness for lights
1318 } brushlightinstant_t;
1319 
1320 
1321 
1322 #define	MAXSHADOWLIGHTS	256 //Maximum number of (client side) lights in a map
1323 #define MAX_VOLUME_VERTICES 10000 //should be multiple of 4 because this is used as a vertex array
1324 								 //with GL_QUADS
1325 #define MAXUSEDSHADOWLIGHS 64 //Maximum number of lights that can be used in a single frame
1326 
1327 extern int numShadowLights;	//number of lights currently on client
1328 extern int numStaticShadowLights; //number of static lights on client
1329 extern int numUsedShadowLights;
1330 extern shadowlight_t shadowlights[MAXSHADOWLIGHTS];
1331 extern shadowlight_t *usedshadowlights[MAXUSEDSHADOWLIGHS];
1332 extern shadowlight_t *currentshadowlight;
1333 extern msurface_t *shadowchain; //linked list of polygons that are shadowed
1334 extern float frustumPlanes[6][4];
1335 
1336 extern mmvertex_t *globalVertexTable;
1337 
1338 #define MAX_VOLUME_COMMANDS 131072 //Thats 0.5 meg storage for commands, insane
1339 #define MAX_VOLUME_VERTS 87381 //1 Meg storage for vertices
1340 #define MAX_LIGHT_COMMANDS 65536 //0.25 meg for light commands
1341 extern lightcmd_t	lightCmdsBuff[MAX_LIGHT_COMMANDS+128];
1342 
1343 //XYZ
1344 extern int	numNormals[MAXALIASTRIS]; //Used during tangent space calc
1345 extern char	loadname[32];	// for hunk tags
1346 
1347 //64 kb should be enough
1348 #define AGP_BUFFER_SIZE 2048*4
1349 extern void *AGP_Buffer;
1350 
1351 //view origin in object space
1352 extern vec3_t object_vieworg;
1353 extern vec3_t tsLightVects[MAXALIASTRIS*3];
1354 extern vec3_t tsHalfAngles[MAXALIASTRIS*3];
1355 
1356 //PENTA: Shadow bsp's
1357 
1358 typedef struct svnode_s {
1359 	plane_t			*splitplane;
1360 	struct svnode_s	*children[2];
1361 } svnode_t;
1362 
1363 
1364 extern int svBsp_NumCutPolys;
1365 extern int svBsp_NumKeptPolys;
1366 extern int svBsp_NumAddedPolys;
1367 extern int svBsp_NumMissedPlanes;
1368 extern int svBsp_NumMissedNodes;
1369 extern int numClearsSaved;
1370 
1371 extern int planesusedpool;
1372 extern int nodesusedpool;
1373 
1374 extern int aliasCacheRequests, aliasFullCacheHits, aliasPartialCacheHits;	// <AWE> added "extern".
1375 extern int brushCacheRequests, brushFullCacheHits, brushPartialCacheHits;	// <AWE> added "extern".
1376 
1377 //Don't cast shadows with this light
1378 #define PFLAG_NOSHADOW 1
1379 //Draw a halo around the light
1380 #define PFLAG_HALO 2
1381 /*
1382 	It seems in c you can only return structs when you prototype them first
1383 	well I don't now for sure since I'm actually not c a specialist.
1384 	If you know the answer mail me please.
1385 */
1386 
1387 svnode_t *R_CreateEmptyTree(void);
1388 svnode_t *R_AddShadowCaster(svnode_t *node, vec3_t *v, int vnum, msurface_t *surf,int depth);
1389 svnode_t *ExpandVolume(vec3_t *v,int *sign, int vnum, msurface_t *surf);
1390 plane_t *AllocPlane(plane_t *tryplane);
1391 svnode_t *AllocNode(void);
1392 svnode_t *NodeFromEdge(vec3_t *v,int vnum, int edgeindex);
1393 float CalcFov (float fov_x, float width, float height);
1394 
1395 /* other c twists (i'm pascal-core and java-used)*/
1396 // <AWE> added misc function prototypes, fixed functions without return type.
1397 void		Mod_LoadMd3Model (model_t *mod, void *buffer);
1398 void		R_AddRectList (screenrect_t *rec);
1399 void		R_AllocateMirror (msurface_t *surf);
1400 void		R_AnimateLight (void);
1401 void		R_AutomaticLightPos (void);
1402 void		R_CalcSvBsp (entity_t *ent);
1403 qboolean	R_CheckRectList (screenrect_t *rec);
1404 void		R_ClearBrushInstantCaches (void);
1405 void		R_ClearInstantCaches (void);
1406 void		R_ClearParticles (void);
1407 void		R_ClearDecals(void);
1408 void		R_ClearRectList (void);
1409 void		R_ConstructShadowVolume (shadowlight_t *light);
1410 qboolean	R_ContributeFrame (shadowlight_t *light);
1411 int		R_CubeMapLookup (int i);
1412 qboolean	R_CullBox (vec3_t mins, vec3_t maxs);
1413 void		R_DrawAliasBumped (aliashdr_t *paliashdr, aliasframeinstant_t *instant);
1414 void		R_DrawAliasBumpedGF3 (aliashdr_t *paliashdr, aliasframeinstant_t *instant);
1415 void		R_DrawAliasBumpedRadeon(aliashdr_t *paliashdr, aliasframeinstant_t *instant);//PA:
1416 void		R_DrawBrushBumpedRadeon(entity_t *e);//PA:
1417 void		R_DrawAliasBumpedParhelia(aliashdr_t *paliashdr, aliasframeinstant_t *instant);//PA:
1418 void		R_DrawBrushBumpedParhelia(entity_t *e);//PA:
1419 void		R_DrawAliasBumpedARB(aliashdr_t *paliashdr, aliasframeinstant_t *instant);//PA:
1420 void		R_DrawBrushBumpedARB(entity_t *e);//PA:
1421 void		R_DrawAliasFrameWV (aliashdr_t *paliashdr, aliasframeinstant_t *instant, qboolean specular);
1422 void		R_DrawAliasObjectLight (entity_t *e, void (*AliasGeoSender) (aliashdr_t *paliashdr,
1423                                                                              aliasframeinstant_t* instant));
1424 void		R_DrawBrushATT (entity_t *ent);
1425 void		R_DrawBrushBumped (entity_t *e);
1426 void		R_DrawBrushBumpedGF3 (entity_t *e);
1427 void		R_DrawBrushBumpedRadeon (entity_t *e);
1428 void		R_DrawBrushBumpedParhelia (entity_t *e);
1429 void		R_DrawBrushBumpedARB (entity_t *e);
1430 void		R_DrawBrushModel (entity_t *e);
1431 void		R_DrawBrushModelVolumes(entity_t *e);
1432 void		R_DrawBrushObjectLight (entity_t *e,void (*BrushGeoSender) (entity_t *e));
1433 void		R_DrawBrushWV (entity_t *e, qboolean specular);
1434 void		R_DrawGlare (void);
1435 void		R_DrawLightEntities (shadowlight_t *l);
1436 void		R_DrawParticles (void);
1437 void		R_DrawDecals (void);
1438 void		R_DrawShadowVolume (shadowlight_t *light);
1439 void		R_DrawSkyChain (msurface_t *s);
1440 void		R_DrawSpriteModelWV (entity_t *e);
1441 void		R_DrawWaterSurfaces (void);
1442 void		R_DrawWorldBumped (/* shadowlight_t *l */);
1443 void		R_DrawWorldBumpedGEN (void);
1444 void 		R_DrawWorldBumpedGF (void);
1445 void		R_DrawWorldBumpedGF3 (void);
1446 void		R_DrawWorldBumpedRadeon (void);
1447 void		R_DrawWorldBumpedParhelia (void);
1448 void		R_DrawWorldBumpedARB (void);
1449 void		R_DrawWorldWV (lightcmd_t *lightCmds, qboolean specular);
1450 qboolean	R_FillShadowChain (shadowlight_t *light);
1451 mspriteframe_t *R_GetSpriteFrame (entity_t *currententity);
1452 void		R_Glare (void);
1453 void		R_InitDrawWorld (void);
1454 void		R_InitGlare (void);
1455 void		R_InitMirrorChains (void);
1456 void		R_InitParticles (void);
1457 void		R_InitDecals (void);
1458 void		R_InitShadowsForFrame (void);
1459 int		R_LightPoint (vec3_t p);
1460 void		R_LoadVertexProgram (void);
1461 void		R_NewMirrorChains (void);
1462 void		R_ParticleGunHits (vec3_t org, int type);
1463 void		R_RenderGlow (shadowlight_t *light);
1464 void		R_RenderScene (void);
1465 void		R_RotateForEntity (entity_t *e);
1466 void		R_UnlerpedRotateForEntity (entity_t *e);
1467 void		R_SetTotalRect (void);
1468 void		R_SetupBrushInstantForLight(entity_t *e);
1469 void		R_SetupInstantForLight(entity_t *e);
1470 void		R_SetupInstantForFrame(entity_t *e, qboolean forcevis);
1471 void		R_SetupInstants (void);
1472 qboolean	R_ShouldDrawViewModel (void);
1473 void		R_StoreEfrags (efrag_t **ppefrag);
1474 void		R_FillEntityLeafs (entity_t *ent);
1475 void		R_WorldMultiplyTextures (void);
1476 void		R_WorldToObjectMatrix(entity_t *e, matrix_4x4 result);
1477 
1478 int		EasyTgaLoad (char *filename);
1479 void		EmitBothSkyLayers (msurface_t *fa);
1480 void		EmitMirrorPolys (msurface_t *fa);
1481 void		EmitMirrorWaterPolys (msurface_t *fa);
1482 void		EmitSkyPolys (msurface_t *fa);
1483 void		EmitWaterPolys (msurface_t *fa);
1484 void		InitShaderTex (void);
1485 void 		LoadColorTGA (FILE *fin, byte *pixels, int *width, int *height, char *fname);
1486 void		LoadGrayTGA (FILE *fin,byte *pixels,int *width, int *height, char *fname);
1487 int             LoadTextureInPlace(char* filename, int size, byte* mem, int* width, int* height);
1488 void            LoadTGA (FILE *fin);
1489 qboolean	OverrideFluidTex (char *name);
1490 void		ProjectPlane (const vec3_t src,const vec3_t v1,const vec3_t v2,vec3_t dst);
1491 void		TraceLine (vec3_t start, vec3_t end, vec3_t impact);
1492 
1493 void		GL_AddColor (void);
1494 void		GL_BuildLightmaps (void);
1495 void		GL_DisableColorShader (qboolean specular);
1496 void 		GL_DrawAlpha (void);
1497 void		GL_EnableColorShader (qboolean specular);
1498 void		GL_GetOverrideName (char *identifier, char *tail, char *dest);
1499 int		GL_LoadCubeMap (int identifier);
1500 void		GL_MakeAliasModelDisplayLists (model_t *m, aliashdr_t *hdr);
1501 void		R_DrawAliasModel ( float bright);
1502 void		GL_ModulateAlphaDrawColor (void);
1503 void		GL_SelectTexture (GLenum target);
1504 void		GL_Set2D (void);
1505 void		GL_SetupCubeMapMatrix (qboolean world);
1506 void		GL_SubdivideSurface (msurface_t *fa);
1507 void		GL_Upload8_EXT (byte *data, int width, int height,  qboolean mipmap, qboolean alpha);
1508 int		GL_LoadLuma(char *identifier, qboolean mipmap);
1509 void		R_DrawCaustics(void);
1510 int			CL_PointContents (vec3_t p);
1511 void		V_CalcBlend (void);
1512 
1513 #define VERTEX_TEXTURE 1
1514 #define VERTEX_LIGHTMAP 2
1515 
1516 int R_GetNextVertexIndex(void);
1517 int R_AllocateVertexInTemp(vec3_t pos, float texture [2], float lightmap[2]);
1518 void R_CopyVerticesToHunk(void);
1519 void R_EnableVertexTable(int fields);
1520 void R_DisableVertexTable(int fields);
1521 
1522 qboolean 	VID_Is8bit (void);
1523 
1524 typedef struct mirrorplane_s {
1525 	int texture_object;  //Object we should render to and use for drawing
1526 	int	lockframe, updateframe;		//Index of frame when it was last updated
1527 	mplane_t	plane;		//Plane equatation of mirror face
1528 	msurface_t *chain;	//Chain of mirror poly's
1529 	float	matrix[16];
1530 } mirrorplane_t;
1531 
1532 #define NUM_MIRROR_PLANES 8
1533 extern mirrorplane_t mirrorplanes[NUM_MIRROR_PLANES];
1534 extern int mirror_contents;
1535 extern int newenvmap;
1536 
1537 extern msurface_t	*causticschain;
1538 extern int	caustics_textures[8];
1539 extern qboolean	busy_caustics;
1540 
1541 extern char	skybox_name[64];
1542 extern float skybox_cloudspeed;
1543 extern qboolean skybox_hasclouds;
1544 
1545 #include "gl_md3.h"
1546