1/*
2Copyright (C) 1996-1997 Id Software, Inc.
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
19*/
20// disable data conversion warnings
21
22#ifdef _WIN32
23#pragma warning(disable : 4244)     // MIPS
24#pragma warning(disable : 4136)     // X86
25#pragma warning(disable : 4051)     // ALPHA
26#endif
27
28#ifdef _WIN32
29#include <windows.h>
30#endif
31
32#ifdef USE_OPENGLES
33
34#include <GLES/gl.h>
35
36#else
37
38#include <GL/gl.h>
39#include <GL/glu.h>
40
41#endif
42
43void GL_BeginRendering (int *x, int *y, int *width, int *height);
44void GL_EndRendering (void);
45
46#ifdef USE_OPENGLES
47
48#else // full OpenGL
49
50// Function prototypes for the Texture Object Extension routines
51typedef GLboolean (APIENTRY *ARETEXRESFUNCPTR)(GLsizei, const GLuint *,
52                    const GLboolean *);
53typedef void (APIENTRY *BINDTEXFUNCPTR)(GLenum, GLuint);
54typedef void (APIENTRY *DELTEXFUNCPTR)(GLsizei, const GLuint *);
55typedef void (APIENTRY *GENTEXFUNCPTR)(GLsizei, GLuint *);
56typedef GLboolean (APIENTRY *ISTEXFUNCPTR)(GLuint);
57typedef void (APIENTRY *PRIORTEXFUNCPTR)(GLsizei, const GLuint *,
58                    const GLclampf *);
59typedef void (APIENTRY *TEXSUBIMAGEPTR)(int, int, int, int, int, int, int, int, void *);
60
61extern	BINDTEXFUNCPTR bindTexFunc;
62extern	DELTEXFUNCPTR delTexFunc;
63extern	TEXSUBIMAGEPTR TexSubImage2DFunc;
64
65#endif // USE_OPENGLES
66
67extern	int texture_extension_number;
68extern	int		texture_mode;
69
70extern	float	gldepthmin, gldepthmax;
71
72void GL_Upload32 (unsigned *data, int width, int height,  qboolean mipmap, qboolean alpha);
73void GL_Upload8 (byte *data, int width, int height,  qboolean mipmap, qboolean alpha);
74int GL_LoadTexture (const char *identifier, int width, int height, byte *data, qboolean mipmap, qboolean alpha);
75int GL_FindTexture (const char *identifier);
76
77typedef struct
78{
79	float	x, y, z;
80	float	s, t;
81	float	r, g, b;
82} glvert_t;
83
84extern glvert_t glv;
85
86extern	int glx, gly, glwidth, glheight;
87
88#ifdef _WIN32
89extern	PROC glArrayElementEXT;
90extern	PROC glColorPointerEXT;
91extern	PROC glTexturePointerEXT;
92extern	PROC glVertexPointerEXT;
93#endif
94
95// r_local.h -- private refresh defs
96
97#define ALIAS_BASE_SIZE_RATIO		(1.0 / 11.0)
98					// normalizing factor so player model works out to about
99					//  1 pixel per triangle
100#define	MAX_LBM_HEIGHT		480
101
102#define TILE_SIZE		128		// size of textures generated by R_GenTiledSurf
103
104#define SKYSHIFT		7
105#define	SKYSIZE			(1 << SKYSHIFT)
106#define SKYMASK			(SKYSIZE - 1)
107
108#define BACKFACE_EPSILON	0.01
109
110
111void R_TimeRefresh_f (void);
112void R_ReadPointFile_f (void);
113texture_t *R_TextureAnimation (texture_t *base);
114
115typedef struct surfcache_s
116{
117	struct surfcache_s	*next;
118	struct surfcache_s 	**owner;		// NULL is an empty chunk of memory
119	int					lightadj[MAXLIGHTMAPS]; // checked for strobe flush
120	int					dlight;
121	int					size;		// including header
122	unsigned			width;
123	unsigned			height;		// DEBUG only needed for debug
124	float				mipscale;
125	struct texture_s	*texture;	// checked for animating textures
126	byte				data[4];	// width*height elements
127} surfcache_t;
128
129
130typedef struct
131{
132	pixel_t		*surfdat;	// destination for generated surface
133	int			rowbytes;	// destination logical width in bytes
134	msurface_t	*surf;		// description for surface to generate
135	fixed8_t	lightadj[MAXLIGHTMAPS];
136							// adjust for lightmap levels for dynamic lighting
137	texture_t	*texture;	// corrected for animating textures
138	int			surfmip;	// mipmapped ratio of surface texels / world pixels
139	int			surfwidth;	// in mipmapped texels
140	int			surfheight;	// in mipmapped texels
141} drawsurf_t;
142
143
144typedef enum {
145	pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2,
146	ptype_t_max = 1 << 30
147} ptype_t;
148
149// !!! if this is changed, it must be changed in d_ifacea.h too !!!
150typedef struct particle_s
151{
152// driver-usable fields
153	vec3_t		org;
154	float		color;
155// drivers never touch the following fields
156	struct particle_s	*next;
157	vec3_t		vel;
158	float		ramp;
159	float		die;
160	ptype_t		type;
161} particle_t;
162
163
164//====================================================
165
166
167extern	entity_t	r_worldentity;
168extern	qboolean	r_cache_thrash;		// compatability
169extern	vec3_t		modelorg, r_entorigin;
170extern	entity_t	*currententity;
171extern	int			r_visframecount;	// ??? what difs?
172extern	int			r_framecount;
173extern	mplane_t	frustum[4];
174extern	int		c_brush_polys, c_alias_polys;
175
176
177//
178// view origin
179//
180extern	vec3_t	vup;
181extern	vec3_t	vpn;
182extern	vec3_t	vright;
183extern	vec3_t	r_origin;
184
185//
186// screen size info
187//
188extern	refdef_t	r_refdef;
189extern	mleaf_t		*r_viewleaf, *r_oldviewleaf;
190extern	texture_t	*r_notexture_mip;
191extern	int		d_lightstylevalue[256];	// 8.8 fraction of base light value
192
193extern	qboolean	envmap;
194extern	int	currenttexture;
195extern	int	cnttextures[2];
196extern	int	particletexture;
197extern	int	playertextures;
198
199extern	int	skytexturenum;		// index in cl.loadmodel, not gl texture object
200
201extern	cvar_t	r_norefresh;
202extern	cvar_t	r_drawentities;
203extern	cvar_t	r_drawworld;
204extern	cvar_t	r_drawviewmodel;
205extern	cvar_t	r_speeds;
206extern	cvar_t	r_waterwarp;
207extern	cvar_t	r_fullbright;
208extern	cvar_t	r_lightmap;
209extern	cvar_t	r_shadows;
210extern	cvar_t	r_mirroralpha;
211extern	cvar_t	r_wateralpha;
212extern	cvar_t	r_dynamic;
213extern	cvar_t	r_novis;
214
215extern	cvar_t	gl_clear;
216extern	cvar_t	gl_cull;
217extern	cvar_t	gl_poly;
218extern	cvar_t	gl_texsort;
219extern	cvar_t	gl_smoothmodels;
220extern	cvar_t	gl_affinemodels;
221extern	cvar_t	gl_polyblend;
222extern	cvar_t	gl_keeptjunctions;
223extern	cvar_t	gl_reporttjunctions;
224extern	cvar_t	gl_flashblend;
225extern	cvar_t	gl_nocolors;
226extern	cvar_t	gl_doubleeyes;
227
228extern	int		gl_lightmap_format;
229extern	int		gl_solid_format;
230extern	int		gl_alpha_format;
231
232extern	cvar_t	gl_max_size;
233extern	cvar_t	gl_playermip;
234
235extern	int			mirrortexturenum;	// quake texturenum, not gltexturenum
236extern	qboolean	mirror;
237extern	mplane_t	*mirror_plane;
238
239extern	float	r_world_matrix[16];
240
241extern	const char *gl_vendor;
242extern	const char *gl_renderer;
243extern	const char *gl_version;
244extern	const char *gl_extensions;
245
246void R_TranslatePlayerSkin (int playernum);
247void GL_Bind (int texnum);
248
249// Multitexture
250#ifdef USE_OPENGLES
251
252#define    TEXTURE0_SGIS				GL_TEXTURE0
253#define    TEXTURE1_SGIS				GL_TEXTURE1
254
255#else
256#define    TEXTURE0_SGIS				0x835E
257#define    TEXTURE1_SGIS				0x835F
258#endif
259
260#ifndef _WIN32
261#define APIENTRY /* */
262
263typedef void (APIENTRY *lpMTexFUNC) (GLenum, GLfloat, GLfloat);
264typedef void (APIENTRY *lpSelTexFUNC) (GLenum);
265extern lpMTexFUNC qglMTexCoord2fSGIS;
266extern lpSelTexFUNC qglSelectTextureSGIS;
267
268#endif
269
270extern qboolean gl_mtexable;
271
272void GL_DisableMultitexture(void);
273void GL_EnableMultitexture(void);
274
275// Debugging
276
277#define DEBUG_OPENGL_CALLS
278#ifdef DEBUG_OPENGL_CALLS
279void checkGLImp(const char* state, const char* file, int line);
280
281#define GLCHECK(PROMPT)  checkGLImp(PROMPT, __FILE__, __LINE__)
282
283
284#define glAlphaFunc(...) do { glAlphaFunc(__VA_ARGS__); GLCHECK("glAlphaFunc");} while(0)
285#define glClearColor(...) do { glClearColor(__VA_ARGS__); GLCHECK("glClearColor");} while(0)
286#define glClearDepthf(...) do { glClearDepthf(__VA_ARGS__); GLCHECK("glClearDepthf");} while(0)
287#define glClipPlanef(...) do { glClipPlanef(__VA_ARGS__); GLCHECK("glClipPlanef");} while(0)
288#define glColor4f(...) do { glColor4f(__VA_ARGS__); GLCHECK("glColor4f");} while(0)
289#define glDepthRangef(...) do { glDepthRangef(__VA_ARGS__); GLCHECK("glDepthRangef");} while(0)
290#define glFogf(...) do { glFogf(__VA_ARGS__); GLCHECK("glFogf");} while(0)
291#define glFogfv(...) do { glFogfv(__VA_ARGS__); GLCHECK("glFogfv");} while(0)
292#define glFrustumf(...) do { glFrustumf(__VA_ARGS__); GLCHECK("glFrustumf");} while(0)
293#define glGetClipPlanef(...) do { glGetClipPlanef(__VA_ARGS__); GLCHECK("glGetClipPlanef");} while(0)
294#define glGetFloatv(...) do { glGetFloatv(__VA_ARGS__); GLCHECK("glGetFloatv");} while(0)
295#define glGetLightfv(...) do { glGetLightfv(__VA_ARGS__); GLCHECK("glGetLightfv");} while(0)
296#define glGetMaterialfv(...) do { glGetMaterialfv(__VA_ARGS__); GLCHECK("glGetMaterialfv");} while(0)
297#define glGetTexEnvfv(...) do { glGetTexEnvfv(__VA_ARGS__); GLCHECK("glGetTexEnvfv");} while(0)
298#define glGetTexParameterfv(...) do { glGetTexParameterfv(__VA_ARGS__); GLCHECK("glGetTexParameterfv");} while(0)
299#define glLightModelf(...) do { glLightModelf(__VA_ARGS__); GLCHECK("glLightModelf");} while(0)
300#define glLightModelfv(...) do { glLightModelfv(__VA_ARGS__); GLCHECK("glLightModelfv");} while(0)
301#define glLightf(...) do { glLightf(__VA_ARGS__); GLCHECK("glLightf");} while(0)
302#define glLightfv(...) do { glLightfv(__VA_ARGS__); GLCHECK("glLightfv");} while(0)
303#define glLineWidth(...) do { glLineWidth(__VA_ARGS__); GLCHECK("glLineWidth");} while(0)
304#define glLoadMatrixf(...) do { glLoadMatrixf(__VA_ARGS__); GLCHECK("glLoadMatrixf");} while(0)
305#define glMaterialf(...) do { glMaterialf(__VA_ARGS__); GLCHECK("glMaterialf");} while(0)
306#define glMaterialfv(...) do { glMaterialfv(__VA_ARGS__); GLCHECK("glMaterialfv");} while(0)
307#define glMultMatrixf(...) do { glMultMatrixf(__VA_ARGS__); GLCHECK("glMultMatrixf");} while(0)
308#define glMultiTexCoord4f(...) do { glMultiTexCoord4f(__VA_ARGS__); GLCHECK("glMultiTexCoord4f");} while(0)
309#define glNormal3f(...) do { glNormal3f(__VA_ARGS__); GLCHECK("glNormal3f");} while(0)
310#define glOrthof(...) do { glOrthof(__VA_ARGS__); GLCHECK("glOrthof");} while(0)
311#define glPointParameterf(...) do { glPointParameterf(__VA_ARGS__); GLCHECK("glPointParameterf");} while(0)
312#define glPointParameterfv(...) do { glPointParameterfv(__VA_ARGS__); GLCHECK("glPointParameterfv");} while(0)
313#define glPointSize(...) do { glPointSize(__VA_ARGS__); GLCHECK("glPointSize");} while(0)
314#define glPolygonOffset(...) do { glPolygonOffset(__VA_ARGS__); GLCHECK("glPolygonOffset");} while(0)
315#define glRotatef(...) do { glRotatef(__VA_ARGS__); GLCHECK("glRotatef");} while(0)
316#define glScalef(...) do { glScalef(__VA_ARGS__); GLCHECK("glScalef");} while(0)
317#define glTexEnvf(...) do { glTexEnvf(__VA_ARGS__); GLCHECK("glTexEnvf");} while(0)
318#define glTexEnvfv(...) do { glTexEnvfv(__VA_ARGS__); GLCHECK("glTexEnvfv");} while(0)
319#define glTexParameterf(...) do { glTexParameterf(__VA_ARGS__); GLCHECK("glTexParameterf");} while(0)
320#define glTexParameterfv(...) do { glTexParameterfv(__VA_ARGS__); GLCHECK("glTexParameterfv");} while(0)
321#define glTranslatef(...) do { glTranslatef(__VA_ARGS__); GLCHECK("glTranslatef");} while(0)
322#define glActiveTexture(...) do { glActiveTexture(__VA_ARGS__); GLCHECK("glActiveTexture");} while(0)
323#define glAlphaFuncx(...) do { glAlphaFuncx(__VA_ARGS__); GLCHECK("glAlphaFuncx");} while(0)
324#define glBindBuffer(...) do { glBindBuffer(__VA_ARGS__); GLCHECK("glBindBuffer");} while(0)
325#define glBindTexture(...) do { glBindTexture(__VA_ARGS__); GLCHECK("glBindTexture");} while(0)
326#define glBlendFunc(...) do { glBlendFunc(__VA_ARGS__); GLCHECK("glBlendFunc");} while(0)
327#define glBufferData(...) do { glBufferData(__VA_ARGS__); GLCHECK("glBufferData");} while(0)
328#define glBufferSubData(...) do { glBufferSubData(__VA_ARGS__); GLCHECK("glBufferSubData");} while(0)
329#define glClear(...) do { glClear(__VA_ARGS__); GLCHECK("glClear");} while(0)
330#define glClearColorx(...) do { glClearColorx(__VA_ARGS__); GLCHECK("glClearColorx");} while(0)
331#define glClearDepthx(...) do { glClearDepthx(__VA_ARGS__); GLCHECK("glClearDepthx");} while(0)
332#define glClearStencil(...) do { glClearStencil(__VA_ARGS__); GLCHECK("glClearStencil");} while(0)
333#define glClientActiveTexture(...) do { glClientActiveTexture(__VA_ARGS__); GLCHECK("glClientActiveTexture");} while(0)
334#define glClipPlanex(...) do { glClipPlanex(__VA_ARGS__); GLCHECK("glClipPlanex");} while(0)
335#define glColor4ub(...) do { glColor4ub(__VA_ARGS__); GLCHECK("glColor4ub");} while(0)
336#define glColor4x(...) do { glColor4x(__VA_ARGS__); GLCHECK("glColor4x");} while(0)
337#define glColorMask(...) do { glColorMask(__VA_ARGS__); GLCHECK("glColorMask");} while(0)
338#define glColorPointer(...) do { glColorPointer(__VA_ARGS__); GLCHECK("glColorPointer");} while(0)
339#define glCompressedTexImage2D(...) do { glCompressedTexImage2D(__VA_ARGS__); GLCHECK("glCompressedTexImage2D");} while(0)
340#define glCompressedTexSubImage2D(...) do { glCompressedTexSubImage2D(__VA_ARGS__); GLCHECK("glCompressedTexSubImage2D");} while(0)
341#define glCopyTexImage2D(...) do { glCopyTexImage2D(__VA_ARGS__); GLCHECK("glCopyTexImage2D");} while(0)
342#define glCopyTexSubImage2D(...) do { glCopyTexSubImage2D(__VA_ARGS__); GLCHECK("glCopyTexSubImage2D");} while(0)
343#define glCullFace(...) do { glCullFace(__VA_ARGS__); GLCHECK("glCullFace");} while(0)
344#define glDeleteBuffers(...) do { glDeleteBuffers(__VA_ARGS__); GLCHECK("glDeleteBuffers");} while(0)
345#define glDeleteTextures(...) do { glDeleteTextures(__VA_ARGS__); GLCHECK("glDeleteTextures");} while(0)
346#define glDepthFunc(...) do { glDepthFunc(__VA_ARGS__); GLCHECK("glDepthFunc");} while(0)
347#define glDepthMask(...) do { glDepthMask(__VA_ARGS__); GLCHECK("glDepthMask");} while(0)
348#define glDepthRangex(...) do { glDepthRangex(__VA_ARGS__); GLCHECK("glDepthRangex");} while(0)
349#define glDisable(...) do { glDisable(__VA_ARGS__); GLCHECK("glDisable");} while(0)
350#define glDisableClientState(...) do { glDisableClientState(__VA_ARGS__); GLCHECK("glDisableClientState");} while(0)
351#define glDrawArrays(...) do { glDrawArrays(__VA_ARGS__); GLCHECK("glDrawArrays");} while(0)
352#define glDrawElements(...) do { glDrawElements(__VA_ARGS__); GLCHECK("glDrawElements");} while(0)
353#define glEnable(...) do { glEnable(__VA_ARGS__); GLCHECK("glEnable");} while(0)
354#define glEnableClientState(...) do { glEnableClientState(__VA_ARGS__); GLCHECK("glEnableClientState");} while(0)
355#define glFinish(...) do { glFinish(__VA_ARGS__); GLCHECK("glFinish");} while(0)
356#define glFlush(...) do { glFlush(__VA_ARGS__); GLCHECK("glFlush");} while(0)
357#define glFogx(...) do { glFogx(__VA_ARGS__); GLCHECK("glFogx");} while(0)
358#define glFogxv(...) do { glFogxv(__VA_ARGS__); GLCHECK("glFogxv");} while(0)
359#define glFrontFace(...) do { glFrontFace(__VA_ARGS__); GLCHECK("glFrontFace");} while(0)
360#define glFrustumx(...) do { glFrustumx(__VA_ARGS__); GLCHECK("glFrustumx");} while(0)
361#define glGetBooleanv(...) do { glGetBooleanv(__VA_ARGS__); GLCHECK("glGetBooleanv");} while(0)
362#define glGetBufferParameteriv(...) do { glGetBufferParameteriv(__VA_ARGS__); GLCHECK("glGetBufferParameteriv");} while(0)
363#define glGetClipPlanex(...) do { glGetClipPlanex(__VA_ARGS__); GLCHECK("glGetClipPlanex");} while(0)
364#define glGenBuffers(...) do { glGenBuffers(__VA_ARGS__); GLCHECK("glGenBuffers");} while(0)
365#define glGenTextures(...) do { glGenTextures(__VA_ARGS__); GLCHECK("glGenTextures");} while(0)
366// #define glGetError(...) do { glGetError(__VA_ARGS__); GLCHECK("glGetError");} while(0)
367// #define glGetFixedv(...) do { glGetFixedv(__VA_ARGS__); GLCHECK("glGetFixedv");} while(0)
368// #define glGetIntegerv(...) do { glGetIntegerv(__VA_ARGS__); GLCHECK("glGetIntegerv");} while(0)
369// #define glGetLightxv(...) do { glGetLightxv(__VA_ARGS__); GLCHECK("glGetLightxv");} while(0)
370// #define glGetMaterialxv(...) do { glGetMaterialxv(__VA_ARGS__); GLCHECK("glGetMaterialxv");} while(0)
371// #define glGetPointerv(...) do { glGetPointerv(__VA_ARGS__); GLCHECK("glGetPointerv");} while(0)
372// #define glGetString(...) do { glGetString(__VA_ARGS__); GLCHECK("glGetString");} while(0)
373// #define glGetTexEnviv(...) do { glGetTexEnviv(__VA_ARGS__); GLCHECK("glGetTexEnviv");} while(0)
374// #define glGetTexEnvxv(...) do { glGetTexEnvxv(__VA_ARGS__); GLCHECK("glGetTexEnvxv");} while(0)
375// #define glGetTexParameteriv(...) do { glGetTexParameteriv(__VA_ARGS__); GLCHECK("glGetTexParameteriv");} while(0)
376// #define glGetTexParameterxv(...) do { glGetTexParameterxv(__VA_ARGS__); GLCHECK("glGetTexParameterxv");} while(0)
377#define glHint(...) do { glHint(__VA_ARGS__); GLCHECK("glHint");} while(0)
378#define glIsBuffer(...) do { glIsBuffer(__VA_ARGS__); GLCHECK("glIsBuffer");} while(0)
379#define glIsEnabled(...) do { glIsEnabled(__VA_ARGS__); GLCHECK("glIsEnabled");} while(0)
380#define glIsTexture(...) do { glIsTexture(__VA_ARGS__); GLCHECK("glIsTexture");} while(0)
381#define glLightModelx(...) do { glLightModelx(__VA_ARGS__); GLCHECK("glLightModelx");} while(0)
382#define glLightModelxv(...) do { glLightModelxv(__VA_ARGS__); GLCHECK("glLightModelxv");} while(0)
383#define glLightx(...) do { glLightx(__VA_ARGS__); GLCHECK("glLightx");} while(0)
384#define glLightxv(...) do { glLightxv(__VA_ARGS__); GLCHECK("glLightxv");} while(0)
385#define glLineWidthx(...) do { glLineWidthx(__VA_ARGS__); GLCHECK("glLineWidthx");} while(0)
386#define glLoadIdentity(...) do { glLoadIdentity(__VA_ARGS__); GLCHECK("glLoadIdentity");} while(0)
387#define glLoadMatrixx(...) do { glLoadMatrixx(__VA_ARGS__); GLCHECK("glLoadMatrixx");} while(0)
388#define glLogicOp(...) do { glLogicOp(__VA_ARGS__); GLCHECK("glLogicOp");} while(0)
389#define glMaterialx(...) do { glMaterialx(__VA_ARGS__); GLCHECK("glMaterialx");} while(0)
390#define glMaterialxv(...) do { glMaterialxv(__VA_ARGS__); GLCHECK("glMaterialxv");} while(0)
391#define glMatrixMode(...) do { glMatrixMode(__VA_ARGS__); GLCHECK("glMatrixMode");} while(0)
392#define glMultMatrixx(...) do { glMultMatrixx(__VA_ARGS__); GLCHECK("glMultMatrixx");} while(0)
393#define glMultiTexCoord4x(...) do { glMultiTexCoord4x(__VA_ARGS__); GLCHECK("glMultiTexCoord4x");} while(0)
394#define glNormal3x(...) do { glNormal3x(__VA_ARGS__); GLCHECK("glNormal3x");} while(0)
395#define glNormalPointer(...) do { glNormalPointer(__VA_ARGS__); GLCHECK("glNormalPointer");} while(0)
396#define glOrthox(...) do { glOrthox(__VA_ARGS__); GLCHECK("glOrthox");} while(0)
397#define glPixelStorei(...) do { glPixelStorei(__VA_ARGS__); GLCHECK("glPixelStorei");} while(0)
398#define glPointParameterx(...) do { glPointParameterx(__VA_ARGS__); GLCHECK("glPointParameterx");} while(0)
399#define glPointParameterxv(...) do { glPointParameterxv(__VA_ARGS__); GLCHECK("glPointParameterxv");} while(0)
400#define glPointSizex(...) do { glPointSizex(__VA_ARGS__); GLCHECK("glPointSizex");} while(0)
401#define glPolygonOffsetx(...) do { glPolygonOffsetx(__VA_ARGS__); GLCHECK("glPolygonOffsetx");} while(0)
402#define glPopMatrix(...) do { glPopMatrix(__VA_ARGS__); GLCHECK("glPopMatrix");} while(0)
403#define glPushMatrix(...) do { glPushMatrix(__VA_ARGS__); GLCHECK("glPushMatrix");} while(0)
404#define glReadPixels(...) do { glReadPixels(__VA_ARGS__); GLCHECK("glReadPixels");} while(0)
405#define glRotatex(...) do { glRotatex(__VA_ARGS__); GLCHECK("glRotatex");} while(0)
406#define glSampleCoverage(...) do { glSampleCoverage(__VA_ARGS__); GLCHECK("glSampleCoverage");} while(0)
407#define glSampleCoveragex(...) do { glSampleCoveragex(__VA_ARGS__); GLCHECK("glSampleCoveragex");} while(0)
408#define glScalex(...) do { glScalex(__VA_ARGS__); GLCHECK("glScalex");} while(0)
409#define glScissor(...) do { glScissor(__VA_ARGS__); GLCHECK("glScissor");} while(0)
410#define glShadeModel(...) do { glShadeModel(__VA_ARGS__); GLCHECK("glShadeModel");} while(0)
411#define glStencilFunc(...) do { glStencilFunc(__VA_ARGS__); GLCHECK("glStencilFunc");} while(0)
412#define glStencilMask(...) do { glStencilMask(__VA_ARGS__); GLCHECK("glStencilMask");} while(0)
413#define glStencilOp(...) do { glStencilOp(__VA_ARGS__); GLCHECK("glStencilOp");} while(0)
414#define glTexCoordPointer(...) do { glTexCoordPointer(__VA_ARGS__); GLCHECK("glTexCoordPointer");} while(0)
415#define glTexEnvi(...) do { glTexEnvi(__VA_ARGS__); GLCHECK("glTexEnvi");} while(0)
416#define glTexEnvx(...) do { glTexEnvx(__VA_ARGS__); GLCHECK("glTexEnvx");} while(0)
417#define glTexEnviv(...) do { glTexEnviv(__VA_ARGS__); GLCHECK("glTexEnviv");} while(0)
418#define glTexEnvxv(...) do { glTexEnvxv(__VA_ARGS__); GLCHECK("glTexEnvxv");} while(0)
419#define glTexImage2D(...) do { glTexImage2D(__VA_ARGS__); GLCHECK("glTexImage2D");} while(0)
420#define glTexParameteri(...) do { glTexParameteri(__VA_ARGS__); GLCHECK("glTexParameteri");} while(0)
421#define glTexParameterx(...) do { glTexParameterx(__VA_ARGS__); GLCHECK("glTexParameterx");} while(0)
422#define glTexParameteriv(...) do { glTexParameteriv(__VA_ARGS__); GLCHECK("glTexParameteriv");} while(0)
423#define glTexParameterxv(...) do { glTexParameterxv(__VA_ARGS__); GLCHECK("glTexParameterxv");} while(0)
424#define glTexSubImage2D(...) do { glTexSubImage2D(__VA_ARGS__); GLCHECK("glTexSubImage2D");} while(0)
425#define glTranslatex(...) do { glTranslatex(__VA_ARGS__); GLCHECK("glTranslatex");} while(0)
426#define glVertexPointer(...) do { glVertexPointer(__VA_ARGS__); GLCHECK("glVertexPointer");} while(0)
427#define glViewport(...) do { glViewport(__VA_ARGS__); GLCHECK("glViewport");} while(0)
428
429
430
431#else
432#define GLCHECK(PROMPT) do {} while(0)
433#endif
434