Check-in [980482b54b]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:added glshim (OpenGL 1.1 for 3dcanvas, not yet ready)
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 980482b54b65f6d89de1f2b2ccfadbb6250abcb6
User & Date: chw 2014-11-29 12:05:49.232
Context
2014-12-01
10:04
updated Android support library check-in: 66e228dee0 user: chw tags: trunk
2014-11-29
12:05
added glshim (OpenGL 1.1 for 3dcanvas, not yet ready) check-in: 980482b54b user: chw tags: trunk
2014-11-25
07:40
fixed missing Tcl/Tk 8.6.3 pieces check-in: 2935a7632d user: chw tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to jni/3dcanvas/Android.mk-notyet.
88
89
90
91
92
93
94
95
96
97
	-DCAN3D_SDL=1 \
	-O2

LOCAL_STATIC_LIBRARIES := GL_static

LOCAL_SHARED_LIBRARIES := libtcl libtk

LOCAL_LDLIBS := -ldl -lGLESv1_CM -llog

include $(BUILD_SHARED_LIBRARY)







|


88
89
90
91
92
93
94
95
96
97
	-DCAN3D_SDL=1 \
	-O2

LOCAL_STATIC_LIBRARIES := GL_static

LOCAL_SHARED_LIBRARIES := libtcl libtk

LOCAL_LDLIBS := -ldl -llog

include $(BUILD_SHARED_LIBRARY)
Added jni/glshim/Android.mk-notyet.












































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
LOCAL_PATH := $(call my-dir)

###########################
#
# GL static library
#
###########################

include $(CLEAR_VARS)

LOCAL_MODULE := GL_static

LOCAL_MODULE_FILENAME := libGL

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include \
	$(LOCAL_PATH)/src/util \
	$(LOCAL_PATH)/src/util/vectorial

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)

LOCAL_SRC_FILES := \
	src/gl/array.c \
	src/gl/blend.c \
	src/gl/block.c \
	src/gl/clear.c \
	src/gl/depth.c \
	src/gl/eval.c \
	src/gl/get.c \
	src/gl/gl.c \
	src/gl/light.c \
	src/gl/line.c \
	src/gl/list.c \
	src/gl/loader.c \
	src/gl/matrix.c \
	src/gl/pixel.c \
	src/gl/raster.c \
	src/gl/render.c \
	src/gl/stack.c \
	src/gl/texgen.c \
	src/gl/text.c \
	src/gl/texture.c \
	src/gl/wrap/gl.c \
	src/gl/wrap/gles.c \
	src/gl/wrap/gles2.c \
	src/gl/wrap/glstub.c \
	src/util/gl_str.c \
	src/util/tack.c \
	src/util/math/eval.c

LOCAL_CFLAGS += -O2 -std=c99 -DGL_EXPORTS -D_THREAD_SAFE=1

LOCAL_LDLIBS := -ldl -llog

include $(BUILD_STATIC_LIBRARY)
Added jni/glshim/CMakeLists.txt.














































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cmake_minimum_required(VERSION 2.6)

project(glshim)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

link_directories(${CMAKE_LIBRARY_OUTPUT_DIRECTORY})

# Raspberry PI
if(BCMHOST)
    include_directories(/opt/vc/include /opt/vc/include/interface/vcos/pthreads /opt/vc/include/interface/vmcs_host/linux)
    link_directories(/opt/vc/lib)
    add_definitions(-DBCMHOST -D_GNU_SOURCE)
endif()

link_directories(${CMAKE_BINARY_DIR}/lib)
add_definitions(-O2)
include(flags.cmake)

include_directories(include)
add_subdirectory(src)
Added jni/glshim/LICENSE.






































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Copyright (c) 2013 Ryan Hileman

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Added jni/glshim/README.md.






























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
glshim
====

This is a shim providing OpenGL 1.x functionality to OpenGL ES accelerated cards.

----

Compiling
----

    cmake .; make GL

*or for the Raspberry Pi*

    cmake . -DBCMHOST=1; make GL

----

GLU
----

You probably want the glu branch from https://github.com/lunixbochs/glues

    git clone git@github.com:lunixbochs/glues.git; git checkout glu; cmake .; make

----

Installation
----

Put lib/libGL.so.1 in your `LD_LIBRARY_PATH`. If you need GLU, build libGLU.so.1 from the glues repo and do likewise.
Added jni/glshim/flags.cmake.












>
>
>
>
>
>
1
2
3
4
5
6
add_definitions(-g -funwind-tables -ffast-math)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
    add_definitions(-fsingle-precision-constant -mfpu=neon -march=armv7-a -mcpu=cortex-a8 -mtune=cortex-a8)
endif()
Added jni/glshim/include/EGL/egl.h.


















































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
/* -*- mode: c; tab-width: 8; -*- */
/* vi: set sw=4 ts=8: */
/* Reference version of egl.h for EGL 1.4.
 * $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
 */

/*
** Copyright (c) 2007-2009 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

#ifndef __egl_h_
#define __egl_h_

/* All platform-dependent types and macro boilerplate (such as EGLAPI
 * and EGLAPIENTRY) should go in eglplatform.h.
 */
#include <EGL/eglplatform.h>

#ifdef __cplusplus
extern "C" {
#endif

/* EGL Types */
/* EGLint is defined in eglplatform.h */
typedef unsigned int EGLBoolean;
typedef unsigned int EGLenum;
typedef void *EGLConfig;
typedef void *EGLContext;
typedef void *EGLDisplay;
typedef void *EGLSurface;
typedef void *EGLClientBuffer;

/* EGL Versioning */
#define EGL_VERSION_1_0			1
#define EGL_VERSION_1_1			1
#define EGL_VERSION_1_2			1
#define EGL_VERSION_1_3			1
#define EGL_VERSION_1_4			1

/* EGL Enumerants. Bitmasks and other exceptional cases aside, most
 * enums are assigned unique values starting at 0x3000.
 */

/* EGL aliases */
#define EGL_FALSE			0
#define EGL_TRUE			1

/* Out-of-band handle values */
#define EGL_DEFAULT_DISPLAY		((EGLNativeDisplayType)0)
#define EGL_NO_CONTEXT			((EGLContext)0)
#define EGL_NO_DISPLAY			((EGLDisplay)0)
#define EGL_NO_SURFACE			((EGLSurface)0)

/* Out-of-band attribute value */
#define EGL_DONT_CARE			((EGLint)-1)

/* Errors / GetError return values */
#define EGL_SUCCESS			0x3000
#define EGL_NOT_INITIALIZED		0x3001
#define EGL_BAD_ACCESS			0x3002
#define EGL_BAD_ALLOC			0x3003
#define EGL_BAD_ATTRIBUTE		0x3004
#define EGL_BAD_CONFIG			0x3005
#define EGL_BAD_CONTEXT			0x3006
#define EGL_BAD_CURRENT_SURFACE		0x3007
#define EGL_BAD_DISPLAY			0x3008
#define EGL_BAD_MATCH			0x3009
#define EGL_BAD_NATIVE_PIXMAP		0x300A
#define EGL_BAD_NATIVE_WINDOW		0x300B
#define EGL_BAD_PARAMETER		0x300C
#define EGL_BAD_SURFACE			0x300D
#define EGL_CONTEXT_LOST		0x300E	/* EGL 1.1 - IMG_power_management */

/* Reserved 0x300F-0x301F for additional errors */

/* Config attributes */
#define EGL_BUFFER_SIZE			0x3020
#define EGL_ALPHA_SIZE			0x3021
#define EGL_BLUE_SIZE			0x3022
#define EGL_GREEN_SIZE			0x3023
#define EGL_RED_SIZE			0x3024
#define EGL_DEPTH_SIZE			0x3025
#define EGL_STENCIL_SIZE		0x3026
#define EGL_CONFIG_CAVEAT		0x3027
#define EGL_CONFIG_ID			0x3028
#define EGL_LEVEL			0x3029
#define EGL_MAX_PBUFFER_HEIGHT		0x302A
#define EGL_MAX_PBUFFER_PIXELS		0x302B
#define EGL_MAX_PBUFFER_WIDTH		0x302C
#define EGL_NATIVE_RENDERABLE		0x302D
#define EGL_NATIVE_VISUAL_ID		0x302E
#define EGL_NATIVE_VISUAL_TYPE		0x302F
#define EGL_SAMPLES			0x3031
#define EGL_SAMPLE_BUFFERS		0x3032
#define EGL_SURFACE_TYPE		0x3033
#define EGL_TRANSPARENT_TYPE		0x3034
#define EGL_TRANSPARENT_BLUE_VALUE	0x3035
#define EGL_TRANSPARENT_GREEN_VALUE	0x3036
#define EGL_TRANSPARENT_RED_VALUE	0x3037
#define EGL_NONE			0x3038	/* Attrib list terminator */
#define EGL_BIND_TO_TEXTURE_RGB		0x3039
#define EGL_BIND_TO_TEXTURE_RGBA	0x303A
#define EGL_MIN_SWAP_INTERVAL		0x303B
#define EGL_MAX_SWAP_INTERVAL		0x303C
#define EGL_LUMINANCE_SIZE		0x303D
#define EGL_ALPHA_MASK_SIZE		0x303E
#define EGL_COLOR_BUFFER_TYPE		0x303F
#define EGL_RENDERABLE_TYPE		0x3040
#define EGL_MATCH_NATIVE_PIXMAP		0x3041	/* Pseudo-attribute (not queryable) */
#define EGL_CONFORMANT			0x3042

/* Reserved 0x3041-0x304F for additional config attributes */

/* Config attribute values */
#define EGL_SLOW_CONFIG			0x3050	/* EGL_CONFIG_CAVEAT value */
#define EGL_NON_CONFORMANT_CONFIG	0x3051	/* EGL_CONFIG_CAVEAT value */
#define EGL_TRANSPARENT_RGB		0x3052	/* EGL_TRANSPARENT_TYPE value */
#define EGL_RGB_BUFFER			0x308E	/* EGL_COLOR_BUFFER_TYPE value */
#define EGL_LUMINANCE_BUFFER		0x308F	/* EGL_COLOR_BUFFER_TYPE value */

/* More config attribute values, for EGL_TEXTURE_FORMAT */
#define EGL_NO_TEXTURE			0x305C
#define EGL_TEXTURE_RGB			0x305D
#define EGL_TEXTURE_RGBA		0x305E
#define EGL_TEXTURE_2D			0x305F

/* Config attribute mask bits */
#define EGL_PBUFFER_BIT			0x0001	/* EGL_SURFACE_TYPE mask bits */
#define EGL_PIXMAP_BIT			0x0002	/* EGL_SURFACE_TYPE mask bits */
#define EGL_WINDOW_BIT			0x0004	/* EGL_SURFACE_TYPE mask bits */
#define EGL_VG_COLORSPACE_LINEAR_BIT	0x0020	/* EGL_SURFACE_TYPE mask bits */
#define EGL_VG_ALPHA_FORMAT_PRE_BIT	0x0040	/* EGL_SURFACE_TYPE mask bits */
#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200	/* EGL_SURFACE_TYPE mask bits */
#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400	/* EGL_SURFACE_TYPE mask bits */

#define EGL_OPENGL_ES_BIT		0x0001	/* EGL_RENDERABLE_TYPE mask bits */
#define EGL_OPENVG_BIT			0x0002	/* EGL_RENDERABLE_TYPE mask bits */
#define EGL_OPENGL_ES2_BIT		0x0004	/* EGL_RENDERABLE_TYPE mask bits */
#define EGL_OPENGL_BIT			0x0008	/* EGL_RENDERABLE_TYPE mask bits */

/* QueryString targets */
#define EGL_VENDOR			0x3053
#define EGL_VERSION			0x3054
#define EGL_EXTENSIONS			0x3055
#define EGL_CLIENT_APIS			0x308D

/* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */
#define EGL_HEIGHT			0x3056
#define EGL_WIDTH			0x3057
#define EGL_LARGEST_PBUFFER		0x3058
#define EGL_TEXTURE_FORMAT		0x3080
#define EGL_TEXTURE_TARGET		0x3081
#define EGL_MIPMAP_TEXTURE		0x3082
#define EGL_MIPMAP_LEVEL		0x3083
#define EGL_RENDER_BUFFER		0x3086
#define EGL_VG_COLORSPACE		0x3087
#define EGL_VG_ALPHA_FORMAT		0x3088
#define EGL_HORIZONTAL_RESOLUTION	0x3090
#define EGL_VERTICAL_RESOLUTION		0x3091
#define EGL_PIXEL_ASPECT_RATIO		0x3092
#define EGL_SWAP_BEHAVIOR		0x3093
#define EGL_MULTISAMPLE_RESOLVE		0x3099

/* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */
#define EGL_BACK_BUFFER			0x3084
#define EGL_SINGLE_BUFFER		0x3085

/* OpenVG color spaces */
#define EGL_VG_COLORSPACE_sRGB		0x3089	/* EGL_VG_COLORSPACE value */
#define EGL_VG_COLORSPACE_LINEAR	0x308A	/* EGL_VG_COLORSPACE value */

/* OpenVG alpha formats */
#define EGL_VG_ALPHA_FORMAT_NONPRE	0x308B	/* EGL_ALPHA_FORMAT value */
#define EGL_VG_ALPHA_FORMAT_PRE		0x308C	/* EGL_ALPHA_FORMAT value */

/* Constant scale factor by which fractional display resolutions &
 * aspect ratio are scaled when queried as integer values.
 */
#define EGL_DISPLAY_SCALING		10000

/* Unknown display resolution/aspect ratio */
#define EGL_UNKNOWN			((EGLint)-1)

/* Back buffer swap behaviors */
#define EGL_BUFFER_PRESERVED		0x3094	/* EGL_SWAP_BEHAVIOR value */
#define EGL_BUFFER_DESTROYED		0x3095	/* EGL_SWAP_BEHAVIOR value */

/* CreatePbufferFromClientBuffer buffer types */
#define EGL_OPENVG_IMAGE		0x3096

/* QueryContext targets */
#define EGL_CONTEXT_CLIENT_TYPE		0x3097

/* CreateContext attributes */
#define EGL_CONTEXT_CLIENT_VERSION	0x3098

/* Multisample resolution behaviors */
#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A	/* EGL_MULTISAMPLE_RESOLVE value */
#define EGL_MULTISAMPLE_RESOLVE_BOX	0x309B	/* EGL_MULTISAMPLE_RESOLVE value */

/* BindAPI/QueryAPI targets */
#define EGL_OPENGL_ES_API		0x30A0
#define EGL_OPENVG_API			0x30A1
#define EGL_OPENGL_API			0x30A2

/* GetCurrentSurface targets */
#define EGL_DRAW			0x3059
#define EGL_READ			0x305A

/* WaitNative engines */
#define EGL_CORE_NATIVE_ENGINE		0x305B

/* EGL 1.2 tokens renamed for consistency in EGL 1.3 */
#define EGL_COLORSPACE			EGL_VG_COLORSPACE
#define EGL_ALPHA_FORMAT		EGL_VG_ALPHA_FORMAT
#define EGL_COLORSPACE_sRGB		EGL_VG_COLORSPACE_sRGB
#define EGL_COLORSPACE_LINEAR		EGL_VG_COLORSPACE_LINEAR
#define EGL_ALPHA_FORMAT_NONPRE		EGL_VG_ALPHA_FORMAT_NONPRE
#define EGL_ALPHA_FORMAT_PRE		EGL_VG_ALPHA_FORMAT_PRE

/* EGL extensions must request enum blocks from the Khronos
 * API Registrar, who maintains the enumerant registry. Submit
 * a bug in Khronos Bugzilla against task "Registry".
 */



/* EGL Functions */

EGLAPI EGLint EGLAPIENTRY eglGetError(void);

EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id);
EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor);
EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy);

EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name);

EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs,
			 EGLint config_size, EGLint *num_config);
EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list,
			   EGLConfig *configs, EGLint config_size,
			   EGLint *num_config);
EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config,
			      EGLint attribute, EGLint *value);

EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config,
				  EGLNativeWindowType win,
				  const EGLint *attrib_list);
EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config,
				   const EGLint *attrib_list);
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config,
				  EGLNativePixmapType pixmap,
				  const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface);
EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface,
			   EGLint attribute, EGLint *value);

EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api);
EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void);

EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void);

EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void);

EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer(
	      EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer,
	      EGLConfig config, const EGLint *attrib_list);

EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface,
			    EGLint attribute, EGLint value);
EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);
EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer);


EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval);


EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config,
			    EGLContext share_context,
			    const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx);
EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw,
			  EGLSurface read, EGLContext ctx);

EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void);
EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw);
EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void);
EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx,
			   EGLint attribute, EGLint *value);

EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void);
EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine);
EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface);
EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface,
			  EGLNativePixmapType target);

/* This is a generic function pointer type, whose name indicates it must
 * be cast to the proper type *and calling convention* before use.
 */
typedef void (*__eglMustCastToProperFunctionPointerType)(void);

/* Now, define eglGetProcAddress using the generic function ptr. type */
EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY
       eglGetProcAddress(const char *procname);

#ifdef __cplusplus
}
#endif

#endif /* __egl_h_ */
Added jni/glshim/include/EGL/eglext.h.


























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
#ifndef __eglext_h_
#define __eglext_h_

#ifdef __cplusplus
extern "C" {
#endif

/*
** Copyright (c) 2007-2012 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

#include <EGL/eglplatform.h>

/*************************************************************/

/* Header file version number */
/* Current version at http://www.khronos.org/registry/egl/ */
/* $Revision: 19571 $ on $Date: 2012-10-31 10:10:33 -0700 (Wed, 31 Oct 2012) $ */
#define EGL_EGLEXT_VERSION 14

#ifndef EGL_KHR_config_attribs
#define EGL_KHR_config_attribs 1
#define EGL_CONFORMANT_KHR			0x3042	/* EGLConfig attribute */
#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR	0x0020	/* EGL_SURFACE_TYPE bitfield */
#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR		0x0040	/* EGL_SURFACE_TYPE bitfield */
#endif

#ifndef EGL_KHR_lock_surface
#define EGL_KHR_lock_surface 1
#define EGL_READ_SURFACE_BIT_KHR		0x0001	/* EGL_LOCK_USAGE_HINT_KHR bitfield */
#define EGL_WRITE_SURFACE_BIT_KHR		0x0002	/* EGL_LOCK_USAGE_HINT_KHR bitfield */
#define EGL_LOCK_SURFACE_BIT_KHR		0x0080	/* EGL_SURFACE_TYPE bitfield */
#define EGL_OPTIMAL_FORMAT_BIT_KHR		0x0100	/* EGL_SURFACE_TYPE bitfield */
#define EGL_MATCH_FORMAT_KHR			0x3043	/* EGLConfig attribute */
#define EGL_FORMAT_RGB_565_EXACT_KHR		0x30C0	/* EGL_MATCH_FORMAT_KHR value */
#define EGL_FORMAT_RGB_565_KHR			0x30C1	/* EGL_MATCH_FORMAT_KHR value */
#define EGL_FORMAT_RGBA_8888_EXACT_KHR		0x30C2	/* EGL_MATCH_FORMAT_KHR value */
#define EGL_FORMAT_RGBA_8888_KHR		0x30C3	/* EGL_MATCH_FORMAT_KHR value */
#define EGL_MAP_PRESERVE_PIXELS_KHR		0x30C4	/* eglLockSurfaceKHR attribute */
#define EGL_LOCK_USAGE_HINT_KHR			0x30C5	/* eglLockSurfaceKHR attribute */
#define EGL_BITMAP_POINTER_KHR			0x30C6	/* eglQuerySurface attribute */
#define EGL_BITMAP_PITCH_KHR			0x30C7	/* eglQuerySurface attribute */
#define EGL_BITMAP_ORIGIN_KHR			0x30C8	/* eglQuerySurface attribute */
#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR		0x30C9	/* eglQuerySurface attribute */
#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR	0x30CA	/* eglQuerySurface attribute */
#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR	0x30CB	/* eglQuerySurface attribute */
#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR	0x30CC	/* eglQuerySurface attribute */
#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR	0x30CD	/* eglQuerySurface attribute */
#define EGL_LOWER_LEFT_KHR			0x30CE	/* EGL_BITMAP_ORIGIN_KHR value */
#define EGL_UPPER_LEFT_KHR			0x30CF	/* EGL_BITMAP_ORIGIN_KHR value */
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay display, EGLSurface surface);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface);
#endif

#ifndef EGL_KHR_image
#define EGL_KHR_image 1
#define EGL_NATIVE_PIXMAP_KHR			0x30B0	/* eglCreateImageKHR target */
typedef void *EGLImageKHR;
#define EGL_NO_IMAGE_KHR			((EGLImageKHR)0)
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
#endif

#ifndef EGL_KHR_vg_parent_image
#define EGL_KHR_vg_parent_image 1
#define EGL_VG_PARENT_IMAGE_KHR			0x30BA	/* eglCreateImageKHR target */
#endif

#ifndef EGL_KHR_gl_texture_2D_image
#define EGL_KHR_gl_texture_2D_image 1
#define EGL_GL_TEXTURE_2D_KHR			0x30B1	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_LEVEL_KHR		0x30BC	/* eglCreateImageKHR attribute */
#endif

#ifndef EGL_KHR_gl_texture_cubemap_image
#define EGL_KHR_gl_texture_cubemap_image 1
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR	0x30B3	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR	0x30B4	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR	0x30B5	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR	0x30B6	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR	0x30B7	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR	0x30B8	/* eglCreateImageKHR target */
#endif

#ifndef EGL_KHR_gl_texture_3D_image
#define EGL_KHR_gl_texture_3D_image 1
#define EGL_GL_TEXTURE_3D_KHR			0x30B2	/* eglCreateImageKHR target */
#define EGL_GL_TEXTURE_ZOFFSET_KHR		0x30BD	/* eglCreateImageKHR attribute */
#endif

#ifndef EGL_KHR_gl_renderbuffer_image
#define EGL_KHR_gl_renderbuffer_image 1
#define EGL_GL_RENDERBUFFER_KHR			0x30B9	/* eglCreateImageKHR target */
#endif

#if KHRONOS_SUPPORT_INT64   /* EGLTimeKHR requires 64-bit uint support */
#ifndef EGL_KHR_reusable_sync
#define EGL_KHR_reusable_sync 1

typedef void* EGLSyncKHR;
typedef khronos_utime_nanoseconds_t EGLTimeKHR;

#define EGL_SYNC_STATUS_KHR			0x30F1
#define EGL_SIGNALED_KHR			0x30F2
#define EGL_UNSIGNALED_KHR			0x30F3
#define EGL_TIMEOUT_EXPIRED_KHR			0x30F5
#define EGL_CONDITION_SATISFIED_KHR		0x30F6
#define EGL_SYNC_TYPE_KHR			0x30F7
#define EGL_SYNC_REUSABLE_KHR			0x30FA
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR		0x0001	/* eglClientWaitSyncKHR <flags> bitfield */
#define EGL_FOREVER_KHR				0xFFFFFFFFFFFFFFFFull
#define EGL_NO_SYNC_KHR				((EGLSyncKHR)0)
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync);
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
#endif
#endif

#ifndef EGL_KHR_image_base
#define EGL_KHR_image_base 1
/* Most interfaces defined by EGL_KHR_image_pixmap above */
#define EGL_IMAGE_PRESERVED_KHR			0x30D2	/* eglCreateImageKHR attribute */
#endif

#ifndef EGL_KHR_image_pixmap
#define EGL_KHR_image_pixmap 1
/* Interfaces defined by EGL_KHR_image above */
#endif

#ifndef EGL_IMG_context_priority
#define EGL_IMG_context_priority 1
#define EGL_CONTEXT_PRIORITY_LEVEL_IMG		0x3100
#define EGL_CONTEXT_PRIORITY_HIGH_IMG		0x3101
#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG		0x3102
#define EGL_CONTEXT_PRIORITY_LOW_IMG		0x3103
#endif

#ifndef EGL_KHR_lock_surface2
#define EGL_KHR_lock_surface2 1
#define EGL_BITMAP_PIXEL_SIZE_KHR		0x3110
#endif

#ifndef EGL_NV_coverage_sample
#define EGL_NV_coverage_sample 1
#define EGL_COVERAGE_BUFFERS_NV			0x30E0
#define EGL_COVERAGE_SAMPLES_NV			0x30E1
#endif

#ifndef EGL_NV_depth_nonlinear
#define EGL_NV_depth_nonlinear 1
#define EGL_DEPTH_ENCODING_NV			0x30E2
#define EGL_DEPTH_ENCODING_NONE_NV 0
#define EGL_DEPTH_ENCODING_NONLINEAR_NV		0x30E3
#endif

#if KHRONOS_SUPPORT_INT64   /* EGLTimeNV requires 64-bit uint support */
#ifndef EGL_NV_sync
#define EGL_NV_sync 1
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV	0x30E6
#define EGL_SYNC_STATUS_NV			0x30E7
#define EGL_SIGNALED_NV				0x30E8
#define EGL_UNSIGNALED_NV			0x30E9
#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV		0x0001
#define EGL_FOREVER_NV				0xFFFFFFFFFFFFFFFFull
#define EGL_ALREADY_SIGNALED_NV			0x30EA
#define EGL_TIMEOUT_EXPIRED_NV			0x30EB
#define EGL_CONDITION_SATISFIED_NV		0x30EC
#define EGL_SYNC_TYPE_NV			0x30ED
#define EGL_SYNC_CONDITION_NV			0x30EE
#define EGL_SYNC_FENCE_NV			0x30EF
#define EGL_NO_SYNC_NV				((EGLSyncNV)0)
typedef void* EGLSyncNV;
typedef khronos_utime_nanoseconds_t EGLTimeNV;
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync);
EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync);
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode);
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
#endif
#endif

#if KHRONOS_SUPPORT_INT64   /* Dependent on EGL_KHR_reusable_sync which requires 64-bit uint support */
#ifndef EGL_KHR_fence_sync
#define EGL_KHR_fence_sync 1
/* Reuses most tokens and entry points from EGL_KHR_reusable_sync */
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR	0x30F0
#define EGL_SYNC_CONDITION_KHR			0x30F8
#define EGL_SYNC_FENCE_KHR			0x30F9
#endif
#endif

#ifndef EGL_HI_clientpixmap
#define EGL_HI_clientpixmap 1

/* Surface Attribute */
#define EGL_CLIENT_PIXMAP_POINTER_HI		0x8F74
/*
 * Structure representing a client pixmap
 * (pixmap's data is in client-space memory).
 */
struct EGLClientPixmapHI
{
	void*		pData;
	EGLint		iWidth;
	EGLint		iHeight;
	EGLint		iStride;
};

#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI* pixmap);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI* pixmap);
#endif	/* EGL_HI_clientpixmap */

#ifndef EGL_HI_colorformats
#define EGL_HI_colorformats 1
/* Config Attribute */
#define EGL_COLOR_FORMAT_HI			0x8F70
/* Color Formats */
#define EGL_COLOR_RGB_HI			0x8F71
#define EGL_COLOR_RGBA_HI			0x8F72
#define EGL_COLOR_ARGB_HI			0x8F73
#endif /* EGL_HI_colorformats */

#ifndef EGL_MESA_drm_image
#define EGL_MESA_drm_image 1
#define EGL_DRM_BUFFER_FORMAT_MESA		0x31D0	    /* CreateDRMImageMESA attribute */
#define EGL_DRM_BUFFER_USE_MESA			0x31D1	    /* CreateDRMImageMESA attribute */
#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA	0x31D2	    /* EGL_IMAGE_FORMAT_MESA attribute value */
#define EGL_DRM_BUFFER_MESA			0x31D3	    /* eglCreateImageKHR target */
#define EGL_DRM_BUFFER_STRIDE_MESA		0x31D4
#define EGL_DRM_BUFFER_USE_SCANOUT_MESA		0x00000001  /* EGL_DRM_BUFFER_USE_MESA bits */
#define EGL_DRM_BUFFER_USE_SHARE_MESA		0x00000002  /* EGL_DRM_BUFFER_USE_MESA bits */
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride);
#endif

#ifndef EGL_NV_post_sub_buffer
#define EGL_NV_post_sub_buffer 1
#define EGL_POST_SUB_BUFFER_SUPPORTED_NV	0x30BE
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height);
#endif

#ifndef EGL_ANGLE_query_surface_pointer
#define EGL_ANGLE_query_surface_pointer 1
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLBoolean eglQuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
#endif
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value);
#endif

#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle
#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1
#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE	0x3200
#endif

#ifndef EGL_NV_coverage_sample_resolve
#define EGL_NV_coverage_sample_resolve 1
#define EGL_COVERAGE_SAMPLE_RESOLVE_NV		0x3131
#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV	0x3132
#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV	0x3133
#endif

#if KHRONOS_SUPPORT_INT64   /* EGLuint64NV requires 64-bit uint support */
#ifndef EGL_NV_system_time
#define EGL_NV_system_time 1

typedef khronos_utime_nanoseconds_t EGLuint64NV;

#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV(void);
EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV(void);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);
typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);
#endif
#endif

#if KHRONOS_SUPPORT_INT64 /* EGLuint64KHR requires 64-bit uint support */
#ifndef EGL_KHR_stream
#define EGL_KHR_stream 1
typedef void* EGLStreamKHR;
typedef khronos_uint64_t EGLuint64KHR;
#define EGL_NO_STREAM_KHR			((EGLStreamKHR)0)
#define EGL_CONSUMER_LATENCY_USEC_KHR		0x3210
#define EGL_PRODUCER_FRAME_KHR			0x3212
#define EGL_CONSUMER_FRAME_KHR			0x3213
#define EGL_STREAM_STATE_KHR			0x3214
#define EGL_STREAM_STATE_CREATED_KHR		0x3215
#define EGL_STREAM_STATE_CONNECTING_KHR		0x3216
#define EGL_STREAM_STATE_EMPTY_KHR		0x3217
#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR    0x3218
#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR    0x3219
#define EGL_STREAM_STATE_DISCONNECTED_KHR	0x321A
#define EGL_BAD_STREAM_KHR			0x321B
#define EGL_BAD_STATE_KHR			0x321C
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_list);
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream);
EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC)(EGLDisplay dpy, const EGLint *attrib_list);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value);
#endif
#endif

#ifdef EGL_KHR_stream /* Requires KHR_stream extension */
#ifndef EGL_KHR_stream_consumer_gltexture
#define EGL_KHR_stream_consumer_gltexture 1
#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR	0x321E
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStreamKHR stream);
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR stream);
EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream);
#endif
#endif

#ifdef EGL_KHR_stream /* Requires KHR_stream extension */
#ifndef EGL_KHR_stream_producer_eglsurface
#define EGL_KHR_stream_producer_eglsurface 1
#define EGL_STREAM_BIT_KHR			0x0800
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list);
#endif
#endif

#ifdef EGL_KHR_stream /* Requires KHR_stream extension */
#ifndef EGL_KHR_stream_producer_aldatalocator
#define EGL_KHR_stream_producer_aldatalocator 1
#endif
#endif

#ifdef EGL_KHR_stream /* Requires KHR_stream extension */
#ifndef EGL_KHR_stream_fifo
#define EGL_KHR_stream_fifo 1
/* reuse EGLTimeKHR */
#define EGL_STREAM_FIFO_LENGTH_KHR		0x31FC
#define EGL_STREAM_TIME_NOW_KHR			0x31FD
#define EGL_STREAM_TIME_CONSUMER_KHR		0x31FE
#define EGL_STREAM_TIME_PRODUCER_KHR		0x31FF
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value);
#endif
#endif

#ifndef EGL_EXT_create_context_robustness
#define EGL_EXT_create_context_robustness 1
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT	0x30BF
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138
#define EGL_NO_RESET_NOTIFICATION_EXT		0x31BE
#define EGL_LOSE_CONTEXT_ON_RESET_EXT		0x31BF
#endif

#ifndef EGL_ANGLE_d3d_share_handle_client_buffer
#define EGL_ANGLE_d3d_share_handle_client_buffer 1
/* reuse EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE */
#endif

#ifndef EGL_KHR_create_context
#define EGL_KHR_create_context 1
#define EGL_CONTEXT_MAJOR_VERSION_KHR			    EGL_CONTEXT_CLIENT_VERSION
#define EGL_CONTEXT_MINOR_VERSION_KHR			    0x30FB
#define EGL_CONTEXT_FLAGS_KHR				    0x30FC
#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR		    0x30FD
#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR  0x31BD
#define EGL_NO_RESET_NOTIFICATION_KHR			    0x31BE
#define EGL_LOSE_CONTEXT_ON_RESET_KHR			    0x31BF
#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR		    0x00000001
#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR	    0x00000002
#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR	    0x00000004
#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR		    0x00000001
#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR    0x00000002
#define EGL_OPENGL_ES3_BIT_KHR				    0x00000040
#endif

#ifndef EGL_KHR_surfaceless_context
#define EGL_KHR_surfaceless_context 1
/* No tokens/entry points, just relaxes an error condition */
#endif

#ifdef EGL_KHR_stream /* Requires KHR_stream extension */
#ifndef EGL_KHR_stream_cross_process_fd
#define EGL_KHR_stream_cross_process_fd 1
typedef int EGLNativeFileDescriptorKHR;
#define EGL_NO_FILE_DESCRIPTOR_KHR		((EGLNativeFileDescriptorKHR)(-1))
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR(EGLDisplay dpy, EGLStreamKHR stream);
EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream);
typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor);
#endif
#endif

#ifndef EGL_EXT_multiview_window
#define EGL_EXT_multiview_window 1
#define EGL_MULTIVIEW_VIEW_COUNT_EXT		0x3134
#endif

#ifndef EGL_KHR_wait_sync
#define EGL_KHR_wait_sync 1
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
#endif /* EGL_EGLEXT_PROTOTYPES */
typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags);
#endif

#ifdef __cplusplus
}
#endif

#endif
Added jni/glshim/include/EGL/eglplatform.h.


















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#ifndef __eglplatform_h_
#define __eglplatform_h_

/*
** Copyright (c) 2007-2009 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

/* Platform-specific types and definitions for egl.h
 * $Revision: 12306 $ on $Date: 2010-08-25 09:51:28 -0700 (Wed, 25 Aug 2010) $
 *
 * Adopters may modify khrplatform.h and this file to suit their platform.
 * You are encouraged to submit all modifications to the Khronos group so that
 * they can be included in future versions of this file.  Please submit changes
 * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
 * by filing a bug against product "EGL" component "Registry".
 */

#include <KHR/khrplatform.h>

/* Macros used in EGL function prototype declarations.
 *
 * EGL functions should be prototyped as:
 *
 * EGLAPI return-type EGLAPIENTRY eglFunction(arguments);
 * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments);
 *
 * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h
 */

#ifndef EGLAPI
#define EGLAPI KHRONOS_APICALL
#endif

#ifndef EGLAPIENTRY
#define EGLAPIENTRY  KHRONOS_APIENTRY
#endif
#define EGLAPIENTRYP EGLAPIENTRY*

/* The types NativeDisplayType, NativeWindowType, and NativePixmapType
 * are aliases of window-system-dependent types, such as X Display * or
 * Windows Device Context. They must be defined in platform-specific
 * code below. The EGL-prefixed versions of Native*Type are the same
 * types, renamed in EGL 1.3 so all types in the API start with "EGL".
 *
 * Khronos STRONGLY RECOMMENDS that you use the default definitions
 * provided below, since these changes affect both binary and source
 * portability of applications using EGL running on different EGL
 * implementations.
 */

#if defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
#include <windows.h>

typedef HDC     EGLNativeDisplayType;
typedef HBITMAP EGLNativePixmapType;
typedef HWND    EGLNativeWindowType;

#elif defined(__WINSCW__) || defined(__SYMBIAN32__)  /* Symbian */

typedef int   EGLNativeDisplayType;
typedef void *EGLNativeWindowType;
typedef void *EGLNativePixmapType;

#elif defined(__unix__) && !defined(ANDROID)

/* X11 (tentative)  */
#include <X11/Xlib.h>
#include <X11/Xutil.h>

typedef Display *EGLNativeDisplayType;
typedef Pixmap   EGLNativePixmapType;
typedef Window   EGLNativeWindowType;

#elif defined(ANDROID)

typedef int   EGLNativeDisplayType;
typedef void *EGLNativeWindowType;
typedef void *EGLNativePixmapType;

#else
#error "Platform not recognized"
#endif

/* EGL 1.2 types, renamed for consistency in EGL 1.3 */
typedef EGLNativeDisplayType NativeDisplayType;
typedef EGLNativePixmapType  NativePixmapType;
typedef EGLNativeWindowType  NativeWindowType;


/* Define EGLint. This must be a signed integral type large enough to contain
 * all legal attribute names and values passed into and out of EGL, whether
 * their type is boolean, bitmask, enumerant (symbolic constant), integer,
 * handle, or other.  While in general a 32-bit integer will suffice, if
 * handles are 64 bit types, then EGLint should be defined as a signed 64-bit
 * integer type.
 */
typedef khronos_int32_t EGLint;

#endif /* __eglplatform_h */
Added jni/glshim/include/GL/gl.h.


































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
/*
 * Mesa 3-D graphics library
 * Version:  7.6
 *
 * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
 * Copyright (C) 2009  VMware, Inc.  All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */


#ifndef __gl_h_
#define __gl_h_

#if defined(USE_MGL_NAMESPACE)
#include "gl_mangle.h"
#endif


/**********************************************************************
 * Begin system-specific stuff. Do not do any of this when building
 * for SciTech SNAP, as this is all done before this header file is
 * included. 
 */
#if !defined(__SCITECH_SNAP__)

#if defined(__BEOS__)
#include <stdlib.h>     /* to get some BeOS-isms */
#endif

#if !defined(OPENSTEP) && (defined(NeXT) || defined(NeXT_PDO))
#define OPENSTEP
#endif

#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__)
#define __WIN32__
#endif

#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__))
#  if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
#    define GLAPI __declspec(dllexport)
#  elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
#    define GLAPI __declspec(dllimport)
#  else /* for use with static link lib build of Win32 edition only */
#    define GLAPI extern
#  endif /* _STATIC_MESA support */
#  if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE)  /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */
#    define GLAPIENTRY 
#  else
#    define GLAPIENTRY __stdcall
#  endif
#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */
#  define GLAPI extern
#  define GLAPIENTRY __stdcall
#elif defined(__GNUC__)	|| (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
#  define GLAPI __attribute__((visibility("default")))
#  define GLAPIENTRY
#endif /* WIN32 && !CYGWIN */

#if (defined(__BEOS__) && defined(__POWERPC__)) || defined(__QUICKDRAW__)
#  define PRAGMA_EXPORT_SUPPORTED		1
#endif

/*
 * WINDOWS: Include windows.h here to define APIENTRY.
 * It is also useful when applications include this file by
 * including only glut.h, since glut.h depends on windows.h.
 * Applications needing to include windows.h with parms other
 * than "WIN32_LEAN_AND_MEAN" may include windows.h before
 * glut.h or gl.h.
 */
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
#include <windows.h>
#endif

#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_WIN32_WCE) \
     && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP) \
     && !defined(__CYGWIN__) || defined(__MINGW32__)
#include <GL/mesa_wgl.h>
#endif

#if defined(macintosh) && PRAGMA_IMPORT_SUPPORTED
#pragma import on
#endif

#ifndef GLAPI
#define GLAPI extern
#endif

#ifndef GLAPIENTRY
#define GLAPIENTRY
#endif

#ifndef APIENTRY
#define APIENTRY GLAPIENTRY
#endif

/* "P" suffix to be used for a pointer to a function */
#ifndef APIENTRYP
#define APIENTRYP APIENTRY *
#endif

#ifndef GLAPIENTRYP
#define GLAPIENTRYP GLAPIENTRY *
#endif

#ifdef CENTERLINE_CLPP
#define signed
#endif

#if defined(PRAGMA_EXPORT_SUPPORTED)
#pragma export on
#endif

#endif /* !__SCITECH_SNAP__ */
/*
 * End system-specific stuff.
 **********************************************************************/



#ifdef __cplusplus
extern "C" {
#endif



#define GL_VERSION_1_1   1
#define GL_VERSION_1_2   1
#define GL_VERSION_1_3   1
#define GL_ARB_imaging   1


/*
 * Datatypes
 */
typedef unsigned int	GLenum;
typedef unsigned char	GLboolean;
typedef unsigned int	GLbitfield;
typedef void		GLvoid;
typedef signed char	GLbyte;		/* 1-byte signed */
typedef short		GLshort;	/* 2-byte signed */
typedef int		GLint;		/* 4-byte signed */
typedef unsigned char	GLubyte;	/* 1-byte unsigned */
typedef unsigned short	GLushort;	/* 2-byte unsigned */
typedef unsigned int	GLuint;		/* 4-byte unsigned */
typedef int		GLsizei;	/* 4-byte signed */
typedef float		GLfloat;	/* single precision float */
typedef float		GLclampf;	/* single precision float in [0,1] */
typedef double		GLdouble;	/* double precision float */
typedef double		GLclampd;	/* double precision float in [0,1] */



/*
 * Constants
 */

/* Boolean values */
#define GL_FALSE				0x0
#define GL_TRUE					0x1

/* Data types */
#define GL_BYTE					0x1400
#define GL_UNSIGNED_BYTE			0x1401
#define GL_SHORT				0x1402
#define GL_UNSIGNED_SHORT			0x1403
#define GL_INT					0x1404
#define GL_UNSIGNED_INT				0x1405
#define GL_FLOAT				0x1406
#define GL_2_BYTES				0x1407
#define GL_3_BYTES				0x1408
#define GL_4_BYTES				0x1409
#define GL_DOUBLE				0x140A

/* Primitives */
#define GL_POINTS				0x0000
#define GL_LINES				0x0001
#define GL_LINE_LOOP				0x0002
#define GL_LINE_STRIP				0x0003
#define GL_TRIANGLES				0x0004
#define GL_TRIANGLE_STRIP			0x0005
#define GL_TRIANGLE_FAN				0x0006
#define GL_QUADS				0x0007
#define GL_QUAD_STRIP				0x0008
#define GL_POLYGON				0x0009

/* Vertex Arrays */
#define GL_VERTEX_ARRAY				0x8074
#define GL_NORMAL_ARRAY				0x8075
#define GL_COLOR_ARRAY				0x8076
#define GL_INDEX_ARRAY				0x8077
#define GL_TEXTURE_COORD_ARRAY			0x8078
#define GL_EDGE_FLAG_ARRAY			0x8079
#define GL_VERTEX_ARRAY_SIZE			0x807A
#define GL_VERTEX_ARRAY_TYPE			0x807B
#define GL_VERTEX_ARRAY_STRIDE			0x807C
#define GL_NORMAL_ARRAY_TYPE			0x807E
#define GL_NORMAL_ARRAY_STRIDE			0x807F
#define GL_COLOR_ARRAY_SIZE			0x8081
#define GL_COLOR_ARRAY_TYPE			0x8082
#define GL_COLOR_ARRAY_STRIDE			0x8083
#define GL_INDEX_ARRAY_TYPE			0x8085
#define GL_INDEX_ARRAY_STRIDE			0x8086
#define GL_TEXTURE_COORD_ARRAY_SIZE		0x8088
#define GL_TEXTURE_COORD_ARRAY_TYPE		0x8089
#define GL_TEXTURE_COORD_ARRAY_STRIDE		0x808A
#define GL_EDGE_FLAG_ARRAY_STRIDE		0x808C
#define GL_VERTEX_ARRAY_POINTER			0x808E
#define GL_NORMAL_ARRAY_POINTER			0x808F
#define GL_COLOR_ARRAY_POINTER			0x8090
#define GL_INDEX_ARRAY_POINTER			0x8091
#define GL_TEXTURE_COORD_ARRAY_POINTER		0x8092
#define GL_EDGE_FLAG_ARRAY_POINTER		0x8093
#define GL_V2F					0x2A20
#define GL_V3F					0x2A21
#define GL_C4UB_V2F				0x2A22
#define GL_C4UB_V3F				0x2A23
#define GL_C3F_V3F				0x2A24
#define GL_N3F_V3F				0x2A25
#define GL_C4F_N3F_V3F				0x2A26
#define GL_T2F_V3F				0x2A27
#define GL_T4F_V4F				0x2A28
#define GL_T2F_C4UB_V3F				0x2A29
#define GL_T2F_C3F_V3F				0x2A2A
#define GL_T2F_N3F_V3F				0x2A2B
#define GL_T2F_C4F_N3F_V3F			0x2A2C
#define GL_T4F_C4F_N3F_V4F			0x2A2D

/* Matrix Mode */
#define GL_MATRIX_MODE				0x0BA0
#define GL_MODELVIEW				0x1700
#define GL_PROJECTION				0x1701
#define GL_TEXTURE				0x1702

/* Points */
#define GL_POINT_SMOOTH				0x0B10
#define GL_POINT_SIZE				0x0B11
#define GL_POINT_SIZE_GRANULARITY 		0x0B13
#define GL_POINT_SIZE_RANGE			0x0B12

/* Lines */
#define GL_LINE_SMOOTH				0x0B20
#define GL_LINE_STIPPLE				0x0B24
#define GL_LINE_STIPPLE_PATTERN			0x0B25
#define GL_LINE_STIPPLE_REPEAT			0x0B26
#define GL_LINE_WIDTH				0x0B21
#define GL_LINE_WIDTH_GRANULARITY		0x0B23
#define GL_LINE_WIDTH_RANGE			0x0B22

/* Polygons */
#define GL_POINT				0x1B00
#define GL_LINE					0x1B01
#define GL_FILL					0x1B02
#define GL_CW					0x0900
#define GL_CCW					0x0901
#define GL_FRONT				0x0404
#define GL_BACK					0x0405
#define GL_POLYGON_MODE				0x0B40
#define GL_POLYGON_SMOOTH			0x0B41
#define GL_POLYGON_STIPPLE			0x0B42
#define GL_EDGE_FLAG				0x0B43
#define GL_CULL_FACE				0x0B44
#define GL_CULL_FACE_MODE			0x0B45
#define GL_FRONT_FACE				0x0B46
#define GL_POLYGON_OFFSET_FACTOR		0x8038
#define GL_POLYGON_OFFSET_UNITS			0x2A00
#define GL_POLYGON_OFFSET_POINT			0x2A01
#define GL_POLYGON_OFFSET_LINE			0x2A02
#define GL_POLYGON_OFFSET_FILL			0x8037

/* Display Lists */
#define GL_COMPILE				0x1300
#define GL_COMPILE_AND_EXECUTE			0x1301
#define GL_LIST_BASE				0x0B32
#define GL_LIST_INDEX				0x0B33
#define GL_LIST_MODE				0x0B30

/* Depth buffer */
#define GL_NEVER				0x0200
#define GL_LESS					0x0201
#define GL_EQUAL				0x0202
#define GL_LEQUAL				0x0203
#define GL_GREATER				0x0204
#define GL_NOTEQUAL				0x0205
#define GL_GEQUAL				0x0206
#define GL_ALWAYS				0x0207
#define GL_DEPTH_TEST				0x0B71
#define GL_DEPTH_BITS				0x0D56
#define GL_DEPTH_CLEAR_VALUE			0x0B73
#define GL_DEPTH_FUNC				0x0B74
#define GL_DEPTH_RANGE				0x0B70
#define GL_DEPTH_WRITEMASK			0x0B72
#define GL_DEPTH_COMPONENT			0x1902

/* Lighting */
#define GL_LIGHTING				0x0B50
#define GL_LIGHT0				0x4000
#define GL_LIGHT1				0x4001
#define GL_LIGHT2				0x4002
#define GL_LIGHT3				0x4003
#define GL_LIGHT4				0x4004
#define GL_LIGHT5				0x4005
#define GL_LIGHT6				0x4006
#define GL_LIGHT7				0x4007
#define GL_SPOT_EXPONENT			0x1205
#define GL_SPOT_CUTOFF				0x1206
#define GL_CONSTANT_ATTENUATION			0x1207
#define GL_LINEAR_ATTENUATION			0x1208
#define GL_QUADRATIC_ATTENUATION		0x1209
#define GL_AMBIENT				0x1200
#define GL_DIFFUSE				0x1201
#define GL_SPECULAR				0x1202
#define GL_SHININESS				0x1601
#define GL_EMISSION				0x1600
#define GL_POSITION				0x1203
#define GL_SPOT_DIRECTION			0x1204
#define GL_AMBIENT_AND_DIFFUSE			0x1602
#define GL_COLOR_INDEXES			0x1603
#define GL_LIGHT_MODEL_TWO_SIDE			0x0B52
#define GL_LIGHT_MODEL_LOCAL_VIEWER		0x0B51
#define GL_LIGHT_MODEL_AMBIENT			0x0B53
#define GL_FRONT_AND_BACK			0x0408
#define GL_SHADE_MODEL				0x0B54
#define GL_FLAT					0x1D00
#define GL_SMOOTH				0x1D01
#define GL_COLOR_MATERIAL			0x0B57
#define GL_COLOR_MATERIAL_FACE			0x0B55
#define GL_COLOR_MATERIAL_PARAMETER		0x0B56
#define GL_NORMALIZE				0x0BA1

/* User clipping planes */
#define GL_CLIP_PLANE0				0x3000
#define GL_CLIP_PLANE1				0x3001
#define GL_CLIP_PLANE2				0x3002
#define GL_CLIP_PLANE3				0x3003
#define GL_CLIP_PLANE4				0x3004
#define GL_CLIP_PLANE5				0x3005

/* Accumulation buffer */
#define GL_ACCUM_RED_BITS			0x0D58
#define GL_ACCUM_GREEN_BITS			0x0D59
#define GL_ACCUM_BLUE_BITS			0x0D5A
#define GL_ACCUM_ALPHA_BITS			0x0D5B
#define GL_ACCUM_CLEAR_VALUE			0x0B80
#define GL_ACCUM				0x0100
#define GL_ADD					0x0104
#define GL_LOAD					0x0101
#define GL_MULT					0x0103
#define GL_RETURN				0x0102

/* Alpha testing */
#define GL_ALPHA_TEST				0x0BC0
#define GL_ALPHA_TEST_REF			0x0BC2
#define GL_ALPHA_TEST_FUNC			0x0BC1

/* Blending */
#define GL_BLEND				0x0BE2
#define GL_BLEND_SRC				0x0BE1
#define GL_BLEND_DST				0x0BE0
#define GL_ZERO					0x0
#define GL_ONE					0x1
#define GL_SRC_COLOR				0x0300
#define GL_ONE_MINUS_SRC_COLOR			0x0301
#define GL_SRC_ALPHA				0x0302
#define GL_ONE_MINUS_SRC_ALPHA			0x0303
#define GL_DST_ALPHA				0x0304
#define GL_ONE_MINUS_DST_ALPHA			0x0305
#define GL_DST_COLOR				0x0306
#define GL_ONE_MINUS_DST_COLOR			0x0307
#define GL_SRC_ALPHA_SATURATE			0x0308

/* Render Mode */
#define GL_FEEDBACK				0x1C01
#define GL_RENDER				0x1C00
#define GL_SELECT				0x1C02

/* Feedback */
#define GL_2D					0x0600
#define GL_3D					0x0601
#define GL_3D_COLOR				0x0602
#define GL_3D_COLOR_TEXTURE			0x0603
#define GL_4D_COLOR_TEXTURE			0x0604
#define GL_POINT_TOKEN				0x0701
#define GL_LINE_TOKEN				0x0702
#define GL_LINE_RESET_TOKEN			0x0707
#define GL_POLYGON_TOKEN			0x0703
#define GL_BITMAP_TOKEN				0x0704
#define GL_DRAW_PIXEL_TOKEN			0x0705
#define GL_COPY_PIXEL_TOKEN			0x0706
#define GL_PASS_THROUGH_TOKEN			0x0700
#define GL_FEEDBACK_BUFFER_POINTER		0x0DF0
#define GL_FEEDBACK_BUFFER_SIZE			0x0DF1
#define GL_FEEDBACK_BUFFER_TYPE			0x0DF2

/* Selection */
#define GL_SELECTION_BUFFER_POINTER		0x0DF3
#define GL_SELECTION_BUFFER_SIZE		0x0DF4

/* Fog */
#define GL_FOG					0x0B60
#define GL_FOG_MODE				0x0B65
#define GL_FOG_DENSITY				0x0B62
#define GL_FOG_COLOR				0x0B66
#define GL_FOG_INDEX				0x0B61
#define GL_FOG_START				0x0B63
#define GL_FOG_END				0x0B64
#define GL_LINEAR				0x2601
#define GL_EXP					0x0800
#define GL_EXP2					0x0801

/* Logic Ops */
#define GL_LOGIC_OP				0x0BF1
#define GL_INDEX_LOGIC_OP			0x0BF1
#define GL_COLOR_LOGIC_OP			0x0BF2
#define GL_LOGIC_OP_MODE			0x0BF0
#define GL_CLEAR				0x1500
#define GL_SET					0x150F
#define GL_COPY					0x1503
#define GL_COPY_INVERTED			0x150C
#define GL_NOOP					0x1505
#define GL_INVERT				0x150A
#define GL_AND					0x1501
#define GL_NAND					0x150E
#define GL_OR					0x1507
#define GL_NOR					0x1508
#define GL_XOR					0x1506
#define GL_EQUIV				0x1509
#define GL_AND_REVERSE				0x1502
#define GL_AND_INVERTED				0x1504
#define GL_OR_REVERSE				0x150B
#define GL_OR_INVERTED				0x150D

/* Stencil */
#define GL_STENCIL_BITS				0x0D57
#define GL_STENCIL_TEST				0x0B90
#define GL_STENCIL_CLEAR_VALUE			0x0B91
#define GL_STENCIL_FUNC				0x0B92
#define GL_STENCIL_VALUE_MASK			0x0B93
#define GL_STENCIL_FAIL				0x0B94
#define GL_STENCIL_PASS_DEPTH_FAIL		0x0B95
#define GL_STENCIL_PASS_DEPTH_PASS		0x0B96
#define GL_STENCIL_REF				0x0B97
#define GL_STENCIL_WRITEMASK			0x0B98
#define GL_STENCIL_INDEX			0x1901
#define GL_KEEP					0x1E00
#define GL_REPLACE				0x1E01
#define GL_INCR					0x1E02
#define GL_DECR					0x1E03

/* Buffers, Pixel Drawing/Reading */
#define GL_NONE					0x0
#define GL_LEFT					0x0406
#define GL_RIGHT				0x0407
/*GL_FRONT					0x0404 */
/*GL_BACK					0x0405 */
/*GL_FRONT_AND_BACK				0x0408 */
#define GL_FRONT_LEFT				0x0400
#define GL_FRONT_RIGHT				0x0401
#define GL_BACK_LEFT				0x0402
#define GL_BACK_RIGHT				0x0403
#define GL_AUX0					0x0409
#define GL_AUX1					0x040A
#define GL_AUX2					0x040B
#define GL_AUX3					0x040C
#define GL_COLOR_INDEX				0x1900
#define GL_RED					0x1903
#define GL_GREEN				0x1904
#define GL_BLUE					0x1905
#define GL_ALPHA				0x1906
#define GL_LUMINANCE				0x1909
#define GL_LUMINANCE_ALPHA			0x190A
#define GL_ALPHA_BITS				0x0D55
#define GL_RED_BITS				0x0D52
#define GL_GREEN_BITS				0x0D53
#define GL_BLUE_BITS				0x0D54
#define GL_INDEX_BITS				0x0D51
#define GL_SUBPIXEL_BITS			0x0D50
#define GL_AUX_BUFFERS				0x0C00
#define GL_READ_BUFFER				0x0C02
#define GL_DRAW_BUFFER				0x0C01
#define GL_DOUBLEBUFFER				0x0C32
#define GL_STEREO				0x0C33
#define GL_BITMAP				0x1A00
#define GL_COLOR				0x1800
#define GL_DEPTH				0x1801
#define GL_STENCIL				0x1802
#define GL_DITHER				0x0BD0
#define GL_RGB					0x1907
#define GL_RGBA					0x1908

/* Implementation limits */
#define GL_MAX_LIST_NESTING			0x0B31
#define GL_MAX_EVAL_ORDER			0x0D30
#define GL_MAX_LIGHTS				0x0D31
#define GL_MAX_CLIP_PLANES			0x0D32
#define GL_MAX_TEXTURE_SIZE			0x0D33
#define GL_MAX_PIXEL_MAP_TABLE			0x0D34
#define GL_MAX_ATTRIB_STACK_DEPTH		0x0D35
#define GL_MAX_MODELVIEW_STACK_DEPTH		0x0D36
#define GL_MAX_NAME_STACK_DEPTH			0x0D37
#define GL_MAX_PROJECTION_STACK_DEPTH		0x0D38
#define GL_MAX_TEXTURE_STACK_DEPTH		0x0D39
#define GL_MAX_VIEWPORT_DIMS			0x0D3A
#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH	0x0D3B

/* Gets */
#define GL_ATTRIB_STACK_DEPTH			0x0BB0
#define GL_CLIENT_ATTRIB_STACK_DEPTH		0x0BB1
#define GL_COLOR_CLEAR_VALUE			0x0C22
#define GL_COLOR_WRITEMASK			0x0C23
#define GL_CURRENT_INDEX			0x0B01
#define GL_CURRENT_COLOR			0x0B00
#define GL_CURRENT_NORMAL			0x0B02
#define GL_CURRENT_RASTER_COLOR			0x0B04
#define GL_CURRENT_RASTER_DISTANCE		0x0B09
#define GL_CURRENT_RASTER_INDEX			0x0B05
#define GL_CURRENT_RASTER_POSITION		0x0B07
#define GL_CURRENT_RASTER_TEXTURE_COORDS	0x0B06
#define GL_CURRENT_RASTER_POSITION_VALID	0x0B08
#define GL_CURRENT_TEXTURE_COORDS		0x0B03
#define GL_INDEX_CLEAR_VALUE			0x0C20
#define GL_INDEX_MODE				0x0C30
#define GL_INDEX_WRITEMASK			0x0C21
#define GL_MODELVIEW_MATRIX			0x0BA6
#define GL_MODELVIEW_STACK_DEPTH		0x0BA3
#define GL_NAME_STACK_DEPTH			0x0D70
#define GL_PROJECTION_MATRIX			0x0BA7
#define GL_PROJECTION_STACK_DEPTH		0x0BA4
#define GL_RENDER_MODE				0x0C40
#define GL_RGBA_MODE				0x0C31
#define GL_TEXTURE_MATRIX			0x0BA8
#define GL_TEXTURE_STACK_DEPTH			0x0BA5
#define GL_VIEWPORT				0x0BA2

/* Evaluators */
#define GL_AUTO_NORMAL				0x0D80
#define GL_MAP1_COLOR_4				0x0D90
#define GL_MAP1_INDEX				0x0D91
#define GL_MAP1_NORMAL				0x0D92
#define GL_MAP1_TEXTURE_COORD_1			0x0D93
#define GL_MAP1_TEXTURE_COORD_2			0x0D94
#define GL_MAP1_TEXTURE_COORD_3			0x0D95
#define GL_MAP1_TEXTURE_COORD_4			0x0D96
#define GL_MAP1_VERTEX_3			0x0D97
#define GL_MAP1_VERTEX_4			0x0D98
#define GL_MAP2_COLOR_4				0x0DB0
#define GL_MAP2_INDEX				0x0DB1
#define GL_MAP2_NORMAL				0x0DB2
#define GL_MAP2_TEXTURE_COORD_1			0x0DB3
#define GL_MAP2_TEXTURE_COORD_2			0x0DB4
#define GL_MAP2_TEXTURE_COORD_3			0x0DB5
#define GL_MAP2_TEXTURE_COORD_4			0x0DB6
#define GL_MAP2_VERTEX_3			0x0DB7
#define GL_MAP2_VERTEX_4			0x0DB8
#define GL_MAP1_GRID_DOMAIN			0x0DD0
#define GL_MAP1_GRID_SEGMENTS			0x0DD1
#define GL_MAP2_GRID_DOMAIN			0x0DD2
#define GL_MAP2_GRID_SEGMENTS			0x0DD3
#define GL_COEFF				0x0A00
#define GL_ORDER				0x0A01
#define GL_DOMAIN				0x0A02

/* Hints */
#define GL_PERSPECTIVE_CORRECTION_HINT		0x0C50
#define GL_POINT_SMOOTH_HINT			0x0C51
#define GL_LINE_SMOOTH_HINT			0x0C52
#define GL_POLYGON_SMOOTH_HINT			0x0C53
#define GL_FOG_HINT				0x0C54
#define GL_DONT_CARE				0x1100
#define GL_FASTEST				0x1101
#define GL_NICEST				0x1102

/* Scissor box */
#define GL_SCISSOR_BOX				0x0C10
#define GL_SCISSOR_TEST				0x0C11

/* Pixel Mode / Transfer */
#define GL_MAP_COLOR				0x0D10
#define GL_MAP_STENCIL				0x0D11
#define GL_INDEX_SHIFT				0x0D12
#define GL_INDEX_OFFSET				0x0D13
#define GL_RED_SCALE				0x0D14
#define GL_RED_BIAS				0x0D15
#define GL_GREEN_SCALE				0x0D18
#define GL_GREEN_BIAS				0x0D19
#define GL_BLUE_SCALE				0x0D1A
#define GL_BLUE_BIAS				0x0D1B
#define GL_ALPHA_SCALE				0x0D1C
#define GL_ALPHA_BIAS				0x0D1D
#define GL_DEPTH_SCALE				0x0D1E
#define GL_DEPTH_BIAS				0x0D1F
#define GL_PIXEL_MAP_S_TO_S_SIZE		0x0CB1
#define GL_PIXEL_MAP_I_TO_I_SIZE		0x0CB0
#define GL_PIXEL_MAP_I_TO_R_SIZE		0x0CB2
#define GL_PIXEL_MAP_I_TO_G_SIZE		0x0CB3
#define GL_PIXEL_MAP_I_TO_B_SIZE		0x0CB4
#define GL_PIXEL_MAP_I_TO_A_SIZE		0x0CB5
#define GL_PIXEL_MAP_R_TO_R_SIZE		0x0CB6
#define GL_PIXEL_MAP_G_TO_G_SIZE		0x0CB7
#define GL_PIXEL_MAP_B_TO_B_SIZE		0x0CB8
#define GL_PIXEL_MAP_A_TO_A_SIZE		0x0CB9
#define GL_PIXEL_MAP_S_TO_S			0x0C71
#define GL_PIXEL_MAP_I_TO_I			0x0C70
#define GL_PIXEL_MAP_I_TO_R			0x0C72
#define GL_PIXEL_MAP_I_TO_G			0x0C73
#define GL_PIXEL_MAP_I_TO_B			0x0C74
#define GL_PIXEL_MAP_I_TO_A			0x0C75
#define GL_PIXEL_MAP_R_TO_R			0x0C76
#define GL_PIXEL_MAP_G_TO_G			0x0C77
#define GL_PIXEL_MAP_B_TO_B			0x0C78
#define GL_PIXEL_MAP_A_TO_A			0x0C79
#define GL_PACK_ALIGNMENT			0x0D05
#define GL_PACK_LSB_FIRST			0x0D01
#define GL_PACK_ROW_LENGTH			0x0D02
#define GL_PACK_SKIP_PIXELS			0x0D04
#define GL_PACK_SKIP_ROWS			0x0D03
#define GL_PACK_SWAP_BYTES			0x0D00
#define GL_UNPACK_ALIGNMENT			0x0CF5
#define GL_UNPACK_LSB_FIRST			0x0CF1
#define GL_UNPACK_ROW_LENGTH			0x0CF2
#define GL_UNPACK_SKIP_PIXELS			0x0CF4
#define GL_UNPACK_SKIP_ROWS			0x0CF3
#define GL_UNPACK_SWAP_BYTES			0x0CF0
#define GL_ZOOM_X				0x0D16
#define GL_ZOOM_Y				0x0D17

/* Texture mapping */
#define GL_TEXTURE_ENV				0x2300
#define GL_TEXTURE_ENV_MODE			0x2200
#define GL_TEXTURE_1D				0x0DE0
#define GL_TEXTURE_2D				0x0DE1
#define GL_TEXTURE_WRAP_S			0x2802
#define GL_TEXTURE_WRAP_T			0x2803
#define GL_TEXTURE_MAG_FILTER			0x2800
#define GL_TEXTURE_MIN_FILTER			0x2801
#define GL_TEXTURE_ENV_COLOR			0x2201
#define GL_TEXTURE_GEN_S			0x0C60
#define GL_TEXTURE_GEN_T			0x0C61
#define GL_TEXTURE_GEN_MODE			0x2500
#define GL_TEXTURE_BORDER_COLOR			0x1004
#define GL_TEXTURE_WIDTH			0x1000
#define GL_TEXTURE_HEIGHT			0x1001
#define GL_TEXTURE_BORDER			0x1005
#define GL_TEXTURE_COMPONENTS			0x1003
#define GL_TEXTURE_RED_SIZE			0x805C
#define GL_TEXTURE_GREEN_SIZE			0x805D
#define GL_TEXTURE_BLUE_SIZE			0x805E
#define GL_TEXTURE_ALPHA_SIZE			0x805F
#define GL_TEXTURE_LUMINANCE_SIZE		0x8060
#define GL_TEXTURE_INTENSITY_SIZE		0x8061
#define GL_NEAREST_MIPMAP_NEAREST		0x2700
#define GL_NEAREST_MIPMAP_LINEAR		0x2702
#define GL_LINEAR_MIPMAP_NEAREST		0x2701
#define GL_LINEAR_MIPMAP_LINEAR			0x2703
#define GL_OBJECT_LINEAR			0x2401
#define GL_OBJECT_PLANE				0x2501
#define GL_EYE_LINEAR				0x2400
#define GL_EYE_PLANE				0x2502
#define GL_SPHERE_MAP				0x2402
#define GL_DECAL				0x2101
#define GL_MODULATE				0x2100
#define GL_NEAREST				0x2600
#define GL_REPEAT				0x2901
#define GL_CLAMP				0x2900
#define GL_S					0x2000
#define GL_T					0x2001
#define GL_R					0x2002
#define GL_Q					0x2003
#define GL_TEXTURE_GEN_R			0x0C62
#define GL_TEXTURE_GEN_Q			0x0C63

/* Utility */
#define GL_VENDOR				0x1F00
#define GL_RENDERER				0x1F01
#define GL_VERSION				0x1F02
#define GL_EXTENSIONS				0x1F03

/* Errors */
#define GL_NO_ERROR 				0x0
#define GL_INVALID_ENUM				0x0500
#define GL_INVALID_VALUE			0x0501
#define GL_INVALID_OPERATION			0x0502
#define GL_STACK_OVERFLOW			0x0503
#define GL_STACK_UNDERFLOW			0x0504
#define GL_OUT_OF_MEMORY			0x0505

/* glPush/PopAttrib bits */
#define GL_CURRENT_BIT				0x00000001
#define GL_POINT_BIT				0x00000002
#define GL_LINE_BIT				0x00000004
#define GL_POLYGON_BIT				0x00000008
#define GL_POLYGON_STIPPLE_BIT			0x00000010
#define GL_PIXEL_MODE_BIT			0x00000020
#define GL_LIGHTING_BIT				0x00000040
#define GL_FOG_BIT				0x00000080
#define GL_DEPTH_BUFFER_BIT			0x00000100
#define GL_ACCUM_BUFFER_BIT			0x00000200
#define GL_STENCIL_BUFFER_BIT			0x00000400
#define GL_VIEWPORT_BIT				0x00000800
#define GL_TRANSFORM_BIT			0x00001000
#define GL_ENABLE_BIT				0x00002000
#define GL_COLOR_BUFFER_BIT			0x00004000
#define GL_HINT_BIT				0x00008000
#define GL_EVAL_BIT				0x00010000
#define GL_LIST_BIT				0x00020000
#define GL_TEXTURE_BIT				0x00040000
#define GL_SCISSOR_BIT				0x00080000
#define GL_ALL_ATTRIB_BITS			0x000FFFFF


/* OpenGL 1.1 */
#define GL_PROXY_TEXTURE_1D			0x8063
#define GL_PROXY_TEXTURE_2D			0x8064
#define GL_TEXTURE_PRIORITY			0x8066
#define GL_TEXTURE_RESIDENT			0x8067
#define GL_TEXTURE_BINDING_1D			0x8068
#define GL_TEXTURE_BINDING_2D			0x8069
#define GL_TEXTURE_INTERNAL_FORMAT		0x1003
#define GL_ALPHA4				0x803B
#define GL_ALPHA8				0x803C
#define GL_ALPHA12				0x803D
#define GL_ALPHA16				0x803E
#define GL_LUMINANCE4				0x803F
#define GL_LUMINANCE8				0x8040
#define GL_LUMINANCE12				0x8041
#define GL_LUMINANCE16				0x8042
#define GL_LUMINANCE4_ALPHA4			0x8043
#define GL_LUMINANCE6_ALPHA2			0x8044
#define GL_LUMINANCE8_ALPHA8			0x8045
#define GL_LUMINANCE12_ALPHA4			0x8046
#define GL_LUMINANCE12_ALPHA12			0x8047
#define GL_LUMINANCE16_ALPHA16			0x8048
#define GL_INTENSITY				0x8049
#define GL_INTENSITY4				0x804A
#define GL_INTENSITY8				0x804B
#define GL_INTENSITY12				0x804C
#define GL_INTENSITY16				0x804D
#define GL_R3_G3_B2				0x2A10
#define GL_RGB4					0x804F
#define GL_RGB5					0x8050
#define GL_RGB8					0x8051
#define GL_RGB10				0x8052
#define GL_RGB12				0x8053
#define GL_RGB16				0x8054
#define GL_RGBA2				0x8055
#define GL_RGBA4				0x8056
#define GL_RGB5_A1				0x8057
#define GL_RGBA8				0x8058
#define GL_RGB10_A2				0x8059
#define GL_RGBA12				0x805A
#define GL_RGBA16				0x805B
#define GL_CLIENT_PIXEL_STORE_BIT		0x00000001
#define GL_CLIENT_VERTEX_ARRAY_BIT		0x00000002
#define GL_ALL_CLIENT_ATTRIB_BITS 		0xFFFFFFFF
#define GL_CLIENT_ALL_ATTRIB_BITS 		0xFFFFFFFF



/*
 * Miscellaneous
 */

GLAPI void GLAPIENTRY glClearIndex( GLfloat c );

GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );

GLAPI void GLAPIENTRY glClear( GLbitfield mask );

GLAPI void GLAPIENTRY glIndexMask( GLuint mask );

GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );

GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref );

GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor );

GLAPI void GLAPIENTRY glLogicOp( GLenum opcode );

GLAPI void GLAPIENTRY glCullFace( GLenum mode );

GLAPI void GLAPIENTRY glFrontFace( GLenum mode );

GLAPI void GLAPIENTRY glPointSize( GLfloat size );

GLAPI void GLAPIENTRY glLineWidth( GLfloat width );

GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern );

GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode );

GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units );

GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask );

GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask );

GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag );

GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag );

GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height);

GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation );

GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation );

GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode );

GLAPI void GLAPIENTRY glReadBuffer( GLenum mode );

GLAPI void GLAPIENTRY glEnable( GLenum cap );

GLAPI void GLAPIENTRY glDisable( GLenum cap );

GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap );


GLAPI void GLAPIENTRY glEnableClientState( GLenum cap );  /* 1.1 */

GLAPI void GLAPIENTRY glDisableClientState( GLenum cap );  /* 1.1 */


GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params );

GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params );

GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params );

GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params );


GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask );

GLAPI void GLAPIENTRY glPopAttrib( void );


GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask );  /* 1.1 */

GLAPI void GLAPIENTRY glPopClientAttrib( void );  /* 1.1 */


GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode );

GLAPI GLenum GLAPIENTRY glGetError( void );

GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name );

GLAPI void GLAPIENTRY glFinish( void );

GLAPI void GLAPIENTRY glFlush( void );

GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode );


/*
 * Depth Buffer
 */

GLAPI void GLAPIENTRY glClearDepth( GLclampd depth );

GLAPI void GLAPIENTRY glDepthFunc( GLenum func );

GLAPI void GLAPIENTRY glDepthMask( GLboolean flag );

GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val );


/*
 * Accumulation Buffer
 */

GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );

GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value );


/*
 * Transformation
 */

GLAPI void GLAPIENTRY glMatrixMode( GLenum mode );

GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right,
                                 GLdouble bottom, GLdouble top,
                                 GLdouble near_val, GLdouble far_val );

GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right,
                                   GLdouble bottom, GLdouble top,
                                   GLdouble near_val, GLdouble far_val );

GLAPI void GLAPIENTRY glViewport( GLint x, GLint y,
                                    GLsizei width, GLsizei height );

GLAPI void GLAPIENTRY glPushMatrix( void );

GLAPI void GLAPIENTRY glPopMatrix( void );

GLAPI void GLAPIENTRY glLoadIdentity( void );

GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m );
GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m );

GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m );
GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m );

GLAPI void GLAPIENTRY glRotated( GLdouble angle,
                                   GLdouble x, GLdouble y, GLdouble z );
GLAPI void GLAPIENTRY glRotatef( GLfloat angle,
                                   GLfloat x, GLfloat y, GLfloat z );

GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z );
GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z );

GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z );
GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z );


/*
 * Display Lists
 */

GLAPI GLboolean GLAPIENTRY glIsList( GLuint list );

GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range );

GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range );

GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode );

GLAPI void GLAPIENTRY glEndList( void );

GLAPI void GLAPIENTRY glCallList( GLuint list );

GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type,
                                     const GLvoid *lists );

GLAPI void GLAPIENTRY glListBase( GLuint base );


/*
 * Drawing Functions
 */

GLAPI void GLAPIENTRY glBegin( GLenum mode );

GLAPI void GLAPIENTRY glEnd( void );


GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y );
GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y );
GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y );
GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y );

GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z );
GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z );
GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z );
GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z );

GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w );
GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w );

GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v );
GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v );
GLAPI void GLAPIENTRY glVertex2iv( const GLint *v );
GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v );

GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v );
GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v );
GLAPI void GLAPIENTRY glVertex3iv( const GLint *v );
GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v );

GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v );
GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v );
GLAPI void GLAPIENTRY glVertex4iv( const GLint *v );
GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v );


GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz );
GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz );
GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz );
GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz );
GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz );

GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v );
GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v );
GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v );
GLAPI void GLAPIENTRY glNormal3iv( const GLint *v );
GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v );


GLAPI void GLAPIENTRY glIndexd( GLdouble c );
GLAPI void GLAPIENTRY glIndexf( GLfloat c );
GLAPI void GLAPIENTRY glIndexi( GLint c );
GLAPI void GLAPIENTRY glIndexs( GLshort c );
GLAPI void GLAPIENTRY glIndexub( GLubyte c );  /* 1.1 */

GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c );
GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c );
GLAPI void GLAPIENTRY glIndexiv( const GLint *c );
GLAPI void GLAPIENTRY glIndexsv( const GLshort *c );
GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c );  /* 1.1 */

GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue );
GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue );
GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue );
GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue );
GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue );
GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue );
GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue );
GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue );

GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green,
                                   GLbyte blue, GLbyte alpha );
GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green,
                                   GLdouble blue, GLdouble alpha );
GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green,
                                   GLfloat blue, GLfloat alpha );
GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green,
                                   GLint blue, GLint alpha );
GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green,
                                   GLshort blue, GLshort alpha );
GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green,
                                    GLubyte blue, GLubyte alpha );
GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green,
                                    GLuint blue, GLuint alpha );
GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green,
                                    GLushort blue, GLushort alpha );


GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v );
GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v );
GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v );
GLAPI void GLAPIENTRY glColor3iv( const GLint *v );
GLAPI void GLAPIENTRY glColor3sv( const GLshort *v );
GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v );
GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v );
GLAPI void GLAPIENTRY glColor3usv( const GLushort *v );

GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v );
GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v );
GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v );
GLAPI void GLAPIENTRY glColor4iv( const GLint *v );
GLAPI void GLAPIENTRY glColor4sv( const GLshort *v );
GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v );
GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v );
GLAPI void GLAPIENTRY glColor4usv( const GLushort *v );


GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s );
GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s );
GLAPI void GLAPIENTRY glTexCoord1i( GLint s );
GLAPI void GLAPIENTRY glTexCoord1s( GLshort s );

GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t );
GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t );
GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t );
GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t );

GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r );
GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r );
GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r );
GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r );

GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q );
GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q );
GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q );
GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q );

GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v );
GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v );
GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v );
GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v );

GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v );
GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v );
GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v );
GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v );

GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v );
GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v );
GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v );
GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v );

GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v );
GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v );
GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v );
GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v );


GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y );
GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y );
GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y );
GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y );

GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z );
GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z );
GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z );
GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z );

GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w );
GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w );

GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v );
GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v );
GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v );
GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v );

GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v );
GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v );
GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v );
GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v );

GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v );
GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v );
GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v );
GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v );


GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );
GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );
GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 );
GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );


GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 );
GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 );
GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 );
GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 );


/*
 * Vertex Arrays  (1.1)
 */

GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type,
                                       GLsizei stride, const GLvoid *ptr );

GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride,
                                       const GLvoid *ptr );

GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type,
                                      GLsizei stride, const GLvoid *ptr );

GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride,
                                      const GLvoid *ptr );

GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type,
                                         GLsizei stride, const GLvoid *ptr );

GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr );

GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params );

GLAPI void GLAPIENTRY glArrayElement( GLint i );

GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count );

GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count,
                                      GLenum type, const GLvoid *indices );

GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride,
                                           const GLvoid *pointer );

/*
 * Lighting
 */

GLAPI void GLAPIENTRY glShadeModel( GLenum mode );

GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param );
GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname,
                                 const GLfloat *params );
GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname,
                                 const GLint *params );

GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname,
                                    GLfloat *params );
GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname,
                                    GLint *params );

GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param );
GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params );
GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params );

GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param );
GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params );
GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params );

GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params );
GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params );

GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode );


/*
 * Raster functions
 */

GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor );

GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param );

GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param );

GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize,
                                    const GLfloat *values );
GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize,
                                     const GLuint *values );
GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize,
                                     const GLushort *values );

GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values );
GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values );
GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values );

GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height,
                                GLfloat xorig, GLfloat yorig,
                                GLfloat xmove, GLfloat ymove,
                                const GLubyte *bitmap );

GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y,
                                    GLsizei width, GLsizei height,
                                    GLenum format, GLenum type,
                                    GLvoid *pixels );

GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height,
                                    GLenum format, GLenum type,
                                    const GLvoid *pixels );

GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y,
                                    GLsizei width, GLsizei height,
                                    GLenum type );

/*
 * Stenciling
 */

GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask );

GLAPI void GLAPIENTRY glStencilMask( GLuint mask );

GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass );

GLAPI void GLAPIENTRY glClearStencil( GLint s );



/*
 * Texture mapping
 */

GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param );
GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param );

GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params );
GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params );
GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params );

GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params );
GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );
GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params );


GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param );

GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params );
GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params );

GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params );
GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params );


GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param );
GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param );

GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname,
                                          const GLfloat *params );
GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname,
                                          const GLint *params );

GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target,
                                           GLenum pname, GLfloat *params);
GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target,
                                           GLenum pname, GLint *params );

GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level,
                                                GLenum pname, GLfloat *params );
GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level,
                                                GLenum pname, GLint *params );


GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level,
                                    GLint internalFormat,
                                    GLsizei width, GLint border,
                                    GLenum format, GLenum type,
                                    const GLvoid *pixels );

GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level,
                                    GLint internalFormat,
                                    GLsizei width, GLsizei height,
                                    GLint border, GLenum format, GLenum type,
                                    const GLvoid *pixels );

GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level,
                                     GLenum format, GLenum type,
                                     GLvoid *pixels );


/* 1.1 functions */

GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures );

GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures);

GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture );

GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n,
                                            const GLuint *textures,
                                            const GLclampf *priorities );

GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n,
                                                  const GLuint *textures,
                                                  GLboolean *residences );

GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture );


GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level,
                                       GLint xoffset,
                                       GLsizei width, GLenum format,
                                       GLenum type, const GLvoid *pixels );


GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level,
                                       GLint xoffset, GLint yoffset,
                                       GLsizei width, GLsizei height,
                                       GLenum format, GLenum type,
                                       const GLvoid *pixels );


GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level,
                                        GLenum internalformat,
                                        GLint x, GLint y,
                                        GLsizei width, GLint border );


GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level,
                                        GLenum internalformat,
                                        GLint x, GLint y,
                                        GLsizei width, GLsizei height,
                                        GLint border );


GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level,
                                           GLint xoffset, GLint x, GLint y,
                                           GLsizei width );


GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level,
                                           GLint xoffset, GLint yoffset,
                                           GLint x, GLint y,
                                           GLsizei width, GLsizei height );


/*
 * Evaluators
 */

GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2,
                               GLint stride,
                               GLint order, const GLdouble *points );
GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2,
                               GLint stride,
                               GLint order, const GLfloat *points );

GLAPI void GLAPIENTRY glMap2d( GLenum target,
		     GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
		     GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
		     const GLdouble *points );
GLAPI void GLAPIENTRY glMap2f( GLenum target,
		     GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
		     GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
		     const GLfloat *points );

GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v );
GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v );
GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v );

GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u );
GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u );

GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u );
GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u );

GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v );
GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v );

GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u );
GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u );

GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 );
GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 );

GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2,
                                   GLint vn, GLdouble v1, GLdouble v2 );
GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2,
                                   GLint vn, GLfloat v1, GLfloat v2 );

GLAPI void GLAPIENTRY glEvalPoint1( GLint i );

GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j );

GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 );

GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );


/*
 * Fog
 */

GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param );

GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param );

GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params );

GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params );


/*
 * Selection and Feedback
 */

GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer );

GLAPI void GLAPIENTRY glPassThrough( GLfloat token );

GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer );

GLAPI void GLAPIENTRY glInitNames( void );

GLAPI void GLAPIENTRY glLoadName( GLuint name );

GLAPI void GLAPIENTRY glPushName( GLuint name );

GLAPI void GLAPIENTRY glPopName( void );



/*
 * OpenGL 1.2
 */

#define GL_RESCALE_NORMAL			0x803A
#define GL_CLAMP_TO_EDGE			0x812F
#define GL_MAX_ELEMENTS_VERTICES		0x80E8
#define GL_MAX_ELEMENTS_INDICES			0x80E9
#define GL_BGR					0x80E0
#define GL_BGRA					0x80E1
#define GL_UNSIGNED_BYTE_3_3_2			0x8032
#define GL_UNSIGNED_BYTE_2_3_3_REV		0x8362
#define GL_UNSIGNED_SHORT_5_6_5			0x8363
#define GL_UNSIGNED_SHORT_5_6_5_REV		0x8364
#define GL_UNSIGNED_SHORT_4_4_4_4		0x8033
#define GL_UNSIGNED_SHORT_4_4_4_4_REV		0x8365
#define GL_UNSIGNED_SHORT_5_5_5_1		0x8034
#define GL_UNSIGNED_SHORT_1_5_5_5_REV		0x8366
#define GL_UNSIGNED_INT_8_8_8_8			0x8035
#define GL_UNSIGNED_INT_8_8_8_8_REV		0x8367
#define GL_UNSIGNED_INT_10_10_10_2		0x8036
#define GL_UNSIGNED_INT_2_10_10_10_REV		0x8368
#define GL_LIGHT_MODEL_COLOR_CONTROL		0x81F8
#define GL_SINGLE_COLOR				0x81F9
#define GL_SEPARATE_SPECULAR_COLOR		0x81FA
#define GL_TEXTURE_MIN_LOD			0x813A
#define GL_TEXTURE_MAX_LOD			0x813B
#define GL_TEXTURE_BASE_LEVEL			0x813C
#define GL_TEXTURE_MAX_LEVEL			0x813D
#define GL_SMOOTH_POINT_SIZE_RANGE		0x0B12
#define GL_SMOOTH_POINT_SIZE_GRANULARITY	0x0B13
#define GL_SMOOTH_LINE_WIDTH_RANGE		0x0B22
#define GL_SMOOTH_LINE_WIDTH_GRANULARITY	0x0B23
#define GL_ALIASED_POINT_SIZE_RANGE		0x846D
#define GL_ALIASED_LINE_WIDTH_RANGE		0x846E
#define GL_PACK_SKIP_IMAGES			0x806B
#define GL_PACK_IMAGE_HEIGHT			0x806C
#define GL_UNPACK_SKIP_IMAGES			0x806D
#define GL_UNPACK_IMAGE_HEIGHT			0x806E
#define GL_TEXTURE_3D				0x806F
#define GL_PROXY_TEXTURE_3D			0x8070
#define GL_TEXTURE_DEPTH			0x8071
#define GL_TEXTURE_WRAP_R			0x8072
#define GL_MAX_3D_TEXTURE_SIZE			0x8073
#define GL_TEXTURE_BINDING_3D			0x806A

GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start,
	GLuint end, GLsizei count, GLenum type, const GLvoid *indices );

GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level,
                                      GLint internalFormat,
                                      GLsizei width, GLsizei height,
                                      GLsizei depth, GLint border,
                                      GLenum format, GLenum type,
                                      const GLvoid *pixels );

GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level,
                                         GLint xoffset, GLint yoffset,
                                         GLint zoffset, GLsizei width,
                                         GLsizei height, GLsizei depth,
                                         GLenum format,
                                         GLenum type, const GLvoid *pixels);

GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level,
                                             GLint xoffset, GLint yoffset,
                                             GLint zoffset, GLint x,
                                             GLint y, GLsizei width,
                                             GLsizei height );

typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);


/*
 * GL_ARB_imaging
 */

#define GL_CONSTANT_COLOR			0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR		0x8002
#define GL_CONSTANT_ALPHA			0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA		0x8004
#define GL_COLOR_TABLE				0x80D0
#define GL_POST_CONVOLUTION_COLOR_TABLE		0x80D1
#define GL_POST_COLOR_MATRIX_COLOR_TABLE	0x80D2
#define GL_PROXY_COLOR_TABLE			0x80D3
#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE	0x80D4
#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE	0x80D5
#define GL_COLOR_TABLE_SCALE			0x80D6
#define GL_COLOR_TABLE_BIAS			0x80D7
#define GL_COLOR_TABLE_FORMAT			0x80D8
#define GL_COLOR_TABLE_WIDTH			0x80D9
#define GL_COLOR_TABLE_RED_SIZE			0x80DA
#define GL_COLOR_TABLE_GREEN_SIZE		0x80DB
#define GL_COLOR_TABLE_BLUE_SIZE		0x80DC
#define GL_COLOR_TABLE_ALPHA_SIZE		0x80DD
#define GL_COLOR_TABLE_LUMINANCE_SIZE		0x80DE
#define GL_COLOR_TABLE_INTENSITY_SIZE		0x80DF
#define GL_CONVOLUTION_1D			0x8010
#define GL_CONVOLUTION_2D			0x8011
#define GL_SEPARABLE_2D				0x8012
#define GL_CONVOLUTION_BORDER_MODE		0x8013
#define GL_CONVOLUTION_FILTER_SCALE		0x8014
#define GL_CONVOLUTION_FILTER_BIAS		0x8015
#define GL_REDUCE				0x8016
#define GL_CONVOLUTION_FORMAT			0x8017
#define GL_CONVOLUTION_WIDTH			0x8018
#define GL_CONVOLUTION_HEIGHT			0x8019
#define GL_MAX_CONVOLUTION_WIDTH		0x801A
#define GL_MAX_CONVOLUTION_HEIGHT		0x801B
#define GL_POST_CONVOLUTION_RED_SCALE		0x801C
#define GL_POST_CONVOLUTION_GREEN_SCALE		0x801D
#define GL_POST_CONVOLUTION_BLUE_SCALE		0x801E
#define GL_POST_CONVOLUTION_ALPHA_SCALE		0x801F
#define GL_POST_CONVOLUTION_RED_BIAS		0x8020
#define GL_POST_CONVOLUTION_GREEN_BIAS		0x8021
#define GL_POST_CONVOLUTION_BLUE_BIAS		0x8022
#define GL_POST_CONVOLUTION_ALPHA_BIAS		0x8023
#define GL_CONSTANT_BORDER			0x8151
#define GL_REPLICATE_BORDER			0x8153
#define GL_CONVOLUTION_BORDER_COLOR		0x8154
#define GL_COLOR_MATRIX				0x80B1
#define GL_COLOR_MATRIX_STACK_DEPTH		0x80B2
#define GL_MAX_COLOR_MATRIX_STACK_DEPTH		0x80B3
#define GL_POST_COLOR_MATRIX_RED_SCALE		0x80B4
#define GL_POST_COLOR_MATRIX_GREEN_SCALE	0x80B5
#define GL_POST_COLOR_MATRIX_BLUE_SCALE		0x80B6
#define GL_POST_COLOR_MATRIX_ALPHA_SCALE	0x80B7
#define GL_POST_COLOR_MATRIX_RED_BIAS		0x80B8
#define GL_POST_COLOR_MATRIX_GREEN_BIAS		0x80B9
#define GL_POST_COLOR_MATRIX_BLUE_BIAS		0x80BA
#define GL_POST_COLOR_MATRIX_ALPHA_BIAS		0x80BB
#define GL_HISTOGRAM				0x8024
#define GL_PROXY_HISTOGRAM			0x8025
#define GL_HISTOGRAM_WIDTH			0x8026
#define GL_HISTOGRAM_FORMAT			0x8027
#define GL_HISTOGRAM_RED_SIZE			0x8028
#define GL_HISTOGRAM_GREEN_SIZE			0x8029
#define GL_HISTOGRAM_BLUE_SIZE			0x802A
#define GL_HISTOGRAM_ALPHA_SIZE			0x802B
#define GL_HISTOGRAM_LUMINANCE_SIZE		0x802C
#define GL_HISTOGRAM_SINK			0x802D
#define GL_MINMAX				0x802E
#define GL_MINMAX_FORMAT			0x802F
#define GL_MINMAX_SINK				0x8030
#define GL_TABLE_TOO_LARGE			0x8031
#define GL_BLEND_EQUATION			0x8009
#define GL_MIN					0x8007
#define GL_MAX					0x8008
#define GL_FUNC_ADD				0x8006
#define GL_FUNC_SUBTRACT			0x800A
#define GL_FUNC_REVERSE_SUBTRACT		0x800B
#define GL_BLEND_COLOR				0x8005


GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat,
                                    GLsizei width, GLenum format,
                                    GLenum type, const GLvoid *table );

GLAPI void GLAPIENTRY glColorSubTable( GLenum target,
                                       GLsizei start, GLsizei count,
                                       GLenum format, GLenum type,
                                       const GLvoid *data );

GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname,
                                              const GLint *params);

GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname,
                                              const GLfloat *params);

GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start,
                                           GLint x, GLint y, GLsizei width );

GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat,
                                        GLint x, GLint y, GLsizei width );

GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format,
                                       GLenum type, GLvoid *table );

GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname,
                                                  GLfloat *params );

GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname,
                                                  GLint *params );

GLAPI void GLAPIENTRY glBlendEquation( GLenum mode );

GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green,
                                    GLclampf blue, GLclampf alpha );

GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width,
				   GLenum internalformat, GLboolean sink );

GLAPI void GLAPIENTRY glResetHistogram( GLenum target );

GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset,
				      GLenum format, GLenum type,
				      GLvoid *values );

GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname,
						 GLfloat *params );

GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname,
						 GLint *params );

GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat,
				GLboolean sink );

GLAPI void GLAPIENTRY glResetMinmax( GLenum target );

GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset,
                                   GLenum format, GLenum types,
                                   GLvoid *values );

GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname,
					      GLfloat *params );

GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname,
					      GLint *params );

GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target,
	GLenum internalformat, GLsizei width, GLenum format, GLenum type,
	const GLvoid *image );

GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target,
	GLenum internalformat, GLsizei width, GLsizei height, GLenum format,
	GLenum type, const GLvoid *image );

GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname,
	GLfloat params );

GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname,
	const GLfloat *params );

GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname,
	GLint params );

GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname,
	const GLint *params );

GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target,
	GLenum internalformat, GLint x, GLint y, GLsizei width );

GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target,
	GLenum internalformat, GLint x, GLint y, GLsizei width,
	GLsizei height);

GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format,
	GLenum type, GLvoid *image );

GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname,
	GLfloat *params );

GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname,
	GLint *params );

GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target,
	GLenum internalformat, GLsizei width, GLsizei height, GLenum format,
	GLenum type, const GLvoid *row, const GLvoid *column );

GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format,
	GLenum type, GLvoid *row, GLvoid *column, GLvoid *span );

typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);



/*
 * OpenGL 1.3
 */

/* multitexture */
#define GL_TEXTURE0				0x84C0
#define GL_TEXTURE1				0x84C1
#define GL_TEXTURE2				0x84C2
#define GL_TEXTURE3				0x84C3
#define GL_TEXTURE4				0x84C4
#define GL_TEXTURE5				0x84C5
#define GL_TEXTURE6				0x84C6
#define GL_TEXTURE7				0x84C7
#define GL_TEXTURE8				0x84C8
#define GL_TEXTURE9				0x84C9
#define GL_TEXTURE10				0x84CA
#define GL_TEXTURE11				0x84CB
#define GL_TEXTURE12				0x84CC
#define GL_TEXTURE13				0x84CD
#define GL_TEXTURE14				0x84CE
#define GL_TEXTURE15				0x84CF
#define GL_TEXTURE16				0x84D0
#define GL_TEXTURE17				0x84D1
#define GL_TEXTURE18				0x84D2
#define GL_TEXTURE19				0x84D3
#define GL_TEXTURE20				0x84D4
#define GL_TEXTURE21				0x84D5
#define GL_TEXTURE22				0x84D6
#define GL_TEXTURE23				0x84D7
#define GL_TEXTURE24				0x84D8
#define GL_TEXTURE25				0x84D9
#define GL_TEXTURE26				0x84DA
#define GL_TEXTURE27				0x84DB
#define GL_TEXTURE28				0x84DC
#define GL_TEXTURE29				0x84DD
#define GL_TEXTURE30				0x84DE
#define GL_TEXTURE31				0x84DF
#define GL_ACTIVE_TEXTURE			0x84E0
#define GL_CLIENT_ACTIVE_TEXTURE		0x84E1
#define GL_MAX_TEXTURE_UNITS			0x84E2
/* texture_cube_map */
#define GL_NORMAL_MAP				0x8511
#define GL_REFLECTION_MAP			0x8512
#define GL_TEXTURE_CUBE_MAP			0x8513
#define GL_TEXTURE_BINDING_CUBE_MAP		0x8514
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X		0x8515
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X		0x8516
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y		0x8517
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y		0x8518
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z		0x8519
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z		0x851A
#define GL_PROXY_TEXTURE_CUBE_MAP		0x851B
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE		0x851C
/* texture_compression */
#define GL_COMPRESSED_ALPHA			0x84E9
#define GL_COMPRESSED_LUMINANCE			0x84EA
#define GL_COMPRESSED_LUMINANCE_ALPHA		0x84EB
#define GL_COMPRESSED_INTENSITY			0x84EC
#define GL_COMPRESSED_RGB			0x84ED
#define GL_COMPRESSED_RGBA			0x84EE
#define GL_TEXTURE_COMPRESSION_HINT		0x84EF
#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE	0x86A0
#define GL_TEXTURE_COMPRESSED			0x86A1
#define GL_NUM_COMPRESSED_TEXTURE_FORMATS	0x86A2
#define GL_COMPRESSED_TEXTURE_FORMATS		0x86A3
/* multisample */
#define GL_MULTISAMPLE				0x809D
#define GL_SAMPLE_ALPHA_TO_COVERAGE		0x809E
#define GL_SAMPLE_ALPHA_TO_ONE			0x809F
#define GL_SAMPLE_COVERAGE			0x80A0
#define GL_SAMPLE_BUFFERS			0x80A8
#define GL_SAMPLES				0x80A9
#define GL_SAMPLE_COVERAGE_VALUE		0x80AA
#define GL_SAMPLE_COVERAGE_INVERT		0x80AB
#define GL_MULTISAMPLE_BIT			0x20000000
/* transpose_matrix */
#define GL_TRANSPOSE_MODELVIEW_MATRIX		0x84E3
#define GL_TRANSPOSE_PROJECTION_MATRIX		0x84E4
#define GL_TRANSPOSE_TEXTURE_MATRIX		0x84E5
#define GL_TRANSPOSE_COLOR_MATRIX		0x84E6
/* texture_env_combine */
#define GL_COMBINE				0x8570
#define GL_COMBINE_RGB				0x8571
#define GL_COMBINE_ALPHA			0x8572
#define GL_SOURCE0_RGB				0x8580
#define GL_SOURCE1_RGB				0x8581
#define GL_SOURCE2_RGB				0x8582
#define GL_SOURCE0_ALPHA			0x8588
#define GL_SOURCE1_ALPHA			0x8589
#define GL_SOURCE2_ALPHA			0x858A
#define GL_OPERAND0_RGB				0x8590
#define GL_OPERAND1_RGB				0x8591
#define GL_OPERAND2_RGB				0x8592
#define GL_OPERAND0_ALPHA			0x8598
#define GL_OPERAND1_ALPHA			0x8599
#define GL_OPERAND2_ALPHA			0x859A
#define GL_RGB_SCALE				0x8573
#define GL_ADD_SIGNED				0x8574
#define GL_INTERPOLATE				0x8575
#define GL_SUBTRACT				0x84E7
#define GL_CONSTANT				0x8576
#define GL_PRIMARY_COLOR			0x8577
#define GL_PREVIOUS				0x8578
/* texture_env_dot3 */
#define GL_DOT3_RGB				0x86AE
#define GL_DOT3_RGBA				0x86AF
/* texture_border_clamp */
#define GL_CLAMP_TO_BORDER			0x812D

GLAPI void GLAPIENTRY glActiveTexture( GLenum texture );

GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture );

GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data );

GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );

GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data );

GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data );

GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data );

GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data );

GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img );

GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s );

GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v );

GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s );

GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v );

GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s );

GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v );

GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s );

GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v );

GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t );

GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v );

GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t );

GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v );

GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t );

GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v );

GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t );

GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v );

GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r );

GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v );

GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r );

GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v );

GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r );

GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v );

GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r );

GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v );

GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q );

GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v );

GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q );

GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v );

GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q );

GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v );

GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q );

GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v );


GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] );

GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] );

GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] );

GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] );

GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert );


typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);
typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);



/*
 * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1)
 */
#ifndef GL_ARB_multitexture
#define GL_ARB_multitexture 1

#define GL_TEXTURE0_ARB				0x84C0
#define GL_TEXTURE1_ARB				0x84C1
#define GL_TEXTURE2_ARB				0x84C2
#define GL_TEXTURE3_ARB				0x84C3
#define GL_TEXTURE4_ARB				0x84C4
#define GL_TEXTURE5_ARB				0x84C5
#define GL_TEXTURE6_ARB				0x84C6
#define GL_TEXTURE7_ARB				0x84C7
#define GL_TEXTURE8_ARB				0x84C8
#define GL_TEXTURE9_ARB				0x84C9
#define GL_TEXTURE10_ARB			0x84CA
#define GL_TEXTURE11_ARB			0x84CB
#define GL_TEXTURE12_ARB			0x84CC
#define GL_TEXTURE13_ARB			0x84CD
#define GL_TEXTURE14_ARB			0x84CE
#define GL_TEXTURE15_ARB			0x84CF
#define GL_TEXTURE16_ARB			0x84D0
#define GL_TEXTURE17_ARB			0x84D1
#define GL_TEXTURE18_ARB			0x84D2
#define GL_TEXTURE19_ARB			0x84D3
#define GL_TEXTURE20_ARB			0x84D4
#define GL_TEXTURE21_ARB			0x84D5
#define GL_TEXTURE22_ARB			0x84D6
#define GL_TEXTURE23_ARB			0x84D7
#define GL_TEXTURE24_ARB			0x84D8
#define GL_TEXTURE25_ARB			0x84D9
#define GL_TEXTURE26_ARB			0x84DA
#define GL_TEXTURE27_ARB			0x84DB
#define GL_TEXTURE28_ARB			0x84DC
#define GL_TEXTURE29_ARB			0x84DD
#define GL_TEXTURE30_ARB			0x84DE
#define GL_TEXTURE31_ARB			0x84DF
#define GL_ACTIVE_TEXTURE_ARB			0x84E0
#define GL_CLIENT_ACTIVE_TEXTURE_ARB		0x84E1
#define GL_MAX_TEXTURE_UNITS_ARB		0x84E2

GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture);
GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture);
GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s);
GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v);
GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s);
GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v);
GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s);
GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v);
GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s);
GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v);
GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t);
GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v);
GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t);
GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v);
GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t);
GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v);
GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t);
GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v);
GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r);
GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v);
GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r);
GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v);
GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r);
GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v);
GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r);
GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v);
GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v);
GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v);
GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q);
GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v);
GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v);

typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);

#endif /* GL_ARB_multitexture */



/*
 * Define this token if you want "old-style" header file behaviour (extensions
 * defined in gl.h).  Otherwise, extensions will be included from glext.h.
 */
#if defined(GL_GLEXT_LEGACY)

/* All extensions that used to be here are now found in glext.h */

#else  /* GL_GLEXT_LEGACY */

#include <GL/glext.h>

#endif  /* GL_GLEXT_LEGACY */



#if GL_ARB_shader_objects

#ifndef GL_MESA_shader_debug
#define GL_MESA_shader_debug 1

#define GL_DEBUG_OBJECT_MESA              0x8759
#define GL_DEBUG_PRINT_MESA               0x875A
#define GL_DEBUG_ASSERT_MESA              0x875B

GLAPI GLhandleARB GLAPIENTRY glCreateDebugObjectMESA (void);
GLAPI void GLAPIENTRY glClearDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType);
GLAPI void GLAPIENTRY glGetDebugLogMESA (GLhandleARB obj, GLenum logType, GLenum shaderType, GLsizei maxLength,
                                         GLsizei *length, GLcharARB *debugLog);
GLAPI GLsizei GLAPIENTRY glGetDebugLogLengthMESA (GLhandleARB obj, GLenum logType, GLenum shaderType);

#endif /* GL_MESA_shader_debug */

#endif /* GL_ARB_shader_objects */


/*
 * ???. GL_MESA_packed_depth_stencil
 * XXX obsolete
 */
#ifndef GL_MESA_packed_depth_stencil
#define GL_MESA_packed_depth_stencil 1

#define GL_DEPTH_STENCIL_MESA			0x8750
#define GL_UNSIGNED_INT_24_8_MESA		0x8751
#define GL_UNSIGNED_INT_8_24_REV_MESA		0x8752
#define GL_UNSIGNED_SHORT_15_1_MESA		0x8753
#define GL_UNSIGNED_SHORT_1_15_REV_MESA		0x8754

#endif /* GL_MESA_packed_depth_stencil */


#ifndef GL_MESA_program_debug
#define GL_MESA_program_debug 1

#define GL_FRAGMENT_PROGRAM_POSITION_MESA       0x8bb0
#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA       0x8bb1
#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA  0x8bb2
#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA  0x8bb3
#define GL_VERTEX_PROGRAM_POSITION_MESA         0x8bb4
#define GL_VERTEX_PROGRAM_CALLBACK_MESA         0x8bb5
#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA    0x8bb6
#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA    0x8bb7

typedef void (*GLprogramcallbackMESA)(GLenum target, GLvoid *data);

GLAPI void GLAPIENTRY glProgramCallbackMESA(GLenum target, GLprogramcallbackMESA callback, GLvoid *data);

GLAPI void GLAPIENTRY glGetProgramRegisterfvMESA(GLenum target, GLsizei len, const GLubyte *name, GLfloat *v);

#endif /* GL_MESA_program_debug */


#ifndef GL_MESA_texture_array
#define GL_MESA_texture_array 1

/* GL_MESA_texture_array uses the same enum values as GL_EXT_texture_array.
 */
#ifndef GL_EXT_texture_array

#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glFramebufferTextureLayerEXT(GLenum target,
    GLenum attachment, GLuint texture, GLint level, GLint layer);
#endif /* GL_GLEXT_PROTOTYPES */

#if 0
/* (temporarily) disabled because of collision with typedef in glext.h
 * that happens if apps include both gl.h and glext.h
 */
typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target,
    GLenum attachment, GLuint texture, GLint level, GLint layer);
#endif

#define GL_TEXTURE_1D_ARRAY_EXT         0x8C18
#define GL_PROXY_TEXTURE_1D_ARRAY_EXT   0x8C19
#define GL_TEXTURE_2D_ARRAY_EXT         0x8C1A
#define GL_PROXY_TEXTURE_2D_ARRAY_EXT   0x8C1B
#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C
#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D
#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4
#endif

#endif


#ifndef GL_ATI_blend_equation_separate
#define GL_ATI_blend_equation_separate 1

#define GL_ALPHA_BLEND_EQUATION_ATI	        0x883D

GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA );
typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA);

#endif /* GL_ATI_blend_equation_separate */


/* GL_OES_EGL_image */
#ifndef GL_OES_EGL_image
typedef void* GLeglImageOES;
#endif

#ifndef GL_OES_EGL_image
#define GL_OES_EGL_image 1
#ifdef GL_GLEXT_PROTOTYPES
GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
#endif
typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
#endif


/**
 ** NOTE!!!!!  If you add new functions to this file, or update
 ** glext.h be sure to regenerate the gl_mangle.h file.  See comments
 ** in that file for details.
 **/



/**********************************************************************
 * Begin system-specific stuff
 */
#if defined(PRAGMA_EXPORT_SUPPORTED)
#pragma export off
#endif

#if defined(macintosh) && PRAGMA_IMPORT_SUPPORTED
#pragma import off
#endif
/*
 * End system-specific stuff
 **********************************************************************/


#ifdef __cplusplus
}
#endif

#endif /* __gl_h_ */
Added jni/glshim/include/GL/gl_mangle.h.


































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
#if 0
#define GL_MANGLE_C1 "DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE THIS FILE IN SHELL (/bin/sh) and save the output"
#define GL_MANGLE_C2 "This file is used to create GL function protypes and aliases for the function names"
	files="gl.h glext.h"
#define GL_MANGLE_C3 "get regeneration header - copy everything in this file above the 'REGENERATE_TO_END' line"
	awk 	'!done; /^\/\*REGENERATE_TO_END/ {done=1}' $0
	echo ""
#define GL_MANGLE_C4 get aliases
	grep '^GLAPI' $files | sed -e 's/.*ENTRY gl\([^( ]*\).*$/#define gl\1		MANGLE(\1)/' | sort | uniq
	echo ""
	echo "#endif /* GL_MANGLE_H */"
	exit
#endif /* REGENERATION */

/*
 * If you compile Mesa with USE_MGL_NAMESPACE defined then you can link
 * your application both with OpenGL and Mesa.  The Mesa functions will
 * be redefined so they are prefixed with "mgl" instead of "gl".
 * Mgl contributed by Randy Frank (rfrank@rsinc.com)
 * Regneration code contributed by Ray Tice (rayt@ma.ultra.net)
 */

#ifndef GL_MANGLE_H
#define GL_MANGLE_H

#ifndef   MANGLE
#define   MANGLE(x) mgl##x
#endif  /*MANGLE*/

/*REGENERATE_TO_END-----------ALL LINES BELOW HERE GET REPLACED ON REGENERATION */

#define glAccum		MANGLE(Accum)
#define glActiveProgramEXT		MANGLE(ActiveProgramEXT)
#define glActiveStencilFaceEXT		MANGLE(ActiveStencilFaceEXT)
#define glActiveTextureARB		MANGLE(ActiveTextureARB)
#define glActiveTexture		MANGLE(ActiveTexture)
#define glActiveVaryingNV		MANGLE(ActiveVaryingNV)
#define glAlphaFragmentOp1ATI		MANGLE(AlphaFragmentOp1ATI)
#define glAlphaFragmentOp2ATI		MANGLE(AlphaFragmentOp2ATI)
#define glAlphaFragmentOp3ATI		MANGLE(AlphaFragmentOp3ATI)
#define glAlphaFunc		MANGLE(AlphaFunc)
#define glApplyTextureEXT		MANGLE(ApplyTextureEXT)
#define glAreProgramsResidentNV		MANGLE(AreProgramsResidentNV)
#define glAreTexturesResidentEXT		MANGLE(AreTexturesResidentEXT)
#define glAreTexturesResident		MANGLE(AreTexturesResident)
#define glArrayElementEXT		MANGLE(ArrayElementEXT)
#define glArrayElement		MANGLE(ArrayElement)
#define glArrayObjectATI		MANGLE(ArrayObjectATI)
#define glAsyncMarkerSGIX		MANGLE(AsyncMarkerSGIX)
#define glAttachObjectARB		MANGLE(AttachObjectARB)
#define glAttachShader		MANGLE(AttachShader)
#define glBeginConditionalRender		MANGLE(BeginConditionalRender)
#define glBeginConditionalRenderNV		MANGLE(BeginConditionalRenderNV)
#define glBeginFragmentShaderATI		MANGLE(BeginFragmentShaderATI)
#define glBegin		MANGLE(Begin)
#define glBeginOcclusionQueryNV		MANGLE(BeginOcclusionQueryNV)
#define glBeginPerfMonitorAMD		MANGLE(BeginPerfMonitorAMD)
#define glBeginQueryARB		MANGLE(BeginQueryARB)
#define glBeginQuery		MANGLE(BeginQuery)
#define glBeginTransformFeedbackEXT		MANGLE(BeginTransformFeedbackEXT)
#define glBeginTransformFeedback		MANGLE(BeginTransformFeedback)
#define glBeginTransformFeedbackNV		MANGLE(BeginTransformFeedbackNV)
#define glBeginVertexShaderEXT		MANGLE(BeginVertexShaderEXT)
#define glBeginVideoCaptureNV		MANGLE(BeginVideoCaptureNV)
#define glBindAttribLocationARB		MANGLE(BindAttribLocationARB)
#define glBindAttribLocation		MANGLE(BindAttribLocation)
#define glBindBufferARB		MANGLE(BindBufferARB)
#define glBindBufferBaseEXT		MANGLE(BindBufferBaseEXT)
#define glBindBufferBase		MANGLE(BindBufferBase)
#define glBindBufferBaseNV		MANGLE(BindBufferBaseNV)
#define glBindBuffer		MANGLE(BindBuffer)
#define glBindBufferOffsetEXT		MANGLE(BindBufferOffsetEXT)
#define glBindBufferOffsetNV		MANGLE(BindBufferOffsetNV)
#define glBindBufferRangeEXT		MANGLE(BindBufferRangeEXT)
#define glBindBufferRange		MANGLE(BindBufferRange)
#define glBindBufferRangeNV		MANGLE(BindBufferRangeNV)
#define glBindFragDataLocationEXT		MANGLE(BindFragDataLocationEXT)
#define glBindFragDataLocation		MANGLE(BindFragDataLocation)
#define glBindFragmentShaderATI		MANGLE(BindFragmentShaderATI)
#define glBindFramebufferEXT		MANGLE(BindFramebufferEXT)
#define glBindFramebuffer		MANGLE(BindFramebuffer)
#define glBindLightParameterEXT		MANGLE(BindLightParameterEXT)
#define glBindMaterialParameterEXT		MANGLE(BindMaterialParameterEXT)
#define glBindMultiTextureEXT		MANGLE(BindMultiTextureEXT)
#define glBindParameterEXT		MANGLE(BindParameterEXT)
#define glBindProgramARB		MANGLE(BindProgramARB)
#define glBindProgramNV		MANGLE(BindProgramNV)
#define glBindRenderbufferEXT		MANGLE(BindRenderbufferEXT)
#define glBindRenderbuffer		MANGLE(BindRenderbuffer)
#define glBindTexGenParameterEXT		MANGLE(BindTexGenParameterEXT)
#define glBindTextureEXT		MANGLE(BindTextureEXT)
#define glBindTexture		MANGLE(BindTexture)
#define glBindTextureUnitParameterEXT		MANGLE(BindTextureUnitParameterEXT)
#define glBindTransformFeedbackNV		MANGLE(BindTransformFeedbackNV)
#define glBindVertexArrayAPPLE		MANGLE(BindVertexArrayAPPLE)
#define glBindVertexArray		MANGLE(BindVertexArray)
#define glBindVertexShaderEXT		MANGLE(BindVertexShaderEXT)
#define glBindVideoCaptureStreamBufferNV		MANGLE(BindVideoCaptureStreamBufferNV)
#define glBindVideoCaptureStreamTextureNV		MANGLE(BindVideoCaptureStreamTextureNV)
#define glBinormal3bEXT		MANGLE(Binormal3bEXT)
#define glBinormal3bvEXT		MANGLE(Binormal3bvEXT)
#define glBinormal3dEXT		MANGLE(Binormal3dEXT)
#define glBinormal3dvEXT		MANGLE(Binormal3dvEXT)
#define glBinormal3fEXT		MANGLE(Binormal3fEXT)
#define glBinormal3fvEXT		MANGLE(Binormal3fvEXT)
#define glBinormal3iEXT		MANGLE(Binormal3iEXT)
#define glBinormal3ivEXT		MANGLE(Binormal3ivEXT)
#define glBinormal3sEXT		MANGLE(Binormal3sEXT)
#define glBinormal3svEXT		MANGLE(Binormal3svEXT)
#define glBinormalPointerEXT		MANGLE(BinormalPointerEXT)
#define glBitmap		MANGLE(Bitmap)
#define glBlendColorEXT		MANGLE(BlendColorEXT)
#define glBlendColor		MANGLE(BlendColor)
#define glBlendEquationEXT		MANGLE(BlendEquationEXT)
#define glBlendEquationi		MANGLE(BlendEquationi)
#define glBlendEquationIndexedAMD		MANGLE(BlendEquationIndexedAMD)
#define glBlendEquation		MANGLE(BlendEquation)
#define glBlendEquationSeparateATI		MANGLE(BlendEquationSeparateATI)
#define glBlendEquationSeparateEXT		MANGLE(BlendEquationSeparateEXT)
#define glBlendEquationSeparatei		MANGLE(BlendEquationSeparatei)
#define glBlendEquationSeparateIndexedAMD		MANGLE(BlendEquationSeparateIndexedAMD)
#define glBlendEquationSeparate		MANGLE(BlendEquationSeparate)
#define glBlendFunci		MANGLE(BlendFunci)
#define glBlendFuncIndexedAMD		MANGLE(BlendFuncIndexedAMD)
#define glBlendFunc		MANGLE(BlendFunc)
#define glBlendFuncSeparateEXT		MANGLE(BlendFuncSeparateEXT)
#define glBlendFuncSeparatei		MANGLE(BlendFuncSeparatei)
#define glBlendFuncSeparateIndexedAMD		MANGLE(BlendFuncSeparateIndexedAMD)
#define glBlendFuncSeparateINGR		MANGLE(BlendFuncSeparateINGR)
#define glBlendFuncSeparate		MANGLE(BlendFuncSeparate)
#define glBlitFramebufferEXT		MANGLE(BlitFramebufferEXT)
#define glBlitFramebuffer		MANGLE(BlitFramebuffer)
#define glBufferAddressRangeNV		MANGLE(BufferAddressRangeNV)
#define glBufferDataARB		MANGLE(BufferDataARB)
#define glBufferData		MANGLE(BufferData)
#define glBufferParameteriAPPLE		MANGLE(BufferParameteriAPPLE)
#define glBufferSubDataARB		MANGLE(BufferSubDataARB)
#define glBufferSubData		MANGLE(BufferSubData)
#define glCallList		MANGLE(CallList)
#define glCallLists		MANGLE(CallLists)
#define glCheckFramebufferStatusEXT		MANGLE(CheckFramebufferStatusEXT)
#define glCheckFramebufferStatus		MANGLE(CheckFramebufferStatus)
#define glCheckNamedFramebufferStatusEXT		MANGLE(CheckNamedFramebufferStatusEXT)
#define glClampColorARB		MANGLE(ClampColorARB)
#define glClampColor		MANGLE(ClampColor)
#define glClearAccum		MANGLE(ClearAccum)
#define glClearBufferfi		MANGLE(ClearBufferfi)
#define glClearBufferfv		MANGLE(ClearBufferfv)
#define glClearBufferiv		MANGLE(ClearBufferiv)
#define glClearBufferuiv		MANGLE(ClearBufferuiv)
#define glClearColorIiEXT		MANGLE(ClearColorIiEXT)
#define glClearColorIuiEXT		MANGLE(ClearColorIuiEXT)
#define glClearColor		MANGLE(ClearColor)
#define glClearDebugLogMESA		MANGLE(ClearDebugLogMESA)
#define glClearDepthdNV		MANGLE(ClearDepthdNV)
#define glClearDepth		MANGLE(ClearDepth)
#define glClearIndex		MANGLE(ClearIndex)
#define glClear		MANGLE(Clear)
#define glClearStencil		MANGLE(ClearStencil)
#define glClientActiveTextureARB		MANGLE(ClientActiveTextureARB)
#define glClientActiveTexture		MANGLE(ClientActiveTexture)
#define glClientActiveVertexStreamATI		MANGLE(ClientActiveVertexStreamATI)
#define glClientAttribDefaultEXT		MANGLE(ClientAttribDefaultEXT)
#define glClientWaitSync		MANGLE(ClientWaitSync)
#define glClipPlane		MANGLE(ClipPlane)
#define glColor3b		MANGLE(Color3b)
#define glColor3bv		MANGLE(Color3bv)
#define glColor3d		MANGLE(Color3d)
#define glColor3dv		MANGLE(Color3dv)
#define glColor3f		MANGLE(Color3f)
#define glColor3fVertex3fSUN		MANGLE(Color3fVertex3fSUN)
#define glColor3fVertex3fvSUN		MANGLE(Color3fVertex3fvSUN)
#define glColor3fv		MANGLE(Color3fv)
#define glColor3hNV		MANGLE(Color3hNV)
#define glColor3hvNV		MANGLE(Color3hvNV)
#define glColor3i		MANGLE(Color3i)
#define glColor3iv		MANGLE(Color3iv)
#define glColor3s		MANGLE(Color3s)
#define glColor3sv		MANGLE(Color3sv)
#define glColor3ub		MANGLE(Color3ub)
#define glColor3ubv		MANGLE(Color3ubv)
#define glColor3ui		MANGLE(Color3ui)
#define glColor3uiv		MANGLE(Color3uiv)
#define glColor3us		MANGLE(Color3us)
#define glColor3usv		MANGLE(Color3usv)
#define glColor4b		MANGLE(Color4b)
#define glColor4bv		MANGLE(Color4bv)
#define glColor4d		MANGLE(Color4d)
#define glColor4dv		MANGLE(Color4dv)
#define glColor4f		MANGLE(Color4f)
#define glColor4fNormal3fVertex3fSUN		MANGLE(Color4fNormal3fVertex3fSUN)
#define glColor4fNormal3fVertex3fvSUN		MANGLE(Color4fNormal3fVertex3fvSUN)
#define glColor4fv		MANGLE(Color4fv)
#define glColor4hNV		MANGLE(Color4hNV)
#define glColor4hvNV		MANGLE(Color4hvNV)
#define glColor4i		MANGLE(Color4i)
#define glColor4iv		MANGLE(Color4iv)
#define glColor4s		MANGLE(Color4s)
#define glColor4sv		MANGLE(Color4sv)
#define glColor4ub		MANGLE(Color4ub)
#define glColor4ubVertex2fSUN		MANGLE(Color4ubVertex2fSUN)
#define glColor4ubVertex2fvSUN		MANGLE(Color4ubVertex2fvSUN)
#define glColor4ubVertex3fSUN		MANGLE(Color4ubVertex3fSUN)
#define glColor4ubVertex3fvSUN		MANGLE(Color4ubVertex3fvSUN)
#define glColor4ubv		MANGLE(Color4ubv)
#define glColor4ui		MANGLE(Color4ui)
#define glColor4uiv		MANGLE(Color4uiv)
#define glColor4us		MANGLE(Color4us)
#define glColor4usv		MANGLE(Color4usv)
#define glColorFormatNV		MANGLE(ColorFormatNV)
#define glColorFragmentOp1ATI		MANGLE(ColorFragmentOp1ATI)
#define glColorFragmentOp2ATI		MANGLE(ColorFragmentOp2ATI)
#define glColorFragmentOp3ATI		MANGLE(ColorFragmentOp3ATI)
#define glColorMaski		MANGLE(ColorMaski)
#define glColorMaskIndexedEXT		MANGLE(ColorMaskIndexedEXT)
#define glColorMask		MANGLE(ColorMask)
#define glColorMaterial		MANGLE(ColorMaterial)
#define glColorPointerEXT		MANGLE(ColorPointerEXT)
#define glColorPointerListIBM		MANGLE(ColorPointerListIBM)
#define glColorPointer		MANGLE(ColorPointer)
#define glColorPointervINTEL		MANGLE(ColorPointervINTEL)
#define glColorSubTableEXT		MANGLE(ColorSubTableEXT)
#define glColorSubTable		MANGLE(ColorSubTable)
#define glColorTableEXT		MANGLE(ColorTableEXT)
#define glColorTable		MANGLE(ColorTable)
#define glColorTableParameterfv		MANGLE(ColorTableParameterfv)
#define glColorTableParameterfvSGI		MANGLE(ColorTableParameterfvSGI)
#define glColorTableParameteriv		MANGLE(ColorTableParameteriv)
#define glColorTableParameterivSGI		MANGLE(ColorTableParameterivSGI)
#define glColorTableSGI		MANGLE(ColorTableSGI)
#define glCombinerInputNV		MANGLE(CombinerInputNV)
#define glCombinerOutputNV		MANGLE(CombinerOutputNV)
#define glCombinerParameterfNV		MANGLE(CombinerParameterfNV)
#define glCombinerParameterfvNV		MANGLE(CombinerParameterfvNV)
#define glCombinerParameteriNV		MANGLE(CombinerParameteriNV)
#define glCombinerParameterivNV		MANGLE(CombinerParameterivNV)
#define glCombinerStageParameterfvNV		MANGLE(CombinerStageParameterfvNV)
#define glCompileShaderARB		MANGLE(CompileShaderARB)
#define glCompileShader		MANGLE(CompileShader)
#define glCompressedMultiTexImage1DEXT		MANGLE(CompressedMultiTexImage1DEXT)
#define glCompressedMultiTexImage2DEXT		MANGLE(CompressedMultiTexImage2DEXT)
#define glCompressedMultiTexImage3DEXT		MANGLE(CompressedMultiTexImage3DEXT)
#define glCompressedMultiTexSubImage1DEXT		MANGLE(CompressedMultiTexSubImage1DEXT)
#define glCompressedMultiTexSubImage2DEXT		MANGLE(CompressedMultiTexSubImage2DEXT)
#define glCompressedMultiTexSubImage3DEXT		MANGLE(CompressedMultiTexSubImage3DEXT)
#define glCompressedTexImage1DARB		MANGLE(CompressedTexImage1DARB)
#define glCompressedTexImage1D		MANGLE(CompressedTexImage1D)
#define glCompressedTexImage2DARB		MANGLE(CompressedTexImage2DARB)
#define glCompressedTexImage2D		MANGLE(CompressedTexImage2D)
#define glCompressedTexImage3DARB		MANGLE(CompressedTexImage3DARB)
#define glCompressedTexImage3D		MANGLE(CompressedTexImage3D)
#define glCompressedTexSubImage1DARB		MANGLE(CompressedTexSubImage1DARB)
#define glCompressedTexSubImage1D		MANGLE(CompressedTexSubImage1D)
#define glCompressedTexSubImage2DARB		MANGLE(CompressedTexSubImage2DARB)
#define glCompressedTexSubImage2D		MANGLE(CompressedTexSubImage2D)
#define glCompressedTexSubImage3DARB		MANGLE(CompressedTexSubImage3DARB)
#define glCompressedTexSubImage3D		MANGLE(CompressedTexSubImage3D)
#define glCompressedTextureImage1DEXT		MANGLE(CompressedTextureImage1DEXT)
#define glCompressedTextureImage2DEXT		MANGLE(CompressedTextureImage2DEXT)
#define glCompressedTextureImage3DEXT		MANGLE(CompressedTextureImage3DEXT)
#define glCompressedTextureSubImage1DEXT		MANGLE(CompressedTextureSubImage1DEXT)
#define glCompressedTextureSubImage2DEXT		MANGLE(CompressedTextureSubImage2DEXT)
#define glCompressedTextureSubImage3DEXT		MANGLE(CompressedTextureSubImage3DEXT)
#define glConvolutionFilter1DEXT		MANGLE(ConvolutionFilter1DEXT)
#define glConvolutionFilter1D		MANGLE(ConvolutionFilter1D)
#define glConvolutionFilter2DEXT		MANGLE(ConvolutionFilter2DEXT)
#define glConvolutionFilter2D		MANGLE(ConvolutionFilter2D)
#define glConvolutionParameterfEXT		MANGLE(ConvolutionParameterfEXT)
#define glConvolutionParameterf		MANGLE(ConvolutionParameterf)
#define glConvolutionParameterfvEXT		MANGLE(ConvolutionParameterfvEXT)
#define glConvolutionParameterfv		MANGLE(ConvolutionParameterfv)
#define glConvolutionParameteriEXT		MANGLE(ConvolutionParameteriEXT)
#define glConvolutionParameteri		MANGLE(ConvolutionParameteri)
#define glConvolutionParameterivEXT		MANGLE(ConvolutionParameterivEXT)
#define glConvolutionParameteriv		MANGLE(ConvolutionParameteriv)
#define glCopyBufferSubData		MANGLE(CopyBufferSubData)
#define glCopyColorSubTableEXT		MANGLE(CopyColorSubTableEXT)
#define glCopyColorSubTable		MANGLE(CopyColorSubTable)
#define glCopyColorTable		MANGLE(CopyColorTable)
#define glCopyColorTableSGI		MANGLE(CopyColorTableSGI)
#define glCopyConvolutionFilter1DEXT		MANGLE(CopyConvolutionFilter1DEXT)
#define glCopyConvolutionFilter1D		MANGLE(CopyConvolutionFilter1D)
#define glCopyConvolutionFilter2DEXT		MANGLE(CopyConvolutionFilter2DEXT)
#define glCopyConvolutionFilter2D		MANGLE(CopyConvolutionFilter2D)
#define glCopyImageSubDataNV		MANGLE(CopyImageSubDataNV)
#define glCopyMultiTexImage1DEXT		MANGLE(CopyMultiTexImage1DEXT)
#define glCopyMultiTexImage2DEXT		MANGLE(CopyMultiTexImage2DEXT)
#define glCopyMultiTexSubImage1DEXT		MANGLE(CopyMultiTexSubImage1DEXT)
#define glCopyMultiTexSubImage2DEXT		MANGLE(CopyMultiTexSubImage2DEXT)
#define glCopyMultiTexSubImage3DEXT		MANGLE(CopyMultiTexSubImage3DEXT)
#define glCopyPixels		MANGLE(CopyPixels)
#define glCopyTexImage1DEXT		MANGLE(CopyTexImage1DEXT)
#define glCopyTexImage1D		MANGLE(CopyTexImage1D)
#define glCopyTexImage2DEXT		MANGLE(CopyTexImage2DEXT)
#define glCopyTexImage2D		MANGLE(CopyTexImage2D)
#define glCopyTexSubImage1DEXT		MANGLE(CopyTexSubImage1DEXT)
#define glCopyTexSubImage1D		MANGLE(CopyTexSubImage1D)
#define glCopyTexSubImage2DEXT		MANGLE(CopyTexSubImage2DEXT)
#define glCopyTexSubImage2D		MANGLE(CopyTexSubImage2D)
#define glCopyTexSubImage3DEXT		MANGLE(CopyTexSubImage3DEXT)
#define glCopyTexSubImage3D		MANGLE(CopyTexSubImage3D)
#define glCopyTextureImage1DEXT		MANGLE(CopyTextureImage1DEXT)
#define glCopyTextureImage2DEXT		MANGLE(CopyTextureImage2DEXT)
#define glCopyTextureSubImage1DEXT		MANGLE(CopyTextureSubImage1DEXT)
#define glCopyTextureSubImage2DEXT		MANGLE(CopyTextureSubImage2DEXT)
#define glCopyTextureSubImage3DEXT		MANGLE(CopyTextureSubImage3DEXT)
#define glCreateDebugObjectMESA		MANGLE(CreateDebugObjectMESA)
#define glCreateProgram		MANGLE(CreateProgram)
#define glCreateProgramObjectARB		MANGLE(CreateProgramObjectARB)
#define glCreateShader		MANGLE(CreateShader)
#define glCreateShaderObjectARB		MANGLE(CreateShaderObjectARB)
#define glCreateShaderProgramEXT		MANGLE(CreateShaderProgramEXT)
#define glCullFace		MANGLE(CullFace)
#define glCullParameterdvEXT		MANGLE(CullParameterdvEXT)
#define glCullParameterfvEXT		MANGLE(CullParameterfvEXT)
#define glCurrentPaletteMatrixARB		MANGLE(CurrentPaletteMatrixARB)
#define glDeformationMap3dSGIX		MANGLE(DeformationMap3dSGIX)
#define glDeformationMap3fSGIX		MANGLE(DeformationMap3fSGIX)
#define glDeformSGIX		MANGLE(DeformSGIX)
#define glDeleteAsyncMarkersSGIX		MANGLE(DeleteAsyncMarkersSGIX)
#define glDeleteBuffersARB		MANGLE(DeleteBuffersARB)
#define glDeleteBuffers		MANGLE(DeleteBuffers)
#define glDeleteFencesAPPLE		MANGLE(DeleteFencesAPPLE)
#define glDeleteFencesNV		MANGLE(DeleteFencesNV)
#define glDeleteFragmentShaderATI		MANGLE(DeleteFragmentShaderATI)
#define glDeleteFramebuffersEXT		MANGLE(DeleteFramebuffersEXT)
#define glDeleteFramebuffers		MANGLE(DeleteFramebuffers)
#define glDeleteLists		MANGLE(DeleteLists)
#define glDeleteObjectARB		MANGLE(DeleteObjectARB)
#define glDeleteOcclusionQueriesNV		MANGLE(DeleteOcclusionQueriesNV)
#define glDeletePerfMonitorsAMD		MANGLE(DeletePerfMonitorsAMD)
#define glDeleteProgram		MANGLE(DeleteProgram)
#define glDeleteProgramsARB		MANGLE(DeleteProgramsARB)
#define glDeleteProgramsNV		MANGLE(DeleteProgramsNV)
#define glDeleteQueriesARB		MANGLE(DeleteQueriesARB)
#define glDeleteQueries		MANGLE(DeleteQueries)
#define glDeleteRenderbuffersEXT		MANGLE(DeleteRenderbuffersEXT)
#define glDeleteRenderbuffers		MANGLE(DeleteRenderbuffers)
#define glDeleteShader		MANGLE(DeleteShader)
#define glDeleteSync		MANGLE(DeleteSync)
#define glDeleteTexturesEXT		MANGLE(DeleteTexturesEXT)
#define glDeleteTextures		MANGLE(DeleteTextures)
#define glDeleteTransformFeedbacksNV		MANGLE(DeleteTransformFeedbacksNV)
#define glDeleteVertexArraysAPPLE		MANGLE(DeleteVertexArraysAPPLE)
#define glDeleteVertexArrays		MANGLE(DeleteVertexArrays)
#define glDeleteVertexShaderEXT		MANGLE(DeleteVertexShaderEXT)
#define glDepthBoundsdNV		MANGLE(DepthBoundsdNV)
#define glDepthBoundsEXT		MANGLE(DepthBoundsEXT)
#define glDepthFunc		MANGLE(DepthFunc)
#define glDepthMask		MANGLE(DepthMask)
#define glDepthRangedNV		MANGLE(DepthRangedNV)
#define glDepthRange		MANGLE(DepthRange)
#define glDetachObjectARB		MANGLE(DetachObjectARB)
#define glDetachShader		MANGLE(DetachShader)
#define glDetailTexFuncSGIS		MANGLE(DetailTexFuncSGIS)
#define glDisableClientStateIndexedEXT		MANGLE(DisableClientStateIndexedEXT)
#define glDisableClientState		MANGLE(DisableClientState)
#define glDisablei		MANGLE(Disablei)
#define glDisableIndexedEXT		MANGLE(DisableIndexedEXT)
#define glDisable		MANGLE(Disable)
#define glDisableVariantClientStateEXT		MANGLE(DisableVariantClientStateEXT)
#define glDisableVertexAttribAPPLE		MANGLE(DisableVertexAttribAPPLE)
#define glDisableVertexAttribArrayARB		MANGLE(DisableVertexAttribArrayARB)
#define glDisableVertexAttribArray		MANGLE(DisableVertexAttribArray)
#define glDrawArraysEXT		MANGLE(DrawArraysEXT)
#define glDrawArraysInstancedARB		MANGLE(DrawArraysInstancedARB)
#define glDrawArraysInstancedEXT		MANGLE(DrawArraysInstancedEXT)
#define glDrawArraysInstanced		MANGLE(DrawArraysInstanced)
#define glDrawArrays		MANGLE(DrawArrays)
#define glDrawBuffer		MANGLE(DrawBuffer)
#define glDrawBuffersARB		MANGLE(DrawBuffersARB)
#define glDrawBuffersATI		MANGLE(DrawBuffersATI)
#define glDrawBuffers		MANGLE(DrawBuffers)
#define glDrawElementArrayAPPLE		MANGLE(DrawElementArrayAPPLE)
#define glDrawElementArrayATI		MANGLE(DrawElementArrayATI)
#define glDrawElementsBaseVertex		MANGLE(DrawElementsBaseVertex)
#define glDrawElementsInstancedARB		MANGLE(DrawElementsInstancedARB)
#define glDrawElementsInstancedBaseVertex		MANGLE(DrawElementsInstancedBaseVertex)
#define glDrawElementsInstancedEXT		MANGLE(DrawElementsInstancedEXT)
#define glDrawElementsInstanced		MANGLE(DrawElementsInstanced)
#define glDrawElements		MANGLE(DrawElements)
#define glDrawMeshArraysSUN		MANGLE(DrawMeshArraysSUN)
#define glDrawPixels		MANGLE(DrawPixels)
#define glDrawRangeElementArrayAPPLE		MANGLE(DrawRangeElementArrayAPPLE)
#define glDrawRangeElementArrayATI		MANGLE(DrawRangeElementArrayATI)
#define glDrawRangeElementsBaseVertex		MANGLE(DrawRangeElementsBaseVertex)
#define glDrawRangeElementsEXT		MANGLE(DrawRangeElementsEXT)
#define glDrawRangeElements		MANGLE(DrawRangeElements)
#define glDrawTransformFeedbackNV		MANGLE(DrawTransformFeedbackNV)
#define glEdgeFlagFormatNV		MANGLE(EdgeFlagFormatNV)
#define glEdgeFlag		MANGLE(EdgeFlag)
#define glEdgeFlagPointerEXT		MANGLE(EdgeFlagPointerEXT)
#define glEdgeFlagPointerListIBM		MANGLE(EdgeFlagPointerListIBM)
#define glEdgeFlagPointer		MANGLE(EdgeFlagPointer)
#define glEdgeFlagv		MANGLE(EdgeFlagv)
#define glEGLImageTargetRenderbufferStorageOES		MANGLE(EGLImageTargetRenderbufferStorageOES)
#define glEGLImageTargetTexture2DOES		MANGLE(EGLImageTargetTexture2DOES)
#define glElementPointerAPPLE		MANGLE(ElementPointerAPPLE)
#define glElementPointerATI		MANGLE(ElementPointerATI)
#define glEnableClientStateIndexedEXT		MANGLE(EnableClientStateIndexedEXT)
#define glEnableClientState		MANGLE(EnableClientState)
#define glEnablei		MANGLE(Enablei)
#define glEnableIndexedEXT		MANGLE(EnableIndexedEXT)
#define glEnable		MANGLE(Enable)
#define glEnableVariantClientStateEXT		MANGLE(EnableVariantClientStateEXT)
#define glEnableVertexAttribAPPLE		MANGLE(EnableVertexAttribAPPLE)
#define glEnableVertexAttribArrayARB		MANGLE(EnableVertexAttribArrayARB)
#define glEnableVertexAttribArray		MANGLE(EnableVertexAttribArray)
#define glEndConditionalRender		MANGLE(EndConditionalRender)
#define glEndConditionalRenderNV		MANGLE(EndConditionalRenderNV)
#define glEndFragmentShaderATI		MANGLE(EndFragmentShaderATI)
#define glEndList		MANGLE(EndList)
#define glEnd		MANGLE(End)
#define glEndOcclusionQueryNV		MANGLE(EndOcclusionQueryNV)
#define glEndPerfMonitorAMD		MANGLE(EndPerfMonitorAMD)
#define glEndQueryARB		MANGLE(EndQueryARB)
#define glEndQuery		MANGLE(EndQuery)
#define glEndTransformFeedbackEXT		MANGLE(EndTransformFeedbackEXT)
#define glEndTransformFeedback		MANGLE(EndTransformFeedback)
#define glEndTransformFeedbackNV		MANGLE(EndTransformFeedbackNV)
#define glEndVertexShaderEXT		MANGLE(EndVertexShaderEXT)
#define glEndVideoCaptureNV		MANGLE(EndVideoCaptureNV)
#define glEvalCoord1d		MANGLE(EvalCoord1d)
#define glEvalCoord1dv		MANGLE(EvalCoord1dv)
#define glEvalCoord1f		MANGLE(EvalCoord1f)
#define glEvalCoord1fv		MANGLE(EvalCoord1fv)
#define glEvalCoord2d		MANGLE(EvalCoord2d)
#define glEvalCoord2dv		MANGLE(EvalCoord2dv)
#define glEvalCoord2f		MANGLE(EvalCoord2f)
#define glEvalCoord2fv		MANGLE(EvalCoord2fv)
#define glEvalMapsNV		MANGLE(EvalMapsNV)
#define glEvalMesh1		MANGLE(EvalMesh1)
#define glEvalMesh2		MANGLE(EvalMesh2)
#define glEvalPoint1		MANGLE(EvalPoint1)
#define glEvalPoint2		MANGLE(EvalPoint2)
#define glExecuteProgramNV		MANGLE(ExecuteProgramNV)
#define glExtractComponentEXT		MANGLE(ExtractComponentEXT)
#define glFeedbackBuffer		MANGLE(FeedbackBuffer)
#define glFenceSync		MANGLE(FenceSync)
#define glFinalCombinerInputNV		MANGLE(FinalCombinerInputNV)
#define glFinishAsyncSGIX		MANGLE(FinishAsyncSGIX)
#define glFinishFenceAPPLE		MANGLE(FinishFenceAPPLE)
#define glFinishFenceNV		MANGLE(FinishFenceNV)
#define glFinish		MANGLE(Finish)
#define glFinishObjectAPPLE		MANGLE(FinishObjectAPPLE)
#define glFinishTextureSUNX		MANGLE(FinishTextureSUNX)
#define glFlush		MANGLE(Flush)
#define glFlushMappedBufferRangeAPPLE		MANGLE(FlushMappedBufferRangeAPPLE)
#define glFlushMappedBufferRange		MANGLE(FlushMappedBufferRange)
#define glFlushPixelDataRangeNV		MANGLE(FlushPixelDataRangeNV)
#define glFlushRasterSGIX		MANGLE(FlushRasterSGIX)
#define glFlushVertexArrayRangeAPPLE		MANGLE(FlushVertexArrayRangeAPPLE)
#define glFlushVertexArrayRangeNV		MANGLE(FlushVertexArrayRangeNV)
#define glFogCoorddEXT		MANGLE(FogCoorddEXT)
#define glFogCoordd		MANGLE(FogCoordd)
#define glFogCoorddvEXT		MANGLE(FogCoorddvEXT)
#define glFogCoorddv		MANGLE(FogCoorddv)
#define glFogCoordfEXT		MANGLE(FogCoordfEXT)
#define glFogCoordf		MANGLE(FogCoordf)
#define glFogCoordFormatNV		MANGLE(FogCoordFormatNV)
#define glFogCoordfvEXT		MANGLE(FogCoordfvEXT)
#define glFogCoordfv		MANGLE(FogCoordfv)
#define glFogCoordhNV		MANGLE(FogCoordhNV)
#define glFogCoordhvNV		MANGLE(FogCoordhvNV)
#define glFogCoordPointerEXT		MANGLE(FogCoordPointerEXT)
#define glFogCoordPointerListIBM		MANGLE(FogCoordPointerListIBM)
#define glFogCoordPointer		MANGLE(FogCoordPointer)
#define glFogf		MANGLE(Fogf)
#define glFogFuncSGIS		MANGLE(FogFuncSGIS)
#define glFogfv		MANGLE(Fogfv)
#define glFogi		MANGLE(Fogi)
#define glFogiv		MANGLE(Fogiv)
#define glFragmentColorMaterialSGIX		MANGLE(FragmentColorMaterialSGIX)
#define glFragmentLightfSGIX		MANGLE(FragmentLightfSGIX)
#define glFragmentLightfvSGIX		MANGLE(FragmentLightfvSGIX)
#define glFragmentLightiSGIX		MANGLE(FragmentLightiSGIX)
#define glFragmentLightivSGIX		MANGLE(FragmentLightivSGIX)
#define glFragmentLightModelfSGIX		MANGLE(FragmentLightModelfSGIX)
#define glFragmentLightModelfvSGIX		MANGLE(FragmentLightModelfvSGIX)
#define glFragmentLightModeliSGIX		MANGLE(FragmentLightModeliSGIX)
#define glFragmentLightModelivSGIX		MANGLE(FragmentLightModelivSGIX)
#define glFragmentMaterialfSGIX		MANGLE(FragmentMaterialfSGIX)
#define glFragmentMaterialfvSGIX		MANGLE(FragmentMaterialfvSGIX)
#define glFragmentMaterialiSGIX		MANGLE(FragmentMaterialiSGIX)
#define glFragmentMaterialivSGIX		MANGLE(FragmentMaterialivSGIX)
#define glFramebufferDrawBufferEXT		MANGLE(FramebufferDrawBufferEXT)
#define glFramebufferDrawBuffersEXT		MANGLE(FramebufferDrawBuffersEXT)
#define glFramebufferReadBufferEXT		MANGLE(FramebufferReadBufferEXT)
#define glFramebufferRenderbufferEXT		MANGLE(FramebufferRenderbufferEXT)
#define glFramebufferRenderbuffer		MANGLE(FramebufferRenderbuffer)
#define glFramebufferTexture1DEXT		MANGLE(FramebufferTexture1DEXT)
#define glFramebufferTexture1D		MANGLE(FramebufferTexture1D)
#define glFramebufferTexture2DEXT		MANGLE(FramebufferTexture2DEXT)
#define glFramebufferTexture2D		MANGLE(FramebufferTexture2D)
#define glFramebufferTexture3DEXT		MANGLE(FramebufferTexture3DEXT)
#define glFramebufferTexture3D		MANGLE(FramebufferTexture3D)
#define glFramebufferTextureARB		MANGLE(FramebufferTextureARB)
#define glFramebufferTextureEXT		MANGLE(FramebufferTextureEXT)
#define glFramebufferTextureFaceARB		MANGLE(FramebufferTextureFaceARB)
#define glFramebufferTextureFaceEXT		MANGLE(FramebufferTextureFaceEXT)
#define glFramebufferTextureFace		MANGLE(FramebufferTextureFace)
#define glFramebufferTextureLayerARB		MANGLE(FramebufferTextureLayerARB)
#define glFramebufferTextureLayerEXT		MANGLE(FramebufferTextureLayerEXT)
#define glFramebufferTextureLayer		MANGLE(FramebufferTextureLayer)
#define glFramebufferTexture		MANGLE(FramebufferTexture)
#define glFrameTerminatorGREMEDY		MANGLE(FrameTerminatorGREMEDY)
#define glFrameZoomSGIX		MANGLE(FrameZoomSGIX)
#define glFreeObjectBufferATI		MANGLE(FreeObjectBufferATI)
#define glFrontFace		MANGLE(FrontFace)
#define glFrustum		MANGLE(Frustum)
#define glGenAsyncMarkersSGIX		MANGLE(GenAsyncMarkersSGIX)
#define glGenBuffersARB		MANGLE(GenBuffersARB)
#define glGenBuffers		MANGLE(GenBuffers)
#define glGenerateMipmapEXT		MANGLE(GenerateMipmapEXT)
#define glGenerateMipmap		MANGLE(GenerateMipmap)
#define glGenerateMultiTexMipmapEXT		MANGLE(GenerateMultiTexMipmapEXT)
#define glGenerateTextureMipmapEXT		MANGLE(GenerateTextureMipmapEXT)
#define glGenFencesAPPLE		MANGLE(GenFencesAPPLE)
#define glGenFencesNV		MANGLE(GenFencesNV)
#define glGenFragmentShadersATI		MANGLE(GenFragmentShadersATI)
#define glGenFramebuffersEXT		MANGLE(GenFramebuffersEXT)
#define glGenFramebuffers		MANGLE(GenFramebuffers)
#define glGenLists		MANGLE(GenLists)
#define glGenOcclusionQueriesNV		MANGLE(GenOcclusionQueriesNV)
#define glGenPerfMonitorsAMD		MANGLE(GenPerfMonitorsAMD)
#define glGenProgramsARB		MANGLE(GenProgramsARB)
#define glGenProgramsNV		MANGLE(GenProgramsNV)
#define glGenQueriesARB		MANGLE(GenQueriesARB)
#define glGenQueries		MANGLE(GenQueries)
#define glGenRenderbuffersEXT		MANGLE(GenRenderbuffersEXT)
#define glGenRenderbuffers		MANGLE(GenRenderbuffers)
#define glGenSymbolsEXT		MANGLE(GenSymbolsEXT)
#define glGenTexturesEXT		MANGLE(GenTexturesEXT)
#define glGenTextures		MANGLE(GenTextures)
#define glGenTransformFeedbacksNV		MANGLE(GenTransformFeedbacksNV)
#define glGenVertexArraysAPPLE		MANGLE(GenVertexArraysAPPLE)
#define glGenVertexArrays		MANGLE(GenVertexArrays)
#define glGenVertexShadersEXT		MANGLE(GenVertexShadersEXT)
#define glGetActiveAttribARB		MANGLE(GetActiveAttribARB)
#define glGetActiveAttrib		MANGLE(GetActiveAttrib)
#define glGetActiveUniformARB		MANGLE(GetActiveUniformARB)
#define glGetActiveUniformBlockiv		MANGLE(GetActiveUniformBlockiv)
#define glGetActiveUniformBlockName		MANGLE(GetActiveUniformBlockName)
#define glGetActiveUniform		MANGLE(GetActiveUniform)
#define glGetActiveUniformName		MANGLE(GetActiveUniformName)
#define glGetActiveUniformsiv		MANGLE(GetActiveUniformsiv)
#define glGetActiveVaryingNV		MANGLE(GetActiveVaryingNV)
#define glGetArrayObjectfvATI		MANGLE(GetArrayObjectfvATI)
#define glGetArrayObjectivATI		MANGLE(GetArrayObjectivATI)
#define glGetAttachedObjectsARB		MANGLE(GetAttachedObjectsARB)
#define glGetAttachedShaders		MANGLE(GetAttachedShaders)
#define glGetAttribLocationARB		MANGLE(GetAttribLocationARB)
#define glGetAttribLocation		MANGLE(GetAttribLocation)
#define glGetBooleanIndexedvEXT		MANGLE(GetBooleanIndexedvEXT)
#define glGetBooleani_v		MANGLE(GetBooleani_v)
#define glGetBooleanv		MANGLE(GetBooleanv)
#define glGetBufferParameteri64v		MANGLE(GetBufferParameteri64v)
#define glGetBufferParameterivARB		MANGLE(GetBufferParameterivARB)
#define glGetBufferParameteriv		MANGLE(GetBufferParameteriv)
#define glGetBufferParameterui64vNV		MANGLE(GetBufferParameterui64vNV)
#define glGetBufferPointervARB		MANGLE(GetBufferPointervARB)
#define glGetBufferPointerv		MANGLE(GetBufferPointerv)
#define glGetBufferSubDataARB		MANGLE(GetBufferSubDataARB)
#define glGetBufferSubData		MANGLE(GetBufferSubData)
#define glGetClipPlane		MANGLE(GetClipPlane)
#define glGetColorTableEXT		MANGLE(GetColorTableEXT)
#define glGetColorTable		MANGLE(GetColorTable)
#define glGetColorTableParameterfvEXT		MANGLE(GetColorTableParameterfvEXT)
#define glGetColorTableParameterfv		MANGLE(GetColorTableParameterfv)
#define glGetColorTableParameterfvSGI		MANGLE(GetColorTableParameterfvSGI)
#define glGetColorTableParameterivEXT		MANGLE(GetColorTableParameterivEXT)
#define glGetColorTableParameteriv		MANGLE(GetColorTableParameteriv)
#define glGetColorTableParameterivSGI		MANGLE(GetColorTableParameterivSGI)
#define glGetColorTableSGI		MANGLE(GetColorTableSGI)
#define glGetCombinerInputParameterfvNV		MANGLE(GetCombinerInputParameterfvNV)
#define glGetCombinerInputParameterivNV		MANGLE(GetCombinerInputParameterivNV)
#define glGetCombinerOutputParameterfvNV		MANGLE(GetCombinerOutputParameterfvNV)
#define glGetCombinerOutputParameterivNV		MANGLE(GetCombinerOutputParameterivNV)
#define glGetCombinerStageParameterfvNV		MANGLE(GetCombinerStageParameterfvNV)
#define glGetCompressedMultiTexImageEXT		MANGLE(GetCompressedMultiTexImageEXT)
#define glGetCompressedTexImageARB		MANGLE(GetCompressedTexImageARB)
#define glGetCompressedTexImage		MANGLE(GetCompressedTexImage)
#define glGetCompressedTextureImageEXT		MANGLE(GetCompressedTextureImageEXT)
#define glGetConvolutionFilterEXT		MANGLE(GetConvolutionFilterEXT)
#define glGetConvolutionFilter		MANGLE(GetConvolutionFilter)
#define glGetConvolutionParameterfvEXT		MANGLE(GetConvolutionParameterfvEXT)
#define glGetConvolutionParameterfv		MANGLE(GetConvolutionParameterfv)
#define glGetConvolutionParameterivEXT		MANGLE(GetConvolutionParameterivEXT)
#define glGetConvolutionParameteriv		MANGLE(GetConvolutionParameteriv)
#define glGetDebugLogLengthMESA		MANGLE(GetDebugLogLengthMESA)
#define glGetDebugLogMESA		MANGLE(GetDebugLogMESA)
#define glGetDetailTexFuncSGIS		MANGLE(GetDetailTexFuncSGIS)
#define glGetDoubleIndexedvEXT		MANGLE(GetDoubleIndexedvEXT)
#define glGetDoublev		MANGLE(GetDoublev)
#define glGetError		MANGLE(GetError)
#define glGetFenceivNV		MANGLE(GetFenceivNV)
#define glGetFinalCombinerInputParameterfvNV		MANGLE(GetFinalCombinerInputParameterfvNV)
#define glGetFinalCombinerInputParameterivNV		MANGLE(GetFinalCombinerInputParameterivNV)
#define glGetFloatIndexedvEXT		MANGLE(GetFloatIndexedvEXT)
#define glGetFloatv		MANGLE(GetFloatv)
#define glGetFogFuncSGIS		MANGLE(GetFogFuncSGIS)
#define glGetFragDataLocationEXT		MANGLE(GetFragDataLocationEXT)
#define glGetFragDataLocation		MANGLE(GetFragDataLocation)
#define glGetFragmentLightfvSGIX		MANGLE(GetFragmentLightfvSGIX)
#define glGetFragmentLightivSGIX		MANGLE(GetFragmentLightivSGIX)
#define glGetFragmentMaterialfvSGIX		MANGLE(GetFragmentMaterialfvSGIX)
#define glGetFragmentMaterialivSGIX		MANGLE(GetFragmentMaterialivSGIX)
#define glGetFramebufferAttachmentParameterivEXT		MANGLE(GetFramebufferAttachmentParameterivEXT)
#define glGetFramebufferAttachmentParameteriv		MANGLE(GetFramebufferAttachmentParameteriv)
#define glGetFramebufferParameterivEXT		MANGLE(GetFramebufferParameterivEXT)
#define glGetHandleARB		MANGLE(GetHandleARB)
#define glGetHistogramEXT		MANGLE(GetHistogramEXT)
#define glGetHistogram		MANGLE(GetHistogram)
#define glGetHistogramParameterfvEXT		MANGLE(GetHistogramParameterfvEXT)
#define glGetHistogramParameterfv		MANGLE(GetHistogramParameterfv)
#define glGetHistogramParameterivEXT		MANGLE(GetHistogramParameterivEXT)
#define glGetHistogramParameteriv		MANGLE(GetHistogramParameteriv)
#define glGetImageTransformParameterfvHP		MANGLE(GetImageTransformParameterfvHP)
#define glGetImageTransformParameterivHP		MANGLE(GetImageTransformParameterivHP)
#define glGetInfoLogARB		MANGLE(GetInfoLogARB)
#define glGetInstrumentsSGIX		MANGLE(GetInstrumentsSGIX)
#define glGetInteger64i_v		MANGLE(GetInteger64i_v)
#define glGetInteger64v		MANGLE(GetInteger64v)
#define glGetIntegerIndexedvEXT		MANGLE(GetIntegerIndexedvEXT)
#define glGetIntegeri_v		MANGLE(GetIntegeri_v)
#define glGetIntegerui64i_vNV		MANGLE(GetIntegerui64i_vNV)
#define glGetIntegerui64vNV		MANGLE(GetIntegerui64vNV)
#define glGetIntegerv		MANGLE(GetIntegerv)
#define glGetInvariantBooleanvEXT		MANGLE(GetInvariantBooleanvEXT)
#define glGetInvariantFloatvEXT		MANGLE(GetInvariantFloatvEXT)
#define glGetInvariantIntegervEXT		MANGLE(GetInvariantIntegervEXT)
#define glGetLightfv		MANGLE(GetLightfv)
#define glGetLightiv		MANGLE(GetLightiv)
#define glGetListParameterfvSGIX		MANGLE(GetListParameterfvSGIX)
#define glGetListParameterivSGIX		MANGLE(GetListParameterivSGIX)
#define glGetLocalConstantBooleanvEXT		MANGLE(GetLocalConstantBooleanvEXT)
#define glGetLocalConstantFloatvEXT		MANGLE(GetLocalConstantFloatvEXT)
#define glGetLocalConstantIntegervEXT		MANGLE(GetLocalConstantIntegervEXT)
#define glGetMapAttribParameterfvNV		MANGLE(GetMapAttribParameterfvNV)
#define glGetMapAttribParameterivNV		MANGLE(GetMapAttribParameterivNV)
#define glGetMapControlPointsNV		MANGLE(GetMapControlPointsNV)
#define glGetMapdv		MANGLE(GetMapdv)
#define glGetMapfv		MANGLE(GetMapfv)
#define glGetMapiv		MANGLE(GetMapiv)
#define glGetMapParameterfvNV		MANGLE(GetMapParameterfvNV)
#define glGetMapParameterivNV		MANGLE(GetMapParameterivNV)
#define glGetMaterialfv		MANGLE(GetMaterialfv)
#define glGetMaterialiv		MANGLE(GetMaterialiv)
#define glGetMinmaxEXT		MANGLE(GetMinmaxEXT)
#define glGetMinmax		MANGLE(GetMinmax)
#define glGetMinmaxParameterfvEXT		MANGLE(GetMinmaxParameterfvEXT)
#define glGetMinmaxParameterfv		MANGLE(GetMinmaxParameterfv)
#define glGetMinmaxParameterivEXT		MANGLE(GetMinmaxParameterivEXT)
#define glGetMinmaxParameteriv		MANGLE(GetMinmaxParameteriv)
#define glGetMultisamplefv		MANGLE(GetMultisamplefv)
#define glGetMultisamplefvNV		MANGLE(GetMultisamplefvNV)
#define glGetMultiTexEnvfvEXT		MANGLE(GetMultiTexEnvfvEXT)
#define glGetMultiTexEnvivEXT		MANGLE(GetMultiTexEnvivEXT)
#define glGetMultiTexGendvEXT		MANGLE(GetMultiTexGendvEXT)
#define glGetMultiTexGenfvEXT		MANGLE(GetMultiTexGenfvEXT)
#define glGetMultiTexGenivEXT		MANGLE(GetMultiTexGenivEXT)
#define glGetMultiTexImageEXT		MANGLE(GetMultiTexImageEXT)
#define glGetMultiTexLevelParameterfvEXT		MANGLE(GetMultiTexLevelParameterfvEXT)
#define glGetMultiTexLevelParameterivEXT		MANGLE(GetMultiTexLevelParameterivEXT)
#define glGetMultiTexParameterfvEXT		MANGLE(GetMultiTexParameterfvEXT)
#define glGetMultiTexParameterIivEXT		MANGLE(GetMultiTexParameterIivEXT)
#define glGetMultiTexParameterIuivEXT		MANGLE(GetMultiTexParameterIuivEXT)
#define glGetMultiTexParameterivEXT		MANGLE(GetMultiTexParameterivEXT)
#define glGetNamedBufferParameterivEXT		MANGLE(GetNamedBufferParameterivEXT)
#define glGetNamedBufferParameterui64vNV		MANGLE(GetNamedBufferParameterui64vNV)
#define glGetNamedBufferPointervEXT		MANGLE(GetNamedBufferPointervEXT)
#define glGetNamedBufferSubDataEXT		MANGLE(GetNamedBufferSubDataEXT)
#define glGetNamedFramebufferAttachmentParameterivEXT		MANGLE(GetNamedFramebufferAttachmentParameterivEXT)
#define glGetNamedProgramivEXT		MANGLE(GetNamedProgramivEXT)
#define glGetNamedProgramLocalParameterdvEXT		MANGLE(GetNamedProgramLocalParameterdvEXT)
#define glGetNamedProgramLocalParameterfvEXT		MANGLE(GetNamedProgramLocalParameterfvEXT)
#define glGetNamedProgramLocalParameterIivEXT		MANGLE(GetNamedProgramLocalParameterIivEXT)
#define glGetNamedProgramLocalParameterIuivEXT		MANGLE(GetNamedProgramLocalParameterIuivEXT)
#define glGetNamedProgramStringEXT		MANGLE(GetNamedProgramStringEXT)
#define glGetNamedRenderbufferParameterivEXT		MANGLE(GetNamedRenderbufferParameterivEXT)
#define glGetObjectBufferfvATI		MANGLE(GetObjectBufferfvATI)
#define glGetObjectBufferivATI		MANGLE(GetObjectBufferivATI)
#define glGetObjectParameterfvARB		MANGLE(GetObjectParameterfvARB)
#define glGetObjectParameterivAPPLE		MANGLE(GetObjectParameterivAPPLE)
#define glGetObjectParameterivARB		MANGLE(GetObjectParameterivARB)
#define glGetOcclusionQueryivNV		MANGLE(GetOcclusionQueryivNV)
#define glGetOcclusionQueryuivNV		MANGLE(GetOcclusionQueryuivNV)
#define glGetPerfMonitorCounterDataAMD		MANGLE(GetPerfMonitorCounterDataAMD)
#define glGetPerfMonitorCounterInfoAMD		MANGLE(GetPerfMonitorCounterInfoAMD)
#define glGetPerfMonitorCountersAMD		MANGLE(GetPerfMonitorCountersAMD)
#define glGetPerfMonitorCounterStringAMD		MANGLE(GetPerfMonitorCounterStringAMD)
#define glGetPerfMonitorGroupsAMD		MANGLE(GetPerfMonitorGroupsAMD)
#define glGetPerfMonitorGroupStringAMD		MANGLE(GetPerfMonitorGroupStringAMD)
#define glGetPixelMapfv		MANGLE(GetPixelMapfv)
#define glGetPixelMapuiv		MANGLE(GetPixelMapuiv)
#define glGetPixelMapusv		MANGLE(GetPixelMapusv)
#define glGetPixelTexGenParameterfvSGIS		MANGLE(GetPixelTexGenParameterfvSGIS)
#define glGetPixelTexGenParameterivSGIS		MANGLE(GetPixelTexGenParameterivSGIS)
#define glGetPointerIndexedvEXT		MANGLE(GetPointerIndexedvEXT)
#define glGetPointervEXT		MANGLE(GetPointervEXT)
#define glGetPointerv		MANGLE(GetPointerv)
#define glGetPolygonStipple		MANGLE(GetPolygonStipple)
#define glGetProgramEnvParameterdvARB		MANGLE(GetProgramEnvParameterdvARB)
#define glGetProgramEnvParameterfvARB		MANGLE(GetProgramEnvParameterfvARB)
#define glGetProgramEnvParameterIivNV		MANGLE(GetProgramEnvParameterIivNV)
#define glGetProgramEnvParameterIuivNV		MANGLE(GetProgramEnvParameterIuivNV)
#define glGetProgramInfoLog		MANGLE(GetProgramInfoLog)
#define glGetProgramivARB		MANGLE(GetProgramivARB)
#define glGetProgramiv		MANGLE(GetProgramiv)
#define glGetProgramivNV		MANGLE(GetProgramivNV)
#define glGetProgramLocalParameterdvARB		MANGLE(GetProgramLocalParameterdvARB)
#define glGetProgramLocalParameterfvARB		MANGLE(GetProgramLocalParameterfvARB)
#define glGetProgramLocalParameterIivNV		MANGLE(GetProgramLocalParameterIivNV)
#define glGetProgramLocalParameterIuivNV		MANGLE(GetProgramLocalParameterIuivNV)
#define glGetProgramNamedParameterdvNV		MANGLE(GetProgramNamedParameterdvNV)
#define glGetProgramNamedParameterfvNV		MANGLE(GetProgramNamedParameterfvNV)
#define glGetProgramParameterdvNV		MANGLE(GetProgramParameterdvNV)
#define glGetProgramParameterfvNV		MANGLE(GetProgramParameterfvNV)
#define glGetProgramRegisterfvMESA		MANGLE(GetProgramRegisterfvMESA)
#define glGetProgramStringARB		MANGLE(GetProgramStringARB)
#define glGetProgramStringNV		MANGLE(GetProgramStringNV)
#define glGetQueryivARB		MANGLE(GetQueryivARB)
#define glGetQueryiv		MANGLE(GetQueryiv)
#define glGetQueryObjecti64vEXT		MANGLE(GetQueryObjecti64vEXT)
#define glGetQueryObjectivARB		MANGLE(GetQueryObjectivARB)
#define glGetQueryObjectiv		MANGLE(GetQueryObjectiv)
#define glGetQueryObjectui64vEXT		MANGLE(GetQueryObjectui64vEXT)
#define glGetQueryObjectuivARB		MANGLE(GetQueryObjectuivARB)
#define glGetQueryObjectuiv		MANGLE(GetQueryObjectuiv)
#define glGetRenderbufferParameterivEXT		MANGLE(GetRenderbufferParameterivEXT)
#define glGetRenderbufferParameteriv		MANGLE(GetRenderbufferParameteriv)
#define glGetSeparableFilterEXT		MANGLE(GetSeparableFilterEXT)
#define glGetSeparableFilter		MANGLE(GetSeparableFilter)
#define glGetShaderInfoLog		MANGLE(GetShaderInfoLog)
#define glGetShaderiv		MANGLE(GetShaderiv)
#define glGetShaderSourceARB		MANGLE(GetShaderSourceARB)
#define glGetShaderSource		MANGLE(GetShaderSource)
#define glGetSharpenTexFuncSGIS		MANGLE(GetSharpenTexFuncSGIS)
#define glGetStringi		MANGLE(GetStringi)
#define glGetString		MANGLE(GetString)
#define glGetSynciv		MANGLE(GetSynciv)
#define glGetTexBumpParameterfvATI		MANGLE(GetTexBumpParameterfvATI)
#define glGetTexBumpParameterivATI		MANGLE(GetTexBumpParameterivATI)
#define glGetTexEnvfv		MANGLE(GetTexEnvfv)
#define glGetTexEnviv		MANGLE(GetTexEnviv)
#define glGetTexFilterFuncSGIS		MANGLE(GetTexFilterFuncSGIS)
#define glGetTexGendv		MANGLE(GetTexGendv)
#define glGetTexGenfv		MANGLE(GetTexGenfv)
#define glGetTexGeniv		MANGLE(GetTexGeniv)
#define glGetTexImage		MANGLE(GetTexImage)
#define glGetTexLevelParameterfv		MANGLE(GetTexLevelParameterfv)
#define glGetTexLevelParameteriv		MANGLE(GetTexLevelParameteriv)
#define glGetTexParameterfv		MANGLE(GetTexParameterfv)
#define glGetTexParameterIivEXT		MANGLE(GetTexParameterIivEXT)
#define glGetTexParameterIiv		MANGLE(GetTexParameterIiv)
#define glGetTexParameterIuivEXT		MANGLE(GetTexParameterIuivEXT)
#define glGetTexParameterIuiv		MANGLE(GetTexParameterIuiv)
#define glGetTexParameteriv		MANGLE(GetTexParameteriv)
#define glGetTexParameterPointervAPPLE		MANGLE(GetTexParameterPointervAPPLE)
#define glGetTextureImageEXT		MANGLE(GetTextureImageEXT)
#define glGetTextureLevelParameterfvEXT		MANGLE(GetTextureLevelParameterfvEXT)
#define glGetTextureLevelParameterivEXT		MANGLE(GetTextureLevelParameterivEXT)
#define glGetTextureParameterfvEXT		MANGLE(GetTextureParameterfvEXT)
#define glGetTextureParameterIivEXT		MANGLE(GetTextureParameterIivEXT)
#define glGetTextureParameterIuivEXT		MANGLE(GetTextureParameterIuivEXT)
#define glGetTextureParameterivEXT		MANGLE(GetTextureParameterivEXT)
#define glGetTrackMatrixivNV		MANGLE(GetTrackMatrixivNV)
#define glGetTransformFeedbackVaryingEXT		MANGLE(GetTransformFeedbackVaryingEXT)
#define glGetTransformFeedbackVarying		MANGLE(GetTransformFeedbackVarying)
#define glGetTransformFeedbackVaryingNV		MANGLE(GetTransformFeedbackVaryingNV)
#define glGetUniformBlockIndex		MANGLE(GetUniformBlockIndex)
#define glGetUniformBufferSizeEXT		MANGLE(GetUniformBufferSizeEXT)
#define glGetUniformfvARB		MANGLE(GetUniformfvARB)
#define glGetUniformfv		MANGLE(GetUniformfv)
#define glGetUniformIndices		MANGLE(GetUniformIndices)
#define glGetUniformivARB		MANGLE(GetUniformivARB)
#define glGetUniformiv		MANGLE(GetUniformiv)
#define glGetUniformLocationARB		MANGLE(GetUniformLocationARB)
#define glGetUniformLocation		MANGLE(GetUniformLocation)
#define glGetUniformOffsetEXT		MANGLE(GetUniformOffsetEXT)
#define glGetUniformui64vNV		MANGLE(GetUniformui64vNV)
#define glGetUniformuivEXT		MANGLE(GetUniformuivEXT)
#define glGetUniformuiv		MANGLE(GetUniformuiv)
#define glGetVariantArrayObjectfvATI		MANGLE(GetVariantArrayObjectfvATI)
#define glGetVariantArrayObjectivATI		MANGLE(GetVariantArrayObjectivATI)
#define glGetVariantBooleanvEXT		MANGLE(GetVariantBooleanvEXT)
#define glGetVariantFloatvEXT		MANGLE(GetVariantFloatvEXT)
#define glGetVariantIntegervEXT		MANGLE(GetVariantIntegervEXT)
#define glGetVariantPointervEXT		MANGLE(GetVariantPointervEXT)
#define glGetVaryingLocationNV		MANGLE(GetVaryingLocationNV)
#define glGetVertexAttribArrayObjectfvATI		MANGLE(GetVertexAttribArrayObjectfvATI)
#define glGetVertexAttribArrayObjectivATI		MANGLE(GetVertexAttribArrayObjectivATI)
#define glGetVertexAttribdvARB		MANGLE(GetVertexAttribdvARB)
#define glGetVertexAttribdv		MANGLE(GetVertexAttribdv)
#define glGetVertexAttribdvNV		MANGLE(GetVertexAttribdvNV)
#define glGetVertexAttribfvARB		MANGLE(GetVertexAttribfvARB)
#define glGetVertexAttribfv		MANGLE(GetVertexAttribfv)
#define glGetVertexAttribfvNV		MANGLE(GetVertexAttribfvNV)
#define glGetVertexAttribIivEXT		MANGLE(GetVertexAttribIivEXT)
#define glGetVertexAttribIiv		MANGLE(GetVertexAttribIiv)
#define glGetVertexAttribIuivEXT		MANGLE(GetVertexAttribIuivEXT)
#define glGetVertexAttribIuiv		MANGLE(GetVertexAttribIuiv)
#define glGetVertexAttribivARB		MANGLE(GetVertexAttribivARB)
#define glGetVertexAttribiv		MANGLE(GetVertexAttribiv)
#define glGetVertexAttribivNV		MANGLE(GetVertexAttribivNV)
#define glGetVertexAttribPointervARB		MANGLE(GetVertexAttribPointervARB)
#define glGetVertexAttribPointerv		MANGLE(GetVertexAttribPointerv)
#define glGetVertexAttribPointervNV		MANGLE(GetVertexAttribPointervNV)
#define glGetVideoCaptureivNV		MANGLE(GetVideoCaptureivNV)
#define glGetVideoCaptureStreamdvNV		MANGLE(GetVideoCaptureStreamdvNV)
#define glGetVideoCaptureStreamfvNV		MANGLE(GetVideoCaptureStreamfvNV)
#define glGetVideoCaptureStreamivNV		MANGLE(GetVideoCaptureStreamivNV)
#define glGetVideoi64vNV		MANGLE(GetVideoi64vNV)
#define glGetVideoivNV		MANGLE(GetVideoivNV)
#define glGetVideoui64vNV		MANGLE(GetVideoui64vNV)
#define glGetVideouivNV		MANGLE(GetVideouivNV)
#define glGlobalAlphaFactorbSUN		MANGLE(GlobalAlphaFactorbSUN)
#define glGlobalAlphaFactordSUN		MANGLE(GlobalAlphaFactordSUN)
#define glGlobalAlphaFactorfSUN		MANGLE(GlobalAlphaFactorfSUN)
#define glGlobalAlphaFactoriSUN		MANGLE(GlobalAlphaFactoriSUN)
#define glGlobalAlphaFactorsSUN		MANGLE(GlobalAlphaFactorsSUN)
#define glGlobalAlphaFactorubSUN		MANGLE(GlobalAlphaFactorubSUN)
#define glGlobalAlphaFactoruiSUN		MANGLE(GlobalAlphaFactoruiSUN)
#define glGlobalAlphaFactorusSUN		MANGLE(GlobalAlphaFactorusSUN)
#define glHint		MANGLE(Hint)
#define glHintPGI		MANGLE(HintPGI)
#define glHistogramEXT		MANGLE(HistogramEXT)
#define glHistogram		MANGLE(Histogram)
#define glIglooInterfaceSGIX		MANGLE(IglooInterfaceSGIX)
#define glImageTransformParameterfHP		MANGLE(ImageTransformParameterfHP)
#define glImageTransformParameterfvHP		MANGLE(ImageTransformParameterfvHP)
#define glImageTransformParameteriHP		MANGLE(ImageTransformParameteriHP)
#define glImageTransformParameterivHP		MANGLE(ImageTransformParameterivHP)
#define glIndexd		MANGLE(Indexd)
#define glIndexdv		MANGLE(Indexdv)
#define glIndexf		MANGLE(Indexf)
#define glIndexFormatNV		MANGLE(IndexFormatNV)
#define glIndexFuncEXT		MANGLE(IndexFuncEXT)
#define glIndexfv		MANGLE(Indexfv)
#define glIndexi		MANGLE(Indexi)
#define glIndexiv		MANGLE(Indexiv)
#define glIndexMask		MANGLE(IndexMask)
#define glIndexMaterialEXT		MANGLE(IndexMaterialEXT)
#define glIndexPointerEXT		MANGLE(IndexPointerEXT)
#define glIndexPointerListIBM		MANGLE(IndexPointerListIBM)
#define glIndexPointer		MANGLE(IndexPointer)
#define glIndexs		MANGLE(Indexs)
#define glIndexsv		MANGLE(Indexsv)
#define glIndexub		MANGLE(Indexub)
#define glIndexubv		MANGLE(Indexubv)
#define glInitNames		MANGLE(InitNames)
#define glInsertComponentEXT		MANGLE(InsertComponentEXT)
#define glInstrumentsBufferSGIX		MANGLE(InstrumentsBufferSGIX)
#define glInterleavedArrays		MANGLE(InterleavedArrays)
#define glIsAsyncMarkerSGIX		MANGLE(IsAsyncMarkerSGIX)
#define glIsBufferARB		MANGLE(IsBufferARB)
#define glIsBuffer		MANGLE(IsBuffer)
#define glIsBufferResidentNV		MANGLE(IsBufferResidentNV)
#define glIsEnabledi		MANGLE(IsEnabledi)
#define glIsEnabledIndexedEXT		MANGLE(IsEnabledIndexedEXT)
#define glIsEnabled		MANGLE(IsEnabled)
#define glIsFenceAPPLE		MANGLE(IsFenceAPPLE)
#define glIsFenceNV		MANGLE(IsFenceNV)
#define glIsFramebufferEXT		MANGLE(IsFramebufferEXT)
#define glIsFramebuffer		MANGLE(IsFramebuffer)
#define glIsList		MANGLE(IsList)
#define glIsNamedBufferResidentNV		MANGLE(IsNamedBufferResidentNV)
#define glIsObjectBufferATI		MANGLE(IsObjectBufferATI)
#define glIsOcclusionQueryNV		MANGLE(IsOcclusionQueryNV)
#define glIsProgramARB		MANGLE(IsProgramARB)
#define glIsProgram		MANGLE(IsProgram)
#define glIsProgramNV		MANGLE(IsProgramNV)
#define glIsQueryARB		MANGLE(IsQueryARB)
#define glIsQuery		MANGLE(IsQuery)
#define glIsRenderbufferEXT		MANGLE(IsRenderbufferEXT)
#define glIsRenderbuffer		MANGLE(IsRenderbuffer)
#define glIsShader		MANGLE(IsShader)
#define glIsSync		MANGLE(IsSync)
#define glIsTextureEXT		MANGLE(IsTextureEXT)
#define glIsTexture		MANGLE(IsTexture)
#define glIsTransformFeedbackNV		MANGLE(IsTransformFeedbackNV)
#define glIsVariantEnabledEXT		MANGLE(IsVariantEnabledEXT)
#define glIsVertexArrayAPPLE		MANGLE(IsVertexArrayAPPLE)
#define glIsVertexArray		MANGLE(IsVertexArray)
#define glIsVertexAttribEnabledAPPLE		MANGLE(IsVertexAttribEnabledAPPLE)
#define glLightEnviSGIX		MANGLE(LightEnviSGIX)
#define glLightf		MANGLE(Lightf)
#define glLightfv		MANGLE(Lightfv)
#define glLighti		MANGLE(Lighti)
#define glLightiv		MANGLE(Lightiv)
#define glLightModelf		MANGLE(LightModelf)
#define glLightModelfv		MANGLE(LightModelfv)
#define glLightModeli		MANGLE(LightModeli)
#define glLightModeliv		MANGLE(LightModeliv)
#define glLineStipple		MANGLE(LineStipple)
#define glLineWidth		MANGLE(LineWidth)
#define glLinkProgramARB		MANGLE(LinkProgramARB)
#define glLinkProgram		MANGLE(LinkProgram)
#define glListBase		MANGLE(ListBase)
#define glListParameterfSGIX		MANGLE(ListParameterfSGIX)
#define glListParameterfvSGIX		MANGLE(ListParameterfvSGIX)
#define glListParameteriSGIX		MANGLE(ListParameteriSGIX)
#define glListParameterivSGIX		MANGLE(ListParameterivSGIX)
#define glLoadIdentityDeformationMapSGIX		MANGLE(LoadIdentityDeformationMapSGIX)
#define glLoadIdentity		MANGLE(LoadIdentity)
#define glLoadMatrixd		MANGLE(LoadMatrixd)
#define glLoadMatrixf		MANGLE(LoadMatrixf)
#define glLoadName		MANGLE(LoadName)
#define glLoadProgramNV		MANGLE(LoadProgramNV)
#define glLoadTransposeMatrixdARB		MANGLE(LoadTransposeMatrixdARB)
#define glLoadTransposeMatrixd		MANGLE(LoadTransposeMatrixd)
#define glLoadTransposeMatrixfARB		MANGLE(LoadTransposeMatrixfARB)
#define glLoadTransposeMatrixf		MANGLE(LoadTransposeMatrixf)
#define glLockArraysEXT		MANGLE(LockArraysEXT)
#define glLogicOp		MANGLE(LogicOp)
#define glMakeBufferNonResidentNV		MANGLE(MakeBufferNonResidentNV)
#define glMakeBufferResidentNV		MANGLE(MakeBufferResidentNV)
#define glMap1d		MANGLE(Map1d)
#define glMap1f		MANGLE(Map1f)
#define glMap2d		MANGLE(Map2d)
#define glMap2f		MANGLE(Map2f)
#define glMapBufferARB		MANGLE(MapBufferARB)
#define glMapBuffer		MANGLE(MapBuffer)
#define glMapBufferRange		MANGLE(MapBufferRange)
#define glMapControlPointsNV		MANGLE(MapControlPointsNV)
#define glMapGrid1d		MANGLE(MapGrid1d)
#define glMapGrid1f		MANGLE(MapGrid1f)
#define glMapGrid2d		MANGLE(MapGrid2d)
#define glMapGrid2f		MANGLE(MapGrid2f)
#define glMapNamedBufferEXT		MANGLE(MapNamedBufferEXT)
#define glMapObjectBufferATI		MANGLE(MapObjectBufferATI)
#define glMapParameterfvNV		MANGLE(MapParameterfvNV)
#define glMapParameterivNV		MANGLE(MapParameterivNV)
#define glMapVertexAttrib1dAPPLE		MANGLE(MapVertexAttrib1dAPPLE)
#define glMapVertexAttrib1fAPPLE		MANGLE(MapVertexAttrib1fAPPLE)
#define glMapVertexAttrib2dAPPLE		MANGLE(MapVertexAttrib2dAPPLE)
#define glMapVertexAttrib2fAPPLE		MANGLE(MapVertexAttrib2fAPPLE)
#define glMaterialf		MANGLE(Materialf)
#define glMaterialfv		MANGLE(Materialfv)
#define glMateriali		MANGLE(Materiali)
#define glMaterialiv		MANGLE(Materialiv)
#define glMatrixFrustumEXT		MANGLE(MatrixFrustumEXT)
#define glMatrixIndexPointerARB		MANGLE(MatrixIndexPointerARB)
#define glMatrixIndexubvARB		MANGLE(MatrixIndexubvARB)
#define glMatrixIndexuivARB		MANGLE(MatrixIndexuivARB)
#define glMatrixIndexusvARB		MANGLE(MatrixIndexusvARB)
#define glMatrixLoaddEXT		MANGLE(MatrixLoaddEXT)
#define glMatrixLoadfEXT		MANGLE(MatrixLoadfEXT)
#define glMatrixLoadIdentityEXT		MANGLE(MatrixLoadIdentityEXT)
#define glMatrixLoadTransposedEXT		MANGLE(MatrixLoadTransposedEXT)
#define glMatrixLoadTransposefEXT		MANGLE(MatrixLoadTransposefEXT)
#define glMatrixMode		MANGLE(MatrixMode)
#define glMatrixMultdEXT		MANGLE(MatrixMultdEXT)
#define glMatrixMultfEXT		MANGLE(MatrixMultfEXT)
#define glMatrixMultTransposedEXT		MANGLE(MatrixMultTransposedEXT)
#define glMatrixMultTransposefEXT		MANGLE(MatrixMultTransposefEXT)
#define glMatrixOrthoEXT		MANGLE(MatrixOrthoEXT)
#define glMatrixPopEXT		MANGLE(MatrixPopEXT)
#define glMatrixPushEXT		MANGLE(MatrixPushEXT)
#define glMatrixRotatedEXT		MANGLE(MatrixRotatedEXT)
#define glMatrixRotatefEXT		MANGLE(MatrixRotatefEXT)
#define glMatrixScaledEXT		MANGLE(MatrixScaledEXT)
#define glMatrixScalefEXT		MANGLE(MatrixScalefEXT)
#define glMatrixTranslatedEXT		MANGLE(MatrixTranslatedEXT)
#define glMatrixTranslatefEXT		MANGLE(MatrixTranslatefEXT)
#define glMinmaxEXT		MANGLE(MinmaxEXT)
#define glMinmax		MANGLE(Minmax)
#define glMinSampleShading		MANGLE(MinSampleShading)
#define glMultiDrawArraysEXT		MANGLE(MultiDrawArraysEXT)
#define glMultiDrawArrays		MANGLE(MultiDrawArrays)
#define glMultiDrawElementArrayAPPLE		MANGLE(MultiDrawElementArrayAPPLE)
#define glMultiDrawElementsBaseVertex		MANGLE(MultiDrawElementsBaseVertex)
#define glMultiDrawElementsEXT		MANGLE(MultiDrawElementsEXT)
#define glMultiDrawElements		MANGLE(MultiDrawElements)
#define glMultiDrawRangeElementArrayAPPLE		MANGLE(MultiDrawRangeElementArrayAPPLE)
#define glMultiModeDrawArraysIBM		MANGLE(MultiModeDrawArraysIBM)
#define glMultiModeDrawElementsIBM		MANGLE(MultiModeDrawElementsIBM)
#define glMultiTexBufferEXT		MANGLE(MultiTexBufferEXT)
#define glMultiTexCoord1dARB		MANGLE(MultiTexCoord1dARB)
#define glMultiTexCoord1d		MANGLE(MultiTexCoord1d)
#define glMultiTexCoord1dvARB		MANGLE(MultiTexCoord1dvARB)
#define glMultiTexCoord1dv		MANGLE(MultiTexCoord1dv)
#define glMultiTexCoord1fARB		MANGLE(MultiTexCoord1fARB)
#define glMultiTexCoord1f		MANGLE(MultiTexCoord1f)
#define glMultiTexCoord1fvARB		MANGLE(MultiTexCoord1fvARB)
#define glMultiTexCoord1fv		MANGLE(MultiTexCoord1fv)
#define glMultiTexCoord1hNV		MANGLE(MultiTexCoord1hNV)
#define glMultiTexCoord1hvNV		MANGLE(MultiTexCoord1hvNV)
#define glMultiTexCoord1iARB		MANGLE(MultiTexCoord1iARB)
#define glMultiTexCoord1i		MANGLE(MultiTexCoord1i)
#define glMultiTexCoord1ivARB		MANGLE(MultiTexCoord1ivARB)
#define glMultiTexCoord1iv		MANGLE(MultiTexCoord1iv)
#define glMultiTexCoord1sARB		MANGLE(MultiTexCoord1sARB)
#define glMultiTexCoord1s		MANGLE(MultiTexCoord1s)
#define glMultiTexCoord1svARB		MANGLE(MultiTexCoord1svARB)
#define glMultiTexCoord1sv		MANGLE(MultiTexCoord1sv)
#define glMultiTexCoord2dARB		MANGLE(MultiTexCoord2dARB)
#define glMultiTexCoord2d		MANGLE(MultiTexCoord2d)
#define glMultiTexCoord2dvARB		MANGLE(MultiTexCoord2dvARB)
#define glMultiTexCoord2dv		MANGLE(MultiTexCoord2dv)
#define glMultiTexCoord2fARB		MANGLE(MultiTexCoord2fARB)
#define glMultiTexCoord2f		MANGLE(MultiTexCoord2f)
#define glMultiTexCoord2fvARB		MANGLE(MultiTexCoord2fvARB)
#define glMultiTexCoord2fv		MANGLE(MultiTexCoord2fv)
#define glMultiTexCoord2hNV		MANGLE(MultiTexCoord2hNV)
#define glMultiTexCoord2hvNV		MANGLE(MultiTexCoord2hvNV)
#define glMultiTexCoord2iARB		MANGLE(MultiTexCoord2iARB)
#define glMultiTexCoord2i		MANGLE(MultiTexCoord2i)
#define glMultiTexCoord2ivARB		MANGLE(MultiTexCoord2ivARB)
#define glMultiTexCoord2iv		MANGLE(MultiTexCoord2iv)
#define glMultiTexCoord2sARB		MANGLE(MultiTexCoord2sARB)
#define glMultiTexCoord2s		MANGLE(MultiTexCoord2s)
#define glMultiTexCoord2svARB		MANGLE(MultiTexCoord2svARB)
#define glMultiTexCoord2sv		MANGLE(MultiTexCoord2sv)
#define glMultiTexCoord3dARB		MANGLE(MultiTexCoord3dARB)
#define glMultiTexCoord3d		MANGLE(MultiTexCoord3d)
#define glMultiTexCoord3dvARB		MANGLE(MultiTexCoord3dvARB)
#define glMultiTexCoord3dv		MANGLE(MultiTexCoord3dv)
#define glMultiTexCoord3fARB		MANGLE(MultiTexCoord3fARB)
#define glMultiTexCoord3f		MANGLE(MultiTexCoord3f)
#define glMultiTexCoord3fvARB		MANGLE(MultiTexCoord3fvARB)
#define glMultiTexCoord3fv		MANGLE(MultiTexCoord3fv)
#define glMultiTexCoord3hNV		MANGLE(MultiTexCoord3hNV)
#define glMultiTexCoord3hvNV		MANGLE(MultiTexCoord3hvNV)
#define glMultiTexCoord3iARB		MANGLE(MultiTexCoord3iARB)
#define glMultiTexCoord3i		MANGLE(MultiTexCoord3i)
#define glMultiTexCoord3ivARB		MANGLE(MultiTexCoord3ivARB)
#define glMultiTexCoord3iv		MANGLE(MultiTexCoord3iv)
#define glMultiTexCoord3sARB		MANGLE(MultiTexCoord3sARB)
#define glMultiTexCoord3s		MANGLE(MultiTexCoord3s)
#define glMultiTexCoord3svARB		MANGLE(MultiTexCoord3svARB)
#define glMultiTexCoord3sv		MANGLE(MultiTexCoord3sv)
#define glMultiTexCoord4dARB		MANGLE(MultiTexCoord4dARB)
#define glMultiTexCoord4d		MANGLE(MultiTexCoord4d)
#define glMultiTexCoord4dvARB		MANGLE(MultiTexCoord4dvARB)
#define glMultiTexCoord4dv		MANGLE(MultiTexCoord4dv)
#define glMultiTexCoord4fARB		MANGLE(MultiTexCoord4fARB)
#define glMultiTexCoord4f		MANGLE(MultiTexCoord4f)
#define glMultiTexCoord4fvARB		MANGLE(MultiTexCoord4fvARB)
#define glMultiTexCoord4fv		MANGLE(MultiTexCoord4fv)
#define glMultiTexCoord4hNV		MANGLE(MultiTexCoord4hNV)
#define glMultiTexCoord4hvNV		MANGLE(MultiTexCoord4hvNV)
#define glMultiTexCoord4iARB		MANGLE(MultiTexCoord4iARB)
#define glMultiTexCoord4i		MANGLE(MultiTexCoord4i)
#define glMultiTexCoord4ivARB		MANGLE(MultiTexCoord4ivARB)
#define glMultiTexCoord4iv		MANGLE(MultiTexCoord4iv)
#define glMultiTexCoord4sARB		MANGLE(MultiTexCoord4sARB)
#define glMultiTexCoord4s		MANGLE(MultiTexCoord4s)
#define glMultiTexCoord4svARB		MANGLE(MultiTexCoord4svARB)
#define glMultiTexCoord4sv		MANGLE(MultiTexCoord4sv)
#define glMultiTexCoordPointerEXT		MANGLE(MultiTexCoordPointerEXT)
#define glMultiTexEnvfEXT		MANGLE(MultiTexEnvfEXT)
#define glMultiTexEnvfvEXT		MANGLE(MultiTexEnvfvEXT)
#define glMultiTexEnviEXT		MANGLE(MultiTexEnviEXT)
#define glMultiTexEnvivEXT		MANGLE(MultiTexEnvivEXT)
#define glMultiTexGendEXT		MANGLE(MultiTexGendEXT)
#define glMultiTexGendvEXT		MANGLE(MultiTexGendvEXT)
#define glMultiTexGenfEXT		MANGLE(MultiTexGenfEXT)
#define glMultiTexGenfvEXT		MANGLE(MultiTexGenfvEXT)
#define glMultiTexGeniEXT		MANGLE(MultiTexGeniEXT)
#define glMultiTexGenivEXT		MANGLE(MultiTexGenivEXT)
#define glMultiTexImage1DEXT		MANGLE(MultiTexImage1DEXT)
#define glMultiTexImage2DEXT		MANGLE(MultiTexImage2DEXT)
#define glMultiTexImage3DEXT		MANGLE(MultiTexImage3DEXT)
#define glMultiTexParameterfEXT		MANGLE(MultiTexParameterfEXT)
#define glMultiTexParameterfvEXT		MANGLE(MultiTexParameterfvEXT)
#define glMultiTexParameteriEXT		MANGLE(MultiTexParameteriEXT)
#define glMultiTexParameterIivEXT		MANGLE(MultiTexParameterIivEXT)
#define glMultiTexParameterIuivEXT		MANGLE(MultiTexParameterIuivEXT)
#define glMultiTexParameterivEXT		MANGLE(MultiTexParameterivEXT)
#define glMultiTexRenderbufferEXT		MANGLE(MultiTexRenderbufferEXT)
#define glMultiTexSubImage1DEXT		MANGLE(MultiTexSubImage1DEXT)
#define glMultiTexSubImage2DEXT		MANGLE(MultiTexSubImage2DEXT)
#define glMultiTexSubImage3DEXT		MANGLE(MultiTexSubImage3DEXT)
#define glMultMatrixd		MANGLE(MultMatrixd)
#define glMultMatrixf		MANGLE(MultMatrixf)
#define glMultTransposeMatrixdARB		MANGLE(MultTransposeMatrixdARB)
#define glMultTransposeMatrixd		MANGLE(MultTransposeMatrixd)
#define glMultTransposeMatrixfARB		MANGLE(MultTransposeMatrixfARB)
#define glMultTransposeMatrixf		MANGLE(MultTransposeMatrixf)
#define glNamedBufferDataEXT		MANGLE(NamedBufferDataEXT)
#define glNamedBufferSubDataEXT		MANGLE(NamedBufferSubDataEXT)
#define glNamedFramebufferRenderbufferEXT		MANGLE(NamedFramebufferRenderbufferEXT)
#define glNamedFramebufferTexture1DEXT		MANGLE(NamedFramebufferTexture1DEXT)
#define glNamedFramebufferTexture2DEXT		MANGLE(NamedFramebufferTexture2DEXT)
#define glNamedFramebufferTexture3DEXT		MANGLE(NamedFramebufferTexture3DEXT)
#define glNamedFramebufferTextureEXT		MANGLE(NamedFramebufferTextureEXT)
#define glNamedFramebufferTextureFaceEXT		MANGLE(NamedFramebufferTextureFaceEXT)
#define glNamedFramebufferTextureLayerEXT		MANGLE(NamedFramebufferTextureLayerEXT)
#define glNamedMakeBufferNonResidentNV		MANGLE(NamedMakeBufferNonResidentNV)
#define glNamedMakeBufferResidentNV		MANGLE(NamedMakeBufferResidentNV)
#define glNamedProgramLocalParameter4dEXT		MANGLE(NamedProgramLocalParameter4dEXT)
#define glNamedProgramLocalParameter4dvEXT		MANGLE(NamedProgramLocalParameter4dvEXT)
#define glNamedProgramLocalParameter4fEXT		MANGLE(NamedProgramLocalParameter4fEXT)
#define glNamedProgramLocalParameter4fvEXT		MANGLE(NamedProgramLocalParameter4fvEXT)
#define glNamedProgramLocalParameterI4iEXT		MANGLE(NamedProgramLocalParameterI4iEXT)
#define glNamedProgramLocalParameterI4ivEXT		MANGLE(NamedProgramLocalParameterI4ivEXT)
#define glNamedProgramLocalParameterI4uiEXT		MANGLE(NamedProgramLocalParameterI4uiEXT)
#define glNamedProgramLocalParameterI4uivEXT		MANGLE(NamedProgramLocalParameterI4uivEXT)
#define glNamedProgramLocalParameters4fvEXT		MANGLE(NamedProgramLocalParameters4fvEXT)
#define glNamedProgramLocalParametersI4ivEXT		MANGLE(NamedProgramLocalParametersI4ivEXT)
#define glNamedProgramLocalParametersI4uivEXT		MANGLE(NamedProgramLocalParametersI4uivEXT)
#define glNamedProgramStringEXT		MANGLE(NamedProgramStringEXT)
#define glNamedRenderbufferStorageEXT		MANGLE(NamedRenderbufferStorageEXT)
#define glNamedRenderbufferStorageMultisampleCoverageEXT		MANGLE(NamedRenderbufferStorageMultisampleCoverageEXT)
#define glNamedRenderbufferStorageMultisampleEXT		MANGLE(NamedRenderbufferStorageMultisampleEXT)
#define glNewList		MANGLE(NewList)
#define glNewObjectBufferATI		MANGLE(NewObjectBufferATI)
#define glNormal3b		MANGLE(Normal3b)
#define glNormal3bv		MANGLE(Normal3bv)
#define glNormal3d		MANGLE(Normal3d)
#define glNormal3dv		MANGLE(Normal3dv)
#define glNormal3f		MANGLE(Normal3f)
#define glNormal3fVertex3fSUN		MANGLE(Normal3fVertex3fSUN)
#define glNormal3fVertex3fvSUN		MANGLE(Normal3fVertex3fvSUN)
#define glNormal3fv		MANGLE(Normal3fv)
#define glNormal3hNV		MANGLE(Normal3hNV)
#define glNormal3hvNV		MANGLE(Normal3hvNV)
#define glNormal3i		MANGLE(Normal3i)
#define glNormal3iv		MANGLE(Normal3iv)
#define glNormal3s		MANGLE(Normal3s)
#define glNormal3sv		MANGLE(Normal3sv)
#define glNormalFormatNV		MANGLE(NormalFormatNV)
#define glNormalPointerEXT		MANGLE(NormalPointerEXT)
#define glNormalPointerListIBM		MANGLE(NormalPointerListIBM)
#define glNormalPointer		MANGLE(NormalPointer)
#define glNormalPointervINTEL		MANGLE(NormalPointervINTEL)
#define glNormalStream3bATI		MANGLE(NormalStream3bATI)
#define glNormalStream3bvATI		MANGLE(NormalStream3bvATI)
#define glNormalStream3dATI		MANGLE(NormalStream3dATI)
#define glNormalStream3dvATI		MANGLE(NormalStream3dvATI)
#define glNormalStream3fATI		MANGLE(NormalStream3fATI)
#define glNormalStream3fvATI		MANGLE(NormalStream3fvATI)
#define glNormalStream3iATI		MANGLE(NormalStream3iATI)
#define glNormalStream3ivATI		MANGLE(NormalStream3ivATI)
#define glNormalStream3sATI		MANGLE(NormalStream3sATI)
#define glNormalStream3svATI		MANGLE(NormalStream3svATI)
#define glObjectPurgeableAPPLE		MANGLE(ObjectPurgeableAPPLE)
#define glObjectUnpurgeableAPPLE		MANGLE(ObjectUnpurgeableAPPLE)
#define glOrtho		MANGLE(Ortho)
#define glPassTexCoordATI		MANGLE(PassTexCoordATI)
#define glPassThrough		MANGLE(PassThrough)
#define glPauseTransformFeedbackNV		MANGLE(PauseTransformFeedbackNV)
#define glPixelDataRangeNV		MANGLE(PixelDataRangeNV)
#define glPixelMapfv		MANGLE(PixelMapfv)
#define glPixelMapuiv		MANGLE(PixelMapuiv)
#define glPixelMapusv		MANGLE(PixelMapusv)
#define glPixelStoref		MANGLE(PixelStoref)
#define glPixelStorei		MANGLE(PixelStorei)
#define glPixelTexGenParameterfSGIS		MANGLE(PixelTexGenParameterfSGIS)
#define glPixelTexGenParameterfvSGIS		MANGLE(PixelTexGenParameterfvSGIS)
#define glPixelTexGenParameteriSGIS		MANGLE(PixelTexGenParameteriSGIS)
#define glPixelTexGenParameterivSGIS		MANGLE(PixelTexGenParameterivSGIS)
#define glPixelTexGenSGIX		MANGLE(PixelTexGenSGIX)
#define glPixelTransferf		MANGLE(PixelTransferf)
#define glPixelTransferi		MANGLE(PixelTransferi)
#define glPixelTransformParameterfEXT		MANGLE(PixelTransformParameterfEXT)
#define glPixelTransformParameterfvEXT		MANGLE(PixelTransformParameterfvEXT)
#define glPixelTransformParameteriEXT		MANGLE(PixelTransformParameteriEXT)
#define glPixelTransformParameterivEXT		MANGLE(PixelTransformParameterivEXT)
#define glPixelZoom		MANGLE(PixelZoom)
#define glPNTrianglesfATI		MANGLE(PNTrianglesfATI)
#define glPNTrianglesiATI		MANGLE(PNTrianglesiATI)
#define glPointParameterfARB		MANGLE(PointParameterfARB)
#define glPointParameterfEXT		MANGLE(PointParameterfEXT)
#define glPointParameterf		MANGLE(PointParameterf)
#define glPointParameterfSGIS		MANGLE(PointParameterfSGIS)
#define glPointParameterfvARB		MANGLE(PointParameterfvARB)
#define glPointParameterfvEXT		MANGLE(PointParameterfvEXT)
#define glPointParameterfv		MANGLE(PointParameterfv)
#define glPointParameterfvSGIS		MANGLE(PointParameterfvSGIS)
#define glPointParameteri		MANGLE(PointParameteri)
#define glPointParameteriNV		MANGLE(PointParameteriNV)
#define glPointParameteriv		MANGLE(PointParameteriv)
#define glPointParameterivNV		MANGLE(PointParameterivNV)
#define glPointSize		MANGLE(PointSize)
#define glPollAsyncSGIX		MANGLE(PollAsyncSGIX)
#define glPollInstrumentsSGIX		MANGLE(PollInstrumentsSGIX)
#define glPolygonMode		MANGLE(PolygonMode)
#define glPolygonOffsetEXT		MANGLE(PolygonOffsetEXT)
#define glPolygonOffset		MANGLE(PolygonOffset)
#define glPolygonStipple		MANGLE(PolygonStipple)
#define glPopAttrib		MANGLE(PopAttrib)
#define glPopClientAttrib		MANGLE(PopClientAttrib)
#define glPopMatrix		MANGLE(PopMatrix)
#define glPopName		MANGLE(PopName)
#define glPresentFrameDualFillNV		MANGLE(PresentFrameDualFillNV)
#define glPresentFrameKeyedNV		MANGLE(PresentFrameKeyedNV)
#define glPrimitiveRestartIndex		MANGLE(PrimitiveRestartIndex)
#define glPrimitiveRestartIndexNV		MANGLE(PrimitiveRestartIndexNV)
#define glPrimitiveRestartNV		MANGLE(PrimitiveRestartNV)
#define glPrioritizeTexturesEXT		MANGLE(PrioritizeTexturesEXT)
#define glPrioritizeTextures		MANGLE(PrioritizeTextures)
#define glProgramBufferParametersfvNV		MANGLE(ProgramBufferParametersfvNV)
#define glProgramBufferParametersIivNV		MANGLE(ProgramBufferParametersIivNV)
#define glProgramBufferParametersIuivNV		MANGLE(ProgramBufferParametersIuivNV)
#define glProgramCallbackMESA		MANGLE(ProgramCallbackMESA)
#define glProgramEnvParameter4dARB		MANGLE(ProgramEnvParameter4dARB)
#define glProgramEnvParameter4dvARB		MANGLE(ProgramEnvParameter4dvARB)
#define glProgramEnvParameter4fARB		MANGLE(ProgramEnvParameter4fARB)
#define glProgramEnvParameter4fvARB		MANGLE(ProgramEnvParameter4fvARB)
#define glProgramEnvParameterI4iNV		MANGLE(ProgramEnvParameterI4iNV)
#define glProgramEnvParameterI4ivNV		MANGLE(ProgramEnvParameterI4ivNV)
#define glProgramEnvParameterI4uiNV		MANGLE(ProgramEnvParameterI4uiNV)
#define glProgramEnvParameterI4uivNV		MANGLE(ProgramEnvParameterI4uivNV)
#define glProgramEnvParameters4fvEXT		MANGLE(ProgramEnvParameters4fvEXT)
#define glProgramEnvParametersI4ivNV		MANGLE(ProgramEnvParametersI4ivNV)
#define glProgramEnvParametersI4uivNV		MANGLE(ProgramEnvParametersI4uivNV)
#define glProgramLocalParameter4dARB		MANGLE(ProgramLocalParameter4dARB)
#define glProgramLocalParameter4dvARB		MANGLE(ProgramLocalParameter4dvARB)
#define glProgramLocalParameter4fARB		MANGLE(ProgramLocalParameter4fARB)
#define glProgramLocalParameter4fvARB		MANGLE(ProgramLocalParameter4fvARB)
#define glProgramLocalParameterI4iNV		MANGLE(ProgramLocalParameterI4iNV)
#define glProgramLocalParameterI4ivNV		MANGLE(ProgramLocalParameterI4ivNV)
#define glProgramLocalParameterI4uiNV		MANGLE(ProgramLocalParameterI4uiNV)
#define glProgramLocalParameterI4uivNV		MANGLE(ProgramLocalParameterI4uivNV)
#define glProgramLocalParameters4fvEXT		MANGLE(ProgramLocalParameters4fvEXT)
#define glProgramLocalParametersI4ivNV		MANGLE(ProgramLocalParametersI4ivNV)
#define glProgramLocalParametersI4uivNV		MANGLE(ProgramLocalParametersI4uivNV)
#define glProgramNamedParameter4dNV		MANGLE(ProgramNamedParameter4dNV)
#define glProgramNamedParameter4dvNV		MANGLE(ProgramNamedParameter4dvNV)
#define glProgramNamedParameter4fNV		MANGLE(ProgramNamedParameter4fNV)
#define glProgramNamedParameter4fvNV		MANGLE(ProgramNamedParameter4fvNV)
#define glProgramParameter4dNV		MANGLE(ProgramParameter4dNV)
#define glProgramParameter4dvNV		MANGLE(ProgramParameter4dvNV)
#define glProgramParameter4fNV		MANGLE(ProgramParameter4fNV)
#define glProgramParameter4fvNV		MANGLE(ProgramParameter4fvNV)
#define glProgramParameteriARB		MANGLE(ProgramParameteriARB)
#define glProgramParameteriEXT		MANGLE(ProgramParameteriEXT)
#define glProgramParameteri		MANGLE(ProgramParameteri)
#define glProgramParameters4dvNV		MANGLE(ProgramParameters4dvNV)
#define glProgramParameters4fvNV		MANGLE(ProgramParameters4fvNV)
#define glProgramStringARB		MANGLE(ProgramStringARB)
#define glProgramUniform1fEXT		MANGLE(ProgramUniform1fEXT)
#define glProgramUniform1fvEXT		MANGLE(ProgramUniform1fvEXT)
#define glProgramUniform1iEXT		MANGLE(ProgramUniform1iEXT)
#define glProgramUniform1ivEXT		MANGLE(ProgramUniform1ivEXT)
#define glProgramUniform1uiEXT		MANGLE(ProgramUniform1uiEXT)
#define glProgramUniform1uivEXT		MANGLE(ProgramUniform1uivEXT)
#define glProgramUniform2fEXT		MANGLE(ProgramUniform2fEXT)
#define glProgramUniform2fvEXT		MANGLE(ProgramUniform2fvEXT)
#define glProgramUniform2iEXT		MANGLE(ProgramUniform2iEXT)
#define glProgramUniform2ivEXT		MANGLE(ProgramUniform2ivEXT)
#define glProgramUniform2uiEXT		MANGLE(ProgramUniform2uiEXT)
#define glProgramUniform2uivEXT		MANGLE(ProgramUniform2uivEXT)
#define glProgramUniform3fEXT		MANGLE(ProgramUniform3fEXT)
#define glProgramUniform3fvEXT		MANGLE(ProgramUniform3fvEXT)
#define glProgramUniform3iEXT		MANGLE(ProgramUniform3iEXT)
#define glProgramUniform3ivEXT		MANGLE(ProgramUniform3ivEXT)
#define glProgramUniform3uiEXT		MANGLE(ProgramUniform3uiEXT)
#define glProgramUniform3uivEXT		MANGLE(ProgramUniform3uivEXT)
#define glProgramUniform4fEXT		MANGLE(ProgramUniform4fEXT)
#define glProgramUniform4fvEXT		MANGLE(ProgramUniform4fvEXT)
#define glProgramUniform4iEXT		MANGLE(ProgramUniform4iEXT)
#define glProgramUniform4ivEXT		MANGLE(ProgramUniform4ivEXT)
#define glProgramUniform4uiEXT		MANGLE(ProgramUniform4uiEXT)
#define glProgramUniform4uivEXT		MANGLE(ProgramUniform4uivEXT)
#define glProgramUniformMatrix2fvEXT		MANGLE(ProgramUniformMatrix2fvEXT)
#define glProgramUniformMatrix2x3fvEXT		MANGLE(ProgramUniformMatrix2x3fvEXT)
#define glProgramUniformMatrix2x4fvEXT		MANGLE(ProgramUniformMatrix2x4fvEXT)
#define glProgramUniformMatrix3fvEXT		MANGLE(ProgramUniformMatrix3fvEXT)
#define glProgramUniformMatrix3x2fvEXT		MANGLE(ProgramUniformMatrix3x2fvEXT)
#define glProgramUniformMatrix3x4fvEXT		MANGLE(ProgramUniformMatrix3x4fvEXT)
#define glProgramUniformMatrix4fvEXT		MANGLE(ProgramUniformMatrix4fvEXT)
#define glProgramUniformMatrix4x2fvEXT		MANGLE(ProgramUniformMatrix4x2fvEXT)
#define glProgramUniformMatrix4x3fvEXT		MANGLE(ProgramUniformMatrix4x3fvEXT)
#define glProgramUniformui64NV		MANGLE(ProgramUniformui64NV)
#define glProgramUniformui64vNV		MANGLE(ProgramUniformui64vNV)
#define glProgramVertexLimitNV		MANGLE(ProgramVertexLimitNV)
#define glProvokingVertexEXT		MANGLE(ProvokingVertexEXT)
#define glProvokingVertex		MANGLE(ProvokingVertex)
#define glPushAttrib		MANGLE(PushAttrib)
#define glPushClientAttribDefaultEXT		MANGLE(PushClientAttribDefaultEXT)
#define glPushClientAttrib		MANGLE(PushClientAttrib)
#define glPushMatrix		MANGLE(PushMatrix)
#define glPushName		MANGLE(PushName)
#define glRasterPos2d		MANGLE(RasterPos2d)
#define glRasterPos2dv		MANGLE(RasterPos2dv)
#define glRasterPos2f		MANGLE(RasterPos2f)
#define glRasterPos2fv		MANGLE(RasterPos2fv)
#define glRasterPos2i		MANGLE(RasterPos2i)
#define glRasterPos2iv		MANGLE(RasterPos2iv)
#define glRasterPos2s		MANGLE(RasterPos2s)
#define glRasterPos2sv		MANGLE(RasterPos2sv)
#define glRasterPos3d		MANGLE(RasterPos3d)
#define glRasterPos3dv		MANGLE(RasterPos3dv)
#define glRasterPos3f		MANGLE(RasterPos3f)
#define glRasterPos3fv		MANGLE(RasterPos3fv)
#define glRasterPos3i		MANGLE(RasterPos3i)
#define glRasterPos3iv		MANGLE(RasterPos3iv)
#define glRasterPos3s		MANGLE(RasterPos3s)
#define glRasterPos3sv		MANGLE(RasterPos3sv)
#define glRasterPos4d		MANGLE(RasterPos4d)
#define glRasterPos4dv		MANGLE(RasterPos4dv)
#define glRasterPos4f		MANGLE(RasterPos4f)
#define glRasterPos4fv		MANGLE(RasterPos4fv)
#define glRasterPos4i		MANGLE(RasterPos4i)
#define glRasterPos4iv		MANGLE(RasterPos4iv)
#define glRasterPos4s		MANGLE(RasterPos4s)
#define glRasterPos4sv		MANGLE(RasterPos4sv)
#define glReadBuffer		MANGLE(ReadBuffer)
#define glReadInstrumentsSGIX		MANGLE(ReadInstrumentsSGIX)
#define glReadPixels		MANGLE(ReadPixels)
#define glRectd		MANGLE(Rectd)
#define glRectdv		MANGLE(Rectdv)
#define glRectf		MANGLE(Rectf)
#define glRectfv		MANGLE(Rectfv)
#define glRecti		MANGLE(Recti)
#define glRectiv		MANGLE(Rectiv)
#define glRects		MANGLE(Rects)
#define glRectsv		MANGLE(Rectsv)
#define glReferencePlaneSGIX		MANGLE(ReferencePlaneSGIX)
#define glRenderbufferStorageEXT		MANGLE(RenderbufferStorageEXT)
#define glRenderbufferStorage		MANGLE(RenderbufferStorage)
#define glRenderbufferStorageMultisampleCoverageNV		MANGLE(RenderbufferStorageMultisampleCoverageNV)
#define glRenderbufferStorageMultisampleEXT		MANGLE(RenderbufferStorageMultisampleEXT)
#define glRenderbufferStorageMultisample		MANGLE(RenderbufferStorageMultisample)
#define glRenderMode		MANGLE(RenderMode)
#define glReplacementCodePointerSUN		MANGLE(ReplacementCodePointerSUN)
#define glReplacementCodeubSUN		MANGLE(ReplacementCodeubSUN)
#define glReplacementCodeubvSUN		MANGLE(ReplacementCodeubvSUN)
#define glReplacementCodeuiColor3fVertex3fSUN		MANGLE(ReplacementCodeuiColor3fVertex3fSUN)
#define glReplacementCodeuiColor3fVertex3fvSUN		MANGLE(ReplacementCodeuiColor3fVertex3fvSUN)
#define glReplacementCodeuiColor4fNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiColor4fNormal3fVertex3fSUN)
#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiColor4fNormal3fVertex3fvSUN)
#define glReplacementCodeuiColor4ubVertex3fSUN		MANGLE(ReplacementCodeuiColor4ubVertex3fSUN)
#define glReplacementCodeuiColor4ubVertex3fvSUN		MANGLE(ReplacementCodeuiColor4ubVertex3fvSUN)
#define glReplacementCodeuiNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiNormal3fVertex3fSUN)
#define glReplacementCodeuiNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiNormal3fVertex3fvSUN)
#define glReplacementCodeuiSUN		MANGLE(ReplacementCodeuiSUN)
#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)
#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)
#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN		MANGLE(ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)
#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN		MANGLE(ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)
#define glReplacementCodeuiTexCoord2fVertex3fSUN		MANGLE(ReplacementCodeuiTexCoord2fVertex3fSUN)
#define glReplacementCodeuiTexCoord2fVertex3fvSUN		MANGLE(ReplacementCodeuiTexCoord2fVertex3fvSUN)
#define glReplacementCodeuiVertex3fSUN		MANGLE(ReplacementCodeuiVertex3fSUN)
#define glReplacementCodeuiVertex3fvSUN		MANGLE(ReplacementCodeuiVertex3fvSUN)
#define glReplacementCodeuivSUN		MANGLE(ReplacementCodeuivSUN)
#define glReplacementCodeusSUN		MANGLE(ReplacementCodeusSUN)
#define glReplacementCodeusvSUN		MANGLE(ReplacementCodeusvSUN)
#define glRequestResidentProgramsNV		MANGLE(RequestResidentProgramsNV)
#define glResetHistogramEXT		MANGLE(ResetHistogramEXT)
#define glResetHistogram		MANGLE(ResetHistogram)
#define glResetMinmaxEXT		MANGLE(ResetMinmaxEXT)
#define glResetMinmax		MANGLE(ResetMinmax)
#define glResizeBuffersMESA		MANGLE(ResizeBuffersMESA)
#define glResumeTransformFeedbackNV		MANGLE(ResumeTransformFeedbackNV)
#define glRotated		MANGLE(Rotated)
#define glRotatef		MANGLE(Rotatef)
#define glSampleCoverageARB		MANGLE(SampleCoverageARB)
#define glSampleCoverage		MANGLE(SampleCoverage)
#define glSampleMapATI		MANGLE(SampleMapATI)
#define glSampleMaskEXT		MANGLE(SampleMaskEXT)
#define glSampleMaski		MANGLE(SampleMaski)
#define glSampleMaskIndexedNV		MANGLE(SampleMaskIndexedNV)
#define glSampleMaskSGIS		MANGLE(SampleMaskSGIS)
#define glSamplePatternEXT		MANGLE(SamplePatternEXT)
#define glSamplePatternSGIS		MANGLE(SamplePatternSGIS)
#define glScaled		MANGLE(Scaled)
#define glScalef		MANGLE(Scalef)
#define glScissor		MANGLE(Scissor)
#define glSecondaryColor3bEXT		MANGLE(SecondaryColor3bEXT)
#define glSecondaryColor3b		MANGLE(SecondaryColor3b)
#define glSecondaryColor3bvEXT		MANGLE(SecondaryColor3bvEXT)
#define glSecondaryColor3bv		MANGLE(SecondaryColor3bv)
#define glSecondaryColor3dEXT		MANGLE(SecondaryColor3dEXT)
#define glSecondaryColor3d		MANGLE(SecondaryColor3d)
#define glSecondaryColor3dvEXT		MANGLE(SecondaryColor3dvEXT)
#define glSecondaryColor3dv		MANGLE(SecondaryColor3dv)
#define glSecondaryColor3fEXT		MANGLE(SecondaryColor3fEXT)
#define glSecondaryColor3f		MANGLE(SecondaryColor3f)
#define glSecondaryColor3fvEXT		MANGLE(SecondaryColor3fvEXT)
#define glSecondaryColor3fv		MANGLE(SecondaryColor3fv)
#define glSecondaryColor3hNV		MANGLE(SecondaryColor3hNV)
#define glSecondaryColor3hvNV		MANGLE(SecondaryColor3hvNV)
#define glSecondaryColor3iEXT		MANGLE(SecondaryColor3iEXT)
#define glSecondaryColor3i		MANGLE(SecondaryColor3i)
#define glSecondaryColor3ivEXT		MANGLE(SecondaryColor3ivEXT)
#define glSecondaryColor3iv		MANGLE(SecondaryColor3iv)
#define glSecondaryColor3sEXT		MANGLE(SecondaryColor3sEXT)
#define glSecondaryColor3s		MANGLE(SecondaryColor3s)
#define glSecondaryColor3svEXT		MANGLE(SecondaryColor3svEXT)
#define glSecondaryColor3sv		MANGLE(SecondaryColor3sv)
#define glSecondaryColor3ubEXT		MANGLE(SecondaryColor3ubEXT)
#define glSecondaryColor3ub		MANGLE(SecondaryColor3ub)
#define glSecondaryColor3ubvEXT		MANGLE(SecondaryColor3ubvEXT)
#define glSecondaryColor3ubv		MANGLE(SecondaryColor3ubv)
#define glSecondaryColor3uiEXT		MANGLE(SecondaryColor3uiEXT)
#define glSecondaryColor3ui		MANGLE(SecondaryColor3ui)
#define glSecondaryColor3uivEXT		MANGLE(SecondaryColor3uivEXT)
#define glSecondaryColor3uiv		MANGLE(SecondaryColor3uiv)
#define glSecondaryColor3usEXT		MANGLE(SecondaryColor3usEXT)
#define glSecondaryColor3us		MANGLE(SecondaryColor3us)
#define glSecondaryColor3usvEXT		MANGLE(SecondaryColor3usvEXT)
#define glSecondaryColor3usv		MANGLE(SecondaryColor3usv)
#define glSecondaryColorFormatNV		MANGLE(SecondaryColorFormatNV)
#define glSecondaryColorPointerEXT		MANGLE(SecondaryColorPointerEXT)
#define glSecondaryColorPointerListIBM		MANGLE(SecondaryColorPointerListIBM)
#define glSecondaryColorPointer		MANGLE(SecondaryColorPointer)
#define glSelectBuffer		MANGLE(SelectBuffer)
#define glSelectPerfMonitorCountersAMD		MANGLE(SelectPerfMonitorCountersAMD)
#define glSeparableFilter2DEXT		MANGLE(SeparableFilter2DEXT)
#define glSeparableFilter2D		MANGLE(SeparableFilter2D)
#define glSetFenceAPPLE		MANGLE(SetFenceAPPLE)
#define glSetFenceNV		MANGLE(SetFenceNV)
#define glSetFragmentShaderConstantATI		MANGLE(SetFragmentShaderConstantATI)
#define glSetInvariantEXT		MANGLE(SetInvariantEXT)
#define glSetLocalConstantEXT		MANGLE(SetLocalConstantEXT)
#define glShadeModel		MANGLE(ShadeModel)
#define glShaderOp1EXT		MANGLE(ShaderOp1EXT)
#define glShaderOp2EXT		MANGLE(ShaderOp2EXT)
#define glShaderOp3EXT		MANGLE(ShaderOp3EXT)
#define glShaderSourceARB		MANGLE(ShaderSourceARB)
#define glShaderSource		MANGLE(ShaderSource)
#define glSharpenTexFuncSGIS		MANGLE(SharpenTexFuncSGIS)
#define glSpriteParameterfSGIX		MANGLE(SpriteParameterfSGIX)
#define glSpriteParameterfvSGIX		MANGLE(SpriteParameterfvSGIX)
#define glSpriteParameteriSGIX		MANGLE(SpriteParameteriSGIX)
#define glSpriteParameterivSGIX		MANGLE(SpriteParameterivSGIX)
#define glStartInstrumentsSGIX		MANGLE(StartInstrumentsSGIX)
#define glStencilClearTagEXT		MANGLE(StencilClearTagEXT)
#define glStencilFunc		MANGLE(StencilFunc)
#define glStencilFuncSeparateATI		MANGLE(StencilFuncSeparateATI)
#define glStencilFuncSeparate		MANGLE(StencilFuncSeparate)
#define glStencilMask		MANGLE(StencilMask)
#define glStencilMaskSeparate		MANGLE(StencilMaskSeparate)
#define glStencilOp		MANGLE(StencilOp)
#define glStencilOpSeparateATI		MANGLE(StencilOpSeparateATI)
#define glStencilOpSeparate		MANGLE(StencilOpSeparate)
#define glStopInstrumentsSGIX		MANGLE(StopInstrumentsSGIX)
#define glStringMarkerGREMEDY		MANGLE(StringMarkerGREMEDY)
#define glSwizzleEXT		MANGLE(SwizzleEXT)
#define glTagSampleBufferSGIX		MANGLE(TagSampleBufferSGIX)
#define glTangent3bEXT		MANGLE(Tangent3bEXT)
#define glTangent3bvEXT		MANGLE(Tangent3bvEXT)
#define glTangent3dEXT		MANGLE(Tangent3dEXT)
#define glTangent3dvEXT		MANGLE(Tangent3dvEXT)
#define glTangent3fEXT		MANGLE(Tangent3fEXT)
#define glTangent3fvEXT		MANGLE(Tangent3fvEXT)
#define glTangent3iEXT		MANGLE(Tangent3iEXT)
#define glTangent3ivEXT		MANGLE(Tangent3ivEXT)
#define glTangent3sEXT		MANGLE(Tangent3sEXT)
#define glTangent3svEXT		MANGLE(Tangent3svEXT)
#define glTangentPointerEXT		MANGLE(TangentPointerEXT)
#define glTbufferMask3DFX		MANGLE(TbufferMask3DFX)
#define glTessellationFactorAMD		MANGLE(TessellationFactorAMD)
#define glTessellationModeAMD		MANGLE(TessellationModeAMD)
#define glTestFenceAPPLE		MANGLE(TestFenceAPPLE)
#define glTestFenceNV		MANGLE(TestFenceNV)
#define glTestObjectAPPLE		MANGLE(TestObjectAPPLE)
#define glTexBufferARB		MANGLE(TexBufferARB)
#define glTexBufferEXT		MANGLE(TexBufferEXT)
#define glTexBuffer		MANGLE(TexBuffer)
#define glTexBumpParameterfvATI		MANGLE(TexBumpParameterfvATI)
#define glTexBumpParameterivATI		MANGLE(TexBumpParameterivATI)
#define glTexCoord1d		MANGLE(TexCoord1d)
#define glTexCoord1dv		MANGLE(TexCoord1dv)
#define glTexCoord1f		MANGLE(TexCoord1f)
#define glTexCoord1fv		MANGLE(TexCoord1fv)
#define glTexCoord1hNV		MANGLE(TexCoord1hNV)
#define glTexCoord1hvNV		MANGLE(TexCoord1hvNV)
#define glTexCoord1i		MANGLE(TexCoord1i)
#define glTexCoord1iv		MANGLE(TexCoord1iv)
#define glTexCoord1s		MANGLE(TexCoord1s)
#define glTexCoord1sv		MANGLE(TexCoord1sv)
#define glTexCoord2d		MANGLE(TexCoord2d)
#define glTexCoord2dv		MANGLE(TexCoord2dv)
#define glTexCoord2fColor3fVertex3fSUN		MANGLE(TexCoord2fColor3fVertex3fSUN)
#define glTexCoord2fColor3fVertex3fvSUN		MANGLE(TexCoord2fColor3fVertex3fvSUN)
#define glTexCoord2fColor4fNormal3fVertex3fSUN		MANGLE(TexCoord2fColor4fNormal3fVertex3fSUN)
#define glTexCoord2fColor4fNormal3fVertex3fvSUN		MANGLE(TexCoord2fColor4fNormal3fVertex3fvSUN)
#define glTexCoord2fColor4ubVertex3fSUN		MANGLE(TexCoord2fColor4ubVertex3fSUN)
#define glTexCoord2fColor4ubVertex3fvSUN		MANGLE(TexCoord2fColor4ubVertex3fvSUN)
#define glTexCoord2f		MANGLE(TexCoord2f)
#define glTexCoord2fNormal3fVertex3fSUN		MANGLE(TexCoord2fNormal3fVertex3fSUN)
#define glTexCoord2fNormal3fVertex3fvSUN		MANGLE(TexCoord2fNormal3fVertex3fvSUN)
#define glTexCoord2fVertex3fSUN		MANGLE(TexCoord2fVertex3fSUN)
#define glTexCoord2fVertex3fvSUN		MANGLE(TexCoord2fVertex3fvSUN)
#define glTexCoord2fv		MANGLE(TexCoord2fv)
#define glTexCoord2hNV		MANGLE(TexCoord2hNV)
#define glTexCoord2hvNV		MANGLE(TexCoord2hvNV)
#define glTexCoord2i		MANGLE(TexCoord2i)
#define glTexCoord2iv		MANGLE(TexCoord2iv)
#define glTexCoord2s		MANGLE(TexCoord2s)
#define glTexCoord2sv		MANGLE(TexCoord2sv)
#define glTexCoord3d		MANGLE(TexCoord3d)
#define glTexCoord3dv		MANGLE(TexCoord3dv)
#define glTexCoord3f		MANGLE(TexCoord3f)
#define glTexCoord3fv		MANGLE(TexCoord3fv)
#define glTexCoord3hNV		MANGLE(TexCoord3hNV)
#define glTexCoord3hvNV		MANGLE(TexCoord3hvNV)
#define glTexCoord3i		MANGLE(TexCoord3i)
#define glTexCoord3iv		MANGLE(TexCoord3iv)
#define glTexCoord3s		MANGLE(TexCoord3s)
#define glTexCoord3sv		MANGLE(TexCoord3sv)
#define glTexCoord4d		MANGLE(TexCoord4d)
#define glTexCoord4dv		MANGLE(TexCoord4dv)
#define glTexCoord4fColor4fNormal3fVertex4fSUN		MANGLE(TexCoord4fColor4fNormal3fVertex4fSUN)
#define glTexCoord4fColor4fNormal3fVertex4fvSUN		MANGLE(TexCoord4fColor4fNormal3fVertex4fvSUN)
#define glTexCoord4f		MANGLE(TexCoord4f)
#define glTexCoord4fVertex4fSUN		MANGLE(TexCoord4fVertex4fSUN)
#define glTexCoord4fVertex4fvSUN		MANGLE(TexCoord4fVertex4fvSUN)
#define glTexCoord4fv		MANGLE(TexCoord4fv)
#define glTexCoord4hNV		MANGLE(TexCoord4hNV)
#define glTexCoord4hvNV		MANGLE(TexCoord4hvNV)
#define glTexCoord4i		MANGLE(TexCoord4i)
#define glTexCoord4iv		MANGLE(TexCoord4iv)
#define glTexCoord4s		MANGLE(TexCoord4s)
#define glTexCoord4sv		MANGLE(TexCoord4sv)
#define glTexCoordFormatNV		MANGLE(TexCoordFormatNV)
#define glTexCoordPointerEXT		MANGLE(TexCoordPointerEXT)
#define glTexCoordPointerListIBM		MANGLE(TexCoordPointerListIBM)
#define glTexCoordPointer		MANGLE(TexCoordPointer)
#define glTexCoordPointervINTEL		MANGLE(TexCoordPointervINTEL)
#define glTexEnvf		MANGLE(TexEnvf)
#define glTexEnvfv		MANGLE(TexEnvfv)
#define glTexEnvi		MANGLE(TexEnvi)
#define glTexEnviv		MANGLE(TexEnviv)
#define glTexFilterFuncSGIS		MANGLE(TexFilterFuncSGIS)
#define glTexGend		MANGLE(TexGend)
#define glTexGendv		MANGLE(TexGendv)
#define glTexGenf		MANGLE(TexGenf)
#define glTexGenfv		MANGLE(TexGenfv)
#define glTexGeni		MANGLE(TexGeni)
#define glTexGeniv		MANGLE(TexGeniv)
#define glTexImage1D		MANGLE(TexImage1D)
#define glTexImage2D		MANGLE(TexImage2D)
#define glTexImage2DMultisample		MANGLE(TexImage2DMultisample)
#define glTexImage3DEXT		MANGLE(TexImage3DEXT)
#define glTexImage3D		MANGLE(TexImage3D)
#define glTexImage3DMultisample		MANGLE(TexImage3DMultisample)
#define glTexImage4DSGIS		MANGLE(TexImage4DSGIS)
#define glTexParameterf		MANGLE(TexParameterf)
#define glTexParameterfv		MANGLE(TexParameterfv)
#define glTexParameterIivEXT		MANGLE(TexParameterIivEXT)
#define glTexParameterIiv		MANGLE(TexParameterIiv)
#define glTexParameteri		MANGLE(TexParameteri)
#define glTexParameterIuivEXT		MANGLE(TexParameterIuivEXT)
#define glTexParameterIuiv		MANGLE(TexParameterIuiv)
#define glTexParameteriv		MANGLE(TexParameteriv)
#define glTexRenderbufferNV		MANGLE(TexRenderbufferNV)
#define glTexSubImage1DEXT		MANGLE(TexSubImage1DEXT)
#define glTexSubImage1D		MANGLE(TexSubImage1D)
#define glTexSubImage2DEXT		MANGLE(TexSubImage2DEXT)
#define glTexSubImage2D		MANGLE(TexSubImage2D)
#define glTexSubImage3DEXT		MANGLE(TexSubImage3DEXT)
#define glTexSubImage3D		MANGLE(TexSubImage3D)
#define glTexSubImage4DSGIS		MANGLE(TexSubImage4DSGIS)
#define glTextureBarrierNV		MANGLE(TextureBarrierNV)
#define glTextureBufferEXT		MANGLE(TextureBufferEXT)
#define glTextureColorMaskSGIS		MANGLE(TextureColorMaskSGIS)
#define glTextureImage1DEXT		MANGLE(TextureImage1DEXT)
#define glTextureImage2DEXT		MANGLE(TextureImage2DEXT)
#define glTextureImage3DEXT		MANGLE(TextureImage3DEXT)
#define glTextureLightEXT		MANGLE(TextureLightEXT)
#define glTextureMaterialEXT		MANGLE(TextureMaterialEXT)
#define glTextureNormalEXT		MANGLE(TextureNormalEXT)
#define glTextureParameterfEXT		MANGLE(TextureParameterfEXT)
#define glTextureParameterfvEXT		MANGLE(TextureParameterfvEXT)
#define glTextureParameteriEXT		MANGLE(TextureParameteriEXT)
#define glTextureParameterIivEXT		MANGLE(TextureParameterIivEXT)
#define glTextureParameterIuivEXT		MANGLE(TextureParameterIuivEXT)
#define glTextureParameterivEXT		MANGLE(TextureParameterivEXT)
#define glTextureRangeAPPLE		MANGLE(TextureRangeAPPLE)
#define glTextureRenderbufferEXT		MANGLE(TextureRenderbufferEXT)
#define glTextureSubImage1DEXT		MANGLE(TextureSubImage1DEXT)
#define glTextureSubImage2DEXT		MANGLE(TextureSubImage2DEXT)
#define glTextureSubImage3DEXT		MANGLE(TextureSubImage3DEXT)
#define glTrackMatrixNV		MANGLE(TrackMatrixNV)
#define glTransformFeedbackAttribsNV		MANGLE(TransformFeedbackAttribsNV)
#define glTransformFeedbackVaryingsEXT		MANGLE(TransformFeedbackVaryingsEXT)
#define glTransformFeedbackVaryings		MANGLE(TransformFeedbackVaryings)
#define glTransformFeedbackVaryingsNV		MANGLE(TransformFeedbackVaryingsNV)
#define glTranslated		MANGLE(Translated)
#define glTranslatef		MANGLE(Translatef)
#define glUniform1fARB		MANGLE(Uniform1fARB)
#define glUniform1f		MANGLE(Uniform1f)
#define glUniform1fvARB		MANGLE(Uniform1fvARB)
#define glUniform1fv		MANGLE(Uniform1fv)
#define glUniform1iARB		MANGLE(Uniform1iARB)
#define glUniform1i		MANGLE(Uniform1i)
#define glUniform1ivARB		MANGLE(Uniform1ivARB)
#define glUniform1iv		MANGLE(Uniform1iv)
#define glUniform1uiEXT		MANGLE(Uniform1uiEXT)
#define glUniform1ui		MANGLE(Uniform1ui)
#define glUniform1uivEXT		MANGLE(Uniform1uivEXT)
#define glUniform1uiv		MANGLE(Uniform1uiv)
#define glUniform2fARB		MANGLE(Uniform2fARB)
#define glUniform2f		MANGLE(Uniform2f)
#define glUniform2fvARB		MANGLE(Uniform2fvARB)
#define glUniform2fv		MANGLE(Uniform2fv)
#define glUniform2iARB		MANGLE(Uniform2iARB)
#define glUniform2i		MANGLE(Uniform2i)
#define glUniform2ivARB		MANGLE(Uniform2ivARB)
#define glUniform2iv		MANGLE(Uniform2iv)
#define glUniform2uiEXT		MANGLE(Uniform2uiEXT)
#define glUniform2ui		MANGLE(Uniform2ui)
#define glUniform2uivEXT		MANGLE(Uniform2uivEXT)
#define glUniform2uiv		MANGLE(Uniform2uiv)
#define glUniform3fARB		MANGLE(Uniform3fARB)
#define glUniform3f		MANGLE(Uniform3f)
#define glUniform3fvARB		MANGLE(Uniform3fvARB)
#define glUniform3fv		MANGLE(Uniform3fv)
#define glUniform3iARB		MANGLE(Uniform3iARB)
#define glUniform3i		MANGLE(Uniform3i)
#define glUniform3ivARB		MANGLE(Uniform3ivARB)
#define glUniform3iv		MANGLE(Uniform3iv)
#define glUniform3uiEXT		MANGLE(Uniform3uiEXT)
#define glUniform3ui		MANGLE(Uniform3ui)
#define glUniform3uivEXT		MANGLE(Uniform3uivEXT)
#define glUniform3uiv		MANGLE(Uniform3uiv)
#define glUniform4fARB		MANGLE(Uniform4fARB)
#define glUniform4f		MANGLE(Uniform4f)
#define glUniform4fvARB		MANGLE(Uniform4fvARB)
#define glUniform4fv		MANGLE(Uniform4fv)
#define glUniform4iARB		MANGLE(Uniform4iARB)
#define glUniform4i		MANGLE(Uniform4i)
#define glUniform4ivARB		MANGLE(Uniform4ivARB)
#define glUniform4iv		MANGLE(Uniform4iv)
#define glUniform4uiEXT		MANGLE(Uniform4uiEXT)
#define glUniform4ui		MANGLE(Uniform4ui)
#define glUniform4uivEXT		MANGLE(Uniform4uivEXT)
#define glUniform4uiv		MANGLE(Uniform4uiv)
#define glUniformBlockBinding		MANGLE(UniformBlockBinding)
#define glUniformBufferEXT		MANGLE(UniformBufferEXT)
#define glUniformMatrix2fvARB		MANGLE(UniformMatrix2fvARB)
#define glUniformMatrix2fv		MANGLE(UniformMatrix2fv)
#define glUniformMatrix2x3fv		MANGLE(UniformMatrix2x3fv)
#define glUniformMatrix2x4fv		MANGLE(UniformMatrix2x4fv)
#define glUniformMatrix3fvARB		MANGLE(UniformMatrix3fvARB)
#define glUniformMatrix3fv		MANGLE(UniformMatrix3fv)
#define glUniformMatrix3x2fv		MANGLE(UniformMatrix3x2fv)
#define glUniformMatrix3x4fv		MANGLE(UniformMatrix3x4fv)
#define glUniformMatrix4fvARB		MANGLE(UniformMatrix4fvARB)
#define glUniformMatrix4fv		MANGLE(UniformMatrix4fv)
#define glUniformMatrix4x2fv		MANGLE(UniformMatrix4x2fv)
#define glUniformMatrix4x3fv		MANGLE(UniformMatrix4x3fv)
#define glUniformui64NV		MANGLE(Uniformui64NV)
#define glUniformui64vNV		MANGLE(Uniformui64vNV)
#define glUnlockArraysEXT		MANGLE(UnlockArraysEXT)
#define glUnmapBufferARB		MANGLE(UnmapBufferARB)
#define glUnmapBuffer		MANGLE(UnmapBuffer)
#define glUnmapNamedBufferEXT		MANGLE(UnmapNamedBufferEXT)
#define glUnmapObjectBufferATI		MANGLE(UnmapObjectBufferATI)
#define glUpdateObjectBufferATI		MANGLE(UpdateObjectBufferATI)
#define glUseProgram		MANGLE(UseProgram)
#define glUseProgramObjectARB		MANGLE(UseProgramObjectARB)
#define glUseShaderProgramEXT		MANGLE(UseShaderProgramEXT)
#define glValidateProgramARB		MANGLE(ValidateProgramARB)
#define glValidateProgram		MANGLE(ValidateProgram)
#define glVariantArrayObjectATI		MANGLE(VariantArrayObjectATI)
#define glVariantbvEXT		MANGLE(VariantbvEXT)
#define glVariantdvEXT		MANGLE(VariantdvEXT)
#define glVariantfvEXT		MANGLE(VariantfvEXT)
#define glVariantivEXT		MANGLE(VariantivEXT)
#define glVariantPointerEXT		MANGLE(VariantPointerEXT)
#define glVariantsvEXT		MANGLE(VariantsvEXT)
#define glVariantubvEXT		MANGLE(VariantubvEXT)
#define glVariantuivEXT		MANGLE(VariantuivEXT)
#define glVariantusvEXT		MANGLE(VariantusvEXT)
#define glVertex2d		MANGLE(Vertex2d)
#define glVertex2dv		MANGLE(Vertex2dv)
#define glVertex2f		MANGLE(Vertex2f)
#define glVertex2fv		MANGLE(Vertex2fv)
#define glVertex2hNV		MANGLE(Vertex2hNV)
#define glVertex2hvNV		MANGLE(Vertex2hvNV)
#define glVertex2i		MANGLE(Vertex2i)
#define glVertex2iv		MANGLE(Vertex2iv)
#define glVertex2s		MANGLE(Vertex2s)
#define glVertex2sv		MANGLE(Vertex2sv)
#define glVertex3d		MANGLE(Vertex3d)
#define glVertex3dv		MANGLE(Vertex3dv)
#define glVertex3f		MANGLE(Vertex3f)
#define glVertex3fv		MANGLE(Vertex3fv)
#define glVertex3hNV		MANGLE(Vertex3hNV)
#define glVertex3hvNV		MANGLE(Vertex3hvNV)
#define glVertex3i		MANGLE(Vertex3i)
#define glVertex3iv		MANGLE(Vertex3iv)
#define glVertex3s		MANGLE(Vertex3s)
#define glVertex3sv		MANGLE(Vertex3sv)
#define glVertex4d		MANGLE(Vertex4d)
#define glVertex4dv		MANGLE(Vertex4dv)
#define glVertex4f		MANGLE(Vertex4f)
#define glVertex4fv		MANGLE(Vertex4fv)
#define glVertex4hNV		MANGLE(Vertex4hNV)
#define glVertex4hvNV		MANGLE(Vertex4hvNV)
#define glVertex4i		MANGLE(Vertex4i)
#define glVertex4iv		MANGLE(Vertex4iv)
#define glVertex4s		MANGLE(Vertex4s)
#define glVertex4sv		MANGLE(Vertex4sv)
#define glVertexArrayParameteriAPPLE		MANGLE(VertexArrayParameteriAPPLE)
#define glVertexArrayRangeAPPLE		MANGLE(VertexArrayRangeAPPLE)
#define glVertexArrayRangeNV		MANGLE(VertexArrayRangeNV)
#define glVertexAttrib1dARB		MANGLE(VertexAttrib1dARB)
#define glVertexAttrib1d		MANGLE(VertexAttrib1d)
#define glVertexAttrib1dNV		MANGLE(VertexAttrib1dNV)
#define glVertexAttrib1dvARB		MANGLE(VertexAttrib1dvARB)
#define glVertexAttrib1dv		MANGLE(VertexAttrib1dv)
#define glVertexAttrib1dvNV		MANGLE(VertexAttrib1dvNV)
#define glVertexAttrib1fARB		MANGLE(VertexAttrib1fARB)
#define glVertexAttrib1f		MANGLE(VertexAttrib1f)
#define glVertexAttrib1fNV		MANGLE(VertexAttrib1fNV)
#define glVertexAttrib1fvARB		MANGLE(VertexAttrib1fvARB)
#define glVertexAttrib1fv		MANGLE(VertexAttrib1fv)
#define glVertexAttrib1fvNV		MANGLE(VertexAttrib1fvNV)
#define glVertexAttrib1hNV		MANGLE(VertexAttrib1hNV)
#define glVertexAttrib1hvNV		MANGLE(VertexAttrib1hvNV)
#define glVertexAttrib1sARB		MANGLE(VertexAttrib1sARB)
#define glVertexAttrib1s		MANGLE(VertexAttrib1s)
#define glVertexAttrib1sNV		MANGLE(VertexAttrib1sNV)
#define glVertexAttrib1svARB		MANGLE(VertexAttrib1svARB)
#define glVertexAttrib1sv		MANGLE(VertexAttrib1sv)
#define glVertexAttrib1svNV		MANGLE(VertexAttrib1svNV)
#define glVertexAttrib2dARB		MANGLE(VertexAttrib2dARB)
#define glVertexAttrib2d		MANGLE(VertexAttrib2d)
#define glVertexAttrib2dNV		MANGLE(VertexAttrib2dNV)
#define glVertexAttrib2dvARB		MANGLE(VertexAttrib2dvARB)
#define glVertexAttrib2dv		MANGLE(VertexAttrib2dv)
#define glVertexAttrib2dvNV		MANGLE(VertexAttrib2dvNV)
#define glVertexAttrib2fARB		MANGLE(VertexAttrib2fARB)
#define glVertexAttrib2f		MANGLE(VertexAttrib2f)
#define glVertexAttrib2fNV		MANGLE(VertexAttrib2fNV)
#define glVertexAttrib2fvARB		MANGLE(VertexAttrib2fvARB)
#define glVertexAttrib2fv		MANGLE(VertexAttrib2fv)
#define glVertexAttrib2fvNV		MANGLE(VertexAttrib2fvNV)
#define glVertexAttrib2hNV		MANGLE(VertexAttrib2hNV)
#define glVertexAttrib2hvNV		MANGLE(VertexAttrib2hvNV)
#define glVertexAttrib2sARB		MANGLE(VertexAttrib2sARB)
#define glVertexAttrib2s		MANGLE(VertexAttrib2s)
#define glVertexAttrib2sNV		MANGLE(VertexAttrib2sNV)
#define glVertexAttrib2svARB		MANGLE(VertexAttrib2svARB)
#define glVertexAttrib2sv		MANGLE(VertexAttrib2sv)
#define glVertexAttrib2svNV		MANGLE(VertexAttrib2svNV)
#define glVertexAttrib3dARB		MANGLE(VertexAttrib3dARB)
#define glVertexAttrib3d		MANGLE(VertexAttrib3d)
#define glVertexAttrib3dNV		MANGLE(VertexAttrib3dNV)
#define glVertexAttrib3dvARB		MANGLE(VertexAttrib3dvARB)
#define glVertexAttrib3dv		MANGLE(VertexAttrib3dv)
#define glVertexAttrib3dvNV		MANGLE(VertexAttrib3dvNV)
#define glVertexAttrib3fARB		MANGLE(VertexAttrib3fARB)
#define glVertexAttrib3f		MANGLE(VertexAttrib3f)
#define glVertexAttrib3fNV		MANGLE(VertexAttrib3fNV)
#define glVertexAttrib3fvARB		MANGLE(VertexAttrib3fvARB)
#define glVertexAttrib3fv		MANGLE(VertexAttrib3fv)
#define glVertexAttrib3fvNV		MANGLE(VertexAttrib3fvNV)
#define glVertexAttrib3hNV		MANGLE(VertexAttrib3hNV)
#define glVertexAttrib3hvNV		MANGLE(VertexAttrib3hvNV)
#define glVertexAttrib3sARB		MANGLE(VertexAttrib3sARB)
#define glVertexAttrib3s		MANGLE(VertexAttrib3s)
#define glVertexAttrib3sNV		MANGLE(VertexAttrib3sNV)
#define glVertexAttrib3svARB		MANGLE(VertexAttrib3svARB)
#define glVertexAttrib3sv		MANGLE(VertexAttrib3sv)
#define glVertexAttrib3svNV		MANGLE(VertexAttrib3svNV)
#define glVertexAttrib4bvARB		MANGLE(VertexAttrib4bvARB)
#define glVertexAttrib4bv		MANGLE(VertexAttrib4bv)
#define glVertexAttrib4dARB		MANGLE(VertexAttrib4dARB)
#define glVertexAttrib4d		MANGLE(VertexAttrib4d)
#define glVertexAttrib4dNV		MANGLE(VertexAttrib4dNV)
#define glVertexAttrib4dvARB		MANGLE(VertexAttrib4dvARB)
#define glVertexAttrib4dv		MANGLE(VertexAttrib4dv)
#define glVertexAttrib4dvNV		MANGLE(VertexAttrib4dvNV)
#define glVertexAttrib4fARB		MANGLE(VertexAttrib4fARB)
#define glVertexAttrib4f		MANGLE(VertexAttrib4f)
#define glVertexAttrib4fNV		MANGLE(VertexAttrib4fNV)
#define glVertexAttrib4fvARB		MANGLE(VertexAttrib4fvARB)
#define glVertexAttrib4fv		MANGLE(VertexAttrib4fv)
#define glVertexAttrib4fvNV		MANGLE(VertexAttrib4fvNV)
#define glVertexAttrib4hNV		MANGLE(VertexAttrib4hNV)
#define glVertexAttrib4hvNV		MANGLE(VertexAttrib4hvNV)
#define glVertexAttrib4ivARB		MANGLE(VertexAttrib4ivARB)
#define glVertexAttrib4iv		MANGLE(VertexAttrib4iv)
#define glVertexAttrib4NbvARB		MANGLE(VertexAttrib4NbvARB)
#define glVertexAttrib4Nbv		MANGLE(VertexAttrib4Nbv)
#define glVertexAttrib4NivARB		MANGLE(VertexAttrib4NivARB)
#define glVertexAttrib4Niv		MANGLE(VertexAttrib4Niv)
#define glVertexAttrib4NsvARB		MANGLE(VertexAttrib4NsvARB)
#define glVertexAttrib4Nsv		MANGLE(VertexAttrib4Nsv)
#define glVertexAttrib4NubARB		MANGLE(VertexAttrib4NubARB)
#define glVertexAttrib4Nub		MANGLE(VertexAttrib4Nub)
#define glVertexAttrib4NubvARB		MANGLE(VertexAttrib4NubvARB)
#define glVertexAttrib4Nubv		MANGLE(VertexAttrib4Nubv)
#define glVertexAttrib4NuivARB		MANGLE(VertexAttrib4NuivARB)
#define glVertexAttrib4Nuiv		MANGLE(VertexAttrib4Nuiv)
#define glVertexAttrib4NusvARB		MANGLE(VertexAttrib4NusvARB)
#define glVertexAttrib4Nusv		MANGLE(VertexAttrib4Nusv)
#define glVertexAttrib4sARB		MANGLE(VertexAttrib4sARB)
#define glVertexAttrib4s		MANGLE(VertexAttrib4s)
#define glVertexAttrib4sNV		MANGLE(VertexAttrib4sNV)
#define glVertexAttrib4svARB		MANGLE(VertexAttrib4svARB)
#define glVertexAttrib4sv		MANGLE(VertexAttrib4sv)
#define glVertexAttrib4svNV		MANGLE(VertexAttrib4svNV)
#define glVertexAttrib4ubNV		MANGLE(VertexAttrib4ubNV)
#define glVertexAttrib4ubvARB		MANGLE(VertexAttrib4ubvARB)
#define glVertexAttrib4ubv		MANGLE(VertexAttrib4ubv)
#define glVertexAttrib4ubvNV		MANGLE(VertexAttrib4ubvNV)
#define glVertexAttrib4uivARB		MANGLE(VertexAttrib4uivARB)
#define glVertexAttrib4uiv		MANGLE(VertexAttrib4uiv)
#define glVertexAttrib4usvARB		MANGLE(VertexAttrib4usvARB)
#define glVertexAttrib4usv		MANGLE(VertexAttrib4usv)
#define glVertexAttribArrayObjectATI		MANGLE(VertexAttribArrayObjectATI)
#define glVertexAttribDivisorARB		MANGLE(VertexAttribDivisorARB)
#define glVertexAttribFormatNV		MANGLE(VertexAttribFormatNV)
#define glVertexAttribI1iEXT		MANGLE(VertexAttribI1iEXT)
#define glVertexAttribI1i		MANGLE(VertexAttribI1i)
#define glVertexAttribI1ivEXT		MANGLE(VertexAttribI1ivEXT)
#define glVertexAttribI1iv		MANGLE(VertexAttribI1iv)
#define glVertexAttribI1uiEXT		MANGLE(VertexAttribI1uiEXT)
#define glVertexAttribI1ui		MANGLE(VertexAttribI1ui)
#define glVertexAttribI1uivEXT		MANGLE(VertexAttribI1uivEXT)
#define glVertexAttribI1uiv		MANGLE(VertexAttribI1uiv)
#define glVertexAttribI2iEXT		MANGLE(VertexAttribI2iEXT)
#define glVertexAttribI2i		MANGLE(VertexAttribI2i)
#define glVertexAttribI2ivEXT		MANGLE(VertexAttribI2ivEXT)
#define glVertexAttribI2iv		MANGLE(VertexAttribI2iv)
#define glVertexAttribI2uiEXT		MANGLE(VertexAttribI2uiEXT)
#define glVertexAttribI2ui		MANGLE(VertexAttribI2ui)
#define glVertexAttribI2uivEXT		MANGLE(VertexAttribI2uivEXT)
#define glVertexAttribI2uiv		MANGLE(VertexAttribI2uiv)
#define glVertexAttribI3iEXT		MANGLE(VertexAttribI3iEXT)
#define glVertexAttribI3i		MANGLE(VertexAttribI3i)
#define glVertexAttribI3ivEXT		MANGLE(VertexAttribI3ivEXT)
#define glVertexAttribI3iv		MANGLE(VertexAttribI3iv)
#define glVertexAttribI3uiEXT		MANGLE(VertexAttribI3uiEXT)
#define glVertexAttribI3ui		MANGLE(VertexAttribI3ui)
#define glVertexAttribI3uivEXT		MANGLE(VertexAttribI3uivEXT)
#define glVertexAttribI3uiv		MANGLE(VertexAttribI3uiv)
#define glVertexAttribI4bvEXT		MANGLE(VertexAttribI4bvEXT)
#define glVertexAttribI4bv		MANGLE(VertexAttribI4bv)
#define glVertexAttribI4iEXT		MANGLE(VertexAttribI4iEXT)
#define glVertexAttribI4i		MANGLE(VertexAttribI4i)
#define glVertexAttribI4ivEXT		MANGLE(VertexAttribI4ivEXT)
#define glVertexAttribI4iv		MANGLE(VertexAttribI4iv)
#define glVertexAttribI4svEXT		MANGLE(VertexAttribI4svEXT)
#define glVertexAttribI4sv		MANGLE(VertexAttribI4sv)
#define glVertexAttribI4ubvEXT		MANGLE(VertexAttribI4ubvEXT)
#define glVertexAttribI4ubv		MANGLE(VertexAttribI4ubv)
#define glVertexAttribI4uiEXT		MANGLE(VertexAttribI4uiEXT)
#define glVertexAttribI4ui		MANGLE(VertexAttribI4ui)
#define glVertexAttribI4uivEXT		MANGLE(VertexAttribI4uivEXT)
#define glVertexAttribI4uiv		MANGLE(VertexAttribI4uiv)
#define glVertexAttribI4usvEXT		MANGLE(VertexAttribI4usvEXT)
#define glVertexAttribI4usv		MANGLE(VertexAttribI4usv)
#define glVertexAttribIFormatNV		MANGLE(VertexAttribIFormatNV)
#define glVertexAttribIPointerEXT		MANGLE(VertexAttribIPointerEXT)
#define glVertexAttribIPointer		MANGLE(VertexAttribIPointer)
#define glVertexAttribPointerARB		MANGLE(VertexAttribPointerARB)
#define glVertexAttribPointer		MANGLE(VertexAttribPointer)
#define glVertexAttribPointerNV		MANGLE(VertexAttribPointerNV)
#define glVertexAttribs1dvNV		MANGLE(VertexAttribs1dvNV)
#define glVertexAttribs1fvNV		MANGLE(VertexAttribs1fvNV)
#define glVertexAttribs1hvNV		MANGLE(VertexAttribs1hvNV)
#define glVertexAttribs1svNV		MANGLE(VertexAttribs1svNV)
#define glVertexAttribs2dvNV		MANGLE(VertexAttribs2dvNV)
#define glVertexAttribs2fvNV		MANGLE(VertexAttribs2fvNV)
#define glVertexAttribs2hvNV		MANGLE(VertexAttribs2hvNV)
#define glVertexAttribs2svNV		MANGLE(VertexAttribs2svNV)
#define glVertexAttribs3dvNV		MANGLE(VertexAttribs3dvNV)
#define glVertexAttribs3fvNV		MANGLE(VertexAttribs3fvNV)
#define glVertexAttribs3hvNV		MANGLE(VertexAttribs3hvNV)
#define glVertexAttribs3svNV		MANGLE(VertexAttribs3svNV)
#define glVertexAttribs4dvNV		MANGLE(VertexAttribs4dvNV)
#define glVertexAttribs4fvNV		MANGLE(VertexAttribs4fvNV)
#define glVertexAttribs4hvNV		MANGLE(VertexAttribs4hvNV)
#define glVertexAttribs4svNV		MANGLE(VertexAttribs4svNV)
#define glVertexAttribs4ubvNV		MANGLE(VertexAttribs4ubvNV)
#define glVertexBlendARB		MANGLE(VertexBlendARB)
#define glVertexBlendEnvfATI		MANGLE(VertexBlendEnvfATI)
#define glVertexBlendEnviATI		MANGLE(VertexBlendEnviATI)
#define glVertexFormatNV		MANGLE(VertexFormatNV)
#define glVertexPointerEXT		MANGLE(VertexPointerEXT)
#define glVertexPointerListIBM		MANGLE(VertexPointerListIBM)
#define glVertexPointer		MANGLE(VertexPointer)
#define glVertexPointervINTEL		MANGLE(VertexPointervINTEL)
#define glVertexStream1dATI		MANGLE(VertexStream1dATI)
#define glVertexStream1dvATI		MANGLE(VertexStream1dvATI)
#define glVertexStream1fATI		MANGLE(VertexStream1fATI)
#define glVertexStream1fvATI		MANGLE(VertexStream1fvATI)
#define glVertexStream1iATI		MANGLE(VertexStream1iATI)
#define glVertexStream1ivATI		MANGLE(VertexStream1ivATI)
#define glVertexStream1sATI		MANGLE(VertexStream1sATI)
#define glVertexStream1svATI		MANGLE(VertexStream1svATI)
#define glVertexStream2dATI		MANGLE(VertexStream2dATI)
#define glVertexStream2dvATI		MANGLE(VertexStream2dvATI)
#define glVertexStream2fATI		MANGLE(VertexStream2fATI)
#define glVertexStream2fvATI		MANGLE(VertexStream2fvATI)
#define glVertexStream2iATI		MANGLE(VertexStream2iATI)
#define glVertexStream2ivATI		MANGLE(VertexStream2ivATI)
#define glVertexStream2sATI		MANGLE(VertexStream2sATI)
#define glVertexStream2svATI		MANGLE(VertexStream2svATI)
#define glVertexStream3dATI		MANGLE(VertexStream3dATI)
#define glVertexStream3dvATI		MANGLE(VertexStream3dvATI)
#define glVertexStream3fATI		MANGLE(VertexStream3fATI)
#define glVertexStream3fvATI		MANGLE(VertexStream3fvATI)
#define glVertexStream3iATI		MANGLE(VertexStream3iATI)
#define glVertexStream3ivATI		MANGLE(VertexStream3ivATI)
#define glVertexStream3sATI		MANGLE(VertexStream3sATI)
#define glVertexStream3svATI		MANGLE(VertexStream3svATI)
#define glVertexStream4dATI		MANGLE(VertexStream4dATI)
#define glVertexStream4dvATI		MANGLE(VertexStream4dvATI)
#define glVertexStream4fATI		MANGLE(VertexStream4fATI)
#define glVertexStream4fvATI		MANGLE(VertexStream4fvATI)
#define glVertexStream4iATI		MANGLE(VertexStream4iATI)
#define glVertexStream4ivATI		MANGLE(VertexStream4ivATI)
#define glVertexStream4sATI		MANGLE(VertexStream4sATI)
#define glVertexStream4svATI		MANGLE(VertexStream4svATI)
#define glVertexWeightfEXT		MANGLE(VertexWeightfEXT)
#define glVertexWeightfvEXT		MANGLE(VertexWeightfvEXT)
#define glVertexWeighthNV		MANGLE(VertexWeighthNV)
#define glVertexWeighthvNV		MANGLE(VertexWeighthvNV)
#define glVertexWeightPointerEXT		MANGLE(VertexWeightPointerEXT)
#define glVideoCaptureNV		MANGLE(VideoCaptureNV)
#define glVideoCaptureStreamParameterdvNV		MANGLE(VideoCaptureStreamParameterdvNV)
#define glVideoCaptureStreamParameterfvNV		MANGLE(VideoCaptureStreamParameterfvNV)
#define glVideoCaptureStreamParameterivNV		MANGLE(VideoCaptureStreamParameterivNV)
#define glViewport		MANGLE(Viewport)
#define glWaitSync		MANGLE(WaitSync)
#define glWeightbvARB		MANGLE(WeightbvARB)
#define glWeightdvARB		MANGLE(WeightdvARB)
#define glWeightfvARB		MANGLE(WeightfvARB)
#define glWeightivARB		MANGLE(WeightivARB)
#define glWeightPointerARB		MANGLE(WeightPointerARB)
#define glWeightsvARB		MANGLE(WeightsvARB)
#define glWeightubvARB		MANGLE(WeightubvARB)
#define glWeightuivARB		MANGLE(WeightuivARB)
#define glWeightusvARB		MANGLE(WeightusvARB)
#define glWindowPos2dARB		MANGLE(WindowPos2dARB)
#define glWindowPos2d		MANGLE(WindowPos2d)
#define glWindowPos2dMESA		MANGLE(WindowPos2dMESA)
#define glWindowPos2dvARB		MANGLE(WindowPos2dvARB)
#define glWindowPos2dv		MANGLE(WindowPos2dv)
#define glWindowPos2dvMESA		MANGLE(WindowPos2dvMESA)
#define glWindowPos2fARB		MANGLE(WindowPos2fARB)
#define glWindowPos2f		MANGLE(WindowPos2f)
#define glWindowPos2fMESA		MANGLE(WindowPos2fMESA)
#define glWindowPos2fvARB		MANGLE(WindowPos2fvARB)
#define glWindowPos2fv		MANGLE(WindowPos2fv)
#define glWindowPos2fvMESA		MANGLE(WindowPos2fvMESA)
#define glWindowPos2iARB		MANGLE(WindowPos2iARB)
#define glWindowPos2i		MANGLE(WindowPos2i)
#define glWindowPos2iMESA		MANGLE(WindowPos2iMESA)
#define glWindowPos2ivARB		MANGLE(WindowPos2ivARB)
#define glWindowPos2iv		MANGLE(WindowPos2iv)
#define glWindowPos2ivMESA		MANGLE(WindowPos2ivMESA)
#define glWindowPos2sARB		MANGLE(WindowPos2sARB)
#define glWindowPos2s		MANGLE(WindowPos2s)
#define glWindowPos2sMESA		MANGLE(WindowPos2sMESA)
#define glWindowPos2svARB		MANGLE(WindowPos2svARB)
#define glWindowPos2sv		MANGLE(WindowPos2sv)
#define glWindowPos2svMESA		MANGLE(WindowPos2svMESA)
#define glWindowPos3dARB		MANGLE(WindowPos3dARB)
#define glWindowPos3d		MANGLE(WindowPos3d)
#define glWindowPos3dMESA		MANGLE(WindowPos3dMESA)
#define glWindowPos3dvARB		MANGLE(WindowPos3dvARB)
#define glWindowPos3dv		MANGLE(WindowPos3dv)
#define glWindowPos3dvMESA		MANGLE(WindowPos3dvMESA)
#define glWindowPos3fARB		MANGLE(WindowPos3fARB)
#define glWindowPos3f		MANGLE(WindowPos3f)
#define glWindowPos3fMESA		MANGLE(WindowPos3fMESA)
#define glWindowPos3fvARB		MANGLE(WindowPos3fvARB)
#define glWindowPos3fv		MANGLE(WindowPos3fv)
#define glWindowPos3fvMESA		MANGLE(WindowPos3fvMESA)
#define glWindowPos3iARB		MANGLE(WindowPos3iARB)
#define glWindowPos3i		MANGLE(WindowPos3i)
#define glWindowPos3iMESA		MANGLE(WindowPos3iMESA)
#define glWindowPos3ivARB		MANGLE(WindowPos3ivARB)
#define glWindowPos3iv		MANGLE(WindowPos3iv)
#define glWindowPos3ivMESA		MANGLE(WindowPos3ivMESA)
#define glWindowPos3sARB		MANGLE(WindowPos3sARB)
#define glWindowPos3s		MANGLE(WindowPos3s)
#define glWindowPos3sMESA		MANGLE(WindowPos3sMESA)
#define glWindowPos3svARB		MANGLE(WindowPos3svARB)
#define glWindowPos3sv		MANGLE(WindowPos3sv)
#define glWindowPos3svMESA		MANGLE(WindowPos3svMESA)
#define glWindowPos4dMESA		MANGLE(WindowPos4dMESA)
#define glWindowPos4dvMESA		MANGLE(WindowPos4dvMESA)
#define glWindowPos4fMESA		MANGLE(WindowPos4fMESA)
#define glWindowPos4fvMESA		MANGLE(WindowPos4fvMESA)
#define glWindowPos4iMESA		MANGLE(WindowPos4iMESA)
#define glWindowPos4ivMESA		MANGLE(WindowPos4ivMESA)
#define glWindowPos4sMESA		MANGLE(WindowPos4sMESA)
#define glWindowPos4svMESA		MANGLE(WindowPos4svMESA)
#define glWriteMaskEXT		MANGLE(WriteMaskEXT)

#endif /* GL_MANGLE_H */
Added jni/glshim/include/GL/glext.h.

more than 10,000 changes

Added jni/glshim/include/GL/glu.h.


































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
/*
 * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
 * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice including the dates of first publication and
 * either this permission notice or a reference to
 * http://oss.sgi.com/projects/FreeB/
 * shall be included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * Except as contained in this notice, the name of Silicon Graphics, Inc.
 * shall not be used in advertising or otherwise to promote the sale, use or
 * other dealings in this Software without prior written authorization from
 * Silicon Graphics, Inc.
 */

#ifndef __glu_h__
#define __glu_h__

#if defined(USE_MGL_NAMESPACE)
#include "glu_mangle.h"
#endif

#include <GL/gl.h>

#ifndef GLAPIENTRY
#if defined(_MSC_VER) || defined(__MINGW32__)
#define GLAPIENTRY __stdcall
#else
#define GLAPIENTRY
#endif
#endif

#ifndef GLAPIENTRYP
#define GLAPIENTRYP GLAPIENTRY *
#endif

#if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GLU32)
# undef GLAPI
# define GLAPI __declspec(dllexport)
#elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL)
/* tag specifying we're building for DLL runtime support */
# undef GLAPI
# define GLAPI __declspec(dllimport)
#elif !defined(GLAPI)
/* for use with static link lib build of Win32 edition only */
# define GLAPI extern
#endif /* _STATIC_MESA support */

#ifdef __cplusplus
extern "C" {
#endif

/*************************************************************/

/* Extensions */
#define GLU_EXT_object_space_tess          1
#define GLU_EXT_nurbs_tessellator          1

/* Boolean */
#define GLU_FALSE                          0
#define GLU_TRUE                           1

/* Version */
#define GLU_VERSION_1_1                    1
#define GLU_VERSION_1_2                    1
#define GLU_VERSION_1_3                    1

/* StringName */
#define GLU_VERSION                        100800
#define GLU_EXTENSIONS                     100801

/* ErrorCode */
#define GLU_INVALID_ENUM                   100900
#define GLU_INVALID_VALUE                  100901
#define GLU_OUT_OF_MEMORY                  100902
#define GLU_INCOMPATIBLE_GL_VERSION        100903
#define GLU_INVALID_OPERATION              100904

/* NurbsDisplay */
/*      GLU_FILL */
#define GLU_OUTLINE_POLYGON                100240
#define GLU_OUTLINE_PATCH                  100241

/* NurbsCallback */
#define GLU_NURBS_ERROR                    100103
#define GLU_ERROR                          100103
#define GLU_NURBS_BEGIN                    100164
#define GLU_NURBS_BEGIN_EXT                100164
#define GLU_NURBS_VERTEX                   100165
#define GLU_NURBS_VERTEX_EXT               100165
#define GLU_NURBS_NORMAL                   100166
#define GLU_NURBS_NORMAL_EXT               100166
#define GLU_NURBS_COLOR                    100167
#define GLU_NURBS_COLOR_EXT                100167
#define GLU_NURBS_TEXTURE_COORD            100168
#define GLU_NURBS_TEX_COORD_EXT            100168
#define GLU_NURBS_END                      100169
#define GLU_NURBS_END_EXT                  100169
#define GLU_NURBS_BEGIN_DATA               100170
#define GLU_NURBS_BEGIN_DATA_EXT           100170
#define GLU_NURBS_VERTEX_DATA              100171
#define GLU_NURBS_VERTEX_DATA_EXT          100171
#define GLU_NURBS_NORMAL_DATA              100172
#define GLU_NURBS_NORMAL_DATA_EXT          100172
#define GLU_NURBS_COLOR_DATA               100173
#define GLU_NURBS_COLOR_DATA_EXT           100173
#define GLU_NURBS_TEXTURE_COORD_DATA       100174
#define GLU_NURBS_TEX_COORD_DATA_EXT       100174
#define GLU_NURBS_END_DATA                 100175
#define GLU_NURBS_END_DATA_EXT             100175

/* NurbsError */
#define GLU_NURBS_ERROR1                   100251
#define GLU_NURBS_ERROR2                   100252
#define GLU_NURBS_ERROR3                   100253
#define GLU_NURBS_ERROR4                   100254
#define GLU_NURBS_ERROR5                   100255
#define GLU_NURBS_ERROR6                   100256
#define GLU_NURBS_ERROR7                   100257
#define GLU_NURBS_ERROR8                   100258
#define GLU_NURBS_ERROR9                   100259
#define GLU_NURBS_ERROR10                  100260
#define GLU_NURBS_ERROR11                  100261
#define GLU_NURBS_ERROR12                  100262
#define GLU_NURBS_ERROR13                  100263
#define GLU_NURBS_ERROR14                  100264
#define GLU_NURBS_ERROR15                  100265
#define GLU_NURBS_ERROR16                  100266
#define GLU_NURBS_ERROR17                  100267
#define GLU_NURBS_ERROR18                  100268
#define GLU_NURBS_ERROR19                  100269
#define GLU_NURBS_ERROR20                  100270
#define GLU_NURBS_ERROR21                  100271
#define GLU_NURBS_ERROR22                  100272
#define GLU_NURBS_ERROR23                  100273
#define GLU_NURBS_ERROR24                  100274
#define GLU_NURBS_ERROR25                  100275
#define GLU_NURBS_ERROR26                  100276
#define GLU_NURBS_ERROR27                  100277
#define GLU_NURBS_ERROR28                  100278
#define GLU_NURBS_ERROR29                  100279
#define GLU_NURBS_ERROR30                  100280
#define GLU_NURBS_ERROR31                  100281
#define GLU_NURBS_ERROR32                  100282
#define GLU_NURBS_ERROR33                  100283
#define GLU_NURBS_ERROR34                  100284
#define GLU_NURBS_ERROR35                  100285
#define GLU_NURBS_ERROR36                  100286
#define GLU_NURBS_ERROR37                  100287

/* NurbsProperty */
#define GLU_AUTO_LOAD_MATRIX               100200
#define GLU_CULLING                        100201
#define GLU_SAMPLING_TOLERANCE             100203
#define GLU_DISPLAY_MODE                   100204
#define GLU_PARAMETRIC_TOLERANCE           100202
#define GLU_SAMPLING_METHOD                100205
#define GLU_U_STEP                         100206
#define GLU_V_STEP                         100207
#define GLU_NURBS_MODE                     100160
#define GLU_NURBS_MODE_EXT                 100160
#define GLU_NURBS_TESSELLATOR              100161
#define GLU_NURBS_TESSELLATOR_EXT          100161
#define GLU_NURBS_RENDERER                 100162
#define GLU_NURBS_RENDERER_EXT             100162

/* NurbsSampling */
#define GLU_OBJECT_PARAMETRIC_ERROR        100208
#define GLU_OBJECT_PARAMETRIC_ERROR_EXT    100208
#define GLU_OBJECT_PATH_LENGTH             100209
#define GLU_OBJECT_PATH_LENGTH_EXT         100209
#define GLU_PATH_LENGTH                    100215
#define GLU_PARAMETRIC_ERROR               100216
#define GLU_DOMAIN_DISTANCE                100217

/* NurbsTrim */
#define GLU_MAP1_TRIM_2                    100210
#define GLU_MAP1_TRIM_3                    100211

/* QuadricDrawStyle */
#define GLU_POINT                          100010
#define GLU_LINE                           100011
#define GLU_FILL                           100012
#define GLU_SILHOUETTE                     100013

/* QuadricCallback */
/*      GLU_ERROR */

/* QuadricNormal */
#define GLU_SMOOTH                         100000
#define GLU_FLAT                           100001
#define GLU_NONE                           100002

/* QuadricOrientation */
#define GLU_OUTSIDE                        100020
#define GLU_INSIDE                         100021

/* TessCallback */
#define GLU_TESS_BEGIN                     100100
#define GLU_BEGIN                          100100
#define GLU_TESS_VERTEX                    100101
#define GLU_VERTEX                         100101
#define GLU_TESS_END                       100102
#define GLU_END                            100102
#define GLU_TESS_ERROR                     100103
#define GLU_TESS_EDGE_FLAG                 100104
#define GLU_EDGE_FLAG                      100104
#define GLU_TESS_COMBINE                   100105
#define GLU_TESS_BEGIN_DATA                100106
#define GLU_TESS_VERTEX_DATA               100107
#define GLU_TESS_END_DATA                  100108
#define GLU_TESS_ERROR_DATA                100109
#define GLU_TESS_EDGE_FLAG_DATA            100110
#define GLU_TESS_COMBINE_DATA              100111

/* TessContour */
#define GLU_CW                             100120
#define GLU_CCW                            100121
#define GLU_INTERIOR                       100122
#define GLU_EXTERIOR                       100123
#define GLU_UNKNOWN                        100124

/* TessProperty */
#define GLU_TESS_WINDING_RULE              100140
#define GLU_TESS_BOUNDARY_ONLY             100141
#define GLU_TESS_TOLERANCE                 100142

/* TessError */
#define GLU_TESS_ERROR1                    100151
#define GLU_TESS_ERROR2                    100152
#define GLU_TESS_ERROR3                    100153
#define GLU_TESS_ERROR4                    100154
#define GLU_TESS_ERROR5                    100155
#define GLU_TESS_ERROR6                    100156
#define GLU_TESS_ERROR7                    100157
#define GLU_TESS_ERROR8                    100158
#define GLU_TESS_MISSING_BEGIN_POLYGON     100151
#define GLU_TESS_MISSING_BEGIN_CONTOUR     100152
#define GLU_TESS_MISSING_END_POLYGON       100153
#define GLU_TESS_MISSING_END_CONTOUR       100154
#define GLU_TESS_COORD_TOO_LARGE           100155
#define GLU_TESS_NEED_COMBINE_CALLBACK     100156

/* TessWinding */
#define GLU_TESS_WINDING_ODD               100130
#define GLU_TESS_WINDING_NONZERO           100131
#define GLU_TESS_WINDING_POSITIVE          100132
#define GLU_TESS_WINDING_NEGATIVE          100133
#define GLU_TESS_WINDING_ABS_GEQ_TWO       100134

/*************************************************************/


#ifdef __cplusplus
class GLUnurbs;
class GLUquadric;
class GLUtesselator;
#else
typedef struct GLUnurbs GLUnurbs;
typedef struct GLUquadric GLUquadric;
typedef struct GLUtesselator GLUtesselator;
#endif

typedef GLUnurbs GLUnurbsObj;
typedef GLUquadric GLUquadricObj;
typedef GLUtesselator GLUtesselatorObj;
typedef GLUtesselator GLUtriangulatorObj;

#define GLU_TESS_MAX_COORD 1.0e150

/* Internal convenience typedefs */
typedef void (GLAPIENTRYP _GLUfuncptr)(void);

GLAPI void GLAPIENTRY gluBeginCurve (GLUnurbs* nurb);
GLAPI void GLAPIENTRY gluBeginPolygon (GLUtesselator* tess);
GLAPI void GLAPIENTRY gluBeginSurface (GLUnurbs* nurb);
GLAPI void GLAPIENTRY gluBeginTrim (GLUnurbs* nurb);
GLAPI GLint GLAPIENTRY gluBuild1DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
GLAPI GLint GLAPIENTRY gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);
GLAPI GLint GLAPIENTRY gluBuild2DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
GLAPI GLint GLAPIENTRY gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
GLAPI GLint GLAPIENTRY gluBuild3DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
GLAPI GLint GLAPIENTRY gluBuild3DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
GLAPI GLboolean GLAPIENTRY gluCheckExtension (const GLubyte *extName, const GLubyte *extString);
GLAPI void GLAPIENTRY gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks);
GLAPI void GLAPIENTRY gluDeleteNurbsRenderer (GLUnurbs* nurb);
GLAPI void GLAPIENTRY gluDeleteQuadric (GLUquadric* quad);
GLAPI void GLAPIENTRY gluDeleteTess (GLUtesselator* tess);
GLAPI void GLAPIENTRY gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops);
GLAPI void GLAPIENTRY gluEndCurve (GLUnurbs* nurb);
GLAPI void GLAPIENTRY gluEndPolygon (GLUtesselator* tess);
GLAPI void GLAPIENTRY gluEndSurface (GLUnurbs* nurb);
GLAPI void GLAPIENTRY gluEndTrim (GLUnurbs* nurb);
GLAPI const GLubyte * GLAPIENTRY gluErrorString (GLenum error);
GLAPI void GLAPIENTRY gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data);
GLAPI const GLubyte * GLAPIENTRY gluGetString (GLenum name);
GLAPI void GLAPIENTRY gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data);
GLAPI void GLAPIENTRY gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view);
GLAPI void GLAPIENTRY gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
GLAPI GLUnurbs* GLAPIENTRY gluNewNurbsRenderer (void);
GLAPI GLUquadric* GLAPIENTRY gluNewQuadric (void);
GLAPI GLUtesselator* GLAPIENTRY gluNewTess (void);
GLAPI void GLAPIENTRY gluNextContour (GLUtesselator* tess, GLenum type);
GLAPI void GLAPIENTRY gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc);
GLAPI void GLAPIENTRY gluNurbsCallbackData (GLUnurbs* nurb, GLvoid* userData);
GLAPI void GLAPIENTRY gluNurbsCallbackDataEXT (GLUnurbs* nurb, GLvoid* userData);
GLAPI void GLAPIENTRY gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type);
GLAPI void GLAPIENTRY gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value);
GLAPI void GLAPIENTRY gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type);
GLAPI void GLAPIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
GLAPI void GLAPIENTRY gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep);
GLAPI void GLAPIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
GLAPI void GLAPIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);
GLAPI GLint GLAPIENTRY gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);
GLAPI void GLAPIENTRY gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
GLAPI void GLAPIENTRY gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc);
GLAPI void GLAPIENTRY gluQuadricDrawStyle (GLUquadric* quad, GLenum draw);
GLAPI void GLAPIENTRY gluQuadricNormals (GLUquadric* quad, GLenum normal);
GLAPI void GLAPIENTRY gluQuadricOrientation (GLUquadric* quad, GLenum orientation);
GLAPI void GLAPIENTRY gluQuadricTexture (GLUquadric* quad, GLboolean texture);
GLAPI GLint GLAPIENTRY gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
GLAPI void GLAPIENTRY gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks);
GLAPI void GLAPIENTRY gluTessBeginContour (GLUtesselator* tess);
GLAPI void GLAPIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
GLAPI void GLAPIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
GLAPI void GLAPIENTRY gluTessEndContour (GLUtesselator* tess);
GLAPI void GLAPIENTRY gluTessEndPolygon (GLUtesselator* tess);
GLAPI void GLAPIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
GLAPI void GLAPIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
GLAPI void GLAPIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
GLAPI GLint GLAPIENTRY gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);
GLAPI GLint GLAPIENTRY gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW);

#ifdef __cplusplus
}
#endif

#endif /* __glu_h__ */
Added jni/glshim/include/GL/glu_mangle.h.












































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Mesa 3-D graphics library
 * Version:  3.0
 * Copyright (C) 1995-1998  Brian Paul
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */


#ifndef GLU_MANGLE_H
#define GLU_MANGLE_H


#define gluLookAt mgluLookAt
#define gluOrtho2D mgluOrtho2D
#define gluPerspective mgluPerspective
#define gluPickMatrix mgluPickMatrix
#define gluProject mgluProject
#define gluUnProject mgluUnProject
#define gluErrorString mgluErrorString
#define gluScaleImage mgluScaleImage
#define gluBuild1DMipmaps mgluBuild1DMipmaps
#define gluBuild2DMipmaps mgluBuild2DMipmaps
#define gluNewQuadric mgluNewQuadric
#define gluDeleteQuadric mgluDeleteQuadric
#define gluQuadricDrawStyle mgluQuadricDrawStyle
#define gluQuadricOrientation mgluQuadricOrientation
#define gluQuadricNormals mgluQuadricNormals
#define gluQuadricTexture mgluQuadricTexture
#define gluQuadricCallback mgluQuadricCallback
#define gluCylinder mgluCylinder
#define gluSphere mgluSphere
#define gluDisk mgluDisk
#define gluPartialDisk mgluPartialDisk
#define gluNewNurbsRenderer mgluNewNurbsRenderer
#define gluDeleteNurbsRenderer mgluDeleteNurbsRenderer
#define gluLoadSamplingMatrices mgluLoadSamplingMatrices
#define gluNurbsProperty mgluNurbsProperty
#define gluGetNurbsProperty mgluGetNurbsProperty
#define gluBeginCurve mgluBeginCurve
#define gluEndCurve mgluEndCurve
#define gluNurbsCurve mgluNurbsCurve
#define gluBeginSurface mgluBeginSurface
#define gluEndSurface mgluEndSurface
#define gluNurbsSurface mgluNurbsSurface
#define gluBeginTrim mgluBeginTrim
#define gluEndTrim mgluEndTrim
#define gluPwlCurve mgluPwlCurve
#define gluNurbsCallback mgluNurbsCallback
#define gluNewTess mgluNewTess
#define gluDeleteTess mgluDeleteTess
#define gluTessBeginPolygon mgluTessBeginPolygon
#define gluTessBeginContour mgluTessBeginContour
#define gluTessVertex mgluTessVertex
#define gluTessEndPolygon mgluTessEndPolygon
#define gluTessEndContour mgluTessEndContour
#define gluTessProperty mgluTessProperty
#define gluTessNormal mgluTessNormal
#define gluTessCallback mgluTessCallback
#define gluGetTessProperty mgluGetTessProperty
#define gluBeginPolygon mgluBeginPolygon
#define gluNextContour mgluNextContour
#define gluEndPolygon mgluEndPolygon
#define gluGetString mgluGetString
#define gluBuild1DMipmapLevels mgluBuild1DMipmapLevels
#define gluBuild2DMipmapLevels mgluBuild2DMipmapLevels
#define gluBuild3DMipmapLevels mgluBuild3DMipmapLevels
#define gluBuild3DMipmaps mgluBuild3DMipmaps
#define gluCheckExtension mgluCheckExtension
#define gluUnProject4 mgluUnProject4
#define gluNurbsCallbackData mgluNurbsCallbackData
#define gluNurbsCallbackDataEXT mgluNurbsCallbackDataEXT

#endif
Added jni/glshim/include/GL/glx.h.




























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
/*
 * Mesa 3-D graphics library
 * Version:  6.5
 * 
 * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */


#ifndef GLX_H
#define GLX_H


#ifdef __VMS
#include <GL/vms_x_fix.h>
# ifdef __cplusplus
/* VMS Xlib.h gives problems with C++.
 * this avoids a bunch of trivial warnings */
#pragma message disable nosimpint
#endif
#endif
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#ifdef __VMS
# ifdef __cplusplus
#pragma message enable nosimpint
#endif
#endif
#include <GL/gl.h>


#if defined(USE_MGL_NAMESPACE)
#include "glx_mangle.h"
#endif


#ifdef __cplusplus
extern "C" {
#endif


#define GLX_VERSION_1_1		1
#define GLX_VERSION_1_2		1
#define GLX_VERSION_1_3		1
#define GLX_VERSION_1_4		1

#define GLX_EXTENSION_NAME   "GLX"



/*
 * Tokens for glXChooseVisual and glXGetConfig:
 */
#define GLX_USE_GL		1
#define GLX_BUFFER_SIZE		2
#define GLX_LEVEL		3
#define GLX_RGBA		4
#define GLX_DOUBLEBUFFER	5
#define GLX_STEREO		6
#define GLX_AUX_BUFFERS		7
#define GLX_RED_SIZE		8
#define GLX_GREEN_SIZE		9
#define GLX_BLUE_SIZE		10
#define GLX_ALPHA_SIZE		11
#define GLX_DEPTH_SIZE		12
#define GLX_STENCIL_SIZE	13
#define GLX_ACCUM_RED_SIZE	14
#define GLX_ACCUM_GREEN_SIZE	15
#define GLX_ACCUM_BLUE_SIZE	16
#define GLX_ACCUM_ALPHA_SIZE	17


/*
 * Error codes returned by glXGetConfig:
 */
#define GLX_BAD_SCREEN		1
#define GLX_BAD_ATTRIBUTE	2
#define GLX_NO_EXTENSION	3
#define GLX_BAD_VISUAL		4
#define GLX_BAD_CONTEXT		5
#define GLX_BAD_VALUE       	6
#define GLX_BAD_ENUM		7


/*
 * GLX 1.1 and later:
 */
#define GLX_VENDOR		1
#define GLX_VERSION		2
#define GLX_EXTENSIONS 		3


/*
 * GLX 1.3 and later:
 */
#define GLX_CONFIG_CAVEAT		0x20
#define GLX_DONT_CARE			0xFFFFFFFF
#define GLX_X_VISUAL_TYPE		0x22
#define GLX_TRANSPARENT_TYPE		0x23
#define GLX_TRANSPARENT_INDEX_VALUE	0x24
#define GLX_TRANSPARENT_RED_VALUE	0x25
#define GLX_TRANSPARENT_GREEN_VALUE	0x26
#define GLX_TRANSPARENT_BLUE_VALUE	0x27
#define GLX_TRANSPARENT_ALPHA_VALUE	0x28
#define GLX_WINDOW_BIT			0x00000001
#define GLX_PIXMAP_BIT			0x00000002
#define GLX_PBUFFER_BIT			0x00000004
#define GLX_AUX_BUFFERS_BIT		0x00000010
#define GLX_FRONT_LEFT_BUFFER_BIT	0x00000001
#define GLX_FRONT_RIGHT_BUFFER_BIT	0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT	0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT	0x00000008
#define GLX_DEPTH_BUFFER_BIT		0x00000020
#define GLX_STENCIL_BUFFER_BIT		0x00000040
#define GLX_ACCUM_BUFFER_BIT		0x00000080
#define GLX_NONE			0x8000
#define GLX_SLOW_CONFIG			0x8001
#define GLX_TRUE_COLOR			0x8002
#define GLX_DIRECT_COLOR		0x8003
#define GLX_PSEUDO_COLOR		0x8004
#define GLX_STATIC_COLOR		0x8005
#define GLX_GRAY_SCALE			0x8006
#define GLX_STATIC_GRAY			0x8007
#define GLX_TRANSPARENT_RGB		0x8008
#define GLX_TRANSPARENT_INDEX		0x8009
#define GLX_VISUAL_ID			0x800B
#define GLX_SCREEN			0x800C
#define GLX_NON_CONFORMANT_CONFIG	0x800D
#define GLX_DRAWABLE_TYPE		0x8010
#define GLX_RENDER_TYPE			0x8011
#define GLX_X_RENDERABLE		0x8012
#define GLX_FBCONFIG_ID			0x8013
#define GLX_RGBA_TYPE			0x8014
#define GLX_COLOR_INDEX_TYPE		0x8015
#define GLX_MAX_PBUFFER_WIDTH		0x8016
#define GLX_MAX_PBUFFER_HEIGHT		0x8017
#define GLX_MAX_PBUFFER_PIXELS		0x8018
#define GLX_PRESERVED_CONTENTS		0x801B
#define GLX_LARGEST_PBUFFER		0x801C
#define GLX_WIDTH			0x801D
#define GLX_HEIGHT			0x801E
#define GLX_EVENT_MASK			0x801F
#define GLX_DAMAGED			0x8020
#define GLX_SAVED			0x8021
#define GLX_WINDOW			0x8022
#define GLX_PBUFFER			0x8023
#define GLX_PBUFFER_HEIGHT              0x8040
#define GLX_PBUFFER_WIDTH               0x8041
#define GLX_RGBA_BIT			0x00000001
#define GLX_COLOR_INDEX_BIT		0x00000002
#define GLX_PBUFFER_CLOBBER_MASK	0x08000000


/*
 * GLX 1.4 and later:
 */
#define GLX_SAMPLE_BUFFERS              0x186a0 /*100000*/
#define GLX_SAMPLES                     0x186a1 /*100001*/



typedef struct __GLXcontextRec *GLXContext;
typedef XID GLXPixmap;
typedef XID GLXDrawable;
/* GLX 1.3 and later */
typedef struct __GLXFBConfigRec *GLXFBConfig;
typedef XID GLXFBConfigID;
typedef XID GLXContextID;
typedef XID GLXWindow;
typedef XID GLXPbuffer;


/*
** Events.
** __GLX_NUMBER_EVENTS is set to 17 to account for the BufferClobberSGIX
**  event - this helps initialization if the server supports the pbuffer
**  extension and the client doesn't.
*/
#define GLX_PbufferClobber	0
#define GLX_BufferSwapComplete	1

#define __GLX_NUMBER_EVENTS 17

extern XVisualInfo* glXChooseVisual( Display *dpy, int screen,
				     int *attribList );

extern GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis,
				    GLXContext shareList, Bool direct );

extern void glXDestroyContext( Display *dpy, GLXContext ctx );

extern Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable,
			    GLXContext ctx);

extern void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
			    unsigned long mask );

extern void glXSwapBuffers( Display *dpy, GLXDrawable drawable );

extern GLXPixmap glXCreateGLXPixmap( Display *dpy, XVisualInfo *visual,
				     Pixmap pixmap );

extern void glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap );

extern Bool glXQueryExtension( Display *dpy, int *errorb, int *event );

extern Bool glXQueryVersion( Display *dpy, int *maj, int *min );

extern Bool glXIsDirect( Display *dpy, GLXContext ctx );

extern int glXGetConfig( Display *dpy, XVisualInfo *visual,
			 int attrib, int *value );

extern GLXContext glXGetCurrentContext( void );

extern GLXDrawable glXGetCurrentDrawable( void );

extern void glXWaitGL( void );

extern void glXWaitX( void );

extern void glXUseXFont( Font font, int first, int count, int list );



/* GLX 1.1 and later */
extern const char *glXQueryExtensionsString( Display *dpy, int screen );

extern const char *glXQueryServerString( Display *dpy, int screen, int name );

extern const char *glXGetClientString( Display *dpy, int name );


/* GLX 1.2 and later */
extern Display *glXGetCurrentDisplay( void );


/* GLX 1.3 and later */
extern GLXFBConfig *glXChooseFBConfig( Display *dpy, int screen,
                                       const int *attribList, int *nitems );

extern int glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,
                                 int attribute, int *value );

extern GLXFBConfig *glXGetFBConfigs( Display *dpy, int screen,
                                     int *nelements );

extern XVisualInfo *glXGetVisualFromFBConfig( Display *dpy,
                                              GLXFBConfig config );

extern GLXWindow glXCreateWindow( Display *dpy, GLXFBConfig config,
                                  Window win, const int *attribList );

extern void glXDestroyWindow( Display *dpy, GLXWindow window );

extern GLXPixmap glXCreatePixmap( Display *dpy, GLXFBConfig config,
                                  Pixmap pixmap, const int *attribList );

extern void glXDestroyPixmap( Display *dpy, GLXPixmap pixmap );

extern GLXPbuffer glXCreatePbuffer( Display *dpy, GLXFBConfig config,
                                    const int *attribList );

extern void glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf );

extern void glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
                              unsigned int *value );

extern GLXContext glXCreateNewContext( Display *dpy, GLXFBConfig config,
                                       int renderType, GLXContext shareList,
                                       Bool direct );

extern Bool glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
                                   GLXDrawable read, GLXContext ctx );

extern GLXDrawable glXGetCurrentReadDrawable( void );

extern int glXQueryContext( Display *dpy, GLXContext ctx, int attribute,
                            int *value );

extern void glXSelectEvent( Display *dpy, GLXDrawable drawable,
                            unsigned long mask );

extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
                                 unsigned long *mask );

/* GLX 1.3 function pointer typedefs */
typedef GLXFBConfig * (* PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
typedef GLXFBConfig * (* PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
typedef int (* PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
typedef XVisualInfo * (* PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
typedef GLXWindow (* PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
typedef void (* PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
typedef GLXPixmap (* PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
typedef void (* PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
typedef GLXPbuffer (* PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
typedef void (* PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
typedef void (* PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
typedef GLXContext (* PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
typedef Bool (* PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
typedef GLXDrawable (* PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
typedef Display * (* PFNGLXGETCURRENTDISPLAYPROC) (void);
typedef int (* PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
typedef void (* PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
typedef void (* PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);


/*
 * ARB 2. GLX_ARB_get_proc_address
 */
#ifndef GLX_ARB_get_proc_address
#define GLX_ARB_get_proc_address 1

typedef void (*__GLXextFuncPtr)(void);
extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);

#endif /* GLX_ARB_get_proc_address */



/* GLX 1.4 and later */
extern void (*glXGetProcAddress(const GLubyte *procname))( void );

/* GLX 1.4 function pointer typedefs */
typedef __GLXextFuncPtr (* PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);


#ifndef GLX_GLXEXT_LEGACY

#include <GL/glxext.h>

#endif /* GLX_GLXEXT_LEGACY */


/**
 ** The following aren't in glxext.h yet.
 **/


/*
 * ???. GLX_NV_vertex_array_range
 */
#ifndef GLX_NV_vertex_array_range
#define GLX_NV_vertex_array_range

extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
extern void glXFreeMemoryNV(GLvoid *pointer);
typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);

#endif /* GLX_NV_vertex_array_range */


/*
 * ARB ?. GLX_ARB_render_texture
 * XXX This was never finalized!
 */
#ifndef GLX_ARB_render_texture
#define GLX_ARB_render_texture 1

extern Bool glXBindTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
extern Bool glXReleaseTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
extern Bool glXDrawableAttribARB(Display *dpy, GLXDrawable draw, const int *attribList);

#endif /* GLX_ARB_render_texture */


/*
 * Remove this when glxext.h is updated.
 */
#ifndef GLX_NV_float_buffer
#define GLX_NV_float_buffer 1

#define GLX_FLOAT_COMPONENTS_NV         0x20B0

#endif /* GLX_NV_float_buffer */



/*
 * #?. GLX_MESA_swap_frame_usage
 */
#ifndef GLX_MESA_swap_frame_usage
#define GLX_MESA_swap_frame_usage 1

extern int glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable, float *usage);
extern int glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
extern int glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
extern int glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);

typedef int (*PFNGLXGETFRAMEUSAGEMESAPROC) (Display *dpy, GLXDrawable drawable, float *usage);
typedef int (*PFNGLXBEGINFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
typedef int (*PFNGLXENDFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
typedef int (*PFNGLXQUERYFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);

#endif /* GLX_MESA_swap_frame_usage */



/*
 * #?. GLX_MESA_swap_control
 */
#ifndef GLX_MESA_swap_control
#define GLX_MESA_swap_control 1

extern int glXSwapIntervalMESA(unsigned int interval);
extern int glXGetSwapIntervalMESA(void);

typedef int (*PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval);
typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void);

#endif /* GLX_MESA_swap_control */



/*
 * #?. GLX_EXT_texture_from_pixmap
 * XXX not finished?
 */
#ifndef GLX_EXT_texture_from_pixmap
#define GLX_EXT_texture_from_pixmap 1

#define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
#define GLX_BIND_TO_TEXTURE_RGBA_EXT       0x20D1
#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT     0x20D2
#define GLX_BIND_TO_TEXTURE_TARGETS_EXT    0x20D3
#define GLX_Y_INVERTED_EXT                 0x20D4

#define GLX_TEXTURE_FORMAT_EXT             0x20D5
#define GLX_TEXTURE_TARGET_EXT             0x20D6
#define GLX_MIPMAP_TEXTURE_EXT             0x20D7

#define GLX_TEXTURE_FORMAT_NONE_EXT        0x20D8
#define GLX_TEXTURE_FORMAT_RGB_EXT         0x20D9
#define GLX_TEXTURE_FORMAT_RGBA_EXT        0x20DA

#define GLX_TEXTURE_1D_BIT_EXT             0x00000001
#define GLX_TEXTURE_2D_BIT_EXT             0x00000002
#define GLX_TEXTURE_RECTANGLE_BIT_EXT      0x00000004

#define GLX_TEXTURE_1D_EXT                 0x20DB
#define GLX_TEXTURE_2D_EXT                 0x20DC
#define GLX_TEXTURE_RECTANGLE_EXT          0x20DD

#define GLX_FRONT_LEFT_EXT                 0x20DE
#define GLX_FRONT_RIGHT_EXT                0x20DF
#define GLX_BACK_LEFT_EXT                  0x20E0
#define GLX_BACK_RIGHT_EXT                 0x20E1
#define GLX_FRONT_EXT                      GLX_FRONT_LEFT_EXT
#define GLX_BACK_EXT                       GLX_BACK_LEFT_EXT
#define GLX_AUX0_EXT                       0x20E2
#define GLX_AUX1_EXT                       0x20E3 
#define GLX_AUX2_EXT                       0x20E4 
#define GLX_AUX3_EXT                       0x20E5 
#define GLX_AUX4_EXT                       0x20E6 
#define GLX_AUX5_EXT                       0x20E7 
#define GLX_AUX6_EXT                       0x20E8
#define GLX_AUX7_EXT                       0x20E9 
#define GLX_AUX8_EXT                       0x20EA 
#define GLX_AUX9_EXT                       0x20EB

extern void glXBindTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
extern void glXReleaseTexImageEXT(Display *dpy, GLXDrawable drawable, int buffer);

#endif /* GLX_EXT_texture_from_pixmap */




/*** Should these go here, or in another header? */
/*
** GLX Events
*/
typedef struct {
    int event_type;		/* GLX_DAMAGED or GLX_SAVED */
    int draw_type;		/* GLX_WINDOW or GLX_PBUFFER */
    unsigned long serial;	/* # of last request processed by server */
    Bool send_event;		/* true if this came for SendEvent request */
    Display *display;		/* display the event was read from */
    GLXDrawable drawable;	/* XID of Drawable */
    unsigned int buffer_mask;	/* mask indicating which buffers are affected */
    unsigned int aux_buffer;	/* which aux buffer was affected */
    int x, y;
    int width, height;
    int count;			/* if nonzero, at least this many more */
} GLXPbufferClobberEvent;

typedef struct {
    int type;
    unsigned long serial;	/* # of last request processed by server */
    Bool send_event;		/* true if this came from a SendEvent request */
    Display *display;		/* Display the event was read from */
    GLXDrawable drawable;	/* drawable on which event was requested in event mask */
    int event_type;
    int64_t ust;
    int64_t msc;
    int64_t sbc;
} GLXBufferSwapComplete;

typedef union __GLXEvent {
    GLXPbufferClobberEvent glxpbufferclobber;
    GLXBufferSwapComplete glxbufferswapcomplete;
    long pad[24];
} GLXEvent;

#ifdef __cplusplus
}
#endif

#endif
Added jni/glshim/include/GL/glx_mangle.h.




































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
 * Mesa 3-D graphics library
 * Version:  6.5
 * 
 * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */


#ifndef GLX_MANGLE_H
#define GLX_MANGLE_H

#define glXChooseVisual mglXChooseVisual
#define glXCreateContext mglXCreateContext
#define glXDestroyContext mglXDestroyContext
#define glXMakeCurrent mglXMakeCurrent
#define glXCopyContext mglXCopyContext
#define glXSwapBuffers mglXSwapBuffers
#define glXCreateGLXPixmap mglXCreateGLXPixmap
#define glXDestroyGLXPixmap mglXDestroyGLXPixmap
#define glXQueryExtension mglXQueryExtension
#define glXQueryVersion mglXQueryVersion
#define glXIsDirect mglXIsDirect
#define glXGetConfig mglXGetConfig
#define glXGetCurrentContext mglXGetCurrentContext
#define glXGetCurrentDrawable mglXGetCurrentDrawable
#define glXWaitGL mglXWaitGL
#define glXWaitX mglXWaitX
#define glXUseXFont mglXUseXFont
#define glXQueryExtensionsString mglXQueryExtensionsString
#define glXQueryServerString mglXQueryServerString
#define glXGetClientString mglXGetClientString
#define glXCreateGLXPixmapMESA mglXCreateGLXPixmapMESA
#define glXReleaseBuffersMESA mglXReleaseBuffersMESA
#define glXCopySubBufferMESA mglXCopySubBufferMESA
#define glXGetVideoSyncSGI mglXGetVideoSyncSGI
#define glXWaitVideoSyncSGI mglXWaitVideoSyncSGI

/* GLX 1.2 */
#define glXGetCurrentDisplay mglXGetCurrentDisplay 

/* GLX 1.3 */
#define glXChooseFBConfig mglXChooseFBConfig          
#define glXGetFBConfigAttrib mglXGetFBConfigAttrib       
#define glXGetFBConfigs mglXGetFBConfigs            
#define glXGetVisualFromFBConfig mglXGetVisualFromFBConfig   
#define glXCreateWindow mglXCreateWindow            
#define glXDestroyWindow mglXDestroyWindow           
#define glXCreatePixmap mglXCreatePixmap            
#define glXDestroyPixmap mglXDestroyPixmap           
#define glXCreatePbuffer mglXCreatePbuffer           
#define glXDestroyPbuffer mglXDestroyPbuffer          
#define glXQueryDrawable mglXQueryDrawable           
#define glXCreateNewContext mglXCreateNewContext        
#define glXMakeContextCurrent mglXMakeContextCurrent      
#define glXGetCurrentReadDrawable mglXGetCurrentReadDrawable  
#define glXQueryContext mglXQueryContext            
#define glXSelectEvent mglXSelectEvent             
#define glXGetSelectedEvent mglXGetSelectedEvent    

/* GLX 1.4 */
#define glXGetProcAddress mglXGetProcAddress
#define glXGetProcAddressARB mglXGetProcAddressARB


#endif
Added jni/glshim/include/GL/glxext.h.


































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
#ifndef __glxext_h_
#define __glxext_h_

#ifdef __cplusplus
extern "C" {
#endif

/*
** Copyright (c) 2007-2010 The Khronos Group Inc.
** 
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
** 
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
** 
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

/* Function declaration macros - to move into glplatform.h */

#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#endif

#ifndef APIENTRY
#define APIENTRY
#endif
#ifndef APIENTRYP
#define APIENTRYP APIENTRY *
#endif
#ifndef GLAPI
#define GLAPI extern
#endif

/*************************************************************/

/* Header file version number, required by OpenGL ABI for Linux */
/* glxext.h last updated 2010/08/06 */
/* Current version at http://www.opengl.org/registry/ */
#define GLX_GLXEXT_VERSION 32

#ifndef GLX_VERSION_1_3
#define GLX_WINDOW_BIT                     0x00000001
#define GLX_PIXMAP_BIT                     0x00000002
#define GLX_PBUFFER_BIT                    0x00000004
#define GLX_RGBA_BIT                       0x00000001
#define GLX_COLOR_INDEX_BIT                0x00000002
#define GLX_PBUFFER_CLOBBER_MASK           0x08000000
#define GLX_FRONT_LEFT_BUFFER_BIT          0x00000001
#define GLX_FRONT_RIGHT_BUFFER_BIT         0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT           0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT          0x00000008
#define GLX_AUX_BUFFERS_BIT                0x00000010
#define GLX_DEPTH_BUFFER_BIT               0x00000020
#define GLX_STENCIL_BUFFER_BIT             0x00000040
#define GLX_ACCUM_BUFFER_BIT               0x00000080
#define GLX_CONFIG_CAVEAT                  0x20
#define GLX_X_VISUAL_TYPE                  0x22
#define GLX_TRANSPARENT_TYPE               0x23
#define GLX_TRANSPARENT_INDEX_VALUE        0x24
#define GLX_TRANSPARENT_RED_VALUE          0x25
#define GLX_TRANSPARENT_GREEN_VALUE        0x26
#define GLX_TRANSPARENT_BLUE_VALUE         0x27
#define GLX_TRANSPARENT_ALPHA_VALUE        0x28
#define GLX_DONT_CARE                      0xFFFFFFFF
#define GLX_NONE                           0x8000
#define GLX_SLOW_CONFIG                    0x8001
#define GLX_TRUE_COLOR                     0x8002
#define GLX_DIRECT_COLOR                   0x8003
#define GLX_PSEUDO_COLOR                   0x8004
#define GLX_STATIC_COLOR                   0x8005
#define GLX_GRAY_SCALE                     0x8006
#define GLX_STATIC_GRAY                    0x8007
#define GLX_TRANSPARENT_RGB                0x8008
#define GLX_TRANSPARENT_INDEX              0x8009
#define GLX_VISUAL_ID                      0x800B
#define GLX_SCREEN                         0x800C
#define GLX_NON_CONFORMANT_CONFIG          0x800D
#define GLX_DRAWABLE_TYPE                  0x8010
#define GLX_RENDER_TYPE                    0x8011
#define GLX_X_RENDERABLE                   0x8012
#define GLX_FBCONFIG_ID                    0x8013
#define GLX_RGBA_TYPE                      0x8014
#define GLX_COLOR_INDEX_TYPE               0x8015
#define GLX_MAX_PBUFFER_WIDTH              0x8016
#define GLX_MAX_PBUFFER_HEIGHT             0x8017
#define GLX_MAX_PBUFFER_PIXELS             0x8018
#define GLX_PRESERVED_CONTENTS             0x801B
#define GLX_LARGEST_PBUFFER                0x801C
#define GLX_WIDTH                          0x801D
#define GLX_HEIGHT                         0x801E
#define GLX_EVENT_MASK                     0x801F
#define GLX_DAMAGED                        0x8020
#define GLX_SAVED                          0x8021
#define GLX_WINDOW                         0x8022
#define GLX_PBUFFER                        0x8023
#define GLX_PBUFFER_HEIGHT                 0x8040
#define GLX_PBUFFER_WIDTH                  0x8041
#endif

#ifndef GLX_VERSION_1_4
#define GLX_SAMPLE_BUFFERS                 100000
#define GLX_SAMPLES                        100001
#endif

#ifndef GLX_ARB_get_proc_address
#endif

#ifndef GLX_ARB_multisample
#define GLX_SAMPLE_BUFFERS_ARB             100000
#define GLX_SAMPLES_ARB                    100001
#endif

#ifndef GLX_ARB_vertex_buffer_object
#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095
#endif

#ifndef GLX_ARB_fbconfig_float
#define GLX_RGBA_FLOAT_TYPE_ARB            0x20B9
#define GLX_RGBA_FLOAT_BIT_ARB             0x00000004
#endif

#ifndef GLX_ARB_framebuffer_sRGB
#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB   0x20B2
#endif

#ifndef GLX_ARB_create_context
#define GLX_CONTEXT_DEBUG_BIT_ARB          0x00000001
#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
#define GLX_CONTEXT_MAJOR_VERSION_ARB      0x2091
#define GLX_CONTEXT_MINOR_VERSION_ARB      0x2092
#define GLX_CONTEXT_FLAGS_ARB              0x2094
#endif

#ifndef GLX_ARB_create_context_profile
#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB   0x00000001
#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
#define GLX_CONTEXT_PROFILE_MASK_ARB       0x9126
#endif

#ifndef GLX_ARB_create_context_robustness
#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB  0x00000004
#define GLX_LOSE_CONTEXT_ON_RESET_ARB      0x8252
#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
#define GLX_NO_RESET_NOTIFICATION_ARB      0x8261
#endif

#ifndef GLX_SGIS_multisample
#define GLX_SAMPLE_BUFFERS_SGIS            100000
#define GLX_SAMPLES_SGIS                   100001
#endif

#ifndef GLX_EXT_visual_info
#define GLX_X_VISUAL_TYPE_EXT              0x22
#define GLX_TRANSPARENT_TYPE_EXT           0x23
#define GLX_TRANSPARENT_INDEX_VALUE_EXT    0x24
#define GLX_TRANSPARENT_RED_VALUE_EXT      0x25
#define GLX_TRANSPARENT_GREEN_VALUE_EXT    0x26
#define GLX_TRANSPARENT_BLUE_VALUE_EXT     0x27
#define GLX_TRANSPARENT_ALPHA_VALUE_EXT    0x28
#define GLX_NONE_EXT                       0x8000
#define GLX_TRUE_COLOR_EXT                 0x8002
#define GLX_DIRECT_COLOR_EXT               0x8003
#define GLX_PSEUDO_COLOR_EXT               0x8004
#define GLX_STATIC_COLOR_EXT               0x8005
#define GLX_GRAY_SCALE_EXT                 0x8006
#define GLX_STATIC_GRAY_EXT                0x8007
#define GLX_TRANSPARENT_RGB_EXT            0x8008
#define GLX_TRANSPARENT_INDEX_EXT          0x8009
#endif

#ifndef GLX_SGI_swap_control
#endif

#ifndef GLX_SGI_video_sync
#endif

#ifndef GLX_SGI_make_current_read
#endif

#ifndef GLX_SGIX_video_source
#endif

#ifndef GLX_EXT_visual_rating
#define GLX_VISUAL_CAVEAT_EXT              0x20
#define GLX_SLOW_VISUAL_EXT                0x8001
#define GLX_NON_CONFORMANT_VISUAL_EXT      0x800D
/* reuse GLX_NONE_EXT */
#endif

#ifndef GLX_EXT_import_context
#define GLX_SHARE_CONTEXT_EXT              0x800A
#define GLX_VISUAL_ID_EXT                  0x800B
#define GLX_SCREEN_EXT                     0x800C
#endif

#ifndef GLX_SGIX_fbconfig
#define GLX_WINDOW_BIT_SGIX                0x00000001
#define GLX_PIXMAP_BIT_SGIX                0x00000002
#define GLX_RGBA_BIT_SGIX                  0x00000001
#define GLX_COLOR_INDEX_BIT_SGIX           0x00000002
#define GLX_DRAWABLE_TYPE_SGIX             0x8010
#define GLX_RENDER_TYPE_SGIX               0x8011
#define GLX_X_RENDERABLE_SGIX              0x8012
#define GLX_FBCONFIG_ID_SGIX               0x8013
#define GLX_RGBA_TYPE_SGIX                 0x8014
#define GLX_COLOR_INDEX_TYPE_SGIX          0x8015
/* reuse GLX_SCREEN_EXT */
#endif

#ifndef GLX_SGIX_pbuffer
#define GLX_PBUFFER_BIT_SGIX               0x00000004
#define GLX_BUFFER_CLOBBER_MASK_SGIX       0x08000000
#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX     0x00000001
#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX    0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT_SGIX      0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX     0x00000008
#define GLX_AUX_BUFFERS_BIT_SGIX           0x00000010
#define GLX_DEPTH_BUFFER_BIT_SGIX          0x00000020
#define GLX_STENCIL_BUFFER_BIT_SGIX        0x00000040
#define GLX_ACCUM_BUFFER_BIT_SGIX          0x00000080
#define GLX_SAMPLE_BUFFERS_BIT_SGIX        0x00000100
#define GLX_MAX_PBUFFER_WIDTH_SGIX         0x8016
#define GLX_MAX_PBUFFER_HEIGHT_SGIX        0x8017
#define GLX_MAX_PBUFFER_PIXELS_SGIX        0x8018
#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX     0x8019
#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX    0x801A
#define GLX_PRESERVED_CONTENTS_SGIX        0x801B
#define GLX_LARGEST_PBUFFER_SGIX           0x801C
#define GLX_WIDTH_SGIX                     0x801D
#define GLX_HEIGHT_SGIX                    0x801E
#define GLX_EVENT_MASK_SGIX                0x801F
#define GLX_DAMAGED_SGIX                   0x8020
#define GLX_SAVED_SGIX                     0x8021
#define GLX_WINDOW_SGIX                    0x8022
#define GLX_PBUFFER_SGIX                   0x8023
#endif

#ifndef GLX_SGI_cushion
#endif

#ifndef GLX_SGIX_video_resize
#define GLX_SYNC_FRAME_SGIX                0x00000000
#define GLX_SYNC_SWAP_SGIX                 0x00000001
#endif

#ifndef GLX_SGIX_dmbuffer
#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX     0x8024
#endif

#ifndef GLX_SGIX_swap_group
#endif

#ifndef GLX_SGIX_swap_barrier
#endif

#ifndef GLX_SGIS_blended_overlay
#define GLX_BLENDED_RGBA_SGIS              0x8025
#endif

#ifndef GLX_SGIS_shared_multisample
#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
#endif

#ifndef GLX_SUN_get_transparent_index
#endif

#ifndef GLX_3DFX_multisample
#define GLX_SAMPLE_BUFFERS_3DFX            0x8050
#define GLX_SAMPLES_3DFX                   0x8051
#endif

#ifndef GLX_MESA_copy_sub_buffer
#endif

#ifndef GLX_MESA_pixmap_colormap
#endif

#ifndef GLX_MESA_release_buffers
#endif

#ifndef GLX_MESA_set_3dfx_mode
#define GLX_3DFX_WINDOW_MODE_MESA          0x1
#define GLX_3DFX_FULLSCREEN_MODE_MESA      0x2
#endif

#ifndef GLX_SGIX_visual_select_group
#define GLX_VISUAL_SELECT_GROUP_SGIX       0x8028
#endif

#ifndef GLX_OML_swap_method
#define GLX_SWAP_METHOD_OML                0x8060
#define GLX_SWAP_EXCHANGE_OML              0x8061
#define GLX_SWAP_COPY_OML                  0x8062
#define GLX_SWAP_UNDEFINED_OML             0x8063
#endif

#ifndef GLX_OML_sync_control
#endif

#ifndef GLX_NV_float_buffer
#define GLX_FLOAT_COMPONENTS_NV            0x20B0
#endif

#ifndef GLX_SGIX_hyperpipe
#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
#define GLX_BAD_HYPERPIPE_CONFIG_SGIX      91
#define GLX_BAD_HYPERPIPE_SGIX             92
#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX    0x00000001
#define GLX_HYPERPIPE_RENDER_PIPE_SGIX     0x00000002
#define GLX_PIPE_RECT_SGIX                 0x00000001
#define GLX_PIPE_RECT_LIMITS_SGIX          0x00000002
#define GLX_HYPERPIPE_STEREO_SGIX          0x00000003
#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX   0x00000004
#define GLX_HYPERPIPE_ID_SGIX              0x8030
#endif

#ifndef GLX_MESA_agp_offset
#endif

#ifndef GLX_EXT_fbconfig_packed_float
#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT   0x20B1
#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT    0x00000008
#endif

#ifndef GLX_EXT_framebuffer_sRGB
#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x20B2
#endif

#ifndef GLX_EXT_texture_from_pixmap
#define GLX_TEXTURE_1D_BIT_EXT             0x00000001
#define GLX_TEXTURE_2D_BIT_EXT             0x00000002
#define GLX_TEXTURE_RECTANGLE_BIT_EXT      0x00000004
#define GLX_BIND_TO_TEXTURE_RGB_EXT        0x20D0
#define GLX_BIND_TO_TEXTURE_RGBA_EXT       0x20D1
#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT     0x20D2
#define GLX_BIND_TO_TEXTURE_TARGETS_EXT    0x20D3
#define GLX_Y_INVERTED_EXT                 0x20D4
#define GLX_TEXTURE_FORMAT_EXT             0x20D5
#define GLX_TEXTURE_TARGET_EXT             0x20D6
#define GLX_MIPMAP_TEXTURE_EXT             0x20D7
#define GLX_TEXTURE_FORMAT_NONE_EXT        0x20D8
#define GLX_TEXTURE_FORMAT_RGB_EXT         0x20D9
#define GLX_TEXTURE_FORMAT_RGBA_EXT        0x20DA
#define GLX_TEXTURE_1D_EXT                 0x20DB
#define GLX_TEXTURE_2D_EXT                 0x20DC
#define GLX_TEXTURE_RECTANGLE_EXT          0x20DD
#define GLX_FRONT_LEFT_EXT                 0x20DE
#define GLX_FRONT_RIGHT_EXT                0x20DF
#define GLX_BACK_LEFT_EXT                  0x20E0
#define GLX_BACK_RIGHT_EXT                 0x20E1
#define GLX_FRONT_EXT                      GLX_FRONT_LEFT_EXT
#define GLX_BACK_EXT                       GLX_BACK_LEFT_EXT
#define GLX_AUX0_EXT                       0x20E2
#define GLX_AUX1_EXT                       0x20E3
#define GLX_AUX2_EXT                       0x20E4
#define GLX_AUX3_EXT                       0x20E5
#define GLX_AUX4_EXT                       0x20E6
#define GLX_AUX5_EXT                       0x20E7
#define GLX_AUX6_EXT                       0x20E8
#define GLX_AUX7_EXT                       0x20E9
#define GLX_AUX8_EXT                       0x20EA
#define GLX_AUX9_EXT                       0x20EB
#endif

#ifndef GLX_NV_present_video
#define GLX_NUM_VIDEO_SLOTS_NV             0x20F0
#endif

#ifndef GLX_NV_video_out
#define GLX_VIDEO_OUT_COLOR_NV             0x20C3
#define GLX_VIDEO_OUT_ALPHA_NV             0x20C4
#define GLX_VIDEO_OUT_DEPTH_NV             0x20C5
#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV   0x20C6
#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV   0x20C7
#define GLX_VIDEO_OUT_FRAME_NV             0x20C8
#define GLX_VIDEO_OUT_FIELD_1_NV           0x20C9
#define GLX_VIDEO_OUT_FIELD_2_NV           0x20CA
#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB
#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC
#endif

#ifndef GLX_NV_swap_group
#endif

#ifndef GLX_NV_video_capture
#define GLX_DEVICE_ID_NV                   0x20CD
#define GLX_UNIQUE_ID_NV                   0x20CE
#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV     0x20CF
#endif

#ifndef GLX_EXT_swap_control
#define GLX_SWAP_INTERVAL_EXT              0x20F1
#define GLX_MAX_SWAP_INTERVAL_EXT          0x20F2
#endif

#ifndef GLX_NV_copy_image
#endif

#ifndef GLX_INTEL_swap_event
#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000
#define GLX_EXCHANGE_COMPLETE_INTEL        0x8180
#define GLX_COPY_COMPLETE_INTEL            0x8181
#define GLX_FLIP_COMPLETE_INTEL            0x8182
#endif

#ifndef GLX_NV_multisample_coverage
#define GLX_COVERAGE_SAMPLES_NV            100001
#define GLX_COLOR_SAMPLES_NV               0x20B3
#endif

#ifndef GLX_AMD_gpu_association
#define GLX_GPU_VENDOR_AMD                 0x1F00
#define GLX_GPU_RENDERER_STRING_AMD        0x1F01
#define GLX_GPU_OPENGL_VERSION_STRING_AMD  0x1F02
#define GLX_GPU_FASTEST_TARGET_GPUS_AMD    0x21A2
#define GLX_GPU_RAM_AMD                    0x21A3
#define GLX_GPU_CLOCK_AMD                  0x21A4
#define GLX_GPU_NUM_PIPES_AMD              0x21A5
#define GLX_GPU_NUM_SIMD_AMD               0x21A6
#define GLX_GPU_NUM_RB_AMD                 0x21A7
#define GLX_GPU_NUM_SPI_AMD                0x21A8
#endif

#ifndef GLX_EXT_create_context_es2_profile
#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT    0x00000004
#endif


/*************************************************************/

#ifndef GLX_ARB_get_proc_address
typedef void (*__GLXextFuncPtr)(void);
#endif

#ifndef GLX_SGIX_video_source
typedef XID GLXVideoSourceSGIX;
#endif

#ifndef GLX_SGIX_fbconfig
typedef XID GLXFBConfigIDSGIX;
typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
#endif

#ifndef GLX_SGIX_pbuffer
typedef XID GLXPbufferSGIX;
typedef struct {
    int type;
    unsigned long serial;	  /* # of last request processed by server */
    Bool send_event;		  /* true if this came for SendEvent request */
    Display *display;		  /* display the event was read from */
    GLXDrawable drawable;	  /* i.d. of Drawable */
    int event_type;		  /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
    int draw_type;		  /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
    unsigned int mask;	  /* mask indicating which buffers are affected*/
    int x, y;
    int width, height;
    int count;		  /* if nonzero, at least this many more */
} GLXBufferClobberEventSGIX;
#endif

#ifndef GLX_NV_video_output
typedef unsigned int GLXVideoDeviceNV;
#endif

#ifndef GLX_NV_video_capture
typedef XID GLXVideoCaptureDeviceNV;
#endif

#ifndef GLEXT_64_TYPES_DEFINED
/* This code block is duplicated in glext.h, so must be protected */
#define GLEXT_64_TYPES_DEFINED
/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
/* (as used in the GLX_OML_sync_control extension). */
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#include <inttypes.h>
#elif defined(__sun__) || defined(__digital__)
#include <inttypes.h>
#if defined(__STDC__)
#if defined(__arch64__) || defined(_LP64)
typedef long int int64_t;
typedef unsigned long int uint64_t;
#else
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#endif /* __arch64__ */
#endif /* __STDC__ */
#elif defined( __VMS ) || defined(__sgi)
#include <inttypes.h>
#elif defined(__SCO__) || defined(__USLC__)
#include <stdint.h>
#elif defined(__UNIXOS2__) || defined(__SOL64__)
typedef long int int32_t;
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#elif defined(_WIN32) && defined(__GNUC__)
#include <stdint.h>
#elif defined(_WIN32)
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
#include <inttypes.h>     /* Fallback option */
#endif
#endif

#ifndef GLX_VERSION_1_3
#define GLX_VERSION_1_3 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXFBConfig * glXGetFBConfigs (Display *dpy, int screen, int *nelements);
extern GLXFBConfig * glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements);
extern int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value);
extern XVisualInfo * glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config);
extern GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
extern void glXDestroyWindow (Display *dpy, GLXWindow win);
extern GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
extern void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap);
extern GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list);
extern void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf);
extern void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
extern GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
extern Bool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
extern GLXDrawable glXGetCurrentReadDrawable (void);
extern Display * glXGetCurrentDisplay (void);
extern int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value);
extern void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask);
extern void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
#endif

#ifndef GLX_VERSION_1_4
#define GLX_VERSION_1_4 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern __GLXextFuncPtr glXGetProcAddress (const GLubyte *procName);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
#endif

#ifndef GLX_ARB_get_proc_address
#define GLX_ARB_get_proc_address 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
#endif

#ifndef GLX_ARB_multisample
#define GLX_ARB_multisample 1
#endif

#ifndef GLX_ARB_fbconfig_float
#define GLX_ARB_fbconfig_float 1
#endif

#ifndef GLX_ARB_framebuffer_sRGB
#define GLX_ARB_framebuffer_sRGB 1
#endif

#ifndef GLX_ARB_create_context
#define GLX_ARB_create_context 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
#endif

#ifndef GLX_ARB_create_context_profile
#define GLX_ARB_create_context_profile 1
#endif

#ifndef GLX_ARB_create_context_robustness
#define GLX_ARB_create_context_robustness 1
#endif

#ifndef GLX_SGIS_multisample
#define GLX_SGIS_multisample 1
#endif

#ifndef GLX_EXT_visual_info
#define GLX_EXT_visual_info 1
#endif

#ifndef GLX_SGI_swap_control
#define GLX_SGI_swap_control 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXSwapIntervalSGI (int interval);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
#endif

#ifndef GLX_SGI_video_sync
#define GLX_SGI_video_sync 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXGetVideoSyncSGI (unsigned int *count);
extern int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
#endif

#ifndef GLX_SGI_make_current_read
#define GLX_SGI_make_current_read 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
extern GLXDrawable glXGetCurrentReadDrawableSGI (void);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
#endif

#ifndef GLX_SGIX_video_source
#define GLX_SGIX_video_source 1
#ifdef _VL_H
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
extern void glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXVideoSourceSGIX ( * PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
typedef void ( * PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
#endif /* _VL_H */
#endif

#ifndef GLX_EXT_visual_rating
#define GLX_EXT_visual_rating 1
#endif

#ifndef GLX_EXT_import_context
#define GLX_EXT_import_context 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Display * glXGetCurrentDisplayEXT (void);
extern int glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value);
extern GLXContextID glXGetContextIDEXT (const GLXContext context);
extern GLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID);
extern void glXFreeContextEXT (Display *dpy, GLXContext context);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Display * ( * PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);
typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
#endif

#ifndef GLX_SGIX_fbconfig
#define GLX_SGIX_fbconfig 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
extern GLXFBConfigSGIX * glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements);
extern GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
extern GLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
extern XVisualInfo * glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config);
extern GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
#endif

#ifndef GLX_SGIX_pbuffer
#define GLX_SGIX_pbuffer 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
extern void glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf);
extern int glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
extern void glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask);
extern void glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXPbufferSGIX ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
typedef int ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
#endif

#ifndef GLX_SGI_cushion
#define GLX_SGI_cushion 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXCushionSGI (Display *dpy, Window window, float cushion);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
#endif

#ifndef GLX_SGIX_video_resize
#define GLX_SGIX_video_resize 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window);
extern int glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h);
extern int glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
extern int glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
extern int glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
#endif

#ifndef GLX_SGIX_dmbuffer
#define GLX_SGIX_dmbuffer 1
#ifdef _DM_BUFFER_H_
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
#endif /* _DM_BUFFER_H_ */
#endif

#ifndef GLX_SGIX_swap_group
#define GLX_SGIX_swap_group 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
#endif

#ifndef GLX_SGIX_swap_barrier
#define GLX_SGIX_swap_barrier 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier);
extern Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
#endif

#ifndef GLX_SUN_get_transparent_index
#define GLX_SUN_get_transparent_index 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Status glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
#endif

#ifndef GLX_MESA_copy_sub_buffer
#define GLX_MESA_copy_sub_buffer 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
#endif

#ifndef GLX_MESA_pixmap_colormap
#define GLX_MESA_pixmap_colormap 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
#endif

#ifndef GLX_MESA_release_buffers
#define GLX_MESA_release_buffers 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
#endif

#ifndef GLX_MESA_set_3dfx_mode
#define GLX_MESA_set_3dfx_mode 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXSet3DfxModeMESA (int mode);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
#endif

#ifndef GLX_SGIX_visual_select_group
#define GLX_SGIX_visual_select_group 1
#endif

#ifndef GLX_OML_swap_method
#define GLX_OML_swap_method 1
#endif

#ifndef GLX_OML_sync_control
#define GLX_OML_sync_control 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
extern Bool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
extern int64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
extern Bool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
extern Bool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);
typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);
typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);
typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);
typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);
#endif

#ifndef GLX_NV_float_buffer
#define GLX_NV_float_buffer 1
#endif

#ifndef GLX_SGIX_hyperpipe
#define GLX_SGIX_hyperpipe 1

typedef struct {
    char    pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
    int     networkId;
} GLXHyperpipeNetworkSGIX;

typedef struct {
    char    pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
    int     channel;
    unsigned int
      participationType;
    int     timeSlice;
} GLXHyperpipeConfigSGIX;

typedef struct {
    char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
    int srcXOrigin, srcYOrigin, srcWidth, srcHeight;
    int destXOrigin, destYOrigin, destWidth, destHeight;
} GLXPipeRect;

typedef struct {
    char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX];
    int XOrigin, YOrigin, maxHeight, maxWidth;
} GLXPipeRectLimits;

#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes);
extern int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
extern GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes);
extern int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId);
extern int glXBindHyperpipeSGIX (Display *dpy, int hpId);
extern int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
extern int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
extern int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);
typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);
typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);
typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);
typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);
typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);
typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);
typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);
#endif

#ifndef GLX_MESA_agp_offset
#define GLX_MESA_agp_offset 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern unsigned int glXGetAGPOffsetMESA (const void *pointer);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);
#endif

#ifndef GLX_EXT_fbconfig_packed_float
#define GLX_EXT_fbconfig_packed_float 1
#endif

#ifndef GLX_EXT_framebuffer_sRGB
#define GLX_EXT_framebuffer_sRGB 1
#endif

#ifndef GLX_EXT_texture_from_pixmap
#define GLX_EXT_texture_from_pixmap 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
extern void glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);
typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer);
#endif

#ifndef GLX_NV_present_video
#define GLX_NV_present_video 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern unsigned int * glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements);
extern int glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef unsigned int * ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);
typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
#endif

#ifndef GLX_NV_video_output
#define GLX_NV_video_output 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
extern int glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
extern int glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
extern int glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf);
extern int glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
extern int glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);
typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);
typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);
typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf);
typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);
typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);
#endif

#ifndef GLX_NV_swap_group
#define GLX_NV_swap_group 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group);
extern Bool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier);
extern Bool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
extern Bool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
extern Bool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count);
extern Bool glXResetFrameCountNV (Display *dpy, int screen);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group);
typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier);
typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);
typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);
typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count);
typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);
#endif

#ifndef GLX_NV_video_capture
#define GLX_NV_video_capture 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
extern GLXVideoCaptureDeviceNV * glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements);
extern void glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
extern int glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
extern void glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements);
typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
#endif

#ifndef GLX_EXT_swap_control
#define GLX_EXT_swap_control 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);
#endif

#ifndef GLX_NV_copy_image
#define GLX_NV_copy_image 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
#endif

#ifndef GLX_INTEL_swap_event
#define GLX_INTEL_swap_event 1
#endif

#ifndef GLX_NV_multisample_coverage
#define GLX_NV_multisample_coverage 1
#endif


#ifdef __cplusplus
}
#endif

#endif
Added jni/glshim/include/GL/internal/dri_interface.h.




























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
/*
 * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
 * Copyright 2007-2008 Red Hat, Inc.
 * (C) Copyright IBM Corporation 2004
 * All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * on the rights to use, copy, modify, merge, publish, distribute, sub
 * license, and/or sell copies of the Software, and to permit persons to whom
 * the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
 * USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/**
 * \file dri_interface.h
 *
 * This file contains all the types and functions that define the interface
 * between a DRI driver and driver loader.  Currently, the most common driver
 * loader is the XFree86 libGL.so.  However, other loaders do exist, and in
 * the future the server-side libglx.a will also be a loader.
 * 
 * \author Kevin E. Martin <kevin@precisioninsight.com>
 * \author Ian Romanick <idr@us.ibm.com>
 * \author Kristian Høgsberg <krh@redhat.com>
 */

#ifndef DRI_INTERFACE_H
#define DRI_INTERFACE_H

/* For archs with no drm.h */
#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__GNU__)
#ifndef __NOT_HAVE_DRM_H
#define __NOT_HAVE_DRM_H
#endif
#endif

#ifndef __NOT_HAVE_DRM_H
#include <drm.h>
#else
typedef unsigned int drm_context_t;
typedef unsigned int drm_drawable_t;
typedef struct drm_clip_rect drm_clip_rect_t;
#endif

/**
 * \name DRI interface structures
 *
 * The following structures define the interface between the GLX client
 * side library and the DRI (direct rendering infrastructure).
 */
/*@{*/
typedef struct __DRIdisplayRec		__DRIdisplay;
typedef struct __DRIscreenRec		__DRIscreen;
typedef struct __DRIcontextRec		__DRIcontext;
typedef struct __DRIdrawableRec		__DRIdrawable;
typedef struct __DRIconfigRec		__DRIconfig;
typedef struct __DRIframebufferRec	__DRIframebuffer;
typedef struct __DRIversionRec		__DRIversion;

typedef struct __DRIcoreExtensionRec		__DRIcoreExtension;
typedef struct __DRIextensionRec		__DRIextension;
typedef struct __DRIcopySubBufferExtensionRec	__DRIcopySubBufferExtension;
typedef struct __DRIswapControlExtensionRec	__DRIswapControlExtension;
typedef struct __DRIframeTrackingExtensionRec	__DRIframeTrackingExtension;
typedef struct __DRImediaStreamCounterExtensionRec	__DRImediaStreamCounterExtension;
typedef struct __DRItexOffsetExtensionRec	__DRItexOffsetExtension;
typedef struct __DRItexBufferExtensionRec	__DRItexBufferExtension;
typedef struct __DRIlegacyExtensionRec		__DRIlegacyExtension;
typedef struct __DRIswrastExtensionRec		__DRIswrastExtension;
typedef struct __DRIbufferRec			__DRIbuffer;
typedef struct __DRIdri2ExtensionRec		__DRIdri2Extension;
typedef struct __DRIdri2LoaderExtensionRec	__DRIdri2LoaderExtension;
typedef struct __DRI2flushExtensionRec	__DRI2flushExtension;

/*@}*/


/**
 * Extension struct.  Drivers 'inherit' from this struct by embedding
 * it as the first element in the extension struct.
 *
 * We never break API in for a DRI extension.  If we need to change
 * the way things work in a non-backwards compatible manner, we
 * introduce a new extension.  During a transition period, we can
 * leave both the old and the new extension in the driver, which
 * allows us to move to the new interface without having to update the
 * loader(s) in lock step.
 *
 * However, we can add entry points to an extension over time as long
 * as we don't break the old ones.  As we add entry points to an
 * extension, we increase the version number.  The corresponding
 * #define can be used to guard code that accesses the new entry
 * points at compile time and the version field in the extension
 * struct can be used at run-time to determine how to use the
 * extension.
 */
struct __DRIextensionRec {
    const char *name;
    int version;
};

/**
 * The first set of extension are the screen extensions, returned by
 * __DRIcore::getExtensions().  This entry point will return a list of
 * extensions and the loader can use the ones it knows about by
 * casting them to more specific extensions and advertising any GLX
 * extensions the DRI extensions enables.
 */

/**
 * Used by drivers to indicate support for setting the read drawable.
 */
#define __DRI_READ_DRAWABLE "DRI_ReadDrawable"
#define __DRI_READ_DRAWABLE_VERSION 1

/**
 * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension.
 */
#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer"
#define __DRI_COPY_SUB_BUFFER_VERSION 1
struct __DRIcopySubBufferExtensionRec {
    __DRIextension base;
    void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h);
};

/**
 * Used by drivers that implement the GLX_SGI_swap_control or
 * GLX_MESA_swap_control extension.
 */
#define __DRI_SWAP_CONTROL "DRI_SwapControl"
#define __DRI_SWAP_CONTROL_VERSION 1
struct __DRIswapControlExtensionRec {
    __DRIextension base;
    void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval);
    unsigned int (*getSwapInterval)(__DRIdrawable *drawable);
};

/**
 * Used by drivers that implement the GLX_MESA_swap_frame_usage extension.
 */
#define __DRI_FRAME_TRACKING "DRI_FrameTracking"
#define __DRI_FRAME_TRACKING_VERSION 1
struct __DRIframeTrackingExtensionRec {
    __DRIextension base;

    /**
     * Enable or disable frame usage tracking.
     * 
     * \since Internal API version 20030317.
     */
    int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable);

    /**
     * Retrieve frame usage information.
     * 
     * \since Internal API version 20030317.
     */
    int (*queryFrameTracking)(__DRIdrawable *drawable,
			      int64_t * sbc, int64_t * missedFrames,
			      float * lastMissedUsage, float * usage);
};


/**
 * Used by drivers that implement the GLX_SGI_video_sync extension.
 */
#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter"
#define __DRI_MEDIA_STREAM_COUNTER_VERSION 1
struct __DRImediaStreamCounterExtensionRec {
    __DRIextension base;

    /**
     * Wait for the MSC to equal target_msc, or, if that has already passed,
     * the next time (MSC % divisor) is equal to remainder.  If divisor is
     * zero, the function will return as soon as MSC is greater than or equal
     * to target_msc.
     */
    int (*waitForMSC)(__DRIdrawable *drawable,
		      int64_t target_msc, int64_t divisor, int64_t remainder,
		      int64_t * msc, int64_t * sbc);

    /**
     * Get the number of vertical refreshes since some point in time before
     * this function was first called (i.e., system start up).
     */
    int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable,
			  int64_t *msc);
};


#define __DRI_TEX_OFFSET "DRI_TexOffset"
#define __DRI_TEX_OFFSET_VERSION 1
struct __DRItexOffsetExtensionRec {
    __DRIextension base;

    /**
     * Method to override base texture image with a driver specific 'offset'.
     * The depth passed in allows e.g. to ignore the alpha channel of texture
     * images where the non-alpha components don't occupy a whole texel.
     *
     * For GLX_EXT_texture_from_pixmap with AIGLX.
     */
    void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname,
			 unsigned long long offset, GLint depth, GLuint pitch);
};


/* Valid values for format in the setTexBuffer2 function below.  These
 * values match the GLX tokens for compatibility reasons, but we
 * define them here since the DRI interface can't depend on GLX. */
#define __DRI_TEXTURE_FORMAT_NONE        0x20D8
#define __DRI_TEXTURE_FORMAT_RGB         0x20D9
#define __DRI_TEXTURE_FORMAT_RGBA        0x20DA

#define __DRI_TEX_BUFFER "DRI_TexBuffer"
#define __DRI_TEX_BUFFER_VERSION 2
struct __DRItexBufferExtensionRec {
    __DRIextension base;

    /**
     * Method to override base texture image with the contents of a
     * __DRIdrawable. 
     *
     * For GLX_EXT_texture_from_pixmap with AIGLX.  Deprecated in favor of
     * setTexBuffer2 in version 2 of this interface
     */
    void (*setTexBuffer)(__DRIcontext *pDRICtx,
			 GLint target,
			 __DRIdrawable *pDraw);

    /**
     * Method to override base texture image with the contents of a
     * __DRIdrawable, including the required texture format attribute.
     *
     * For GLX_EXT_texture_from_pixmap with AIGLX.
     */
    void (*setTexBuffer2)(__DRIcontext *pDRICtx,
			  GLint target,
			  GLint format,
			  __DRIdrawable *pDraw);
};

/**
 * Used by drivers that implement DRI2
 */
#define __DRI2_FLUSH "DRI2_Flush"
#define __DRI2_FLUSH_VERSION 3
struct __DRI2flushExtensionRec {
    __DRIextension base;
    void (*flush)(__DRIdrawable *drawable);

    /**
     * Ask the driver to call getBuffers/getBuffersWithFormat before
     * it starts rendering again.
     *
     * \param drawable the drawable to invalidate
     *
     * \since 3
     */
    void (*invalidate)(__DRIdrawable *drawable);
};


/**
 * XML document describing the configuration options supported by the
 * driver.
 */
extern const char __driConfigOptions[];

/*@}*/

/**
 * The following extensions describe loader features that the DRI
 * driver can make use of.  Some of these are mandatory, such as the
 * getDrawableInfo extension for DRI and the DRI Loader extensions for
 * DRI2, while others are optional, and if present allow the driver to
 * expose certain features.  The loader pass in a NULL terminated
 * array of these extensions to the driver in the createNewScreen
 * constructor.
 */

typedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension;
typedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension;
typedef struct __DRIdamageExtensionRec __DRIdamageExtension;
typedef struct __DRIloaderExtensionRec __DRIloaderExtension;
typedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension;


/**
 * Callback to getDrawableInfo protocol
 */
#define __DRI_GET_DRAWABLE_INFO "DRI_GetDrawableInfo"
#define __DRI_GET_DRAWABLE_INFO_VERSION 1
struct __DRIgetDrawableInfoExtensionRec {
    __DRIextension base;

    /**
     * This function is used to get information about the position, size, and
     * clip rects of a drawable.
     */
    GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable,
	unsigned int * index, unsigned int * stamp,
        int * x, int * y, int * width, int * height,
        int * numClipRects, drm_clip_rect_t ** pClipRects,
        int * backX, int * backY,
	int * numBackClipRects, drm_clip_rect_t ** pBackClipRects,
	void *loaderPrivate);
};

/**
 * Callback to get system time for media stream counter extensions.
 */
#define __DRI_SYSTEM_TIME "DRI_SystemTime"
#define __DRI_SYSTEM_TIME_VERSION 1
struct __DRIsystemTimeExtensionRec {
    __DRIextension base;

    /**
     * Get the 64-bit unadjusted system time (UST).
     */
    int (*getUST)(int64_t * ust);

    /**
     * Get the media stream counter (MSC) rate.
     * 
     * Matching the definition in GLX_OML_sync_control, this function returns
     * the rate of the "media stream counter".  In practical terms, this is
     * the frame refresh rate of the display.
     */
    GLboolean (*getMSCRate)(__DRIdrawable *draw,
			    int32_t * numerator, int32_t * denominator,
			    void *loaderPrivate);
};

/**
 * Damage reporting
 */
#define __DRI_DAMAGE "DRI_Damage"
#define __DRI_DAMAGE_VERSION 1
struct __DRIdamageExtensionRec {
    __DRIextension base;

    /**
     * Reports areas of the given drawable which have been modified by the
     * driver.
     *
     * \param drawable which the drawing was done to.
     * \param rects rectangles affected, with the drawable origin as the
     *	      origin.
     * \param x X offset of the drawable within the screen (used in the
     *	      front_buffer case)
     * \param y Y offset of the drawable within the screen.
     * \param front_buffer boolean flag for whether the drawing to the
     * 	      drawable was actually done directly to the front buffer (instead
     *	      of backing storage, for example)
     * \param loaderPrivate the data passed in at createNewDrawable time
     */
    void (*reportDamage)(__DRIdrawable *draw,
			 int x, int y,
			 drm_clip_rect_t *rects, int num_rects,
			 GLboolean front_buffer,
			 void *loaderPrivate);
};

#define __DRI_SWRAST_IMAGE_OP_DRAW	1
#define __DRI_SWRAST_IMAGE_OP_CLEAR	2
#define __DRI_SWRAST_IMAGE_OP_SWAP	3

/**
 * SWRast Loader extension.
 */
#define __DRI_SWRAST_LOADER "DRI_SWRastLoader"
#define __DRI_SWRAST_LOADER_VERSION 1
struct __DRIswrastLoaderExtensionRec {
    __DRIextension base;

    /*
     * Drawable position and size
     */
    void (*getDrawableInfo)(__DRIdrawable *drawable,
			    int *x, int *y, int *width, int *height,
			    void *loaderPrivate);

    /**
     * Put image to drawable
     */
    void (*putImage)(__DRIdrawable *drawable, int op,
		     int x, int y, int width, int height,
		     char *data, void *loaderPrivate);

    /**
     * Get image from readable
     */
    void (*getImage)(__DRIdrawable *readable,
		     int x, int y, int width, int height,
		     char *data, void *loaderPrivate);
};

/**
 * Invalidate loader extension.  The presence of this extension
 * indicates to the DRI driver that the loader will call invalidate in
 * the __DRI2_FLUSH extension, whenever the needs to query for new
 * buffers.  This means that the DRI driver can drop the polling in
 * glViewport().
 *
 * The extension doesn't provide any functionality, it's only use to
 * indicate to the driver that it can use the new semantics.  A DRI
 * driver can use this to switch between the different semantics or
 * just refuse to initialize if this extension isn't present.
 */
#define __DRI_USE_INVALIDATE "DRI_UseInvalidate"
#define __DRI_USE_INVALIDATE_VERSION 1

typedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension;
struct __DRIuseInvalidateExtensionRec {
   __DRIextension base;
};

/**
 * The remaining extensions describe driver extensions, immediately
 * available interfaces provided by the driver.  To start using the
 * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for
 * the extension you need in the array.
 */
#define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions"

/**
 * Tokens for __DRIconfig attribs.  A number of attributes defined by
 * GLX or EGL standards are not in the table, as they must be provided
 * by the loader.  For example, FBConfig ID or visual ID, drawable type.
 */

#define __DRI_ATTRIB_BUFFER_SIZE		 1
#define __DRI_ATTRIB_LEVEL			 2
#define __DRI_ATTRIB_RED_SIZE			 3
#define __DRI_ATTRIB_GREEN_SIZE			 4
#define __DRI_ATTRIB_BLUE_SIZE			 5
#define __DRI_ATTRIB_LUMINANCE_SIZE		 6
#define __DRI_ATTRIB_ALPHA_SIZE			 7
#define __DRI_ATTRIB_ALPHA_MASK_SIZE		 8
#define __DRI_ATTRIB_DEPTH_SIZE			 9
#define __DRI_ATTRIB_STENCIL_SIZE		10
#define __DRI_ATTRIB_ACCUM_RED_SIZE		11
#define __DRI_ATTRIB_ACCUM_GREEN_SIZE		12
#define __DRI_ATTRIB_ACCUM_BLUE_SIZE		13
#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE		14
#define __DRI_ATTRIB_SAMPLE_BUFFERS		15
#define __DRI_ATTRIB_SAMPLES			16
#define __DRI_ATTRIB_RENDER_TYPE		17
#define __DRI_ATTRIB_CONFIG_CAVEAT		18
#define __DRI_ATTRIB_CONFORMANT			19
#define __DRI_ATTRIB_DOUBLE_BUFFER		20
#define __DRI_ATTRIB_STEREO			21
#define __DRI_ATTRIB_AUX_BUFFERS		22
#define __DRI_ATTRIB_TRANSPARENT_TYPE		23
#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE	24
#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE	25
#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE	26
#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE	27
#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE	28
#define __DRI_ATTRIB_FLOAT_MODE			29
#define __DRI_ATTRIB_RED_MASK			30
#define __DRI_ATTRIB_GREEN_MASK			31
#define __DRI_ATTRIB_BLUE_MASK			32
#define __DRI_ATTRIB_ALPHA_MASK			33
#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH		34
#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT		35
#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS		36
#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH	37
#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT	38
#define __DRI_ATTRIB_VISUAL_SELECT_GROUP	39
#define __DRI_ATTRIB_SWAP_METHOD		40
#define __DRI_ATTRIB_MAX_SWAP_INTERVAL		41
#define __DRI_ATTRIB_MIN_SWAP_INTERVAL		42
#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB	43
#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA	44
#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE	45
#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS	46
#define __DRI_ATTRIB_YINVERTED			47

/* __DRI_ATTRIB_RENDER_TYPE */
#define __DRI_ATTRIB_RGBA_BIT			0x01	
#define __DRI_ATTRIB_COLOR_INDEX_BIT		0x02
#define __DRI_ATTRIB_LUMINANCE_BIT		0x04

/* __DRI_ATTRIB_CONFIG_CAVEAT */
#define __DRI_ATTRIB_SLOW_BIT			0x01
#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG	0x02

/* __DRI_ATTRIB_TRANSPARENT_TYPE */
#define __DRI_ATTRIB_TRANSPARENT_RGB		0x00
#define __DRI_ATTRIB_TRANSPARENT_INDEX		0x01

/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS	 */
#define __DRI_ATTRIB_TEXTURE_1D_BIT		0x01
#define __DRI_ATTRIB_TEXTURE_2D_BIT		0x02
#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT	0x04

/**
 * This extension defines the core DRI functionality.
 */
#define __DRI_CORE "DRI_Core"
#define __DRI_CORE_VERSION 1

struct __DRIcoreExtensionRec {
    __DRIextension base;

    __DRIscreen *(*createNewScreen)(int screen, int fd,
				    unsigned int sarea_handle,
				    const __DRIextension **extensions,
				    const __DRIconfig ***driverConfigs,
				    void *loaderPrivate);

    void (*destroyScreen)(__DRIscreen *screen);

    const __DRIextension **(*getExtensions)(__DRIscreen *screen);

    int (*getConfigAttrib)(const __DRIconfig *config,
			   unsigned int attrib,
			   unsigned int *value);

    int (*indexConfigAttrib)(const __DRIconfig *config, int index,
			     unsigned int *attrib, unsigned int *value);

    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
					const __DRIconfig *config,
					unsigned int drawable_id,
					unsigned int head,
					void *loaderPrivate);

    void (*destroyDrawable)(__DRIdrawable *drawable);

    void (*swapBuffers)(__DRIdrawable *drawable);

    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
				      const __DRIconfig *config,
				      __DRIcontext *shared,
				      void *loaderPrivate);

    int (*copyContext)(__DRIcontext *dest,
		       __DRIcontext *src,
		       unsigned long mask);

    void (*destroyContext)(__DRIcontext *context);

    int (*bindContext)(__DRIcontext *ctx,
		       __DRIdrawable *pdraw,
		       __DRIdrawable *pread);

    int (*unbindContext)(__DRIcontext *ctx);
};

/**
 * Stored version of some component (i.e., server-side DRI module, kernel-side
 * DRM, etc.).
 * 
 * \todo
 * There are several data structures that explicitly store a major version,
 * minor version, and patch level.  These structures should be modified to
 * have a \c __DRIversionRec instead.
 */
struct __DRIversionRec {
    int    major;        /**< Major version number. */
    int    minor;        /**< Minor version number. */
    int    patch;        /**< Patch-level. */
};

/**
 * Framebuffer information record.  Used by libGL to communicate information
 * about the framebuffer to the driver's \c __driCreateNewScreen function.
 * 
 * In XFree86, most of this information is derrived from data returned by
 * calling \c XF86DRIGetDeviceInfo.
 *
 * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen
 *     __driUtilCreateNewScreen CallCreateNewScreen
 *
 * \bug This structure could be better named.
 */
struct __DRIframebufferRec {
    unsigned char *base;    /**< Framebuffer base address in the CPU's
			     * address space.  This value is calculated by
			     * calling \c drmMap on the framebuffer handle
			     * returned by \c XF86DRIGetDeviceInfo (or a
			     * similar function).
			     */
    int size;               /**< Framebuffer size, in bytes. */
    int stride;             /**< Number of bytes from one line to the next. */
    int width;              /**< Pixel width of the framebuffer. */
    int height;             /**< Pixel height of the framebuffer. */
    int dev_priv_size;      /**< Size of the driver's dev-priv structure. */
    void *dev_priv;         /**< Pointer to the driver's dev-priv structure. */
};


/**
 * This extension provides alternative screen, drawable and context
 * constructors for legacy DRI functionality.  This is used in
 * conjunction with the core extension.
 */
#define __DRI_LEGACY "DRI_Legacy"
#define __DRI_LEGACY_VERSION 1

struct __DRIlegacyExtensionRec {
    __DRIextension base;

    __DRIscreen *(*createNewScreen)(int screen,
				    const __DRIversion *ddx_version,
				    const __DRIversion *dri_version,
				    const __DRIversion *drm_version,
				    const __DRIframebuffer *frame_buffer,
				    void *pSAREA, int fd, 
				    const __DRIextension **extensions,
				    const __DRIconfig ***driver_configs,
				    void *loaderPrivate);

    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
					const __DRIconfig *config,
					drm_drawable_t hwDrawable,
					int renderType, const int *attrs,
					void *loaderPrivate);

    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
				      const __DRIconfig *config,
				      int render_type,
				      __DRIcontext *shared,
				      drm_context_t hwContext,
				      void *loaderPrivate);
};

/**
 * This extension provides alternative screen, drawable and context
 * constructors for swrast DRI functionality.  This is used in
 * conjunction with the core extension.
 */
#define __DRI_SWRAST "DRI_SWRast"
#define __DRI_SWRAST_VERSION 1

struct __DRIswrastExtensionRec {
    __DRIextension base;

    __DRIscreen *(*createNewScreen)(int screen,
				    const __DRIextension **extensions,
				    const __DRIconfig ***driver_configs,
				    void *loaderPrivate);

    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
					const __DRIconfig *config,
					void *loaderPrivate);
};

/**
 * DRI2 Loader extension.
 */
#define __DRI_BUFFER_FRONT_LEFT		0
#define __DRI_BUFFER_BACK_LEFT		1
#define __DRI_BUFFER_FRONT_RIGHT	2
#define __DRI_BUFFER_BACK_RIGHT		3
#define __DRI_BUFFER_DEPTH		4
#define __DRI_BUFFER_STENCIL		5
#define __DRI_BUFFER_ACCUM		6
#define __DRI_BUFFER_FAKE_FRONT_LEFT	7
#define __DRI_BUFFER_FAKE_FRONT_RIGHT	8
#define __DRI_BUFFER_DEPTH_STENCIL	9  /**< Only available with DRI2 1.1 */

struct __DRIbufferRec {
    unsigned int attachment;
    unsigned int name;
    unsigned int pitch;
    unsigned int cpp;
    unsigned int flags;
};

#define __DRI_DRI2_LOADER "DRI_DRI2Loader"
#define __DRI_DRI2_LOADER_VERSION 3
struct __DRIdri2LoaderExtensionRec {
    __DRIextension base;

    __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable,
			       int *width, int *height,
			       unsigned int *attachments, int count,
			       int *out_count, void *loaderPrivate);

    /**
     * Flush pending front-buffer rendering
     *
     * Any rendering that has been performed to the
     * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the
     * \c __DRI_BUFFER_FRONT_LEFT.
     *
     * \param driDrawable    Drawable whose front-buffer is to be flushed
     * \param loaderPrivate  Loader's private data that was previously passed
     *                       into __DRIdri2ExtensionRec::createNewDrawable
     */
    void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate);


    /**
     * Get list of buffers from the server
     *
     * Gets a list of buffer for the specified set of attachments.  Unlike
     * \c ::getBuffers, this function takes a list of attachments paired with
     * opaque \c unsigned \c int value describing the format of the buffer.
     * It is the responsibility of the caller to know what the service that
     * allocates the buffers will expect to receive for the format.
     *
     * \param driDrawable    Drawable whose buffers are being queried.
     * \param width          Output where the width of the buffers is stored.
     * \param height         Output where the height of the buffers is stored.
     * \param attachments    List of pairs of attachment ID and opaque format
     *                       requested for the drawable.
     * \param count          Number of attachment / format pairs stored in
     *                       \c attachments.
     * \param loaderPrivate  Loader's private data that was previously passed
     *                       into __DRIdri2ExtensionRec::createNewDrawable.
     */
    __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable,
					 int *width, int *height,
					 unsigned int *attachments, int count,
					 int *out_count, void *loaderPrivate);
};

/**
 * This extension provides alternative screen, drawable and context
 * constructors for DRI2.
 */
#define __DRI_DRI2 "DRI_DRI2"
#define __DRI_DRI2_VERSION 2

#define __DRI_API_OPENGL	0
#define __DRI_API_GLES		1
#define __DRI_API_GLES2		2

struct __DRIdri2ExtensionRec {
    __DRIextension base;

    __DRIscreen *(*createNewScreen)(int screen, int fd,
				    const __DRIextension **extensions,
				    const __DRIconfig ***driver_configs,
				    void *loaderPrivate);

    __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
					const __DRIconfig *config,
					void *loaderPrivate);

    __DRIcontext *(*createNewContext)(__DRIscreen *screen,
				      const __DRIconfig *config,
				      __DRIcontext *shared,
				      void *loaderPrivate);

   /* Since version 2 */
   unsigned int (*getAPIMask)(__DRIscreen *screen);

   __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen,
					   int api,
					   const __DRIconfig *config,
					   __DRIcontext *shared,
					   void *data);
};


/**
 * This extension provides functionality to enable various EGLImage
 * extensions.
 */
#define __DRI_IMAGE "DRI_IMAGE"
#define __DRI_IMAGE_VERSION 1

/**
 * These formats correspond to the similarly named MESA_FORMAT_*
 * tokens, except in the native endian of the CPU.  For example, on
 * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to
 * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian.
 */
#define __DRI_IMAGE_FORMAT_RGB565       0x1001
#define __DRI_IMAGE_FORMAT_XRGB8888     0x1002
#define __DRI_IMAGE_FORMAT_ARGB8888     0x1003

#define __DRI_IMAGE_USE_SHARE		0x0001
#define __DRI_IMAGE_USE_SCANOUT		0x0002

/**
 * queryImage attributes
 */

#define __DRI_IMAGE_ATTRIB_STRIDE	0x2000
#define __DRI_IMAGE_ATTRIB_HANDLE	0x2001
#define __DRI_IMAGE_ATTRIB_NAME		0x2002

typedef struct __DRIimageRec          __DRIimage;
typedef struct __DRIimageExtensionRec __DRIimageExtension;
struct __DRIimageExtensionRec {
    __DRIextension base;

    __DRIimage *(*createImageFromName)(__DRIscreen *screen,
				       int width, int height, int format,
				       int name, int pitch,
				       void *loaderPrivate);

    __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context,
					       int renderbuffer,
					       void *loaderPrivate);

    void (*destroyImage)(__DRIimage *image);

    __DRIimage *(*createImage)(__DRIscreen *screen,
			       int width, int height, int format,
			       unsigned int use,
			       void *loaderPrivate);

   GLboolean (*queryImage)(__DRIimage *image, int attrib, int *value);
};


/**
 * This extension must be implemented by the loader and passed to the
 * driver at screen creation time.  The EGLImage entry points in the
 * various client APIs take opaque EGLImage handles and use this
 * extension to map them to a __DRIimage.  At version 1, this
 * extensions allows mapping EGLImage pointers to __DRIimage pointers,
 * but future versions could support other EGLImage-like, opaque types
 * with new lookup functions.
 */
#define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP"
#define __DRI_IMAGE_LOOKUP_VERSION 1

typedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension;
struct __DRIimageLookupExtensionRec {
    __DRIextension base;

    __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image,
				  void *loaderPrivate);
};

/**
 * This extension allows for common DRI2 options
 */
#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY"
#define __DRI2_CONFIG_QUERY_VERSION 1

typedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension;
struct __DRI2configQueryExtensionRec {
   __DRIextension base;

   int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val);
   int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val);
   int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val);
};
#endif
Added jni/glshim/include/GLES/egl.h.






























>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
 * Skeleton egl.h to provide compatibility for early GLES 1.0
 * applications. Several early implementations included gl.h
 * in egl.h leading applications to include only egl.h
 *
 * $Revision: 6252 $ on $Date:: 2008-08-06 16:35:08 -0700 #$
 */

#ifndef __legacy_egl_h_
#define __legacy_egl_h_

#include <EGL/egl.h>
#include <GLES/gl.h>

#endif /* __legacy_egl_h_ */
Added jni/glshim/include/GLES/gl.h.




































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
#ifndef __gl_h_
#define __gl_h_

/* $Revision: 10601 $ on $Date:: 2010-03-04 22:15:27 -0800 #$ */

#include <GLES/glplatform.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

typedef void             GLvoid;
typedef char             GLchar;
typedef unsigned int     GLenum;
typedef unsigned char    GLboolean;
typedef unsigned int     GLbitfield;
typedef khronos_int8_t   GLbyte;
typedef short            GLshort;
typedef int              GLint;
typedef int              GLsizei;
typedef khronos_uint8_t  GLubyte;
typedef unsigned short   GLushort;
typedef unsigned int     GLuint;
typedef khronos_float_t  GLfloat;
typedef khronos_float_t  GLclampf;
typedef khronos_int32_t  GLfixed;
typedef khronos_int32_t  GLclampx;

typedef khronos_intptr_t GLintptr;
typedef khronos_ssize_t  GLsizeiptr;


/*************************************************************/

/* OpenGL ES core versions */
#define GL_VERSION_ES_CM_1_0          1
#define GL_VERSION_ES_CL_1_0          1
#define GL_VERSION_ES_CM_1_1          1
#define GL_VERSION_ES_CL_1_1          1

/* ClearBufferMask */
#define GL_DEPTH_BUFFER_BIT               0x00000100
#define GL_STENCIL_BUFFER_BIT             0x00000400
#define GL_COLOR_BUFFER_BIT               0x00004000

/* Boolean */
#define GL_FALSE                          0
#define GL_TRUE                           1

/* BeginMode */
#define GL_POINTS                         0x0000
#define GL_LINES                          0x0001
#define GL_LINE_LOOP                      0x0002
#define GL_LINE_STRIP                     0x0003
#define GL_TRIANGLES                      0x0004
#define GL_TRIANGLE_STRIP                 0x0005
#define GL_TRIANGLE_FAN                   0x0006

/* AlphaFunction */
#define GL_NEVER                          0x0200
#define GL_LESS                           0x0201
#define GL_EQUAL                          0x0202
#define GL_LEQUAL                         0x0203
#define GL_GREATER                        0x0204
#define GL_NOTEQUAL                       0x0205
#define GL_GEQUAL                         0x0206
#define GL_ALWAYS                         0x0207

/* BlendingFactorDest */
#define GL_ZERO                           0
#define GL_ONE                            1
#define GL_SRC_COLOR                      0x0300
#define GL_ONE_MINUS_SRC_COLOR            0x0301
#define GL_SRC_ALPHA                      0x0302
#define GL_ONE_MINUS_SRC_ALPHA            0x0303
#define GL_DST_ALPHA                      0x0304
#define GL_ONE_MINUS_DST_ALPHA            0x0305

/* BlendingFactorSrc */
/*      GL_ZERO */
/*      GL_ONE */
#define GL_DST_COLOR                      0x0306
#define GL_ONE_MINUS_DST_COLOR            0x0307
#define GL_SRC_ALPHA_SATURATE             0x0308
/*      GL_SRC_ALPHA */
/*      GL_ONE_MINUS_SRC_ALPHA */
/*      GL_DST_ALPHA */
/*      GL_ONE_MINUS_DST_ALPHA */

/* ClipPlaneName */
#define GL_CLIP_PLANE0                    0x3000
#define GL_CLIP_PLANE1                    0x3001
#define GL_CLIP_PLANE2                    0x3002
#define GL_CLIP_PLANE3                    0x3003
#define GL_CLIP_PLANE4                    0x3004
#define GL_CLIP_PLANE5                    0x3005

/* ColorMaterialFace */
/*      GL_FRONT_AND_BACK */

/* ColorMaterialParameter */
/*      GL_AMBIENT_AND_DIFFUSE */

/* ColorPointerType */
/*      GL_UNSIGNED_BYTE */
/*      GL_FLOAT */
/*      GL_FIXED */

/* CullFaceMode */
#define GL_FRONT                          0x0404
#define GL_BACK                           0x0405
#define GL_FRONT_AND_BACK                 0x0408

/* DepthFunction */
/*      GL_NEVER */
/*      GL_LESS */
/*      GL_EQUAL */
/*      GL_LEQUAL */
/*      GL_GREATER */
/*      GL_NOTEQUAL */
/*      GL_GEQUAL */
/*      GL_ALWAYS */

/* EnableCap */
#define GL_FOG                            0x0B60
#define GL_LIGHTING                       0x0B50
#define GL_TEXTURE_2D                     0x0DE1
#define GL_CULL_FACE                      0x0B44
#define GL_ALPHA_TEST                     0x0BC0
#define GL_BLEND                          0x0BE2
#define GL_COLOR_LOGIC_OP                 0x0BF2
#define GL_DITHER                         0x0BD0
#define GL_STENCIL_TEST                   0x0B90
#define GL_DEPTH_TEST                     0x0B71
/*      GL_LIGHT0 */
/*      GL_LIGHT1 */
/*      GL_LIGHT2 */
/*      GL_LIGHT3 */
/*      GL_LIGHT4 */
/*      GL_LIGHT5 */
/*      GL_LIGHT6 */
/*      GL_LIGHT7 */
#define GL_POINT_SMOOTH                   0x0B10
#define GL_LINE_SMOOTH                    0x0B20
#define GL_SCISSOR_TEST                   0x0C11
#define GL_COLOR_MATERIAL                 0x0B57
#define GL_NORMALIZE                      0x0BA1
#define GL_RESCALE_NORMAL                 0x803A
#define GL_POLYGON_OFFSET_FILL            0x8037
#define GL_VERTEX_ARRAY                   0x8074
#define GL_NORMAL_ARRAY                   0x8075
#define GL_COLOR_ARRAY                    0x8076
#define GL_TEXTURE_COORD_ARRAY            0x8078
#define GL_MULTISAMPLE                    0x809D
#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
#define GL_SAMPLE_ALPHA_TO_ONE            0x809F
#define GL_SAMPLE_COVERAGE                0x80A0

/* ErrorCode */
#define GL_NO_ERROR                       0
#define GL_INVALID_ENUM                   0x0500
#define GL_INVALID_VALUE                  0x0501
#define GL_INVALID_OPERATION              0x0502
#define GL_STACK_OVERFLOW                 0x0503
#define GL_STACK_UNDERFLOW                0x0504
#define GL_OUT_OF_MEMORY                  0x0505

/* FogMode */
/*      GL_LINEAR */
#define GL_EXP                            0x0800
#define GL_EXP2                           0x0801

/* FogParameter */
#define GL_FOG_DENSITY                    0x0B62
#define GL_FOG_START                      0x0B63
#define GL_FOG_END                        0x0B64
#define GL_FOG_MODE                       0x0B65
#define GL_FOG_COLOR                      0x0B66

/* FrontFaceDirection */
#define GL_CW                             0x0900
#define GL_CCW                            0x0901

/* GetPName */
#define GL_CURRENT_COLOR                  0x0B00
#define GL_CURRENT_NORMAL                 0x0B02
#define GL_CURRENT_TEXTURE_COORDS         0x0B03
#define GL_POINT_SIZE                     0x0B11
#define GL_POINT_SIZE_MIN                 0x8126
#define GL_POINT_SIZE_MAX                 0x8127
#define GL_POINT_FADE_THRESHOLD_SIZE      0x8128
#define GL_POINT_DISTANCE_ATTENUATION     0x8129
#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12
#define GL_LINE_WIDTH                     0x0B21
#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22
#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
#define GL_CULL_FACE_MODE                 0x0B45
#define GL_FRONT_FACE                     0x0B46
#define GL_SHADE_MODEL                    0x0B54
#define GL_DEPTH_RANGE                    0x0B70
#define GL_DEPTH_WRITEMASK                0x0B72
#define GL_DEPTH_CLEAR_VALUE              0x0B73
#define GL_DEPTH_FUNC                     0x0B74
#define GL_STENCIL_CLEAR_VALUE            0x0B91
#define GL_STENCIL_FUNC                   0x0B92
#define GL_STENCIL_VALUE_MASK             0x0B93
#define GL_STENCIL_FAIL                   0x0B94
#define GL_STENCIL_PASS_DEPTH_FAIL        0x0B95
#define GL_STENCIL_PASS_DEPTH_PASS        0x0B96
#define GL_STENCIL_REF                    0x0B97
#define GL_STENCIL_WRITEMASK              0x0B98
#define GL_MATRIX_MODE                    0x0BA0
#define GL_VIEWPORT                       0x0BA2
#define GL_MODELVIEW_STACK_DEPTH          0x0BA3
#define GL_PROJECTION_STACK_DEPTH         0x0BA4
#define GL_TEXTURE_STACK_DEPTH            0x0BA5
#define GL_MODELVIEW_MATRIX               0x0BA6
#define GL_PROJECTION_MATRIX              0x0BA7
#define GL_TEXTURE_MATRIX                 0x0BA8
#define GL_ALPHA_TEST_FUNC                0x0BC1
#define GL_ALPHA_TEST_REF                 0x0BC2
#define GL_BLEND_DST                      0x0BE0
#define GL_BLEND_SRC                      0x0BE1
#define GL_LOGIC_OP_MODE                  0x0BF0
#define GL_SCISSOR_BOX                    0x0C10
#define GL_SCISSOR_TEST                   0x0C11
#define GL_COLOR_CLEAR_VALUE              0x0C22
#define GL_COLOR_WRITEMASK                0x0C23
#define GL_UNPACK_ALIGNMENT               0x0CF5
#define GL_PACK_ALIGNMENT                 0x0D05
#define GL_MAX_LIGHTS                     0x0D31
#define GL_MAX_CLIP_PLANES                0x0D32
#define GL_MAX_TEXTURE_SIZE               0x0D33
#define GL_MAX_MODELVIEW_STACK_DEPTH      0x0D36
#define GL_MAX_PROJECTION_STACK_DEPTH     0x0D38
#define GL_MAX_TEXTURE_STACK_DEPTH        0x0D39
#define GL_MAX_VIEWPORT_DIMS              0x0D3A
#define GL_MAX_TEXTURE_UNITS              0x84E2
#define GL_SUBPIXEL_BITS                  0x0D50
#define GL_RED_BITS                       0x0D52
#define GL_GREEN_BITS                     0x0D53
#define GL_BLUE_BITS                      0x0D54
#define GL_ALPHA_BITS                     0x0D55
#define GL_DEPTH_BITS                     0x0D56
#define GL_STENCIL_BITS                   0x0D57
#define GL_POLYGON_OFFSET_UNITS           0x2A00
#define GL_POLYGON_OFFSET_FILL            0x8037
#define GL_POLYGON_OFFSET_FACTOR          0x8038
#define GL_TEXTURE_BINDING_2D             0x8069
#define GL_VERTEX_ARRAY_SIZE              0x807A
#define GL_VERTEX_ARRAY_TYPE              0x807B
#define GL_VERTEX_ARRAY_STRIDE            0x807C
#define GL_NORMAL_ARRAY_TYPE              0x807E
#define GL_NORMAL_ARRAY_STRIDE            0x807F
#define GL_COLOR_ARRAY_SIZE               0x8081
#define GL_COLOR_ARRAY_TYPE               0x8082
#define GL_COLOR_ARRAY_STRIDE             0x8083
#define GL_TEXTURE_COORD_ARRAY_SIZE       0x8088
#define GL_TEXTURE_COORD_ARRAY_TYPE       0x8089
#define GL_TEXTURE_COORD_ARRAY_STRIDE     0x808A
#define GL_VERTEX_ARRAY_POINTER           0x808E
#define GL_NORMAL_ARRAY_POINTER           0x808F
#define GL_COLOR_ARRAY_POINTER            0x8090
#define GL_TEXTURE_COORD_ARRAY_POINTER    0x8092
#define GL_SAMPLE_BUFFERS                 0x80A8
#define GL_SAMPLES                        0x80A9
#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
#define GL_SAMPLE_COVERAGE_INVERT         0x80AB

/* GetTextureParameter */
/*      GL_TEXTURE_MAG_FILTER */
/*      GL_TEXTURE_MIN_FILTER */
/*      GL_TEXTURE_WRAP_S */
/*      GL_TEXTURE_WRAP_T */

#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3

/* HintMode */
#define GL_DONT_CARE                      0x1100
#define GL_FASTEST                        0x1101
#define GL_NICEST                         0x1102

/* HintTarget */
#define GL_PERSPECTIVE_CORRECTION_HINT    0x0C50
#define GL_POINT_SMOOTH_HINT              0x0C51
#define GL_LINE_SMOOTH_HINT               0x0C52
#define GL_FOG_HINT                       0x0C54
#define GL_GENERATE_MIPMAP_HINT           0x8192

/* LightModelParameter */
#define GL_LIGHT_MODEL_AMBIENT            0x0B53
#define GL_LIGHT_MODEL_TWO_SIDE           0x0B52

/* LightParameter */
#define GL_AMBIENT                        0x1200
#define GL_DIFFUSE                        0x1201
#define GL_SPECULAR                       0x1202
#define GL_POSITION                       0x1203
#define GL_SPOT_DIRECTION                 0x1204
#define GL_SPOT_EXPONENT                  0x1205
#define GL_SPOT_CUTOFF                    0x1206
#define GL_CONSTANT_ATTENUATION           0x1207
#define GL_LINEAR_ATTENUATION             0x1208
#define GL_QUADRATIC_ATTENUATION          0x1209

/* DataType */
#define GL_BYTE                           0x1400
#define GL_UNSIGNED_BYTE                  0x1401
#define GL_SHORT                          0x1402
#define GL_UNSIGNED_SHORT                 0x1403
#define GL_FLOAT                          0x1406
#define GL_FIXED                          0x140C

/* LogicOp */
#define GL_CLEAR                          0x1500
#define GL_AND                            0x1501
#define GL_AND_REVERSE                    0x1502
#define GL_COPY                           0x1503
#define GL_AND_INVERTED                   0x1504
#define GL_NOOP                           0x1505
#define GL_XOR                            0x1506
#define GL_OR                             0x1507
#define GL_NOR                            0x1508
#define GL_EQUIV                          0x1509
#define GL_INVERT                         0x150A
#define GL_OR_REVERSE                     0x150B
#define GL_COPY_INVERTED                  0x150C
#define GL_OR_INVERTED                    0x150D
#define GL_NAND                           0x150E
#define GL_SET                            0x150F

/* MaterialFace */
/*      GL_FRONT_AND_BACK */

/* MaterialParameter */
#define GL_EMISSION                       0x1600
#define GL_SHININESS                      0x1601
#define GL_AMBIENT_AND_DIFFUSE            0x1602
/*      GL_AMBIENT */
/*      GL_DIFFUSE */
/*      GL_SPECULAR */

/* MatrixMode */
#define GL_MODELVIEW                      0x1700
#define GL_PROJECTION                     0x1701
#define GL_TEXTURE                        0x1702

/* NormalPointerType */
/*      GL_BYTE */
/*      GL_SHORT */
/*      GL_FLOAT */
/*      GL_FIXED */

/* PixelFormat */
#define GL_ALPHA                          0x1906
#define GL_RGB                            0x1907
#define GL_RGBA                           0x1908
#define GL_LUMINANCE                      0x1909
#define GL_LUMINANCE_ALPHA                0x190A

/* PixelStoreParameter */
#define GL_UNPACK_ALIGNMENT               0x0CF5
#define GL_PACK_ALIGNMENT                 0x0D05

/* PixelType */
/*      GL_UNSIGNED_BYTE */
#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
#define GL_UNSIGNED_SHORT_5_6_5           0x8363

/* ShadingModel */
#define GL_FLAT                           0x1D00
#define GL_SMOOTH                         0x1D01

/* StencilFunction */
/*      GL_NEVER */
/*      GL_LESS */
/*      GL_EQUAL */
/*      GL_LEQUAL */
/*      GL_GREATER */
/*      GL_NOTEQUAL */
/*      GL_GEQUAL */
/*      GL_ALWAYS */

/* StencilOp */
/*      GL_ZERO */
#define GL_KEEP                           0x1E00
#define GL_REPLACE                        0x1E01
#define GL_INCR                           0x1E02
#define GL_DECR                           0x1E03
/*      GL_INVERT */

/* StringName */
#define GL_VENDOR                         0x1F00
#define GL_RENDERER                       0x1F01
#define GL_VERSION                        0x1F02
#define GL_EXTENSIONS                     0x1F03

/* TexCoordPointerType */
/*      GL_SHORT */
/*      GL_FLOAT */
/*      GL_FIXED */
/*      GL_BYTE */

/* TextureEnvMode */
#define GL_MODULATE                       0x2100
#define GL_DECAL                          0x2101
/*      GL_BLEND */
#define GL_ADD                            0x0104
/*      GL_REPLACE */

/* TextureEnvParameter */
#define GL_TEXTURE_ENV_MODE               0x2200
#define GL_TEXTURE_ENV_COLOR              0x2201

/* TextureEnvTarget */
#define GL_TEXTURE_ENV                    0x2300

/* TextureMagFilter */
#define GL_NEAREST                        0x2600
#define GL_LINEAR                         0x2601

/* TextureMinFilter */
/*      GL_NEAREST */
/*      GL_LINEAR */
#define GL_NEAREST_MIPMAP_NEAREST         0x2700
#define GL_LINEAR_MIPMAP_NEAREST          0x2701
#define GL_NEAREST_MIPMAP_LINEAR          0x2702
#define GL_LINEAR_MIPMAP_LINEAR           0x2703

/* TextureParameterName */
#define GL_TEXTURE_MAG_FILTER             0x2800
#define GL_TEXTURE_MIN_FILTER             0x2801
#define GL_TEXTURE_WRAP_S                 0x2802
#define GL_TEXTURE_WRAP_T                 0x2803
#define GL_GENERATE_MIPMAP                0x8191

/* TextureTarget */
/*      GL_TEXTURE_2D */

/* TextureUnit */
#define GL_TEXTURE0                       0x84C0
#define GL_TEXTURE1                       0x84C1
#define GL_TEXTURE2                       0x84C2
#define GL_TEXTURE3                       0x84C3
#define GL_TEXTURE4                       0x84C4
#define GL_TEXTURE5                       0x84C5
#define GL_TEXTURE6                       0x84C6
#define GL_TEXTURE7                       0x84C7
#define GL_TEXTURE8                       0x84C8
#define GL_TEXTURE9                       0x84C9
#define GL_TEXTURE10                      0x84CA
#define GL_TEXTURE11                      0x84CB
#define GL_TEXTURE12                      0x84CC
#define GL_TEXTURE13                      0x84CD
#define GL_TEXTURE14                      0x84CE
#define GL_TEXTURE15                      0x84CF
#define GL_TEXTURE16                      0x84D0
#define GL_TEXTURE17                      0x84D1
#define GL_TEXTURE18                      0x84D2
#define GL_TEXTURE19                      0x84D3
#define GL_TEXTURE20                      0x84D4
#define GL_TEXTURE21                      0x84D5
#define GL_TEXTURE22                      0x84D6
#define GL_TEXTURE23                      0x84D7
#define GL_TEXTURE24                      0x84D8
#define GL_TEXTURE25                      0x84D9
#define GL_TEXTURE26                      0x84DA
#define GL_TEXTURE27                      0x84DB
#define GL_TEXTURE28                      0x84DC
#define GL_TEXTURE29                      0x84DD
#define GL_TEXTURE30                      0x84DE
#define GL_TEXTURE31                      0x84DF
#define GL_ACTIVE_TEXTURE                 0x84E0
#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1

/* TextureWrapMode */
#define GL_REPEAT                         0x2901
#define GL_CLAMP_TO_EDGE                  0x812F

/* VertexPointerType */
/*      GL_SHORT */
/*      GL_FLOAT */
/*      GL_FIXED */
/*      GL_BYTE */

/* LightName */
#define GL_LIGHT0                         0x4000
#define GL_LIGHT1                         0x4001
#define GL_LIGHT2                         0x4002
#define GL_LIGHT3                         0x4003
#define GL_LIGHT4                         0x4004
#define GL_LIGHT5                         0x4005
#define GL_LIGHT6                         0x4006
#define GL_LIGHT7                         0x4007

/* Buffer Objects */
#define GL_ARRAY_BUFFER                   0x8892
#define GL_ELEMENT_ARRAY_BUFFER           0x8893

#define GL_ARRAY_BUFFER_BINDING               0x8894
#define GL_ELEMENT_ARRAY_BUFFER_BINDING       0x8895
#define GL_VERTEX_ARRAY_BUFFER_BINDING        0x8896
#define GL_NORMAL_ARRAY_BUFFER_BINDING        0x8897
#define GL_COLOR_ARRAY_BUFFER_BINDING         0x8898
#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A

#define GL_STATIC_DRAW                    0x88E4
#define GL_DYNAMIC_DRAW                   0x88E8

#define GL_BUFFER_SIZE                    0x8764
#define GL_BUFFER_USAGE                   0x8765

/* Texture combine + dot3 */
#define GL_SUBTRACT                       0x84E7
#define GL_COMBINE                        0x8570
#define GL_COMBINE_RGB                    0x8571
#define GL_COMBINE_ALPHA                  0x8572
#define GL_RGB_SCALE                      0x8573
#define GL_ADD_SIGNED                     0x8574
#define GL_INTERPOLATE                    0x8575
#define GL_CONSTANT                       0x8576
#define GL_PRIMARY_COLOR                  0x8577
#define GL_PREVIOUS                       0x8578
#define GL_OPERAND0_RGB                   0x8590
#define GL_OPERAND1_RGB                   0x8591
#define GL_OPERAND2_RGB                   0x8592
#define GL_OPERAND0_ALPHA                 0x8598
#define GL_OPERAND1_ALPHA                 0x8599
#define GL_OPERAND2_ALPHA                 0x859A

#define GL_ALPHA_SCALE                    0x0D1C

#define GL_SRC0_RGB                       0x8580
#define GL_SRC1_RGB                       0x8581
#define GL_SRC2_RGB                       0x8582
#define GL_SRC0_ALPHA                     0x8588
#define GL_SRC1_ALPHA                     0x8589
#define GL_SRC2_ALPHA                     0x858A

#define GL_DOT3_RGB                       0x86AE
#define GL_DOT3_RGBA                      0x86AF

/*------------------------------------------------------------------------*
 * required OES extension tokens
 *------------------------------------------------------------------------*/

/* OES_read_format */
#ifndef GL_OES_read_format
#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES                   0x8B9A
#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES                 0x8B9B
#endif

/* GL_OES_compressed_paletted_texture */
#ifndef GL_OES_compressed_paletted_texture
#define GL_PALETTE4_RGB8_OES                                    0x8B90
#define GL_PALETTE4_RGBA8_OES                                   0x8B91
#define GL_PALETTE4_R5_G6_B5_OES                                0x8B92
#define GL_PALETTE4_RGBA4_OES                                   0x8B93
#define GL_PALETTE4_RGB5_A1_OES                                 0x8B94
#define GL_PALETTE8_RGB8_OES                                    0x8B95
#define GL_PALETTE8_RGBA8_OES                                   0x8B96
#define GL_PALETTE8_R5_G6_B5_OES                                0x8B97
#define GL_PALETTE8_RGBA4_OES                                   0x8B98
#define GL_PALETTE8_RGB5_A1_OES                                 0x8B99
#endif

/* OES_point_size_array */
#ifndef GL_OES_point_size_array
#define GL_POINT_SIZE_ARRAY_OES                                 0x8B9C
#define GL_POINT_SIZE_ARRAY_TYPE_OES                            0x898A
#define GL_POINT_SIZE_ARRAY_STRIDE_OES                          0x898B
#define GL_POINT_SIZE_ARRAY_POINTER_OES                         0x898C
#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES                  0x8B9F
#endif

/* GL_OES_point_sprite */
#ifndef GL_OES_point_sprite
#define GL_POINT_SPRITE_OES                                     0x8861
#define GL_COORD_REPLACE_OES                                    0x8862
#endif

/*************************************************************/

/* Available only in Common profile */
GL_API void GL_APIENTRY glAlphaFunc (GLenum func, GLclampf ref);
GL_API void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
GL_API void GL_APIENTRY glClearDepthf (GLclampf depth);
GL_API void GL_APIENTRY glClipPlanef (GLenum plane, const GLfloat *equation);
GL_API void GL_APIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
GL_API void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar);
GL_API void GL_APIENTRY glFogf (GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glFogfv (GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
GL_API void GL_APIENTRY glGetClipPlanef (GLenum pname, GLfloat eqn[4]);
GL_API void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *params);
GL_API void GL_APIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params);
GL_API void GL_APIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params);
GL_API void GL_APIENTRY glGetTexEnvfv (GLenum env, GLenum pname, GLfloat *params);
GL_API void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params);
GL_API void GL_APIENTRY glLightModelf (GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glLightModelfv (GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glLightf (GLenum light, GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glLineWidth (GLfloat width);
GL_API void GL_APIENTRY glLoadMatrixf (const GLfloat *m);
GL_API void GL_APIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glMultMatrixf (const GLfloat *m);
GL_API void GL_APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
GL_API void GL_APIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz);
GL_API void GL_APIENTRY glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
GL_API void GL_APIENTRY glPointParameterf (GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glPointSize (GLfloat size);
GL_API void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
GL_API void GL_APIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
GL_API void GL_APIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z);
GL_API void GL_APIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z);

/* Available in both Common and Common-Lite profiles */
GL_API void GL_APIENTRY glActiveTexture (GLenum texture);
GL_API void GL_APIENTRY glAlphaFuncx (GLenum func, GLclampx ref);
GL_API void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
GL_API void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
GL_API void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
GL_API void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
GL_API void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
GL_API void GL_APIENTRY glClear (GLbitfield mask);
GL_API void GL_APIENTRY glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
GL_API void GL_APIENTRY glClearDepthx (GLclampx depth);
GL_API void GL_APIENTRY glClearStencil (GLint s);
GL_API void GL_APIENTRY glClientActiveTexture (GLenum texture);
GL_API void GL_APIENTRY glClipPlanex (GLenum plane, const GLfixed *equation);
GL_API void GL_APIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha);
GL_API void GL_APIENTRY glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
GL_API void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
GL_API void GL_APIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
GL_API void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
GL_API void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
GL_API void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
GL_API void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
GL_API void GL_APIENTRY glCullFace (GLenum mode);
GL_API void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);
GL_API void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures);
GL_API void GL_APIENTRY glDepthFunc (GLenum func);
GL_API void GL_APIENTRY glDepthMask (GLboolean flag);
GL_API void GL_APIENTRY glDepthRangex (GLclampx zNear, GLclampx zFar);
GL_API void GL_APIENTRY glDisable (GLenum cap);
GL_API void GL_APIENTRY glDisableClientState (GLenum array);
GL_API void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
GL_API void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
GL_API void GL_APIENTRY glEnable (GLenum cap);
GL_API void GL_APIENTRY glEnableClientState (GLenum array);
GL_API void GL_APIENTRY glFinish (void);
GL_API void GL_APIENTRY glFlush (void);
GL_API void GL_APIENTRY glFogx (GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glFogxv (GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glFrontFace (GLenum mode);
GL_API void GL_APIENTRY glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
GL_API void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *params);
GL_API void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
GL_API void GL_APIENTRY glGetClipPlanex (GLenum pname, GLfixed eqn[4]);
GL_API void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);
GL_API void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures);
GL_API GLenum GL_APIENTRY glGetError (void);
GL_API void GL_APIENTRY glGetFixedv (GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *params);
GL_API void GL_APIENTRY glGetLightxv (GLenum light, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetMaterialxv (GLenum face, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetPointerv (GLenum pname, GLvoid **params);
GL_API const GLubyte * GL_APIENTRY glGetString (GLenum name);
GL_API void GL_APIENTRY glGetTexEnviv (GLenum env, GLenum pname, GLint *params);
GL_API void GL_APIENTRY glGetTexEnvxv (GLenum env, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params);
GL_API void GL_APIENTRY glGetTexParameterxv (GLenum target, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glHint (GLenum target, GLenum mode);
GL_API GLboolean GL_APIENTRY glIsBuffer (GLuint buffer);
GL_API GLboolean GL_APIENTRY glIsEnabled (GLenum cap);
GL_API GLboolean GL_APIENTRY glIsTexture (GLuint texture);
GL_API void GL_APIENTRY glLightModelx (GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glLightModelxv (GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glLightx (GLenum light, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glLightxv (GLenum light, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glLineWidthx (GLfixed width);
GL_API void GL_APIENTRY glLoadIdentity (void);
GL_API void GL_APIENTRY glLoadMatrixx (const GLfixed *m);
GL_API void GL_APIENTRY glLogicOp (GLenum opcode);
GL_API void GL_APIENTRY glMaterialx (GLenum face, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glMaterialxv (GLenum face, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glMatrixMode (GLenum mode);
GL_API void GL_APIENTRY glMultMatrixx (const GLfixed *m);
GL_API void GL_APIENTRY glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
GL_API void GL_APIENTRY glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz);
GL_API void GL_APIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer);
GL_API void GL_APIENTRY glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
GL_API void GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
GL_API void GL_APIENTRY glPointParameterx (GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glPointParameterxv (GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glPointSizex (GLfixed size);
GL_API void GL_APIENTRY glPolygonOffsetx (GLfixed factor, GLfixed units);
GL_API void GL_APIENTRY glPopMatrix (void);
GL_API void GL_APIENTRY glPushMatrix (void);
GL_API void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
GL_API void GL_APIENTRY glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
GL_API void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert);
GL_API void GL_APIENTRY glSampleCoveragex (GLclampx value, GLboolean invert);
GL_API void GL_APIENTRY glScalex (GLfixed x, GLfixed y, GLfixed z);
GL_API void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
GL_API void GL_APIENTRY glShadeModel (GLenum mode);
GL_API void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
GL_API void GL_APIENTRY glStencilMask (GLuint mask);
GL_API void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
GL_API void GL_APIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
GL_API void GL_APIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param);
GL_API void GL_APIENTRY glTexEnvx (GLenum target, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params);
GL_API void GL_APIENTRY glTexEnvxv (GLenum target, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
GL_API void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
GL_API void GL_APIENTRY glTexParameterx (GLenum target, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params);
GL_API void GL_APIENTRY glTexParameterxv (GLenum target, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
GL_API void GL_APIENTRY glTranslatex (GLfixed x, GLfixed y, GLfixed z);
GL_API void GL_APIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
GL_API void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

/*------------------------------------------------------------------------*
 * Required OES extension functions
 *------------------------------------------------------------------------*/

/* GL_OES_read_format */
#ifndef GL_OES_read_format
#define GL_OES_read_format 1
#endif

/* GL_OES_compressed_paletted_texture */
#ifndef GL_OES_compressed_paletted_texture
#define GL_OES_compressed_paletted_texture 1
#endif

/* GL_OES_point_size_array */
#ifndef GL_OES_point_size_array
#define GL_OES_point_size_array 1
GL_API void GL_APIENTRY glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid *pointer);
#endif

/* GL_OES_point_sprite */
#ifndef GL_OES_point_sprite
#define GL_OES_point_sprite 1
#endif

#ifdef __cplusplus
}
#endif

#endif /* __gl_h_ */

Added jni/glshim/include/GLES/gl2.h.
























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
#ifndef __gl2_h_
#define __gl2_h_

/* $Revision: 16803 $ on $Date:: 2012-02-02 09:49:18 -0800 #$ */

#include <GLES2/gl2platform.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

/*-------------------------------------------------------------------------
 * Data type definitions
 *-----------------------------------------------------------------------*/

typedef void             GLvoid;
typedef char             GLchar;
typedef unsigned int     GLenum;
typedef unsigned char    GLboolean;
typedef unsigned int     GLbitfield;
typedef khronos_int8_t   GLbyte;
typedef short            GLshort;
typedef int              GLint;
typedef int              GLsizei;
typedef khronos_uint8_t  GLubyte;
typedef unsigned short   GLushort;
typedef unsigned int     GLuint;
typedef khronos_float_t  GLfloat;
typedef khronos_float_t  GLclampf;
typedef khronos_int32_t  GLfixed;

/* GL types for handling large vertex buffer objects */
typedef khronos_intptr_t GLintptr;
typedef khronos_ssize_t  GLsizeiptr;

/* OpenGL ES core versions */
#define GL_ES_VERSION_2_0                 1

/* ClearBufferMask */
#define GL_DEPTH_BUFFER_BIT               0x00000100
#define GL_STENCIL_BUFFER_BIT             0x00000400
#define GL_COLOR_BUFFER_BIT               0x00004000

/* Boolean */
#define GL_FALSE                          0
#define GL_TRUE                           1

/* BeginMode */
#define GL_POINTS                         0x0000
#define GL_LINES                          0x0001
#define GL_LINE_LOOP                      0x0002
#define GL_LINE_STRIP                     0x0003
#define GL_TRIANGLES                      0x0004
#define GL_TRIANGLE_STRIP                 0x0005
#define GL_TRIANGLE_FAN                   0x0006

/* AlphaFunction (not supported in ES20) */
/*      GL_NEVER */
/*      GL_LESS */
/*      GL_EQUAL */
/*      GL_LEQUAL */
/*      GL_GREATER */
/*      GL_NOTEQUAL */
/*      GL_GEQUAL */
/*      GL_ALWAYS */

/* BlendingFactorDest */
#define GL_ZERO                           0
#define GL_ONE                            1
#define GL_SRC_COLOR                      0x0300
#define GL_ONE_MINUS_SRC_COLOR            0x0301
#define GL_SRC_ALPHA                      0x0302
#define GL_ONE_MINUS_SRC_ALPHA            0x0303
#define GL_DST_ALPHA                      0x0304
#define GL_ONE_MINUS_DST_ALPHA            0x0305

/* BlendingFactorSrc */
/*      GL_ZERO */
/*      GL_ONE */
#define GL_DST_COLOR                      0x0306
#define GL_ONE_MINUS_DST_COLOR            0x0307
#define GL_SRC_ALPHA_SATURATE             0x0308
/*      GL_SRC_ALPHA */
/*      GL_ONE_MINUS_SRC_ALPHA */
/*      GL_DST_ALPHA */
/*      GL_ONE_MINUS_DST_ALPHA */

/* BlendEquationSeparate */
#define GL_FUNC_ADD                       0x8006
#define GL_BLEND_EQUATION                 0x8009
#define GL_BLEND_EQUATION_RGB             0x8009    /* same as BLEND_EQUATION */
#define GL_BLEND_EQUATION_ALPHA           0x883D

/* BlendSubtract */
#define GL_FUNC_SUBTRACT                  0x800A
#define GL_FUNC_REVERSE_SUBTRACT          0x800B

/* Separate Blend Functions */
#define GL_BLEND_DST_RGB                  0x80C8
#define GL_BLEND_SRC_RGB                  0x80C9
#define GL_BLEND_DST_ALPHA                0x80CA
#define GL_BLEND_SRC_ALPHA                0x80CB
#define GL_CONSTANT_COLOR                 0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002
#define GL_CONSTANT_ALPHA                 0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004
#define GL_BLEND_COLOR                    0x8005

/* Buffer Objects */
#define GL_ARRAY_BUFFER                   0x8892
#define GL_ELEMENT_ARRAY_BUFFER           0x8893
#define GL_ARRAY_BUFFER_BINDING           0x8894
#define GL_ELEMENT_ARRAY_BUFFER_BINDING   0x8895

#define GL_STREAM_DRAW                    0x88E0
#define GL_STATIC_DRAW                    0x88E4
#define GL_DYNAMIC_DRAW                   0x88E8

#define GL_BUFFER_SIZE                    0x8764
#define GL_BUFFER_USAGE                   0x8765

#define GL_CURRENT_VERTEX_ATTRIB          0x8626

/* CullFaceMode */
#define GL_FRONT                          0x0404
#define GL_BACK                           0x0405
#define GL_FRONT_AND_BACK                 0x0408

/* DepthFunction */
/*      GL_NEVER */
/*      GL_LESS */
/*      GL_EQUAL */
/*      GL_LEQUAL */
/*      GL_GREATER */
/*      GL_NOTEQUAL */
/*      GL_GEQUAL */
/*      GL_ALWAYS */

/* EnableCap */
#define GL_TEXTURE_2D                     0x0DE1
#define GL_CULL_FACE                      0x0B44
#define GL_BLEND                          0x0BE2
#define GL_DITHER                         0x0BD0
#define GL_STENCIL_TEST                   0x0B90
#define GL_DEPTH_TEST                     0x0B71
#define GL_SCISSOR_TEST                   0x0C11
#define GL_POLYGON_OFFSET_FILL            0x8037
#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
#define GL_SAMPLE_COVERAGE                0x80A0

/* ErrorCode */
#define GL_NO_ERROR                       0
#define GL_INVALID_ENUM                   0x0500
#define GL_INVALID_VALUE                  0x0501
#define GL_INVALID_OPERATION              0x0502
#define GL_OUT_OF_MEMORY                  0x0505

/* FrontFaceDirection */
#define GL_CW                             0x0900
#define GL_CCW                            0x0901

/* GetPName */
#define GL_LINE_WIDTH                     0x0B21
#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
#define GL_CULL_FACE_MODE                 0x0B45
#define GL_FRONT_FACE                     0x0B46
#define GL_DEPTH_RANGE                    0x0B70
#define GL_DEPTH_WRITEMASK                0x0B72
#define GL_DEPTH_CLEAR_VALUE              0x0B73
#define GL_DEPTH_FUNC                     0x0B74
#define GL_STENCIL_CLEAR_VALUE            0x0B91
#define GL_STENCIL_FUNC                   0x0B92
#define GL_STENCIL_FAIL                   0x0B94
#define GL_STENCIL_PASS_DEPTH_FAIL        0x0B95
#define GL_STENCIL_PASS_DEPTH_PASS        0x0B96
#define GL_STENCIL_REF                    0x0B97
#define GL_STENCIL_VALUE_MASK             0x0B93
#define GL_STENCIL_WRITEMASK              0x0B98
#define GL_STENCIL_BACK_FUNC              0x8800
#define GL_STENCIL_BACK_FAIL              0x8801
#define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802
#define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803
#define GL_STENCIL_BACK_REF               0x8CA3
#define GL_STENCIL_BACK_VALUE_MASK        0x8CA4
#define GL_STENCIL_BACK_WRITEMASK         0x8CA5
#define GL_VIEWPORT                       0x0BA2
#define GL_SCISSOR_BOX                    0x0C10
/*      GL_SCISSOR_TEST */
#define GL_COLOR_CLEAR_VALUE              0x0C22
#define GL_COLOR_WRITEMASK                0x0C23
#define GL_UNPACK_ALIGNMENT               0x0CF5
#define GL_PACK_ALIGNMENT                 0x0D05
#define GL_MAX_TEXTURE_SIZE               0x0D33
#define GL_MAX_VIEWPORT_DIMS              0x0D3A
#define GL_SUBPIXEL_BITS                  0x0D50
#define GL_RED_BITS                       0x0D52
#define GL_GREEN_BITS                     0x0D53
#define GL_BLUE_BITS                      0x0D54
#define GL_ALPHA_BITS                     0x0D55
#define GL_DEPTH_BITS                     0x0D56
#define GL_STENCIL_BITS                   0x0D57
#define GL_POLYGON_OFFSET_UNITS           0x2A00
/*      GL_POLYGON_OFFSET_FILL */
#define GL_POLYGON_OFFSET_FACTOR          0x8038
#define GL_TEXTURE_BINDING_2D             0x8069
#define GL_SAMPLE_BUFFERS                 0x80A8
#define GL_SAMPLES                        0x80A9
#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
#define GL_SAMPLE_COVERAGE_INVERT         0x80AB

/* GetTextureParameter */
/*      GL_TEXTURE_MAG_FILTER */
/*      GL_TEXTURE_MIN_FILTER */
/*      GL_TEXTURE_WRAP_S */
/*      GL_TEXTURE_WRAP_T */

#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3

/* HintMode */
#define GL_DONT_CARE                      0x1100
#define GL_FASTEST                        0x1101
#define GL_NICEST                         0x1102

/* HintTarget */
#define GL_GENERATE_MIPMAP_HINT            0x8192

/* DataType */
#define GL_BYTE                           0x1400
#define GL_UNSIGNED_BYTE                  0x1401
#define GL_SHORT                          0x1402
#define GL_UNSIGNED_SHORT                 0x1403
#define GL_INT                            0x1404
#define GL_UNSIGNED_INT                   0x1405
#define GL_FLOAT                          0x1406
#define GL_FIXED                          0x140C

/* PixelFormat */
#define GL_DEPTH_COMPONENT                0x1902
#define GL_ALPHA                          0x1906
#define GL_RGB                            0x1907
#define GL_RGBA                           0x1908
#define GL_LUMINANCE                      0x1909
#define GL_LUMINANCE_ALPHA                0x190A

/* PixelType */
/*      GL_UNSIGNED_BYTE */
#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
#define GL_UNSIGNED_SHORT_5_6_5           0x8363

/* Shaders */
#define GL_FRAGMENT_SHADER                  0x8B30
#define GL_VERTEX_SHADER                    0x8B31
#define GL_MAX_VERTEX_ATTRIBS               0x8869
#define GL_MAX_VERTEX_UNIFORM_VECTORS       0x8DFB
#define GL_MAX_VARYING_VECTORS              0x8DFC
#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS   0x8B4C
#define GL_MAX_TEXTURE_IMAGE_UNITS          0x8872
#define GL_MAX_FRAGMENT_UNIFORM_VECTORS     0x8DFD
#define GL_SHADER_TYPE                      0x8B4F
#define GL_DELETE_STATUS                    0x8B80
#define GL_LINK_STATUS                      0x8B82
#define GL_VALIDATE_STATUS                  0x8B83
#define GL_ATTACHED_SHADERS                 0x8B85
#define GL_ACTIVE_UNIFORMS                  0x8B86
#define GL_ACTIVE_UNIFORM_MAX_LENGTH        0x8B87
#define GL_ACTIVE_ATTRIBUTES                0x8B89
#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH      0x8B8A
#define GL_SHADING_LANGUAGE_VERSION         0x8B8C
#define GL_CURRENT_PROGRAM                  0x8B8D

/* StencilFunction */
#define GL_NEVER                          0x0200
#define GL_LESS                           0x0201
#define GL_EQUAL                          0x0202
#define GL_LEQUAL                         0x0203
#define GL_GREATER                        0x0204
#define GL_NOTEQUAL                       0x0205
#define GL_GEQUAL                         0x0206
#define GL_ALWAYS                         0x0207

/* StencilOp */
/*      GL_ZERO */
#define GL_KEEP                           0x1E00
#define GL_REPLACE                        0x1E01
#define GL_INCR                           0x1E02
#define GL_DECR                           0x1E03
#define GL_INVERT                         0x150A
#define GL_INCR_WRAP                      0x8507
#define GL_DECR_WRAP                      0x8508

/* StringName */
#define GL_VENDOR                         0x1F00
#define GL_RENDERER                       0x1F01
#define GL_VERSION                        0x1F02
#define GL_EXTENSIONS                     0x1F03

/* TextureMagFilter */
#define GL_NEAREST                        0x2600
#define GL_LINEAR                         0x2601

/* TextureMinFilter */
/*      GL_NEAREST */
/*      GL_LINEAR */
#define GL_NEAREST_MIPMAP_NEAREST         0x2700
#define GL_LINEAR_MIPMAP_NEAREST          0x2701
#define GL_NEAREST_MIPMAP_LINEAR          0x2702
#define GL_LINEAR_MIPMAP_LINEAR           0x2703

/* TextureParameterName */
#define GL_TEXTURE_MAG_FILTER             0x2800
#define GL_TEXTURE_MIN_FILTER             0x2801
#define GL_TEXTURE_WRAP_S                 0x2802
#define GL_TEXTURE_WRAP_T                 0x2803

/* TextureTarget */
/*      GL_TEXTURE_2D */
#define GL_TEXTURE                        0x1702

#define GL_TEXTURE_CUBE_MAP               0x8513
#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C

/* TextureUnit */
#define GL_TEXTURE0                       0x84C0
#define GL_TEXTURE1                       0x84C1
#define GL_TEXTURE2                       0x84C2
#define GL_TEXTURE3                       0x84C3
#define GL_TEXTURE4                       0x84C4
#define GL_TEXTURE5                       0x84C5
#define GL_TEXTURE6                       0x84C6
#define GL_TEXTURE7                       0x84C7
#define GL_TEXTURE8                       0x84C8
#define GL_TEXTURE9                       0x84C9
#define GL_TEXTURE10                      0x84CA
#define GL_TEXTURE11                      0x84CB
#define GL_TEXTURE12                      0x84CC
#define GL_TEXTURE13                      0x84CD
#define GL_TEXTURE14                      0x84CE
#define GL_TEXTURE15                      0x84CF
#define GL_TEXTURE16                      0x84D0
#define GL_TEXTURE17                      0x84D1
#define GL_TEXTURE18                      0x84D2
#define GL_TEXTURE19                      0x84D3
#define GL_TEXTURE20                      0x84D4
#define GL_TEXTURE21                      0x84D5
#define GL_TEXTURE22                      0x84D6
#define GL_TEXTURE23                      0x84D7
#define GL_TEXTURE24                      0x84D8
#define GL_TEXTURE25                      0x84D9
#define GL_TEXTURE26                      0x84DA
#define GL_TEXTURE27                      0x84DB
#define GL_TEXTURE28                      0x84DC
#define GL_TEXTURE29                      0x84DD
#define GL_TEXTURE30                      0x84DE
#define GL_TEXTURE31                      0x84DF
#define GL_ACTIVE_TEXTURE                 0x84E0

/* TextureWrapMode */
#define GL_REPEAT                         0x2901
#define GL_CLAMP_TO_EDGE                  0x812F
#define GL_MIRRORED_REPEAT                0x8370

/* Uniform Types */
#define GL_FLOAT_VEC2                     0x8B50
#define GL_FLOAT_VEC3                     0x8B51
#define GL_FLOAT_VEC4                     0x8B52
#define GL_INT_VEC2                       0x8B53
#define GL_INT_VEC3                       0x8B54
#define GL_INT_VEC4                       0x8B55
#define GL_BOOL                           0x8B56
#define GL_BOOL_VEC2                      0x8B57
#define GL_BOOL_VEC3                      0x8B58
#define GL_BOOL_VEC4                      0x8B59
#define GL_FLOAT_MAT2                     0x8B5A
#define GL_FLOAT_MAT3                     0x8B5B
#define GL_FLOAT_MAT4                     0x8B5C
#define GL_SAMPLER_2D                     0x8B5E
#define GL_SAMPLER_CUBE                   0x8B60

/* Vertex Arrays */
#define GL_VERTEX_ATTRIB_ARRAY_ENABLED        0x8622
#define GL_VERTEX_ATTRIB_ARRAY_SIZE           0x8623
#define GL_VERTEX_ATTRIB_ARRAY_STRIDE         0x8624
#define GL_VERTEX_ATTRIB_ARRAY_TYPE           0x8625
#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED     0x886A
#define GL_VERTEX_ATTRIB_ARRAY_POINTER        0x8645
#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F

/* Read Format */
#define GL_IMPLEMENTATION_COLOR_READ_TYPE   0x8B9A
#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B

/* Shader Source */
#define GL_COMPILE_STATUS                 0x8B81
#define GL_INFO_LOG_LENGTH                0x8B84
#define GL_SHADER_SOURCE_LENGTH           0x8B88
#define GL_SHADER_COMPILER                0x8DFA

/* Shader Binary */
#define GL_SHADER_BINARY_FORMATS          0x8DF8
#define GL_NUM_SHADER_BINARY_FORMATS      0x8DF9

/* Shader Precision-Specified Types */
#define GL_LOW_FLOAT                      0x8DF0
#define GL_MEDIUM_FLOAT                   0x8DF1
#define GL_HIGH_FLOAT                     0x8DF2
#define GL_LOW_INT                        0x8DF3
#define GL_MEDIUM_INT                     0x8DF4
#define GL_HIGH_INT                       0x8DF5

/* Framebuffer Object. */
#define GL_FRAMEBUFFER                    0x8D40
#define GL_RENDERBUFFER                   0x8D41

#define GL_RGBA4                          0x8056
#define GL_RGB5_A1                        0x8057
#define GL_RGB565                         0x8D62
#define GL_DEPTH_COMPONENT16              0x81A5
#define GL_STENCIL_INDEX8                 0x8D48

#define GL_RENDERBUFFER_WIDTH             0x8D42
#define GL_RENDERBUFFER_HEIGHT            0x8D43
#define GL_RENDERBUFFER_INTERNAL_FORMAT   0x8D44
#define GL_RENDERBUFFER_RED_SIZE          0x8D50
#define GL_RENDERBUFFER_GREEN_SIZE        0x8D51
#define GL_RENDERBUFFER_BLUE_SIZE         0x8D52
#define GL_RENDERBUFFER_ALPHA_SIZE        0x8D53
#define GL_RENDERBUFFER_DEPTH_SIZE        0x8D54
#define GL_RENDERBUFFER_STENCIL_SIZE      0x8D55

#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE           0x8CD0
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME           0x8CD1
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL         0x8CD2
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3

#define GL_COLOR_ATTACHMENT0              0x8CE0
#define GL_DEPTH_ATTACHMENT               0x8D00
#define GL_STENCIL_ATTACHMENT             0x8D20

#define GL_NONE                           0

#define GL_FRAMEBUFFER_COMPLETE                      0x8CD5
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT         0x8CD6
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS         0x8CD9
#define GL_FRAMEBUFFER_UNSUPPORTED                   0x8CDD

#define GL_FRAMEBUFFER_BINDING            0x8CA6
#define GL_RENDERBUFFER_BINDING           0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE          0x84E8

#define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506

/*-------------------------------------------------------------------------
 * GL core functions.
 *-----------------------------------------------------------------------*/

GL_APICALL void         GL_APIENTRY glActiveTexture (GLenum texture);
GL_APICALL void         GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
GL_APICALL void         GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name);
GL_APICALL void         GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
GL_APICALL void         GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
GL_APICALL void         GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
GL_APICALL void         GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
GL_APICALL void         GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
GL_APICALL void         GL_APIENTRY glBlendEquation ( GLenum mode );
GL_APICALL void         GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
GL_APICALL void         GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
GL_APICALL void         GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
GL_APICALL void         GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
GL_APICALL void         GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
GL_APICALL GLenum       GL_APIENTRY glCheckFramebufferStatus (GLenum target);
GL_APICALL void         GL_APIENTRY glClear (GLbitfield mask);
GL_APICALL void         GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
GL_APICALL void         GL_APIENTRY glClearDepthf (GLclampf depth);
GL_APICALL void         GL_APIENTRY glClearStencil (GLint s);
GL_APICALL void         GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
GL_APICALL void         GL_APIENTRY glCompileShader (GLuint shader);
GL_APICALL void         GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
GL_APICALL void         GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
GL_APICALL void         GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
GL_APICALL void         GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL GLuint       GL_APIENTRY glCreateProgram (void);
GL_APICALL GLuint       GL_APIENTRY glCreateShader (GLenum type);
GL_APICALL void         GL_APIENTRY glCullFace (GLenum mode);
GL_APICALL void         GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers);
GL_APICALL void         GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers);
GL_APICALL void         GL_APIENTRY glDeleteProgram (GLuint program);
GL_APICALL void         GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers);
GL_APICALL void         GL_APIENTRY glDeleteShader (GLuint shader);
GL_APICALL void         GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures);
GL_APICALL void         GL_APIENTRY glDepthFunc (GLenum func);
GL_APICALL void         GL_APIENTRY glDepthMask (GLboolean flag);
GL_APICALL void         GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar);
GL_APICALL void         GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
GL_APICALL void         GL_APIENTRY glDisable (GLenum cap);
GL_APICALL void         GL_APIENTRY glDisableVertexAttribArray (GLuint index);
GL_APICALL void         GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
GL_APICALL void         GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
GL_APICALL void         GL_APIENTRY glEnable (GLenum cap);
GL_APICALL void         GL_APIENTRY glEnableVertexAttribArray (GLuint index);
GL_APICALL void         GL_APIENTRY glFinish (void);
GL_APICALL void         GL_APIENTRY glFlush (void);
GL_APICALL void         GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
GL_APICALL void         GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
GL_APICALL void         GL_APIENTRY glFrontFace (GLenum mode);
GL_APICALL void         GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers);
GL_APICALL void         GL_APIENTRY glGenerateMipmap (GLenum target);
GL_APICALL void         GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers);
GL_APICALL void         GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers);
GL_APICALL void         GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures);
GL_APICALL void         GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
GL_APICALL void         GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
GL_APICALL void         GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
GL_APICALL int          GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name);
GL_APICALL void         GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params);
GL_APICALL void         GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params);
GL_APICALL GLenum       GL_APIENTRY glGetError (void);
GL_APICALL void         GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params);
GL_APICALL void         GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
GL_APICALL void         GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
GL_APICALL void         GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
GL_APICALL void         GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name);
GL_APICALL void         GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params);
GL_APICALL void         GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params);
GL_APICALL void         GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params);
GL_APICALL int          GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name);
GL_APICALL void         GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params);
GL_APICALL void         GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params);
GL_APICALL void         GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer);
GL_APICALL void         GL_APIENTRY glHint (GLenum target, GLenum mode);
GL_APICALL GLboolean    GL_APIENTRY glIsBuffer (GLuint buffer);
GL_APICALL GLboolean    GL_APIENTRY glIsEnabled (GLenum cap);
GL_APICALL GLboolean    GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
GL_APICALL GLboolean    GL_APIENTRY glIsProgram (GLuint program);
GL_APICALL GLboolean    GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
GL_APICALL GLboolean    GL_APIENTRY glIsShader (GLuint shader);
GL_APICALL GLboolean    GL_APIENTRY glIsTexture (GLuint texture);
GL_APICALL void         GL_APIENTRY glLineWidth (GLfloat width);
GL_APICALL void         GL_APIENTRY glLinkProgram (GLuint program);
GL_APICALL void         GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
GL_APICALL void         GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
GL_APICALL void         GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
GL_APICALL void         GL_APIENTRY glReleaseShaderCompiler (void);
GL_APICALL void         GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void         GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert);
GL_APICALL void         GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL void         GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
GL_APICALL void         GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
GL_APICALL void         GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
GL_APICALL void         GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
GL_APICALL void         GL_APIENTRY glStencilMask (GLuint mask);
GL_APICALL void         GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
GL_APICALL void         GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
GL_APICALL void         GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
GL_APICALL void         GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void         GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
GL_APICALL void         GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params);
GL_APICALL void         GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
GL_APICALL void         GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params);
GL_APICALL void         GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void         GL_APIENTRY glUniform1f (GLint location, GLfloat x);
GL_APICALL void         GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void         GL_APIENTRY glUniform1i (GLint location, GLint x);
GL_APICALL void         GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void         GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y);
GL_APICALL void         GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void         GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y);
GL_APICALL void         GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void         GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z);
GL_APICALL void         GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void         GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z);
GL_APICALL void         GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void         GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
GL_APICALL void         GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void         GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w);
GL_APICALL void         GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void         GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void         GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void         GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void         GL_APIENTRY glUseProgram (GLuint program);
GL_APICALL void         GL_APIENTRY glValidateProgram (GLuint program);
GL_APICALL void         GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x);
GL_APICALL void         GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values);
GL_APICALL void         GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y);
GL_APICALL void         GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values);
GL_APICALL void         GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z);
GL_APICALL void         GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values);
GL_APICALL void         GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
GL_APICALL void         GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values);
GL_APICALL void         GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
GL_APICALL void         GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

#ifdef __cplusplus
}
#endif

#endif /* __gl2_h_ */
Added jni/glshim/include/GLES/gl2ext.h.
































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
#ifndef __gl2ext_h_
#define __gl2ext_h_

/* $Revision: 19436 $ on $Date:: 2012-10-10 10:37:04 -0700 #$ */

#ifdef __cplusplus
extern "C" {
#endif

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

#ifndef GL_APIENTRYP
#   define GL_APIENTRYP GL_APIENTRY*
#endif

/*------------------------------------------------------------------------*
 * OES extension tokens
 *------------------------------------------------------------------------*/

/* GL_OES_compressed_ETC1_RGB8_texture */
#ifndef GL_OES_compressed_ETC1_RGB8_texture
#define GL_ETC1_RGB8_OES                                        0x8D64
#endif

/* GL_OES_compressed_paletted_texture */
#ifndef GL_OES_compressed_paletted_texture
#define GL_PALETTE4_RGB8_OES                                    0x8B90
#define GL_PALETTE4_RGBA8_OES                                   0x8B91
#define GL_PALETTE4_R5_G6_B5_OES                                0x8B92
#define GL_PALETTE4_RGBA4_OES                                   0x8B93
#define GL_PALETTE4_RGB5_A1_OES                                 0x8B94
#define GL_PALETTE8_RGB8_OES                                    0x8B95
#define GL_PALETTE8_RGBA8_OES                                   0x8B96
#define GL_PALETTE8_R5_G6_B5_OES                                0x8B97
#define GL_PALETTE8_RGBA4_OES                                   0x8B98
#define GL_PALETTE8_RGB5_A1_OES                                 0x8B99
#endif

/* GL_OES_depth24 */
#ifndef GL_OES_depth24
#define GL_DEPTH_COMPONENT24_OES                                0x81A6
#endif

/* GL_OES_depth32 */
#ifndef GL_OES_depth32
#define GL_DEPTH_COMPONENT32_OES                                0x81A7
#endif

/* GL_OES_depth_texture */
/* No new tokens introduced by this extension. */

/* GL_OES_EGL_image */
#ifndef GL_OES_EGL_image
typedef void* GLeglImageOES;
#endif

/* GL_OES_EGL_image_external */
#ifndef GL_OES_EGL_image_external
/* GLeglImageOES defined in GL_OES_EGL_image already. */
#define GL_TEXTURE_EXTERNAL_OES                                 0x8D65
#define GL_SAMPLER_EXTERNAL_OES                                 0x8D66
#define GL_TEXTURE_BINDING_EXTERNAL_OES                         0x8D67
#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES                     0x8D68
#endif

/* GL_OES_element_index_uint */
#ifndef GL_OES_element_index_uint
#define GL_UNSIGNED_INT                                         0x1405
#endif

/* GL_OES_get_program_binary */
#ifndef GL_OES_get_program_binary
#define GL_PROGRAM_BINARY_LENGTH_OES                            0x8741
#define GL_NUM_PROGRAM_BINARY_FORMATS_OES                       0x87FE
#define GL_PROGRAM_BINARY_FORMATS_OES                           0x87FF
#endif

/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_WRITE_ONLY_OES                                       0x88B9
#define GL_BUFFER_ACCESS_OES                                    0x88BB
#define GL_BUFFER_MAPPED_OES                                    0x88BC
#define GL_BUFFER_MAP_POINTER_OES                               0x88BD
#endif

/* GL_OES_packed_depth_stencil */
#ifndef GL_OES_packed_depth_stencil
#define GL_DEPTH_STENCIL_OES                                    0x84F9
#define GL_UNSIGNED_INT_24_8_OES                                0x84FA
#define GL_DEPTH24_STENCIL8_OES                                 0x88F0
#endif

/* GL_OES_required_internalformat */
#ifndef GL_OES_required_internalformat 
#define GL_ALPHA8_OES                                           0x803C
#define GL_DEPTH_COMPONENT16_OES                                0x81A5
/* reuse GL_DEPTH_COMPONENT24_OES */                            
/* reuse GL_DEPTH24_STENCIL8_OES */                             
/* reuse GL_DEPTH_COMPONENT32_OES */                            
#define GL_LUMINANCE4_ALPHA4_OES                                0x8043
#define GL_LUMINANCE8_ALPHA8_OES                                0x8045
#define GL_LUMINANCE8_OES                                       0x8040
#define GL_RGBA4_OES                                            0x8056
#define GL_RGB5_A1_OES                                          0x8057
#define GL_RGB565_OES                                           0x8D62
/* reuse GL_RGB8_OES */                              
/* reuse GL_RGBA8_OES */  
/* reuse GL_RGB10_EXT */
/* reuse GL_RGB10_A2_EXT */
#endif 

/* GL_OES_rgb8_rgba8 */
#ifndef GL_OES_rgb8_rgba8
#define GL_RGB8_OES                                             0x8051
#define GL_RGBA8_OES                                            0x8058
#endif

/* GL_OES_standard_derivatives */
#ifndef GL_OES_standard_derivatives
#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES                  0x8B8B
#endif

/* GL_OES_stencil1 */
#ifndef GL_OES_stencil1
#define GL_STENCIL_INDEX1_OES                                   0x8D46
#endif

/* GL_OES_stencil4 */
#ifndef GL_OES_stencil4
#define GL_STENCIL_INDEX4_OES                                   0x8D47
#endif

#ifndef GL_OES_surfaceless_context
#define GL_FRAMEBUFFER_UNDEFINED_OES                            0x8219
#endif

/* GL_OES_texture_3D */
#ifndef GL_OES_texture_3D
#define GL_TEXTURE_WRAP_R_OES                                   0x8072
#define GL_TEXTURE_3D_OES                                       0x806F
#define GL_TEXTURE_BINDING_3D_OES                               0x806A
#define GL_MAX_3D_TEXTURE_SIZE_OES                              0x8073
#define GL_SAMPLER_3D_OES                                       0x8B5F
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES        0x8CD4
#endif

/* GL_OES_texture_float */
/* No new tokens introduced by this extension. */

/* GL_OES_texture_float_linear */
/* No new tokens introduced by this extension. */

/* GL_OES_texture_half_float */
#ifndef GL_OES_texture_half_float
#define GL_HALF_FLOAT_OES                                       0x8D61
#endif

/* GL_OES_texture_half_float_linear */
/* No new tokens introduced by this extension. */

/* GL_OES_texture_npot */
/* No new tokens introduced by this extension. */

/* GL_OES_vertex_array_object */
#ifndef GL_OES_vertex_array_object
#define GL_VERTEX_ARRAY_BINDING_OES                             0x85B5
#endif

/* GL_OES_vertex_half_float */
/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */

/* GL_OES_vertex_type_10_10_10_2 */
#ifndef GL_OES_vertex_type_10_10_10_2
#define GL_UNSIGNED_INT_10_10_10_2_OES                          0x8DF6
#define GL_INT_10_10_10_2_OES                                   0x8DF7
#endif

/*------------------------------------------------------------------------*
 * KHR extension tokens
 *------------------------------------------------------------------------*/

#ifndef GL_KHR_debug
typedef void (GL_APIENTRYP GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
#define GL_DEBUG_OUTPUT_SYNCHRONOUS                             0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH                     0x8243
#define GL_DEBUG_CALLBACK_FUNCTION                              0x8244
#define GL_DEBUG_CALLBACK_USER_PARAM                            0x8245
#define GL_DEBUG_SOURCE_API                                     0x8246
#define GL_DEBUG_SOURCE_WINDOW_SYSTEM                           0x8247
#define GL_DEBUG_SOURCE_SHADER_COMPILER                         0x8248
#define GL_DEBUG_SOURCE_THIRD_PARTY                             0x8249
#define GL_DEBUG_SOURCE_APPLICATION                             0x824A
#define GL_DEBUG_SOURCE_OTHER                                   0x824B
#define GL_DEBUG_TYPE_ERROR                                     0x824C
#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR                       0x824D
#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR                        0x824E
#define GL_DEBUG_TYPE_PORTABILITY                               0x824F
#define GL_DEBUG_TYPE_PERFORMANCE                               0x8250
#define GL_DEBUG_TYPE_OTHER                                     0x8251
#define GL_DEBUG_TYPE_MARKER                                    0x8268
#define GL_DEBUG_TYPE_PUSH_GROUP                                0x8269
#define GL_DEBUG_TYPE_POP_GROUP                                 0x826A
#define GL_DEBUG_SEVERITY_NOTIFICATION                          0x826B
#define GL_MAX_DEBUG_GROUP_STACK_DEPTH                          0x826C
#define GL_DEBUG_GROUP_STACK_DEPTH                              0x826D
#define GL_BUFFER                                               0x82E0
#define GL_SHADER                                               0x82E1
#define GL_PROGRAM                                              0x82E2
#define GL_QUERY                                                0x82E3
/* PROGRAM_PIPELINE only in GL */                               
#define GL_SAMPLER                                              0x82E6
/* DISPLAY_LIST only in GL */                                   
#define GL_MAX_LABEL_LENGTH                                     0x82E8
#define GL_MAX_DEBUG_MESSAGE_LENGTH                             0x9143
#define GL_MAX_DEBUG_LOGGED_MESSAGES                            0x9144
#define GL_DEBUG_LOGGED_MESSAGES                                0x9145
#define GL_DEBUG_SEVERITY_HIGH                                  0x9146
#define GL_DEBUG_SEVERITY_MEDIUM                                0x9147
#define GL_DEBUG_SEVERITY_LOW                                   0x9148
#define GL_DEBUG_OUTPUT                                         0x92E0
#define GL_CONTEXT_FLAG_DEBUG_BIT                               0x00000002
#define GL_STACK_OVERFLOW                                       0x0503
#define GL_STACK_UNDERFLOW                                      0x0504
#endif

#ifndef GL_KHR_texture_compression_astc_ldr
#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR                         0x93B0
#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR                         0x93B1
#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR                         0x93B2
#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR                         0x93B3
#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR                         0x93B4
#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR                         0x93B5
#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR                         0x93B6
#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR                         0x93B7
#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR                        0x93B8
#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR                        0x93B9
#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR                        0x93BA
#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR                       0x93BB
#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR                       0x93BC
#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR                       0x93BD
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR                 0x93D0
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR                 0x93D1
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR                 0x93D2
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR                 0x93D3
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR                 0x93D4
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR                 0x93D5
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR                 0x93D6
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR                 0x93D7
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR                0x93D8
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR                0x93D9
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR                0x93DA
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR               0x93DB
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR               0x93DC
#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR               0x93DD
#endif

/*------------------------------------------------------------------------*
 * AMD extension tokens
 *------------------------------------------------------------------------*/

/* GL_AMD_compressed_3DC_texture */
#ifndef GL_AMD_compressed_3DC_texture
#define GL_3DC_X_AMD                                            0x87F9
#define GL_3DC_XY_AMD                                           0x87FA
#endif

/* GL_AMD_compressed_ATC_texture */
#ifndef GL_AMD_compressed_ATC_texture
#define GL_ATC_RGB_AMD                                          0x8C92
#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                          0x8C93
#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD                      0x87EE
#endif

/* GL_AMD_performance_monitor */
#ifndef GL_AMD_performance_monitor
#define GL_COUNTER_TYPE_AMD                                     0x8BC0
#define GL_COUNTER_RANGE_AMD                                    0x8BC1
#define GL_UNSIGNED_INT64_AMD                                   0x8BC2
#define GL_PERCENTAGE_AMD                                       0x8BC3
#define GL_PERFMON_RESULT_AVAILABLE_AMD                         0x8BC4
#define GL_PERFMON_RESULT_SIZE_AMD                              0x8BC5
#define GL_PERFMON_RESULT_AMD                                   0x8BC6
#endif

/* GL_AMD_program_binary_Z400 */
#ifndef GL_AMD_program_binary_Z400
#define GL_Z400_BINARY_AMD                                      0x8740
#endif

/*------------------------------------------------------------------------*
 * ANGLE extension tokens
 *------------------------------------------------------------------------*/

/* GL_ANGLE_framebuffer_blit */
#ifndef GL_ANGLE_framebuffer_blit
#define GL_READ_FRAMEBUFFER_ANGLE                               0x8CA8
#define GL_DRAW_FRAMEBUFFER_ANGLE                               0x8CA9
#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE                       0x8CA6
#define GL_READ_FRAMEBUFFER_BINDING_ANGLE                       0x8CAA
#endif

/* GL_ANGLE_framebuffer_multisample */
#ifndef GL_ANGLE_framebuffer_multisample
#define GL_RENDERBUFFER_SAMPLES_ANGLE                           0x8CAB
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE             0x8D56
#define GL_MAX_SAMPLES_ANGLE                                    0x8D57
#endif

/* GL_ANGLE_instanced_arrays */
#ifndef GL_ANGLE_instanced_arrays 
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE                    0x88FE
#endif

/* GL_ANGLE_pack_reverse_row_order */
#ifndef GL_ANGLE_pack_reverse_row_order 
#define GL_PACK_REVERSE_ROW_ORDER_ANGLE                         0x93A4
#endif

/* GL_ANGLE_texture_compression_dxt3 */
#ifndef GL_ANGLE_texture_compression_dxt3 
#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE                      0x83F2
#endif

/* GL_ANGLE_texture_compression_dxt5 */
#ifndef GL_ANGLE_texture_compression_dxt5 
#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE                      0x83F3
#endif

/* GL_ANGLE_texture_usage */
#ifndef GL_ANGLE_texture_usage 
#define GL_TEXTURE_USAGE_ANGLE                                  0x93A2
#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE                         0x93A3
#endif

/* GL_ANGLE_translated_shader_source */
#ifndef GL_ANGLE_translated_shader_source 
#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE                0x93A0
#endif

/*------------------------------------------------------------------------*
 * APPLE extension tokens
 *------------------------------------------------------------------------*/

/* GL_APPLE_copy_texture_levels */
/* No new tokens introduced by this extension. */
    
/* GL_APPLE_framebuffer_multisample */
#ifndef GL_APPLE_framebuffer_multisample
#define GL_RENDERBUFFER_SAMPLES_APPLE                           0x8CAB
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE             0x8D56
#define GL_MAX_SAMPLES_APPLE                                    0x8D57
#define GL_READ_FRAMEBUFFER_APPLE                               0x8CA8
#define GL_DRAW_FRAMEBUFFER_APPLE                               0x8CA9
#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE                       0x8CA6
#define GL_READ_FRAMEBUFFER_BINDING_APPLE                       0x8CAA
#endif

/* GL_APPLE_rgb_422 */
#ifndef GL_APPLE_rgb_422
#define GL_RGB_422_APPLE                                        0x8A1F
#define GL_UNSIGNED_SHORT_8_8_APPLE                             0x85BA
#define GL_UNSIGNED_SHORT_8_8_REV_APPLE                         0x85BB
#endif

/* GL_APPLE_sync */
#ifndef GL_APPLE_sync

#ifndef __gl3_h_
/* These types are defined with reference to <inttypes.h>
 * in the Apple extension spec, but here we use the Khronos
 * portable types in khrplatform.h, and assume those types 
 * are always defined.
 * If any other extensions using these types are defined, 
 * the typedefs must move out of this block and be shared.
 */
typedef khronos_int64_t GLint64;
typedef khronos_uint64_t GLuint64;
typedef struct __GLsync *GLsync;
#endif

#define GL_SYNC_OBJECT_APPLE                                    0x8A53
#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE                        0x9111
#define GL_OBJECT_TYPE_APPLE                                    0x9112
#define GL_SYNC_CONDITION_APPLE                                 0x9113
#define GL_SYNC_STATUS_APPLE                                    0x9114
#define GL_SYNC_FLAGS_APPLE                                     0x9115
#define GL_SYNC_FENCE_APPLE                                     0x9116
#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE                     0x9117
#define GL_UNSIGNALED_APPLE                                     0x9118
#define GL_SIGNALED_APPLE                                       0x9119
#define GL_ALREADY_SIGNALED_APPLE                               0x911A
#define GL_TIMEOUT_EXPIRED_APPLE                                0x911B
#define GL_CONDITION_SATISFIED_APPLE                            0x911C
#define GL_WAIT_FAILED_APPLE                                    0x911D
#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE                        0x00000001
#define GL_TIMEOUT_IGNORED_APPLE                                0xFFFFFFFFFFFFFFFFull
#endif

/* GL_APPLE_texture_format_BGRA8888 */
#ifndef GL_APPLE_texture_format_BGRA8888
#define GL_BGRA_EXT                                             0x80E1
#endif

/* GL_APPLE_texture_max_level */
#ifndef GL_APPLE_texture_max_level
#define GL_TEXTURE_MAX_LEVEL_APPLE                              0x813D
#endif

/*------------------------------------------------------------------------*
 * ARM extension tokens
 *------------------------------------------------------------------------*/

/* GL_ARM_mali_program_binary */
#ifndef GL_ARM_mali_program_binary
#define GL_MALI_PROGRAM_BINARY_ARM                              0x8F61
#endif

/* GL_ARM_mali_shader_binary */
#ifndef GL_ARM_mali_shader_binary
#define GL_MALI_SHADER_BINARY_ARM                               0x8F60
#endif

/* GL_ARM_rgba8 */
/* No new tokens introduced by this extension. */

/*------------------------------------------------------------------------*
 * EXT extension tokens
 *------------------------------------------------------------------------*/

/* GL_EXT_blend_minmax */
#ifndef GL_EXT_blend_minmax
#define GL_MIN_EXT                                              0x8007
#define GL_MAX_EXT                                              0x8008
#endif

/* GL_EXT_color_buffer_half_float */
#ifndef GL_EXT_color_buffer_half_float
#define GL_RGBA16F_EXT                                          0x881A
#define GL_RGB16F_EXT                                           0x881B
#define GL_RG16F_EXT                                            0x822F
#define GL_R16F_EXT                                             0x822D
#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT            0x8211
#define GL_UNSIGNED_NORMALIZED_EXT                              0x8C17
#endif

/* GL_EXT_debug_label */
#ifndef GL_EXT_debug_label
#define GL_PROGRAM_PIPELINE_OBJECT_EXT                          0x8A4F
#define GL_PROGRAM_OBJECT_EXT                                   0x8B40
#define GL_SHADER_OBJECT_EXT                                    0x8B48
#define GL_BUFFER_OBJECT_EXT                                    0x9151
#define GL_QUERY_OBJECT_EXT                                     0x9153
#define GL_VERTEX_ARRAY_OBJECT_EXT                              0x9154
#endif

/* GL_EXT_debug_marker */
/* No new tokens introduced by this extension. */

/* GL_EXT_discard_framebuffer */
#ifndef GL_EXT_discard_framebuffer
#define GL_COLOR_EXT                                            0x1800
#define GL_DEPTH_EXT                                            0x1801
#define GL_STENCIL_EXT                                          0x1802
#endif

/* GL_EXT_map_buffer_range */
#ifndef GL_EXT_map_buffer_range
#define GL_MAP_READ_BIT_EXT                                     0x0001
#define GL_MAP_WRITE_BIT_EXT                                    0x0002
#define GL_MAP_INVALIDATE_RANGE_BIT_EXT                         0x0004
#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT                        0x0008
#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT                           0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT_EXT                           0x0020
#endif

/* GL_EXT_multisampled_render_to_texture */
#ifndef GL_EXT_multisampled_render_to_texture
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT           0x8D6C
/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ 
#define GL_RENDERBUFFER_SAMPLES_EXT                             0x8CAB
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT               0x8D56
#define GL_MAX_SAMPLES_EXT                                      0x8D57
#endif

/* GL_EXT_multiview_draw_buffers */
#ifndef GL_EXT_multiview_draw_buffers
#define GL_COLOR_ATTACHMENT_EXT                                 0x90F0
#define GL_MULTIVIEW_EXT                                        0x90F1
#define GL_DRAW_BUFFER_EXT                                      0x0C01
#define GL_READ_BUFFER_EXT                                      0x0C02
#define GL_MAX_MULTIVIEW_BUFFERS_EXT                            0x90F2
#endif

/* GL_EXT_multi_draw_arrays */
/* No new tokens introduced by this extension. */

/* GL_EXT_occlusion_query_boolean */
#ifndef GL_EXT_occlusion_query_boolean
#define GL_ANY_SAMPLES_PASSED_EXT                               0x8C2F
#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT                  0x8D6A
#define GL_CURRENT_QUERY_EXT                                    0x8865
#define GL_QUERY_RESULT_EXT                                     0x8866
#define GL_QUERY_RESULT_AVAILABLE_EXT                           0x8867
#endif

/* GL_EXT_read_format_bgra */
#ifndef GL_EXT_read_format_bgra
#define GL_BGRA_EXT                                             0x80E1
#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT                       0x8365
#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT                       0x8366
#endif

/* GL_EXT_robustness */
#ifndef GL_EXT_robustness
/* reuse GL_NO_ERROR */
#define GL_GUILTY_CONTEXT_RESET_EXT                             0x8253
#define GL_INNOCENT_CONTEXT_RESET_EXT                           0x8254
#define GL_UNKNOWN_CONTEXT_RESET_EXT                            0x8255
#define GL_CONTEXT_ROBUST_ACCESS_EXT                            0x90F3
#define GL_RESET_NOTIFICATION_STRATEGY_EXT                      0x8256
#define GL_LOSE_CONTEXT_ON_RESET_EXT                            0x8252
#define GL_NO_RESET_NOTIFICATION_EXT                            0x8261
#endif

/* GL_EXT_separate_shader_objects */
#ifndef GL_EXT_separate_shader_objects
#define GL_VERTEX_SHADER_BIT_EXT                                0x00000001
#define GL_FRAGMENT_SHADER_BIT_EXT                              0x00000002
#define GL_ALL_SHADER_BITS_EXT                                  0xFFFFFFFF
#define GL_PROGRAM_SEPARABLE_EXT                                0x8258
#define GL_ACTIVE_PROGRAM_EXT                                   0x8259
#define GL_PROGRAM_PIPELINE_BINDING_EXT                         0x825A
#endif

/* GL_EXT_shader_framebuffer_fetch */
#ifndef GL_EXT_shader_framebuffer_fetch
#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT                 0x8A52
#endif

/* GL_EXT_shader_texture_lod */
/* No new tokens introduced by this extension. */

/* GL_EXT_shadow_samplers */
#ifndef GL_EXT_shadow_samplers
#define GL_TEXTURE_COMPARE_MODE_EXT                             0x884C
#define GL_TEXTURE_COMPARE_FUNC_EXT                             0x884D
#define GL_COMPARE_REF_TO_TEXTURE_EXT                           0x884E
#define GL_SAMPLER_2D_SHADOW_EXT                                0x8B62
#endif

/* GL_EXT_sRGB */
#ifndef GL_EXT_sRGB
#define GL_SRGB_EXT                                             0x8C40
#define GL_SRGB_ALPHA_EXT                                       0x8C42
#define GL_SRGB8_ALPHA8_EXT                                     0x8C43
#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT            0x8210
#endif

/* GL_EXT_texture_compression_dxt1 */
#ifndef GL_EXT_texture_compression_dxt1
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT                         0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                        0x83F1
#endif

/* GL_EXT_texture_filter_anisotropic */
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_TEXTURE_MAX_ANISOTROPY_EXT                           0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                       0x84FF
#endif

/* GL_EXT_texture_format_BGRA8888 */
#ifndef GL_EXT_texture_format_BGRA8888
#define GL_BGRA_EXT                                             0x80E1
#endif

/* GL_EXT_texture_rg */
#ifndef GL_EXT_texture_rg
#define GL_RED_EXT                                              0x1903
#define GL_RG_EXT                                               0x8227
#define GL_R8_EXT                                               0x8229
#define GL_RG8_EXT                                              0x822B
#endif

/* GL_EXT_texture_storage */
#ifndef GL_EXT_texture_storage
#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT                         0x912F
#define GL_ALPHA8_EXT                                           0x803C  
#define GL_LUMINANCE8_EXT                                       0x8040
#define GL_LUMINANCE8_ALPHA8_EXT                                0x8045
#define GL_RGBA32F_EXT                                          0x8814  
#define GL_RGB32F_EXT                                           0x8815
#define GL_ALPHA32F_EXT                                         0x8816
#define GL_LUMINANCE32F_EXT                                     0x8818
#define GL_LUMINANCE_ALPHA32F_EXT                               0x8819
/* reuse GL_RGBA16F_EXT */
/* reuse GL_RGB16F_EXT */
#define GL_ALPHA16F_EXT                                         0x881C
#define GL_LUMINANCE16F_EXT                                     0x881E
#define GL_LUMINANCE_ALPHA16F_EXT                               0x881F
#define GL_RGB10_A2_EXT                                         0x8059  
#define GL_RGB10_EXT                                            0x8052
#define GL_BGRA8_EXT                                            0x93A1
#define GL_R8_EXT                                               0x8229
#define GL_RG8_EXT                                              0x822B
#define GL_R32F_EXT                                             0x822E  
#define GL_RG32F_EXT                                            0x8230
#define GL_R16F_EXT                                             0x822D
#define GL_RG16F_EXT                                            0x822F
#endif

/* GL_EXT_texture_type_2_10_10_10_REV */
#ifndef GL_EXT_texture_type_2_10_10_10_REV
#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT                      0x8368
#endif

/* GL_EXT_unpack_subimage */
#ifndef GL_EXT_unpack_subimage
#define GL_UNPACK_ROW_LENGTH                                    0x0CF2
#define GL_UNPACK_SKIP_ROWS                                     0x0CF3
#define GL_UNPACK_SKIP_PIXELS                                   0x0CF4
#endif

/*------------------------------------------------------------------------*
 * DMP extension tokens
 *------------------------------------------------------------------------*/

/* GL_DMP_shader_binary */
#ifndef GL_DMP_shader_binary
#define GL_SHADER_BINARY_DMP                                    0x9250
#endif

/*------------------------------------------------------------------------*
 * FJ extension tokens
 *------------------------------------------------------------------------*/

/* GL_FJ_shader_binary_GCCSO */
#ifndef GL_FJ_shader_binary_GCCSO
#define GCCSO_SHADER_BINARY_FJ                                  0x9260
#endif

/*------------------------------------------------------------------------*
 * IMG extension tokens
 *------------------------------------------------------------------------*/

/* GL_IMG_program_binary */
#ifndef GL_IMG_program_binary
#define GL_SGX_PROGRAM_BINARY_IMG                               0x9130
#endif

/* GL_IMG_read_format */
#ifndef GL_IMG_read_format
#define GL_BGRA_IMG                                             0x80E1
#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG                       0x8365
#endif

/* GL_IMG_shader_binary */
#ifndef GL_IMG_shader_binary
#define GL_SGX_BINARY_IMG                                       0x8C0A
#endif

/* GL_IMG_texture_compression_pvrtc */
#ifndef GL_IMG_texture_compression_pvrtc
#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
#endif

/* GL_IMG_multisampled_render_to_texture */
#ifndef GL_IMG_multisampled_render_to_texture
#define GL_RENDERBUFFER_SAMPLES_IMG                             0x9133
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG               0x9134
#define GL_MAX_SAMPLES_IMG                                      0x9135
#define GL_TEXTURE_SAMPLES_IMG                                  0x9136
#endif

/*------------------------------------------------------------------------*
 * NV extension tokens
 *------------------------------------------------------------------------*/

/* GL_NV_coverage_sample */
#ifndef GL_NV_coverage_sample
#define GL_COVERAGE_COMPONENT_NV                                0x8ED0
#define GL_COVERAGE_COMPONENT4_NV                               0x8ED1
#define GL_COVERAGE_ATTACHMENT_NV                               0x8ED2
#define GL_COVERAGE_BUFFERS_NV                                  0x8ED3
#define GL_COVERAGE_SAMPLES_NV                                  0x8ED4
#define GL_COVERAGE_ALL_FRAGMENTS_NV                            0x8ED5
#define GL_COVERAGE_EDGE_FRAGMENTS_NV                           0x8ED6
#define GL_COVERAGE_AUTOMATIC_NV                                0x8ED7
#define GL_COVERAGE_BUFFER_BIT_NV                               0x8000
#endif

/* GL_NV_depth_nonlinear */
#ifndef GL_NV_depth_nonlinear
#define GL_DEPTH_COMPONENT16_NONLINEAR_NV                       0x8E2C
#endif

/* GL_NV_draw_buffers */
#ifndef GL_NV_draw_buffers
#define GL_MAX_DRAW_BUFFERS_NV                                  0x8824
#define GL_DRAW_BUFFER0_NV                                      0x8825
#define GL_DRAW_BUFFER1_NV                                      0x8826
#define GL_DRAW_BUFFER2_NV                                      0x8827
#define GL_DRAW_BUFFER3_NV                                      0x8828
#define GL_DRAW_BUFFER4_NV                                      0x8829
#define GL_DRAW_BUFFER5_NV                                      0x882A
#define GL_DRAW_BUFFER6_NV                                      0x882B
#define GL_DRAW_BUFFER7_NV                                      0x882C
#define GL_DRAW_BUFFER8_NV                                      0x882D
#define GL_DRAW_BUFFER9_NV                                      0x882E
#define GL_DRAW_BUFFER10_NV                                     0x882F
#define GL_DRAW_BUFFER11_NV                                     0x8830
#define GL_DRAW_BUFFER12_NV                                     0x8831
#define GL_DRAW_BUFFER13_NV                                     0x8832
#define GL_DRAW_BUFFER14_NV                                     0x8833
#define GL_DRAW_BUFFER15_NV                                     0x8834
#define GL_COLOR_ATTACHMENT0_NV                                 0x8CE0
#define GL_COLOR_ATTACHMENT1_NV                                 0x8CE1
#define GL_COLOR_ATTACHMENT2_NV                                 0x8CE2
#define GL_COLOR_ATTACHMENT3_NV                                 0x8CE3
#define GL_COLOR_ATTACHMENT4_NV                                 0x8CE4
#define GL_COLOR_ATTACHMENT5_NV                                 0x8CE5
#define GL_COLOR_ATTACHMENT6_NV                                 0x8CE6
#define GL_COLOR_ATTACHMENT7_NV                                 0x8CE7
#define GL_COLOR_ATTACHMENT8_NV                                 0x8CE8
#define GL_COLOR_ATTACHMENT9_NV                                 0x8CE9
#define GL_COLOR_ATTACHMENT10_NV                                0x8CEA
#define GL_COLOR_ATTACHMENT11_NV                                0x8CEB
#define GL_COLOR_ATTACHMENT12_NV                                0x8CEC
#define GL_COLOR_ATTACHMENT13_NV                                0x8CED
#define GL_COLOR_ATTACHMENT14_NV                                0x8CEE
#define GL_COLOR_ATTACHMENT15_NV                                0x8CEF
#endif

/* GL_NV_fbo_color_attachments */
#ifndef GL_NV_fbo_color_attachments
#define GL_MAX_COLOR_ATTACHMENTS_NV                             0x8CDF
/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */
#endif

/* GL_NV_fence */
#ifndef GL_NV_fence
#define GL_ALL_COMPLETED_NV                                     0x84F2
#define GL_FENCE_STATUS_NV                                      0x84F3
#define GL_FENCE_CONDITION_NV                                   0x84F4
#endif

/* GL_NV_read_buffer */
#ifndef GL_NV_read_buffer
#define GL_READ_BUFFER_NV                                       0x0C02
#endif

/* GL_NV_read_buffer_front */
/* No new tokens introduced by this extension. */

/* GL_NV_read_depth */
/* No new tokens introduced by this extension. */

/* GL_NV_read_depth_stencil */
/* No new tokens introduced by this extension. */

/* GL_NV_read_stencil */
/* No new tokens introduced by this extension. */

/* GL_NV_texture_compression_s3tc_update */
/* No new tokens introduced by this extension. */

/* GL_NV_texture_npot_2D_mipmap */
/* No new tokens introduced by this extension. */

/*------------------------------------------------------------------------*
 * QCOM extension tokens
 *------------------------------------------------------------------------*/

/* GL_QCOM_alpha_test */
#ifndef GL_QCOM_alpha_test
#define GL_ALPHA_TEST_QCOM                                      0x0BC0
#define GL_ALPHA_TEST_FUNC_QCOM                                 0x0BC1
#define GL_ALPHA_TEST_REF_QCOM                                  0x0BC2
#endif

/* GL_QCOM_binning_control */
#ifndef GL_QCOM_binning_control
#define GL_BINNING_CONTROL_HINT_QCOM                            0x8FB0
#define GL_CPU_OPTIMIZED_QCOM                                   0x8FB1
#define GL_GPU_OPTIMIZED_QCOM                                   0x8FB2
#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM                    0x8FB3
#endif

/* GL_QCOM_driver_control */
/* No new tokens introduced by this extension. */

/* GL_QCOM_extended_get */
#ifndef GL_QCOM_extended_get
#define GL_TEXTURE_WIDTH_QCOM                                   0x8BD2
#define GL_TEXTURE_HEIGHT_QCOM                                  0x8BD3
#define GL_TEXTURE_DEPTH_QCOM                                   0x8BD4
#define GL_TEXTURE_INTERNAL_FORMAT_QCOM                         0x8BD5
#define GL_TEXTURE_FORMAT_QCOM                                  0x8BD6
#define GL_TEXTURE_TYPE_QCOM                                    0x8BD7
#define GL_TEXTURE_IMAGE_VALID_QCOM                             0x8BD8
#define GL_TEXTURE_NUM_LEVELS_QCOM                              0x8BD9
#define GL_TEXTURE_TARGET_QCOM                                  0x8BDA
#define GL_TEXTURE_OBJECT_VALID_QCOM                            0x8BDB
#define GL_STATE_RESTORE                                        0x8BDC
#endif

/* GL_QCOM_extended_get2 */
/* No new tokens introduced by this extension. */

/* GL_QCOM_perfmon_global_mode */
#ifndef GL_QCOM_perfmon_global_mode
#define GL_PERFMON_GLOBAL_MODE_QCOM                             0x8FA0
#endif

/* GL_QCOM_writeonly_rendering */
#ifndef GL_QCOM_writeonly_rendering
#define GL_WRITEONLY_RENDERING_QCOM                             0x8823
#endif

/* GL_QCOM_tiled_rendering */
#ifndef GL_QCOM_tiled_rendering
#define GL_COLOR_BUFFER_BIT0_QCOM                               0x00000001
#define GL_COLOR_BUFFER_BIT1_QCOM                               0x00000002
#define GL_COLOR_BUFFER_BIT2_QCOM                               0x00000004
#define GL_COLOR_BUFFER_BIT3_QCOM                               0x00000008
#define GL_COLOR_BUFFER_BIT4_QCOM                               0x00000010
#define GL_COLOR_BUFFER_BIT5_QCOM                               0x00000020
#define GL_COLOR_BUFFER_BIT6_QCOM                               0x00000040
#define GL_COLOR_BUFFER_BIT7_QCOM                               0x00000080
#define GL_DEPTH_BUFFER_BIT0_QCOM                               0x00000100
#define GL_DEPTH_BUFFER_BIT1_QCOM                               0x00000200
#define GL_DEPTH_BUFFER_BIT2_QCOM                               0x00000400
#define GL_DEPTH_BUFFER_BIT3_QCOM                               0x00000800
#define GL_DEPTH_BUFFER_BIT4_QCOM                               0x00001000
#define GL_DEPTH_BUFFER_BIT5_QCOM                               0x00002000
#define GL_DEPTH_BUFFER_BIT6_QCOM                               0x00004000
#define GL_DEPTH_BUFFER_BIT7_QCOM                               0x00008000
#define GL_STENCIL_BUFFER_BIT0_QCOM                             0x00010000
#define GL_STENCIL_BUFFER_BIT1_QCOM                             0x00020000
#define GL_STENCIL_BUFFER_BIT2_QCOM                             0x00040000
#define GL_STENCIL_BUFFER_BIT3_QCOM                             0x00080000
#define GL_STENCIL_BUFFER_BIT4_QCOM                             0x00100000
#define GL_STENCIL_BUFFER_BIT5_QCOM                             0x00200000
#define GL_STENCIL_BUFFER_BIT6_QCOM                             0x00400000
#define GL_STENCIL_BUFFER_BIT7_QCOM                             0x00800000
#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM                         0x01000000
#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM                         0x02000000
#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM                         0x04000000
#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM                         0x08000000
#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM                         0x10000000
#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM                         0x20000000
#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM                         0x40000000
#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM                         0x80000000
#endif

/*------------------------------------------------------------------------*
 * VIV extension tokens
 *------------------------------------------------------------------------*/

/* GL_VIV_shader_binary */
#ifndef GL_VIV_shader_binary
#define GL_SHADER_BINARY_VIV                                    0x8FC4
#endif

/*------------------------------------------------------------------------*
 * End of extension tokens, start of corresponding extension functions
 *------------------------------------------------------------------------*/

/*------------------------------------------------------------------------*
 * OES extension functions
 *------------------------------------------------------------------------*/

/* GL_OES_compressed_ETC1_RGB8_texture */
#ifndef GL_OES_compressed_ETC1_RGB8_texture
#define GL_OES_compressed_ETC1_RGB8_texture 1
#endif

/* GL_OES_compressed_paletted_texture */
#ifndef GL_OES_compressed_paletted_texture
#define GL_OES_compressed_paletted_texture 1
#endif

/* GL_OES_depth24 */
#ifndef GL_OES_depth24
#define GL_OES_depth24 1
#endif

/* GL_OES_depth32 */
#ifndef GL_OES_depth32
#define GL_OES_depth32 1
#endif

/* GL_OES_depth_texture */
#ifndef GL_OES_depth_texture
#define GL_OES_depth_texture 1
#endif

/* GL_OES_EGL_image */
#ifndef GL_OES_EGL_image
#define GL_OES_EGL_image 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
#endif
typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
#endif

/* GL_OES_EGL_image_external */
#ifndef GL_OES_EGL_image_external
#define GL_OES_EGL_image_external 1
/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */
#endif

/* GL_OES_element_index_uint */
#ifndef GL_OES_element_index_uint
#define GL_OES_element_index_uint 1
#endif

/* GL_OES_fbo_render_mipmap */
#ifndef GL_OES_fbo_render_mipmap
#define GL_OES_fbo_render_mipmap 1
#endif

/* GL_OES_fragment_precision_high */
#ifndef GL_OES_fragment_precision_high
#define GL_OES_fragment_precision_high 1
#endif

/* GL_OES_get_program_binary */
#ifndef GL_OES_get_program_binary
#define GL_OES_get_program_binary 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length);
#endif
typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length);
#endif

/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_OES_mapbuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid** params);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid** params);
#endif

/* GL_OES_packed_depth_stencil */
#ifndef GL_OES_packed_depth_stencil
#define GL_OES_packed_depth_stencil 1
#endif

/* GL_OES_required_internalformat */
#ifndef GL_OES_required_internalformat
#define GL_OES_required_internalformat 1
#endif

/* GL_OES_rgb8_rgba8 */
#ifndef GL_OES_rgb8_rgba8
#define GL_OES_rgb8_rgba8 1
#endif

/* GL_OES_standard_derivatives */
#ifndef GL_OES_standard_derivatives
#define GL_OES_standard_derivatives 1
#endif

/* GL_OES_stencil1 */
#ifndef GL_OES_stencil1
#define GL_OES_stencil1 1
#endif

/* GL_OES_stencil4 */
#ifndef GL_OES_stencil4
#define GL_OES_stencil4 1
#endif

#ifndef GL_OES_surfaceless_context
#define GL_OES_surfaceless_context 1
#endif

/* GL_OES_texture_3D */
#ifndef GL_OES_texture_3D
#define GL_OES_texture_3D 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
#endif
typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
#endif

/* GL_OES_texture_float */
#ifndef GL_OES_texture_float
#define GL_OES_texture_float 1
#endif

/* GL_OES_texture_float_linear */
#ifndef GL_OES_texture_float_linear
#define GL_OES_texture_float_linear 1
#endif

/* GL_OES_texture_half_float */
#ifndef GL_OES_texture_half_float
#define GL_OES_texture_half_float 1
#endif

/* GL_OES_texture_half_float_linear */
#ifndef GL_OES_texture_half_float_linear
#define GL_OES_texture_half_float_linear 1
#endif

/* GL_OES_texture_npot */
#ifndef GL_OES_texture_npot
#define GL_OES_texture_npot 1
#endif

/* GL_OES_vertex_array_object */
#ifndef GL_OES_vertex_array_object
#define GL_OES_vertex_array_object 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array);
GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays);
GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays);
GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
#endif
typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array);
typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays);
typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays);
typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array);
#endif

/* GL_OES_vertex_half_float */
#ifndef GL_OES_vertex_half_float
#define GL_OES_vertex_half_float 1
#endif

/* GL_OES_vertex_type_10_10_10_2 */
#ifndef GL_OES_vertex_type_10_10_10_2
#define GL_OES_vertex_type_10_10_10_2 1
#endif

/*------------------------------------------------------------------------*
 * KHR extension functions
 *------------------------------------------------------------------------*/

#ifndef GL_KHR_debug
#define GL_KHR_debug 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
GL_APICALL void GL_APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
GL_APICALL void GL_APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);
GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
GL_APICALL void GL_APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);
GL_APICALL void GL_APIENTRY glPopDebugGroup (void);
GL_APICALL void GL_APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
GL_APICALL void GL_APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
GL_APICALL void GL_APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);
GL_APICALL void GL_APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
GL_APICALL void GL_APIENTRY glGetPointerv (GLenum pname, void **params);
#endif 
typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);
typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);
typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
typedef void (GL_APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params);
#endif

#ifndef GL_KHR_texture_compression_astc_ldr
#define GL_KHR_texture_compression_astc_ldr 1
#endif


/*------------------------------------------------------------------------*
 * AMD extension functions
 *------------------------------------------------------------------------*/

/* GL_AMD_compressed_3DC_texture */
#ifndef GL_AMD_compressed_3DC_texture
#define GL_AMD_compressed_3DC_texture 1
#endif

/* GL_AMD_compressed_ATC_texture */
#ifndef GL_AMD_compressed_ATC_texture
#define GL_AMD_compressed_ATC_texture 1
#endif

/* AMD_performance_monitor */
#ifndef GL_AMD_performance_monitor
#define GL_AMD_performance_monitor 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data);
GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);
GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);
GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList);
GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor);
GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor);
GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
#endif
typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);
typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);
typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);
typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data);
typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);
typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList);
typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);
typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);
typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
#endif

/* GL_AMD_program_binary_Z400 */
#ifndef GL_AMD_program_binary_Z400
#define GL_AMD_program_binary_Z400 1
#endif

/*------------------------------------------------------------------------*
 * ANGLE extension functions
 *------------------------------------------------------------------------*/

/* GL_ANGLE_framebuffer_blit */
#ifndef GL_ANGLE_framebuffer_blit
#define GL_ANGLE_framebuffer_blit 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
#endif
typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
#endif

/* GL_ANGLE_framebuffer_multisample */
#ifndef GL_ANGLE_framebuffer_multisample
#define GL_ANGLE_framebuffer_multisample 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
#endif
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
#endif

#ifndef GL_ANGLE_instanced_arrays 
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor);
#endif
typedef void (GL_APIENTRYP PFLGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
typedef void (GL_APIENTRYP PFLGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
typedef void (GL_APIENTRYP PFLGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor);
#endif

/* GL_ANGLE_pack_reverse_row_order */
#ifndef GL_ANGLE_pack_reverse_row_order 
#define GL_ANGLE_pack_reverse_row_order 1
#endif

/* GL_ANGLE_texture_compression_dxt3 */
#ifndef GL_ANGLE_texture_compression_dxt3 
#define GL_ANGLE_texture_compression_dxt3 1
#endif

/* GL_ANGLE_texture_compression_dxt5 */
#ifndef GL_ANGLE_texture_compression_dxt5 
#define GL_ANGLE_texture_compression_dxt5 1
#endif

/* GL_ANGLE_texture_usage */
#ifndef GL_ANGLE_texture_usage 
#define GL_ANGLE_texture_usage 1
#endif

#ifndef GL_ANGLE_translated_shader_source 
#define GL_ANGLE_translated_shader_source 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
#endif
typedef void (GL_APIENTRYP PFLGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
#endif

/*------------------------------------------------------------------------*
 * APPLE extension functions
 *------------------------------------------------------------------------*/

/* GL_APPLE_copy_texture_levels */
#ifndef GL_APPLE_copy_texture_levels
#define GL_APPLE_copy_texture_levels 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
#endif
typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
#endif

/* GL_APPLE_framebuffer_multisample */
#ifndef GL_APPLE_framebuffer_multisample
#define GL_APPLE_framebuffer_multisample 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void);
#endif /* GL_GLEXT_PROTOTYPES */
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void);
#endif

/* GL_APPLE_rgb_422 */
#ifndef GL_APPLE_rgb_422
#define GL_APPLE_rgb_422 1
#endif

/* GL_APPLE_sync */
#ifndef GL_APPLE_sync
#define GL_APPLE_sync 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags);
GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync);
GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync);
GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params);
GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
#endif
typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags);
typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync);
typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync);
typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params);
typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
#endif

/* GL_APPLE_texture_format_BGRA8888 */
#ifndef GL_APPLE_texture_format_BGRA8888
#define GL_APPLE_texture_format_BGRA8888 1
#endif

/* GL_APPLE_texture_max_level */
#ifndef GL_APPLE_texture_max_level
#define GL_APPLE_texture_max_level 1
#endif

/*------------------------------------------------------------------------*
 * ARM extension functions
 *------------------------------------------------------------------------*/

/* GL_ARM_mali_program_binary */
#ifndef GL_ARM_mali_program_binary
#define GL_ARM_mali_program_binary 1
#endif

/* GL_ARM_mali_shader_binary */
#ifndef GL_ARM_mali_shader_binary
#define GL_ARM_mali_shader_binary 1
#endif

/* GL_ARM_rgba8 */
#ifndef GL_ARM_rgba8
#define GL_ARM_rgba8 1
#endif

/*------------------------------------------------------------------------*
 * EXT extension functions
 *------------------------------------------------------------------------*/

/* GL_EXT_blend_minmax */
#ifndef GL_EXT_blend_minmax
#define GL_EXT_blend_minmax 1
#endif

/* GL_EXT_color_buffer_half_float */
#ifndef GL_EXT_color_buffer_half_float
#define GL_EXT_color_buffer_half_float 1
#endif

/* GL_EXT_debug_label */
#ifndef GL_EXT_debug_label
#define GL_EXT_debug_label 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label);
GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
#endif
typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label);
typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
#endif

/* GL_EXT_debug_marker */
#ifndef GL_EXT_debug_marker
#define GL_EXT_debug_marker 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker);
GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker);
GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void);
#endif
typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker);
typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker);
typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void);
#endif

/* GL_EXT_discard_framebuffer */
#ifndef GL_EXT_discard_framebuffer
#define GL_EXT_discard_framebuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments);
#endif
typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
#endif

/* GL_EXT_map_buffer_range */
#ifndef GL_EXT_map_buffer_range
#define GL_EXT_map_buffer_range 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
#endif

/* GL_EXT_multisampled_render_to_texture */
#ifndef GL_EXT_multisampled_render_to_texture
#define GL_EXT_multisampled_render_to_texture 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
#endif
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
#endif

/* GL_EXT_multiview_draw_buffers */
#ifndef GL_EXT_multiview_draw_buffers
#define GL_EXT_multiview_draw_buffers 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index);
GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices);
GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data);
#endif
typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index);
typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices);
typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data);
#endif

#ifndef GL_EXT_multi_draw_arrays
#define GL_EXT_multi_draw_arrays 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);
GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
#endif /* GL_GLEXT_PROTOTYPES */
typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
#endif

/* GL_EXT_occlusion_query_boolean */
#ifndef GL_EXT_occlusion_query_boolean
#define GL_EXT_occlusion_query_boolean 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids);
GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids);
GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id);
GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id);
GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target);
GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params);
GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params);
#endif
typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids);
typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids);
typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id);
typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id);
typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params);
#endif

/* GL_EXT_read_format_bgra */
#ifndef GL_EXT_read_format_bgra
#define GL_EXT_read_format_bgra 1
#endif

/* GL_EXT_robustness */
#ifndef GL_EXT_robustness
#define GL_EXT_robustness 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void);
GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params);
GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params);
#endif
typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void);
typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params);
typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
#endif

/* GL_EXT_separate_shader_objects */
#ifndef GL_EXT_separate_shader_objects
#define GL_EXT_separate_shader_objects 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program);
GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program);
GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings);
GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline);
GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines);
GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines);
GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline);
GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);
GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params);
GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x);
GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y);
GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z);
GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w);
GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x);
GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y);
GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z);
GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);
GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);
GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline);
GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
#endif
typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program);
typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program);
typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings);
typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines);
typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines);
typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);
typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline);
typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
#endif

/* GL_EXT_shader_framebuffer_fetch */
#ifndef GL_EXT_shader_framebuffer_fetch
#define GL_EXT_shader_framebuffer_fetch 1
#endif

/* GL_EXT_shader_texture_lod */
#ifndef GL_EXT_shader_texture_lod
#define GL_EXT_shader_texture_lod 1
#endif

/* GL_EXT_shadow_samplers */
#ifndef GL_EXT_shadow_samplers
#define GL_EXT_shadow_samplers 1
#endif

/* GL_EXT_sRGB */
#ifndef GL_EXT_sRGB
#define GL_EXT_sRGB 1
#endif

/* GL_EXT_texture_compression_dxt1 */
#ifndef GL_EXT_texture_compression_dxt1
#define GL_EXT_texture_compression_dxt1 1
#endif

/* GL_EXT_texture_filter_anisotropic */
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1
#endif

/* GL_EXT_texture_format_BGRA8888 */
#ifndef GL_EXT_texture_format_BGRA8888
#define GL_EXT_texture_format_BGRA8888 1
#endif

/* GL_EXT_texture_rg */
#ifndef GL_EXT_texture_rg
#define GL_EXT_texture_rg 1
#endif

/* GL_EXT_texture_storage */
#ifndef GL_EXT_texture_storage
#define GL_EXT_texture_storage 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
#endif
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
#endif

/* GL_EXT_texture_type_2_10_10_10_REV */
#ifndef GL_EXT_texture_type_2_10_10_10_REV
#define GL_EXT_texture_type_2_10_10_10_REV 1
#endif

/* GL_EXT_unpack_subimage */
#ifndef GL_EXT_unpack_subimage
#define GL_EXT_unpack_subimage 1
#endif

/*------------------------------------------------------------------------*
 * DMP extension functions
 *------------------------------------------------------------------------*/

/* GL_DMP_shader_binary */
#ifndef GL_DMP_shader_binary
#define GL_DMP_shader_binary 1
#endif

/*------------------------------------------------------------------------*
 * FJ extension functions
 *------------------------------------------------------------------------*/

/* GL_FJ_shader_binary_GCCSO */
#ifndef GL_FJ_shader_binary_GCCSO
#define GL_FJ_shader_binary_GCCSO 1
#endif

/*------------------------------------------------------------------------*
 * IMG extension functions
 *------------------------------------------------------------------------*/

/* GL_IMG_program_binary */
#ifndef GL_IMG_program_binary
#define GL_IMG_program_binary 1
#endif

/* GL_IMG_read_format */
#ifndef GL_IMG_read_format
#define GL_IMG_read_format 1
#endif

/* GL_IMG_shader_binary */
#ifndef GL_IMG_shader_binary
#define GL_IMG_shader_binary 1
#endif

/* GL_IMG_texture_compression_pvrtc */
#ifndef GL_IMG_texture_compression_pvrtc
#define GL_IMG_texture_compression_pvrtc 1
#endif

/* GL_IMG_multisampled_render_to_texture */
#ifndef GL_IMG_multisampled_render_to_texture
#define GL_IMG_multisampled_render_to_texture 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
#endif
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
#endif

/*------------------------------------------------------------------------*
 * NV extension functions
 *------------------------------------------------------------------------*/

/* GL_NV_coverage_sample */
#ifndef GL_NV_coverage_sample
#define GL_NV_coverage_sample 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask);
GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation);
#endif
typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask);
typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation);
#endif

/* GL_NV_depth_nonlinear */
#ifndef GL_NV_depth_nonlinear
#define GL_NV_depth_nonlinear 1
#endif

/* GL_NV_draw_buffers */
#ifndef GL_NV_draw_buffers
#define GL_NV_draw_buffers 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs);
#endif
typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs);
#endif

/* GL_NV_fbo_color_attachments */
#ifndef GL_NV_fbo_color_attachments
#define GL_NV_fbo_color_attachments 1
#endif

/* GL_NV_fence */
#ifndef GL_NV_fence
#define GL_NV_fence 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *);
GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint);
GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint);
GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint);
GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint, GLenum);
#endif
typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
#endif

/* GL_NV_read_buffer */
#ifndef GL_NV_read_buffer
#define GL_NV_read_buffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode);
#endif
typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode);
#endif

/* GL_NV_read_buffer_front */
#ifndef GL_NV_read_buffer_front
#define GL_NV_read_buffer_front 1
#endif

/* GL_NV_read_depth */
#ifndef GL_NV_read_depth
#define GL_NV_read_depth 1
#endif

/* GL_NV_read_depth_stencil */
#ifndef GL_NV_read_depth_stencil
#define GL_NV_read_depth_stencil 1
#endif

/* GL_NV_read_stencil */
#ifndef GL_NV_read_stencil
#define GL_NV_read_stencil 1
#endif

/* GL_NV_texture_compression_s3tc_update */
#ifndef GL_NV_texture_compression_s3tc_update
#define GL_NV_texture_compression_s3tc_update 1
#endif

/* GL_NV_texture_npot_2D_mipmap */
#ifndef GL_NV_texture_npot_2D_mipmap
#define GL_NV_texture_npot_2D_mipmap 1
#endif

/*------------------------------------------------------------------------*
 * QCOM extension functions
 *------------------------------------------------------------------------*/

/* GL_QCOM_alpha_test */
#ifndef GL_QCOM_alpha_test
#define GL_QCOM_alpha_test 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref);
#endif
typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref);
#endif

/* GL_QCOM_binning_control */
#ifndef GL_QCOM_binning_control
#define GL_QCOM_binning_control 1
#endif

/* GL_QCOM_driver_control */
#ifndef GL_QCOM_driver_control
#define GL_QCOM_driver_control 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls);
GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl);
GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl);
#endif
typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls);
typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
#endif

/* GL_QCOM_extended_get */
#ifndef GL_QCOM_extended_get
#define GL_QCOM_extended_get 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures);
GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param);
GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels);
GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params);
#endif
typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures);
typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param);
typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels);
typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params);
#endif

/* GL_QCOM_extended_get2 */
#ifndef GL_QCOM_extended_get2
#define GL_QCOM_extended_get2 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders);
GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program);
GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
#endif
typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders);
typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program);
typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
#endif

/* GL_QCOM_perfmon_global_mode */
#ifndef GL_QCOM_perfmon_global_mode
#define GL_QCOM_perfmon_global_mode 1
#endif

/* GL_QCOM_writeonly_rendering */
#ifndef GL_QCOM_writeonly_rendering
#define GL_QCOM_writeonly_rendering 1
#endif

/* GL_QCOM_tiled_rendering */
#ifndef GL_QCOM_tiled_rendering
#define GL_QCOM_tiled_rendering 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask);
#endif
typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask);
#endif

/*------------------------------------------------------------------------*
 * VIV extension tokens
 *------------------------------------------------------------------------*/

/* GL_VIV_shader_binary */
#ifndef GL_VIV_shader_binary
#define GL_VIV_shader_binary 1
#endif

#ifdef __cplusplus
}
#endif

#endif /* __gl2ext_h_ */
Added jni/glshim/include/GLES/gl2platform.h.




























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef __gl2platform_h_
#define __gl2platform_h_

/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

/* Platform-specific types and definitions for OpenGL ES 2.X  gl2.h
 *
 * Adopters may modify khrplatform.h and this file to suit their platform.
 * You are encouraged to submit all modifications to the Khronos group so that
 * they can be included in future versions of this file.  Please submit changes
 * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
 * by filing a bug against product "OpenGL-ES" component "Registry".
 */

#include <KHR/khrplatform.h>

#ifndef GL_APICALL
#define GL_APICALL  KHRONOS_APICALL
#endif

#ifndef GL_APIENTRY
#define GL_APIENTRY KHRONOS_APIENTRY
#endif

#endif /* __gl2platform_h_ */
Added jni/glshim/include/GLES/gl3.h.










































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
#ifndef __gl3_h_
#define __gl3_h_

/* 
 * gl3.h last updated on $Date: 2012-09-12 10:13:02 -0700 (Wed, 12 Sep 2012) $
 */

#include <GLES3/gl3platform.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
** Copyright (c) 2007-2012 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

/*-------------------------------------------------------------------------
 * Data type definitions
 *-----------------------------------------------------------------------*/

/* OpenGL ES 2.0 */

typedef void             GLvoid;
typedef char             GLchar;
typedef unsigned int     GLenum;
typedef unsigned char    GLboolean;
typedef unsigned int     GLbitfield;
typedef khronos_int8_t   GLbyte;
typedef short            GLshort;
typedef int              GLint;
typedef int              GLsizei;
typedef khronos_uint8_t  GLubyte;
typedef unsigned short   GLushort;
typedef unsigned int     GLuint;
typedef khronos_float_t  GLfloat;
typedef khronos_float_t  GLclampf;
typedef khronos_int32_t  GLfixed;
typedef khronos_intptr_t GLintptr;
typedef khronos_ssize_t  GLsizeiptr;

/* OpenGL ES 3.0 */

typedef unsigned short   GLhalf;
typedef khronos_int64_t  GLint64;
typedef khronos_uint64_t GLuint64;
typedef struct __GLsync *GLsync;

/*-------------------------------------------------------------------------
 * Token definitions
 *-----------------------------------------------------------------------*/

/* OpenGL ES core versions */
#define GL_ES_VERSION_3_0                                1
#define GL_ES_VERSION_2_0                                1

/* OpenGL ES 2.0 */

/* ClearBufferMask */
#define GL_DEPTH_BUFFER_BIT                              0x00000100
#define GL_STENCIL_BUFFER_BIT                            0x00000400
#define GL_COLOR_BUFFER_BIT                              0x00004000

/* Boolean */
#define GL_FALSE                                         0
#define GL_TRUE                                          1

/* BeginMode */
#define GL_POINTS                                        0x0000
#define GL_LINES                                         0x0001
#define GL_LINE_LOOP                                     0x0002
#define GL_LINE_STRIP                                    0x0003
#define GL_TRIANGLES                                     0x0004
#define GL_TRIANGLE_STRIP                                0x0005
#define GL_TRIANGLE_FAN                                  0x0006

/* BlendingFactorDest */
#define GL_ZERO                                          0
#define GL_ONE                                           1
#define GL_SRC_COLOR                                     0x0300
#define GL_ONE_MINUS_SRC_COLOR                           0x0301
#define GL_SRC_ALPHA                                     0x0302
#define GL_ONE_MINUS_SRC_ALPHA                           0x0303
#define GL_DST_ALPHA                                     0x0304
#define GL_ONE_MINUS_DST_ALPHA                           0x0305

/* BlendingFactorSrc */
/*      GL_ZERO */
/*      GL_ONE */
#define GL_DST_COLOR                                     0x0306
#define GL_ONE_MINUS_DST_COLOR                           0x0307
#define GL_SRC_ALPHA_SATURATE                            0x0308
/*      GL_SRC_ALPHA */
/*      GL_ONE_MINUS_SRC_ALPHA */
/*      GL_DST_ALPHA */
/*      GL_ONE_MINUS_DST_ALPHA */

/* BlendEquationSeparate */
#define GL_FUNC_ADD                                      0x8006
#define GL_BLEND_EQUATION                                0x8009
#define GL_BLEND_EQUATION_RGB                            0x8009    /* same as BLEND_EQUATION */
#define GL_BLEND_EQUATION_ALPHA                          0x883D

/* BlendSubtract */
#define GL_FUNC_SUBTRACT                                 0x800A
#define GL_FUNC_REVERSE_SUBTRACT                         0x800B

/* Separate Blend Functions */
#define GL_BLEND_DST_RGB                                 0x80C8
#define GL_BLEND_SRC_RGB                                 0x80C9
#define GL_BLEND_DST_ALPHA                               0x80CA
#define GL_BLEND_SRC_ALPHA                               0x80CB
#define GL_CONSTANT_COLOR                                0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR                      0x8002
#define GL_CONSTANT_ALPHA                                0x8003
#define GL_ONE_MINUS_CONSTANT_ALPHA                      0x8004
#define GL_BLEND_COLOR                                   0x8005

/* Buffer Objects */
#define GL_ARRAY_BUFFER                                  0x8892
#define GL_ELEMENT_ARRAY_BUFFER                          0x8893
#define GL_ARRAY_BUFFER_BINDING                          0x8894
#define GL_ELEMENT_ARRAY_BUFFER_BINDING                  0x8895

#define GL_STREAM_DRAW                                   0x88E0
#define GL_STATIC_DRAW                                   0x88E4
#define GL_DYNAMIC_DRAW                                  0x88E8

#define GL_BUFFER_SIZE                                   0x8764
#define GL_BUFFER_USAGE                                  0x8765

#define GL_CURRENT_VERTEX_ATTRIB                         0x8626

/* CullFaceMode */
#define GL_FRONT                                         0x0404
#define GL_BACK                                          0x0405
#define GL_FRONT_AND_BACK                                0x0408

/* DepthFunction */
/*      GL_NEVER */
/*      GL_LESS */
/*      GL_EQUAL */
/*      GL_LEQUAL */
/*      GL_GREATER */
/*      GL_NOTEQUAL */
/*      GL_GEQUAL */
/*      GL_ALWAYS */

/* EnableCap */
#define GL_TEXTURE_2D                                    0x0DE1
#define GL_CULL_FACE                                     0x0B44
#define GL_BLEND                                         0x0BE2
#define GL_DITHER                                        0x0BD0
#define GL_STENCIL_TEST                                  0x0B90
#define GL_DEPTH_TEST                                    0x0B71
#define GL_SCISSOR_TEST                                  0x0C11
#define GL_POLYGON_OFFSET_FILL                           0x8037
#define GL_SAMPLE_ALPHA_TO_COVERAGE                      0x809E
#define GL_SAMPLE_COVERAGE                               0x80A0

/* ErrorCode */
#define GL_NO_ERROR                                      0
#define GL_INVALID_ENUM                                  0x0500
#define GL_INVALID_VALUE                                 0x0501
#define GL_INVALID_OPERATION                             0x0502
#define GL_OUT_OF_MEMORY                                 0x0505

/* FrontFaceDirection */
#define GL_CW                                            0x0900
#define GL_CCW                                           0x0901

/* GetPName */
#define GL_LINE_WIDTH                                    0x0B21
#define GL_ALIASED_POINT_SIZE_RANGE                      0x846D
#define GL_ALIASED_LINE_WIDTH_RANGE                      0x846E
#define GL_CULL_FACE_MODE                                0x0B45
#define GL_FRONT_FACE                                    0x0B46
#define GL_DEPTH_RANGE                                   0x0B70
#define GL_DEPTH_WRITEMASK                               0x0B72
#define GL_DEPTH_CLEAR_VALUE                             0x0B73
#define GL_DEPTH_FUNC                                    0x0B74
#define GL_STENCIL_CLEAR_VALUE                           0x0B91
#define GL_STENCIL_FUNC                                  0x0B92
#define GL_STENCIL_FAIL                                  0x0B94
#define GL_STENCIL_PASS_DEPTH_FAIL                       0x0B95
#define GL_STENCIL_PASS_DEPTH_PASS                       0x0B96
#define GL_STENCIL_REF                                   0x0B97
#define GL_STENCIL_VALUE_MASK                            0x0B93
#define GL_STENCIL_WRITEMASK                             0x0B98
#define GL_STENCIL_BACK_FUNC                             0x8800
#define GL_STENCIL_BACK_FAIL                             0x8801
#define GL_STENCIL_BACK_PASS_DEPTH_FAIL                  0x8802
#define GL_STENCIL_BACK_PASS_DEPTH_PASS                  0x8803
#define GL_STENCIL_BACK_REF                              0x8CA3
#define GL_STENCIL_BACK_VALUE_MASK                       0x8CA4
#define GL_STENCIL_BACK_WRITEMASK                        0x8CA5
#define GL_VIEWPORT                                      0x0BA2
#define GL_SCISSOR_BOX                                   0x0C10
/*      GL_SCISSOR_TEST */
#define GL_COLOR_CLEAR_VALUE                             0x0C22
#define GL_COLOR_WRITEMASK                               0x0C23
#define GL_UNPACK_ALIGNMENT                              0x0CF5
#define GL_PACK_ALIGNMENT                                0x0D05
#define GL_MAX_TEXTURE_SIZE                              0x0D33
#define GL_MAX_VIEWPORT_DIMS                             0x0D3A
#define GL_SUBPIXEL_BITS                                 0x0D50
#define GL_RED_BITS                                      0x0D52
#define GL_GREEN_BITS                                    0x0D53
#define GL_BLUE_BITS                                     0x0D54
#define GL_ALPHA_BITS                                    0x0D55
#define GL_DEPTH_BITS                                    0x0D56
#define GL_STENCIL_BITS                                  0x0D57
#define GL_POLYGON_OFFSET_UNITS                          0x2A00
/*      GL_POLYGON_OFFSET_FILL */
#define GL_POLYGON_OFFSET_FACTOR                         0x8038
#define GL_TEXTURE_BINDING_2D                            0x8069
#define GL_SAMPLE_BUFFERS                                0x80A8
#define GL_SAMPLES                                       0x80A9
#define GL_SAMPLE_COVERAGE_VALUE                         0x80AA
#define GL_SAMPLE_COVERAGE_INVERT                        0x80AB

/* GetTextureParameter */
/*      GL_TEXTURE_MAG_FILTER */
/*      GL_TEXTURE_MIN_FILTER */
/*      GL_TEXTURE_WRAP_S */
/*      GL_TEXTURE_WRAP_T */

#define GL_NUM_COMPRESSED_TEXTURE_FORMATS                0x86A2
#define GL_COMPRESSED_TEXTURE_FORMATS                    0x86A3

/* HintMode */
#define GL_DONT_CARE                                     0x1100
#define GL_FASTEST                                       0x1101
#define GL_NICEST                                        0x1102

/* HintTarget */
#define GL_GENERATE_MIPMAP_HINT                          0x8192

/* DataType */
#define GL_BYTE                                          0x1400
#define GL_UNSIGNED_BYTE                                 0x1401
#define GL_SHORT                                         0x1402
#define GL_UNSIGNED_SHORT                                0x1403
#define GL_INT                                           0x1404
#define GL_UNSIGNED_INT                                  0x1405
#define GL_FLOAT                                         0x1406
#define GL_FIXED                                         0x140C

/* PixelFormat */
#define GL_DEPTH_COMPONENT                               0x1902
#define GL_ALPHA                                         0x1906
#define GL_RGB                                           0x1907
#define GL_RGBA                                          0x1908
#define GL_LUMINANCE                                     0x1909
#define GL_LUMINANCE_ALPHA                               0x190A

/* PixelType */
/*      GL_UNSIGNED_BYTE */
#define GL_UNSIGNED_SHORT_4_4_4_4                        0x8033
#define GL_UNSIGNED_SHORT_5_5_5_1                        0x8034
#define GL_UNSIGNED_SHORT_5_6_5                          0x8363

/* Shaders */
#define GL_FRAGMENT_SHADER                               0x8B30
#define GL_VERTEX_SHADER                                 0x8B31
#define GL_MAX_VERTEX_ATTRIBS                            0x8869
#define GL_MAX_VERTEX_UNIFORM_VECTORS                    0x8DFB
#define GL_MAX_VARYING_VECTORS                           0x8DFC
#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS              0x8B4D
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS                0x8B4C
#define GL_MAX_TEXTURE_IMAGE_UNITS                       0x8872
#define GL_MAX_FRAGMENT_UNIFORM_VECTORS                  0x8DFD
#define GL_SHADER_TYPE                                   0x8B4F
#define GL_DELETE_STATUS                                 0x8B80
#define GL_LINK_STATUS                                   0x8B82
#define GL_VALIDATE_STATUS                               0x8B83
#define GL_ATTACHED_SHADERS                              0x8B85
#define GL_ACTIVE_UNIFORMS                               0x8B86
#define GL_ACTIVE_UNIFORM_MAX_LENGTH                     0x8B87
#define GL_ACTIVE_ATTRIBUTES                             0x8B89
#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH                   0x8B8A
#define GL_SHADING_LANGUAGE_VERSION                      0x8B8C
#define GL_CURRENT_PROGRAM                               0x8B8D

/* StencilFunction */
#define GL_NEVER                                         0x0200
#define GL_LESS                                          0x0201
#define GL_EQUAL                                         0x0202
#define GL_LEQUAL                                        0x0203
#define GL_GREATER                                       0x0204
#define GL_NOTEQUAL                                      0x0205
#define GL_GEQUAL                                        0x0206
#define GL_ALWAYS                                        0x0207

/* StencilOp */
/*      GL_ZERO */
#define GL_KEEP                                          0x1E00
#define GL_REPLACE                                       0x1E01
#define GL_INCR                                          0x1E02
#define GL_DECR                                          0x1E03
#define GL_INVERT                                        0x150A
#define GL_INCR_WRAP                                     0x8507
#define GL_DECR_WRAP                                     0x8508

/* StringName */
#define GL_VENDOR                                        0x1F00
#define GL_RENDERER                                      0x1F01
#define GL_VERSION                                       0x1F02
#define GL_EXTENSIONS                                    0x1F03

/* TextureMagFilter */
#define GL_NEAREST                                       0x2600
#define GL_LINEAR                                        0x2601

/* TextureMinFilter */
/*      GL_NEAREST */
/*      GL_LINEAR */
#define GL_NEAREST_MIPMAP_NEAREST                        0x2700
#define GL_LINEAR_MIPMAP_NEAREST                         0x2701
#define GL_NEAREST_MIPMAP_LINEAR                         0x2702
#define GL_LINEAR_MIPMAP_LINEAR                          0x2703

/* TextureParameterName */
#define GL_TEXTURE_MAG_FILTER                            0x2800
#define GL_TEXTURE_MIN_FILTER                            0x2801
#define GL_TEXTURE_WRAP_S                                0x2802
#define GL_TEXTURE_WRAP_T                                0x2803

/* TextureTarget */
/*      GL_TEXTURE_2D */
#define GL_TEXTURE                                       0x1702

#define GL_TEXTURE_CUBE_MAP                              0x8513
#define GL_TEXTURE_BINDING_CUBE_MAP                      0x8514
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X                   0x8515
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X                   0x8516
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y                   0x8517
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y                   0x8518
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z                   0x8519
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z                   0x851A
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE                     0x851C

/* TextureUnit */
#define GL_TEXTURE0                                      0x84C0
#define GL_TEXTURE1                                      0x84C1
#define GL_TEXTURE2                                      0x84C2
#define GL_TEXTURE3                                      0x84C3
#define GL_TEXTURE4                                      0x84C4
#define GL_TEXTURE5                                      0x84C5
#define GL_TEXTURE6                                      0x84C6
#define GL_TEXTURE7                                      0x84C7
#define GL_TEXTURE8                                      0x84C8
#define GL_TEXTURE9                                      0x84C9
#define GL_TEXTURE10                                     0x84CA
#define GL_TEXTURE11                                     0x84CB
#define GL_TEXTURE12                                     0x84CC
#define GL_TEXTURE13                                     0x84CD
#define GL_TEXTURE14                                     0x84CE
#define GL_TEXTURE15                                     0x84CF
#define GL_TEXTURE16                                     0x84D0
#define GL_TEXTURE17                                     0x84D1
#define GL_TEXTURE18                                     0x84D2
#define GL_TEXTURE19                                     0x84D3
#define GL_TEXTURE20                                     0x84D4
#define GL_TEXTURE21                                     0x84D5
#define GL_TEXTURE22                                     0x84D6
#define GL_TEXTURE23                                     0x84D7
#define GL_TEXTURE24                                     0x84D8
#define GL_TEXTURE25                                     0x84D9
#define GL_TEXTURE26                                     0x84DA
#define GL_TEXTURE27                                     0x84DB
#define GL_TEXTURE28                                     0x84DC
#define GL_TEXTURE29                                     0x84DD
#define GL_TEXTURE30                                     0x84DE
#define GL_TEXTURE31                                     0x84DF
#define GL_ACTIVE_TEXTURE                                0x84E0

/* TextureWrapMode */
#define GL_REPEAT                                        0x2901
#define GL_CLAMP_TO_EDGE                                 0x812F
#define GL_MIRRORED_REPEAT                               0x8370

/* Uniform Types */
#define GL_FLOAT_VEC2                                    0x8B50
#define GL_FLOAT_VEC3                                    0x8B51
#define GL_FLOAT_VEC4                                    0x8B52
#define GL_INT_VEC2                                      0x8B53
#define GL_INT_VEC3                                      0x8B54
#define GL_INT_VEC4                                      0x8B55
#define GL_BOOL                                          0x8B56
#define GL_BOOL_VEC2                                     0x8B57
#define GL_BOOL_VEC3                                     0x8B58
#define GL_BOOL_VEC4                                     0x8B59
#define GL_FLOAT_MAT2                                    0x8B5A
#define GL_FLOAT_MAT3                                    0x8B5B
#define GL_FLOAT_MAT4                                    0x8B5C
#define GL_SAMPLER_2D                                    0x8B5E
#define GL_SAMPLER_CUBE                                  0x8B60

/* Vertex Arrays */
#define GL_VERTEX_ATTRIB_ARRAY_ENABLED                   0x8622
#define GL_VERTEX_ATTRIB_ARRAY_SIZE                      0x8623
#define GL_VERTEX_ATTRIB_ARRAY_STRIDE                    0x8624
#define GL_VERTEX_ATTRIB_ARRAY_TYPE                      0x8625
#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED                0x886A
#define GL_VERTEX_ATTRIB_ARRAY_POINTER                   0x8645
#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING            0x889F

/* Read Format */
#define GL_IMPLEMENTATION_COLOR_READ_TYPE                0x8B9A
#define GL_IMPLEMENTATION_COLOR_READ_FORMAT              0x8B9B

/* Shader Source */
#define GL_COMPILE_STATUS                                0x8B81
#define GL_INFO_LOG_LENGTH                               0x8B84
#define GL_SHADER_SOURCE_LENGTH                          0x8B88
#define GL_SHADER_COMPILER                               0x8DFA

/* Shader Binary */
#define GL_SHADER_BINARY_FORMATS                         0x8DF8
#define GL_NUM_SHADER_BINARY_FORMATS                     0x8DF9

/* Shader Precision-Specified Types */
#define GL_LOW_FLOAT                                     0x8DF0
#define GL_MEDIUM_FLOAT                                  0x8DF1
#define GL_HIGH_FLOAT                                    0x8DF2
#define GL_LOW_INT                                       0x8DF3
#define GL_MEDIUM_INT                                    0x8DF4
#define GL_HIGH_INT                                      0x8DF5

/* Framebuffer Object. */
#define GL_FRAMEBUFFER                                   0x8D40
#define GL_RENDERBUFFER                                  0x8D41

#define GL_RGBA4                                         0x8056
#define GL_RGB5_A1                                       0x8057
#define GL_RGB565                                        0x8D62
#define GL_DEPTH_COMPONENT16                             0x81A5
#define GL_STENCIL_INDEX8                                0x8D48

#define GL_RENDERBUFFER_WIDTH                            0x8D42
#define GL_RENDERBUFFER_HEIGHT                           0x8D43
#define GL_RENDERBUFFER_INTERNAL_FORMAT                  0x8D44
#define GL_RENDERBUFFER_RED_SIZE                         0x8D50
#define GL_RENDERBUFFER_GREEN_SIZE                       0x8D51
#define GL_RENDERBUFFER_BLUE_SIZE                        0x8D52
#define GL_RENDERBUFFER_ALPHA_SIZE                       0x8D53
#define GL_RENDERBUFFER_DEPTH_SIZE                       0x8D54
#define GL_RENDERBUFFER_STENCIL_SIZE                     0x8D55

#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE            0x8CD0
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME            0x8CD1
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL          0x8CD2
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE  0x8CD3

#define GL_COLOR_ATTACHMENT0                             0x8CE0
#define GL_DEPTH_ATTACHMENT                              0x8D00
#define GL_STENCIL_ATTACHMENT                            0x8D20

#define GL_NONE                                          0

#define GL_FRAMEBUFFER_COMPLETE                          0x8CD5
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT             0x8CD6
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT     0x8CD7
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS             0x8CD9
#define GL_FRAMEBUFFER_UNSUPPORTED                       0x8CDD

#define GL_FRAMEBUFFER_BINDING                           0x8CA6
#define GL_RENDERBUFFER_BINDING                          0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE                         0x84E8

#define GL_INVALID_FRAMEBUFFER_OPERATION                 0x0506

/* OpenGL ES 3.0 */

#define GL_READ_BUFFER                                   0x0C02
#define GL_UNPACK_ROW_LENGTH                             0x0CF2
#define GL_UNPACK_SKIP_ROWS                              0x0CF3
#define GL_UNPACK_SKIP_PIXELS                            0x0CF4
#define GL_PACK_ROW_LENGTH                               0x0D02
#define GL_PACK_SKIP_ROWS                                0x0D03
#define GL_PACK_SKIP_PIXELS                              0x0D04
#define GL_COLOR                                         0x1800
#define GL_DEPTH                                         0x1801
#define GL_STENCIL                                       0x1802
#define GL_RED                                           0x1903
#define GL_RGB8                                          0x8051
#define GL_RGBA8                                         0x8058
#define GL_RGB10_A2                                      0x8059
#define GL_TEXTURE_BINDING_3D                            0x806A
#define GL_UNPACK_SKIP_IMAGES                            0x806D
#define GL_UNPACK_IMAGE_HEIGHT                           0x806E
#define GL_TEXTURE_3D                                    0x806F
#define GL_TEXTURE_WRAP_R                                0x8072
#define GL_MAX_3D_TEXTURE_SIZE                           0x8073
#define GL_UNSIGNED_INT_2_10_10_10_REV                   0x8368
#define GL_MAX_ELEMENTS_VERTICES                         0x80E8
#define GL_MAX_ELEMENTS_INDICES                          0x80E9
#define GL_TEXTURE_MIN_LOD                               0x813A
#define GL_TEXTURE_MAX_LOD                               0x813B
#define GL_TEXTURE_BASE_LEVEL                            0x813C
#define GL_TEXTURE_MAX_LEVEL                             0x813D
#define GL_MIN                                           0x8007
#define GL_MAX                                           0x8008
#define GL_DEPTH_COMPONENT24                             0x81A6
#define GL_MAX_TEXTURE_LOD_BIAS                          0x84FD
#define GL_TEXTURE_COMPARE_MODE                          0x884C
#define GL_TEXTURE_COMPARE_FUNC                          0x884D
#define GL_CURRENT_QUERY                                 0x8865
#define GL_QUERY_RESULT                                  0x8866
#define GL_QUERY_RESULT_AVAILABLE                        0x8867
#define GL_BUFFER_MAPPED                                 0x88BC
#define GL_BUFFER_MAP_POINTER                            0x88BD
#define GL_STREAM_READ                                   0x88E1
#define GL_STREAM_COPY                                   0x88E2
#define GL_STATIC_READ                                   0x88E5
#define GL_STATIC_COPY                                   0x88E6
#define GL_DYNAMIC_READ                                  0x88E9
#define GL_DYNAMIC_COPY                                  0x88EA
#define GL_MAX_DRAW_BUFFERS                              0x8824
#define GL_DRAW_BUFFER0                                  0x8825
#define GL_DRAW_BUFFER1                                  0x8826
#define GL_DRAW_BUFFER2                                  0x8827
#define GL_DRAW_BUFFER3                                  0x8828
#define GL_DRAW_BUFFER4                                  0x8829
#define GL_DRAW_BUFFER5                                  0x882A
#define GL_DRAW_BUFFER6                                  0x882B
#define GL_DRAW_BUFFER7                                  0x882C
#define GL_DRAW_BUFFER8                                  0x882D
#define GL_DRAW_BUFFER9                                  0x882E
#define GL_DRAW_BUFFER10                                 0x882F
#define GL_DRAW_BUFFER11                                 0x8830
#define GL_DRAW_BUFFER12                                 0x8831
#define GL_DRAW_BUFFER13                                 0x8832
#define GL_DRAW_BUFFER14                                 0x8833
#define GL_DRAW_BUFFER15                                 0x8834
#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS               0x8B49
#define GL_MAX_VERTEX_UNIFORM_COMPONENTS                 0x8B4A
#define GL_SAMPLER_3D                                    0x8B5F
#define GL_SAMPLER_2D_SHADOW                             0x8B62
#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT               0x8B8B
#define GL_PIXEL_PACK_BUFFER                             0x88EB
#define GL_PIXEL_UNPACK_BUFFER                           0x88EC
#define GL_PIXEL_PACK_BUFFER_BINDING                     0x88ED
#define GL_PIXEL_UNPACK_BUFFER_BINDING                   0x88EF
#define GL_FLOAT_MAT2x3                                  0x8B65
#define GL_FLOAT_MAT2x4                                  0x8B66
#define GL_FLOAT_MAT3x2                                  0x8B67
#define GL_FLOAT_MAT3x4                                  0x8B68
#define GL_FLOAT_MAT4x2                                  0x8B69
#define GL_FLOAT_MAT4x3                                  0x8B6A
#define GL_SRGB                                          0x8C40
#define GL_SRGB8                                         0x8C41
#define GL_SRGB8_ALPHA8                                  0x8C43
#define GL_COMPARE_REF_TO_TEXTURE                        0x884E
#define GL_MAJOR_VERSION                                 0x821B
#define GL_MINOR_VERSION                                 0x821C
#define GL_NUM_EXTENSIONS                                0x821D
#define GL_RGBA32F                                       0x8814
#define GL_RGB32F                                        0x8815
#define GL_RGBA16F                                       0x881A
#define GL_RGB16F                                        0x881B
#define GL_VERTEX_ATTRIB_ARRAY_INTEGER                   0x88FD
#define GL_MAX_ARRAY_TEXTURE_LAYERS                      0x88FF
#define GL_MIN_PROGRAM_TEXEL_OFFSET                      0x8904
#define GL_MAX_PROGRAM_TEXEL_OFFSET                      0x8905
#define GL_MAX_VARYING_COMPONENTS                        0x8B4B
#define GL_TEXTURE_2D_ARRAY                              0x8C1A
#define GL_TEXTURE_BINDING_2D_ARRAY                      0x8C1D
#define GL_R11F_G11F_B10F                                0x8C3A
#define GL_UNSIGNED_INT_10F_11F_11F_REV                  0x8C3B
#define GL_RGB9_E5                                       0x8C3D
#define GL_UNSIGNED_INT_5_9_9_9_REV                      0x8C3E
#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH         0x8C76
#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE                0x8C7F
#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS    0x8C80
#define GL_TRANSFORM_FEEDBACK_VARYINGS                   0x8C83
#define GL_TRANSFORM_FEEDBACK_BUFFER_START               0x8C84
#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE                0x8C85
#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN         0x8C88
#define GL_RASTERIZER_DISCARD                            0x8C89
#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS       0x8C8B
#define GL_INTERLEAVED_ATTRIBS                           0x8C8C
#define GL_SEPARATE_ATTRIBS                              0x8C8D
#define GL_TRANSFORM_FEEDBACK_BUFFER                     0x8C8E
#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING             0x8C8F
#define GL_RGBA32UI                                      0x8D70
#define GL_RGB32UI                                       0x8D71
#define GL_RGBA16UI                                      0x8D76
#define GL_RGB16UI                                       0x8D77
#define GL_RGBA8UI                                       0x8D7C
#define GL_RGB8UI                                        0x8D7D
#define GL_RGBA32I                                       0x8D82
#define GL_RGB32I                                        0x8D83
#define GL_RGBA16I                                       0x8D88
#define GL_RGB16I                                        0x8D89
#define GL_RGBA8I                                        0x8D8E
#define GL_RGB8I                                         0x8D8F
#define GL_RED_INTEGER                                   0x8D94
#define GL_RGB_INTEGER                                   0x8D98
#define GL_RGBA_INTEGER                                  0x8D99
#define GL_SAMPLER_2D_ARRAY                              0x8DC1
#define GL_SAMPLER_2D_ARRAY_SHADOW                       0x8DC4
#define GL_SAMPLER_CUBE_SHADOW                           0x8DC5
#define GL_UNSIGNED_INT_VEC2                             0x8DC6
#define GL_UNSIGNED_INT_VEC3                             0x8DC7
#define GL_UNSIGNED_INT_VEC4                             0x8DC8
#define GL_INT_SAMPLER_2D                                0x8DCA
#define GL_INT_SAMPLER_3D                                0x8DCB
#define GL_INT_SAMPLER_CUBE                              0x8DCC
#define GL_INT_SAMPLER_2D_ARRAY                          0x8DCF
#define GL_UNSIGNED_INT_SAMPLER_2D                       0x8DD2
#define GL_UNSIGNED_INT_SAMPLER_3D                       0x8DD3
#define GL_UNSIGNED_INT_SAMPLER_CUBE                     0x8DD4
#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY                 0x8DD7
#define GL_BUFFER_ACCESS_FLAGS                           0x911F
#define GL_BUFFER_MAP_LENGTH                             0x9120
#define GL_BUFFER_MAP_OFFSET                             0x9121
#define GL_DEPTH_COMPONENT32F                            0x8CAC
#define GL_DEPTH32F_STENCIL8                             0x8CAD
#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV                0x8DAD
#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING         0x8210
#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE         0x8211
#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE               0x8212
#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE             0x8213
#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE              0x8214
#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE             0x8215
#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE             0x8216
#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE           0x8217
#define GL_FRAMEBUFFER_DEFAULT                           0x8218
#define GL_FRAMEBUFFER_UNDEFINED                         0x8219
#define GL_DEPTH_STENCIL_ATTACHMENT                      0x821A
#define GL_DEPTH_STENCIL                                 0x84F9
#define GL_UNSIGNED_INT_24_8                             0x84FA
#define GL_DEPTH24_STENCIL8                              0x88F0
#define GL_UNSIGNED_NORMALIZED                           0x8C17
#define GL_DRAW_FRAMEBUFFER_BINDING                      GL_FRAMEBUFFER_BINDING
#define GL_READ_FRAMEBUFFER                              0x8CA8
#define GL_DRAW_FRAMEBUFFER                              0x8CA9
#define GL_READ_FRAMEBUFFER_BINDING                      0x8CAA
#define GL_RENDERBUFFER_SAMPLES                          0x8CAB
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER          0x8CD4
#define GL_MAX_COLOR_ATTACHMENTS                         0x8CDF
#define GL_COLOR_ATTACHMENT1                             0x8CE1
#define GL_COLOR_ATTACHMENT2                             0x8CE2
#define GL_COLOR_ATTACHMENT3                             0x8CE3
#define GL_COLOR_ATTACHMENT4                             0x8CE4
#define GL_COLOR_ATTACHMENT5                             0x8CE5
#define GL_COLOR_ATTACHMENT6                             0x8CE6
#define GL_COLOR_ATTACHMENT7                             0x8CE7
#define GL_COLOR_ATTACHMENT8                             0x8CE8
#define GL_COLOR_ATTACHMENT9                             0x8CE9
#define GL_COLOR_ATTACHMENT10                            0x8CEA
#define GL_COLOR_ATTACHMENT11                            0x8CEB
#define GL_COLOR_ATTACHMENT12                            0x8CEC
#define GL_COLOR_ATTACHMENT13                            0x8CED
#define GL_COLOR_ATTACHMENT14                            0x8CEE
#define GL_COLOR_ATTACHMENT15                            0x8CEF
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE            0x8D56
#define GL_MAX_SAMPLES                                   0x8D57
#define GL_HALF_FLOAT                                    0x140B
#define GL_MAP_READ_BIT                                  0x0001
#define GL_MAP_WRITE_BIT                                 0x0002
#define GL_MAP_INVALIDATE_RANGE_BIT                      0x0004
#define GL_MAP_INVALIDATE_BUFFER_BIT                     0x0008
#define GL_MAP_FLUSH_EXPLICIT_BIT                        0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT                        0x0020
#define GL_RG                                            0x8227
#define GL_RG_INTEGER                                    0x8228
#define GL_R8                                            0x8229
#define GL_RG8                                           0x822B
#define GL_R16F                                          0x822D
#define GL_R32F                                          0x822E
#define GL_RG16F                                         0x822F
#define GL_RG32F                                         0x8230
#define GL_R8I                                           0x8231
#define GL_R8UI                                          0x8232
#define GL_R16I                                          0x8233
#define GL_R16UI                                         0x8234
#define GL_R32I                                          0x8235
#define GL_R32UI                                         0x8236
#define GL_RG8I                                          0x8237
#define GL_RG8UI                                         0x8238
#define GL_RG16I                                         0x8239
#define GL_RG16UI                                        0x823A
#define GL_RG32I                                         0x823B
#define GL_RG32UI                                        0x823C
#define GL_VERTEX_ARRAY_BINDING                          0x85B5
#define GL_R8_SNORM                                      0x8F94
#define GL_RG8_SNORM                                     0x8F95
#define GL_RGB8_SNORM                                    0x8F96
#define GL_RGBA8_SNORM                                   0x8F97
#define GL_SIGNED_NORMALIZED                             0x8F9C
#define GL_PRIMITIVE_RESTART_FIXED_INDEX                 0x8D69
#define GL_COPY_READ_BUFFER                              0x8F36
#define GL_COPY_WRITE_BUFFER                             0x8F37
#define GL_COPY_READ_BUFFER_BINDING                      GL_COPY_READ_BUFFER
#define GL_COPY_WRITE_BUFFER_BINDING                     GL_COPY_WRITE_BUFFER
#define GL_UNIFORM_BUFFER                                0x8A11
#define GL_UNIFORM_BUFFER_BINDING                        0x8A28
#define GL_UNIFORM_BUFFER_START                          0x8A29
#define GL_UNIFORM_BUFFER_SIZE                           0x8A2A
#define GL_MAX_VERTEX_UNIFORM_BLOCKS                     0x8A2B
#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS                   0x8A2D
#define GL_MAX_COMBINED_UNIFORM_BLOCKS                   0x8A2E
#define GL_MAX_UNIFORM_BUFFER_BINDINGS                   0x8A2F
#define GL_MAX_UNIFORM_BLOCK_SIZE                        0x8A30
#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS        0x8A31
#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS      0x8A33
#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT               0x8A34
#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH          0x8A35
#define GL_ACTIVE_UNIFORM_BLOCKS                         0x8A36
#define GL_UNIFORM_TYPE                                  0x8A37
#define GL_UNIFORM_SIZE                                  0x8A38
#define GL_UNIFORM_NAME_LENGTH                           0x8A39
#define GL_UNIFORM_BLOCK_INDEX                           0x8A3A
#define GL_UNIFORM_OFFSET                                0x8A3B
#define GL_UNIFORM_ARRAY_STRIDE                          0x8A3C
#define GL_UNIFORM_MATRIX_STRIDE                         0x8A3D
#define GL_UNIFORM_IS_ROW_MAJOR                          0x8A3E
#define GL_UNIFORM_BLOCK_BINDING                         0x8A3F
#define GL_UNIFORM_BLOCK_DATA_SIZE                       0x8A40
#define GL_UNIFORM_BLOCK_NAME_LENGTH                     0x8A41
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS                 0x8A42
#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES          0x8A43
#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER     0x8A44
#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER   0x8A46
#define GL_INVALID_INDEX                                 0xFFFFFFFFu
#define GL_MAX_VERTEX_OUTPUT_COMPONENTS                  0x9122
#define GL_MAX_FRAGMENT_INPUT_COMPONENTS                 0x9125
#define GL_MAX_SERVER_WAIT_TIMEOUT                       0x9111
#define GL_OBJECT_TYPE                                   0x9112
#define GL_SYNC_CONDITION                                0x9113
#define GL_SYNC_STATUS                                   0x9114
#define GL_SYNC_FLAGS                                    0x9115
#define GL_SYNC_FENCE                                    0x9116
#define GL_SYNC_GPU_COMMANDS_COMPLETE                    0x9117
#define GL_UNSIGNALED                                    0x9118
#define GL_SIGNALED                                      0x9119
#define GL_ALREADY_SIGNALED                              0x911A
#define GL_TIMEOUT_EXPIRED                               0x911B
#define GL_CONDITION_SATISFIED                           0x911C
#define GL_WAIT_FAILED                                   0x911D
#define GL_SYNC_FLUSH_COMMANDS_BIT                       0x00000001
#define GL_TIMEOUT_IGNORED                               0xFFFFFFFFFFFFFFFFull
#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR                   0x88FE
#define GL_ANY_SAMPLES_PASSED                            0x8C2F
#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE               0x8D6A
#define GL_SAMPLER_BINDING                               0x8919
#define GL_RGB10_A2UI                                    0x906F
#define GL_TEXTURE_SWIZZLE_R                             0x8E42
#define GL_TEXTURE_SWIZZLE_G                             0x8E43
#define GL_TEXTURE_SWIZZLE_B                             0x8E44
#define GL_TEXTURE_SWIZZLE_A                             0x8E45
#define GL_GREEN                                         0x1904
#define GL_BLUE                                          0x1905
#define GL_INT_2_10_10_10_REV                            0x8D9F
#define GL_TRANSFORM_FEEDBACK                            0x8E22
#define GL_TRANSFORM_FEEDBACK_PAUSED                     0x8E23
#define GL_TRANSFORM_FEEDBACK_ACTIVE                     0x8E24
#define GL_TRANSFORM_FEEDBACK_BINDING                    0x8E25
#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT               0x8257
#define GL_PROGRAM_BINARY_LENGTH                         0x8741
#define GL_NUM_PROGRAM_BINARY_FORMATS                    0x87FE
#define GL_PROGRAM_BINARY_FORMATS                        0x87FF
#define GL_COMPRESSED_R11_EAC                            0x9270
#define GL_COMPRESSED_SIGNED_R11_EAC                     0x9271
#define GL_COMPRESSED_RG11_EAC                           0x9272
#define GL_COMPRESSED_SIGNED_RG11_EAC                    0x9273
#define GL_COMPRESSED_RGB8_ETC2                          0x9274
#define GL_COMPRESSED_SRGB8_ETC2                         0x9275
#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2      0x9276
#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2     0x9277
#define GL_COMPRESSED_RGBA8_ETC2_EAC                     0x9278
#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC              0x9279
#define GL_TEXTURE_IMMUTABLE_FORMAT                      0x912F
#define GL_MAX_ELEMENT_INDEX                             0x8D6B
#define GL_NUM_SAMPLE_COUNTS                             0x9380
#define GL_TEXTURE_IMMUTABLE_LEVELS                      0x8D63

/*-------------------------------------------------------------------------
 * Entrypoint definitions
 *-----------------------------------------------------------------------*/

/* OpenGL ES 2.0 */

GL_APICALL void           GL_APIENTRY glActiveTexture (GLenum texture);
GL_APICALL void           GL_APIENTRY glAttachShader (GLuint program, GLuint shader);
GL_APICALL void           GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name);
GL_APICALL void           GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer);
GL_APICALL void           GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);
GL_APICALL void           GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);
GL_APICALL void           GL_APIENTRY glBindTexture (GLenum target, GLuint texture);
GL_APICALL void           GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
GL_APICALL void           GL_APIENTRY glBlendEquation (GLenum mode);
GL_APICALL void           GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);
GL_APICALL void           GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor);
GL_APICALL void           GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
GL_APICALL void           GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
GL_APICALL void           GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
GL_APICALL GLenum         GL_APIENTRY glCheckFramebufferStatus (GLenum target);
GL_APICALL void           GL_APIENTRY glClear (GLbitfield mask);
GL_APICALL void           GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
GL_APICALL void           GL_APIENTRY glClearDepthf (GLfloat depth);
GL_APICALL void           GL_APIENTRY glClearStencil (GLint s);
GL_APICALL void           GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
GL_APICALL void           GL_APIENTRY glCompileShader (GLuint shader);
GL_APICALL void           GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
GL_APICALL void           GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
GL_APICALL void           GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
GL_APICALL void           GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL GLuint         GL_APIENTRY glCreateProgram (void);
GL_APICALL GLuint         GL_APIENTRY glCreateShader (GLenum type);
GL_APICALL void           GL_APIENTRY glCullFace (GLenum mode);
GL_APICALL void           GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers);
GL_APICALL void           GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers);
GL_APICALL void           GL_APIENTRY glDeleteProgram (GLuint program);
GL_APICALL void           GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers);
GL_APICALL void           GL_APIENTRY glDeleteShader (GLuint shader);
GL_APICALL void           GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures);
GL_APICALL void           GL_APIENTRY glDepthFunc (GLenum func);
GL_APICALL void           GL_APIENTRY glDepthMask (GLboolean flag);
GL_APICALL void           GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f);
GL_APICALL void           GL_APIENTRY glDetachShader (GLuint program, GLuint shader);
GL_APICALL void           GL_APIENTRY glDisable (GLenum cap);
GL_APICALL void           GL_APIENTRY glDisableVertexAttribArray (GLuint index);
GL_APICALL void           GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count);
GL_APICALL void           GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices);
GL_APICALL void           GL_APIENTRY glEnable (GLenum cap);
GL_APICALL void           GL_APIENTRY glEnableVertexAttribArray (GLuint index);
GL_APICALL void           GL_APIENTRY glFinish (void);
GL_APICALL void           GL_APIENTRY glFlush (void);
GL_APICALL void           GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
GL_APICALL void           GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
GL_APICALL void           GL_APIENTRY glFrontFace (GLenum mode);
GL_APICALL void           GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers);
GL_APICALL void           GL_APIENTRY glGenerateMipmap (GLenum target);
GL_APICALL void           GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers);
GL_APICALL void           GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers);
GL_APICALL void           GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures);
GL_APICALL void           GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
GL_APICALL void           GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name);
GL_APICALL void           GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
GL_APICALL int            GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name);
GL_APICALL void           GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params);
GL_APICALL void           GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params);
GL_APICALL GLenum         GL_APIENTRY glGetError (void);
GL_APICALL void           GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params);
GL_APICALL void           GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog);
GL_APICALL void           GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog);
GL_APICALL void           GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
GL_APICALL void           GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source);
GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name);
GL_APICALL void           GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params);
GL_APICALL void           GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params);
GL_APICALL void           GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params);
GL_APICALL int            GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name);
GL_APICALL void           GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params);
GL_APICALL void           GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer);
GL_APICALL void           GL_APIENTRY glHint (GLenum target, GLenum mode);
GL_APICALL GLboolean      GL_APIENTRY glIsBuffer (GLuint buffer);
GL_APICALL GLboolean      GL_APIENTRY glIsEnabled (GLenum cap);
GL_APICALL GLboolean      GL_APIENTRY glIsFramebuffer (GLuint framebuffer);
GL_APICALL GLboolean      GL_APIENTRY glIsProgram (GLuint program);
GL_APICALL GLboolean      GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer);
GL_APICALL GLboolean      GL_APIENTRY glIsShader (GLuint shader);
GL_APICALL GLboolean      GL_APIENTRY glIsTexture (GLuint texture);
GL_APICALL void           GL_APIENTRY glLineWidth (GLfloat width);
GL_APICALL void           GL_APIENTRY glLinkProgram (GLuint program);
GL_APICALL void           GL_APIENTRY glPixelStorei (GLenum pname, GLint param);
GL_APICALL void           GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units);
GL_APICALL void           GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
GL_APICALL void           GL_APIENTRY glReleaseShaderCompiler (void);
GL_APICALL void           GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void           GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);
GL_APICALL void           GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL void           GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length);
GL_APICALL void           GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length);
GL_APICALL void           GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask);
GL_APICALL void           GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);
GL_APICALL void           GL_APIENTRY glStencilMask (GLuint mask);
GL_APICALL void           GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);
GL_APICALL void           GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass);
GL_APICALL void           GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
GL_APICALL void           GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void           GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
GL_APICALL void           GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params);
GL_APICALL void           GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
GL_APICALL void           GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params);
GL_APICALL void           GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void           GL_APIENTRY glUniform1f (GLint location, GLfloat x);
GL_APICALL void           GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void           GL_APIENTRY glUniform1i (GLint location, GLint x);
GL_APICALL void           GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void           GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y);
GL_APICALL void           GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void           GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y);
GL_APICALL void           GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void           GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z);
GL_APICALL void           GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void           GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z);
GL_APICALL void           GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void           GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
GL_APICALL void           GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v);
GL_APICALL void           GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w);
GL_APICALL void           GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v);
GL_APICALL void           GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUseProgram (GLuint program);
GL_APICALL void           GL_APIENTRY glValidateProgram (GLuint program);
GL_APICALL void           GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x);
GL_APICALL void           GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values);
GL_APICALL void           GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y);
GL_APICALL void           GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values);
GL_APICALL void           GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z);
GL_APICALL void           GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values);
GL_APICALL void           GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
GL_APICALL void           GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values);
GL_APICALL void           GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr);
GL_APICALL void           GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height);

/* OpenGL ES 3.0 */

GL_APICALL void           GL_APIENTRY glReadBuffer (GLenum mode);
GL_APICALL void           GL_APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices);
GL_APICALL void           GL_APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void           GL_APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
GL_APICALL void           GL_APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL void           GL_APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data);
GL_APICALL void           GL_APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data);
GL_APICALL void           GL_APIENTRY glGenQueries (GLsizei n, GLuint* ids);
GL_APICALL void           GL_APIENTRY glDeleteQueries (GLsizei n, const GLuint* ids);
GL_APICALL GLboolean      GL_APIENTRY glIsQuery (GLuint id);
GL_APICALL void           GL_APIENTRY glBeginQuery (GLenum target, GLuint id);
GL_APICALL void           GL_APIENTRY glEndQuery (GLenum target);
GL_APICALL void           GL_APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params);
GL_APICALL GLboolean      GL_APIENTRY glUnmapBuffer (GLenum target);
GL_APICALL void           GL_APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid** params);
GL_APICALL void           GL_APIENTRY glDrawBuffers (GLsizei n, const GLenum* bufs);
GL_APICALL void           GL_APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
GL_APICALL void           GL_APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void           GL_APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
GL_APICALL GLvoid*        GL_APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
GL_APICALL void           GL_APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);
GL_APICALL void           GL_APIENTRY glBindVertexArray (GLuint array);
GL_APICALL void           GL_APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint* arrays);
GL_APICALL void           GL_APIENTRY glGenVertexArrays (GLsizei n, GLuint* arrays);
GL_APICALL GLboolean      GL_APIENTRY glIsVertexArray (GLuint array);
GL_APICALL void           GL_APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint* data);
GL_APICALL void           GL_APIENTRY glBeginTransformFeedback (GLenum primitiveMode);
GL_APICALL void           GL_APIENTRY glEndTransformFeedback (void);
GL_APICALL void           GL_APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
GL_APICALL void           GL_APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);
GL_APICALL void           GL_APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode);
GL_APICALL void           GL_APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name);
GL_APICALL void           GL_APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer);
GL_APICALL void           GL_APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint* params);
GL_APICALL void           GL_APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);
GL_APICALL void           GL_APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
GL_APICALL void           GL_APIENTRY glVertexAttribI4iv (GLuint index, const GLint* v);
GL_APICALL void           GL_APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint* v);
GL_APICALL void           GL_APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint* params);
GL_APICALL GLint          GL_APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);
GL_APICALL void           GL_APIENTRY glUniform1ui (GLint location, GLuint v0);
GL_APICALL void           GL_APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);
GL_APICALL void           GL_APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);
GL_APICALL void           GL_APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
GL_APICALL void           GL_APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint* value);
GL_APICALL void           GL_APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint* value);
GL_APICALL void           GL_APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint* value);
GL_APICALL void           GL_APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint* value);
GL_APICALL void           GL_APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint* value);
GL_APICALL void           GL_APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint* value);
GL_APICALL void           GL_APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat* value);
GL_APICALL void           GL_APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
GL_APICALL const GLubyte* GL_APIENTRY glGetStringi (GLenum name, GLuint index);
GL_APICALL void           GL_APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
GL_APICALL void           GL_APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices);
GL_APICALL void           GL_APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params);
GL_APICALL GLuint         GL_APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar* uniformBlockName);
GL_APICALL void           GL_APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName);
GL_APICALL void           GL_APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
GL_APICALL void           GL_APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
GL_APICALL void           GL_APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount);
GL_APICALL GLsync         GL_APIENTRY glFenceSync (GLenum condition, GLbitfield flags);
GL_APICALL GLboolean      GL_APIENTRY glIsSync (GLsync sync);
GL_APICALL void           GL_APIENTRY glDeleteSync (GLsync sync);
GL_APICALL GLenum         GL_APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
GL_APICALL void           GL_APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);
GL_APICALL void           GL_APIENTRY glGetInteger64v (GLenum pname, GLint64* params);
GL_APICALL void           GL_APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);
GL_APICALL void           GL_APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64* data);
GL_APICALL void           GL_APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64* params);
GL_APICALL void           GL_APIENTRY glGenSamplers (GLsizei count, GLuint* samplers);
GL_APICALL void           GL_APIENTRY glDeleteSamplers (GLsizei count, const GLuint* samplers);
GL_APICALL GLboolean      GL_APIENTRY glIsSampler (GLuint sampler);
GL_APICALL void           GL_APIENTRY glBindSampler (GLuint unit, GLuint sampler);
GL_APICALL void           GL_APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);
GL_APICALL void           GL_APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint* param);
GL_APICALL void           GL_APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);
GL_APICALL void           GL_APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat* param);
GL_APICALL void           GL_APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint* params);
GL_APICALL void           GL_APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat* params);
GL_APICALL void           GL_APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);
GL_APICALL void           GL_APIENTRY glBindTransformFeedback (GLenum target, GLuint id);
GL_APICALL void           GL_APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint* ids);
GL_APICALL void           GL_APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint* ids);
GL_APICALL GLboolean      GL_APIENTRY glIsTransformFeedback (GLuint id);
GL_APICALL void           GL_APIENTRY glPauseTransformFeedback (void);
GL_APICALL void           GL_APIENTRY glResumeTransformFeedback (void);
GL_APICALL void           GL_APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary);
GL_APICALL void           GL_APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length);
GL_APICALL void           GL_APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);
GL_APICALL void           GL_APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments);
GL_APICALL void           GL_APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height);
GL_APICALL void           GL_APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_APICALL void           GL_APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
GL_APICALL void           GL_APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);

#ifdef __cplusplus
}
#endif

#endif
Added jni/glshim/include/GLES/gl3ext.h.
















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef __gl3ext_h_
#define __gl3ext_h_

/* $Revision: 17809 $ on $Date:: 2012-05-14 08:03:36 -0700 #$ */

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

/* OpenGL ES 3 Extensions
 *
 * After an OES extension's interactions with OpenGl ES 3.0 have been documented,
 * its tokens and function definitions should be added to this file in a manner
 * that does not conflict with gl2ext.h or gl3.h.
 *
 * Tokens and function definitions for extensions that have become standard
 * features in OpenGL ES 3.0 will not be added to this file.
 *
 * Applications using OpenGL-ES-2-only extensions should include gl2ext.h
 */

#endif /* __gl3ext_h_ */

Added jni/glshim/include/GLES/gl3platform.h.




























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef __gl3platform_h_
#define __gl3platform_h_

/* $Revision: 18437 $ on $Date:: 2012-07-08 23:31:39 -0700 #$ */

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

/* Platform-specific types and definitions for OpenGL ES 3.X  gl3.h
 *
 * Adopters may modify khrplatform.h and this file to suit their platform.
 * You are encouraged to submit all modifications to the Khronos group so that
 * they can be included in future versions of this file.  Please submit changes
 * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
 * by filing a bug against product "OpenGL-ES" component "Registry".
 */

#include <KHR/khrplatform.h>

#ifndef GL_APICALL
#define GL_APICALL  KHRONOS_APICALL
#endif

#ifndef GL_APIENTRY
#define GL_APIENTRY KHRONOS_APIENTRY
#endif

#endif /* __gl3platform_h_ */
Added jni/glshim/include/GLES/glext.h.




























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
#ifndef __glext_h_
#define __glext_h_

/* $Revision: 19260 $ on $Date:: 2012-09-20 11:30:36 -0700 #$ */

#ifdef __cplusplus
extern "C" {
#endif

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

#ifndef GL_APIENTRYP
#   define GL_APIENTRYP GL_APIENTRY*
#endif

/*------------------------------------------------------------------------*
 * OES extension tokens
 *------------------------------------------------------------------------*/

/* GL_OES_blend_equation_separate */
#ifndef GL_OES_blend_equation_separate
/* BLEND_EQUATION_RGB_OES same as BLEND_EQUATION_OES */
#define GL_BLEND_EQUATION_RGB_OES                               0x8009
#define GL_BLEND_EQUATION_ALPHA_OES                             0x883D
#endif

/* GL_OES_blend_func_separate */
#ifndef GL_OES_blend_func_separate
#define GL_BLEND_DST_RGB_OES                                    0x80C8
#define GL_BLEND_SRC_RGB_OES                                    0x80C9
#define GL_BLEND_DST_ALPHA_OES                                  0x80CA
#define GL_BLEND_SRC_ALPHA_OES                                  0x80CB
#endif

/* GL_OES_blend_subtract */
#ifndef GL_OES_blend_subtract
#define GL_BLEND_EQUATION_OES                                   0x8009
#define GL_FUNC_ADD_OES                                         0x8006
#define GL_FUNC_SUBTRACT_OES                                    0x800A
#define GL_FUNC_REVERSE_SUBTRACT_OES                            0x800B
#endif

/* GL_OES_compressed_ETC1_RGB8_texture */
#ifndef GL_OES_compressed_ETC1_RGB8_texture
#define GL_ETC1_RGB8_OES                                        0x8D64
#endif

/* GL_OES_depth24 */
#ifndef GL_OES_depth24
#define GL_DEPTH_COMPONENT24_OES                                0x81A6
#endif

/* GL_OES_depth32 */
#ifndef GL_OES_depth32
#define GL_DEPTH_COMPONENT32_OES                                0x81A7
#endif

/* GL_OES_draw_texture */
#ifndef GL_OES_draw_texture
#define GL_TEXTURE_CROP_RECT_OES                                0x8B9D
#endif

/* GL_OES_EGL_image */
#ifndef GL_OES_EGL_image
typedef void* GLeglImageOES;
#endif

/* GL_OES_EGL_image_external */
#ifndef GL_OES_EGL_image_external
/* GLeglImageOES defined in GL_OES_EGL_image already. */
#define GL_TEXTURE_EXTERNAL_OES                                 0x8D65
#define GL_TEXTURE_BINDING_EXTERNAL_OES                         0x8D67
#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES                     0x8D68
#endif

/* GL_OES_element_index_uint */
#ifndef GL_OES_element_index_uint
#define GL_UNSIGNED_INT                                         0x1405
#endif

/* GL_OES_fixed_point */
#ifndef GL_OES_fixed_point
#define GL_FIXED_OES                                            0x140C
#endif

/* GL_OES_framebuffer_object */
#ifndef GL_OES_framebuffer_object
#define GL_NONE_OES                                             0
#define GL_FRAMEBUFFER_OES                                      0x8D40
#define GL_RENDERBUFFER_OES                                     0x8D41
#define GL_RGBA4_OES                                            0x8056
#define GL_RGB5_A1_OES                                          0x8057
#define GL_RGB565_OES                                           0x8D62
#define GL_DEPTH_COMPONENT16_OES                                0x81A5
#define GL_RENDERBUFFER_WIDTH_OES                               0x8D42
#define GL_RENDERBUFFER_HEIGHT_OES                              0x8D43
#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES                     0x8D44
#define GL_RENDERBUFFER_RED_SIZE_OES                            0x8D50
#define GL_RENDERBUFFER_GREEN_SIZE_OES                          0x8D51
#define GL_RENDERBUFFER_BLUE_SIZE_OES                           0x8D52
#define GL_RENDERBUFFER_ALPHA_SIZE_OES                          0x8D53
#define GL_RENDERBUFFER_DEPTH_SIZE_OES                          0x8D54
#define GL_RENDERBUFFER_STENCIL_SIZE_OES                        0x8D55
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES               0x8CD0
#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES               0x8CD1
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES             0x8CD2
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES     0x8CD3
#define GL_COLOR_ATTACHMENT0_OES                                0x8CE0
#define GL_DEPTH_ATTACHMENT_OES                                 0x8D00
#define GL_STENCIL_ATTACHMENT_OES                               0x8D20
#define GL_FRAMEBUFFER_COMPLETE_OES                             0x8CD5
#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES                0x8CD6
#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES        0x8CD7
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES                0x8CD9
#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES                   0x8CDA
#define GL_FRAMEBUFFER_UNSUPPORTED_OES                          0x8CDD
#define GL_FRAMEBUFFER_BINDING_OES                              0x8CA6
#define GL_RENDERBUFFER_BINDING_OES                             0x8CA7
#define GL_MAX_RENDERBUFFER_SIZE_OES                            0x84E8
#define GL_INVALID_FRAMEBUFFER_OPERATION_OES                    0x0506
#endif

/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_WRITE_ONLY_OES                                       0x88B9
#define GL_BUFFER_ACCESS_OES                                    0x88BB
#define GL_BUFFER_MAPPED_OES                                    0x88BC
#define GL_BUFFER_MAP_POINTER_OES                               0x88BD
#endif

/* GL_OES_matrix_get */
#ifndef GL_OES_matrix_get
#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES               0x898D
#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES              0x898E
#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES                 0x898F
#endif

/* GL_OES_matrix_palette */
#ifndef GL_OES_matrix_palette
#define GL_MAX_VERTEX_UNITS_OES                                 0x86A4
#define GL_MAX_PALETTE_MATRICES_OES                             0x8842
#define GL_MATRIX_PALETTE_OES                                   0x8840
#define GL_MATRIX_INDEX_ARRAY_OES                               0x8844
#define GL_WEIGHT_ARRAY_OES                                     0x86AD
#define GL_CURRENT_PALETTE_MATRIX_OES                           0x8843
#define GL_MATRIX_INDEX_ARRAY_SIZE_OES                          0x8846
#define GL_MATRIX_INDEX_ARRAY_TYPE_OES                          0x8847
#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES                        0x8848
#define GL_MATRIX_INDEX_ARRAY_POINTER_OES                       0x8849
#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES                0x8B9E
#define GL_WEIGHT_ARRAY_SIZE_OES                                0x86AB
#define GL_WEIGHT_ARRAY_TYPE_OES                                0x86A9
#define GL_WEIGHT_ARRAY_STRIDE_OES                              0x86AA
#define GL_WEIGHT_ARRAY_POINTER_OES                             0x86AC
#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES                      0x889E
#endif

/* GL_OES_packed_depth_stencil */
#ifndef GL_OES_packed_depth_stencil
#define GL_DEPTH_STENCIL_OES                                    0x84F9
#define GL_UNSIGNED_INT_24_8_OES                                0x84FA
#define GL_DEPTH24_STENCIL8_OES                                 0x88F0
#endif

/* GL_OES_required_internalformat */
/* No new tokens introduced by this extension. */

/* GL_OES_rgb8_rgba8 */
#ifndef GL_OES_rgb8_rgba8
#define GL_RGB8_OES                                             0x8051
#define GL_RGBA8_OES                                            0x8058
#endif

/* GL_OES_stencil1 */
#ifndef GL_OES_stencil1
#define GL_STENCIL_INDEX1_OES                                   0x8D46
#endif

/* GL_OES_stencil4 */
#ifndef GL_OES_stencil4
#define GL_STENCIL_INDEX4_OES                                   0x8D47
#endif

/* GL_OES_stencil8 */
#ifndef GL_OES_stencil8
#define GL_STENCIL_INDEX8_OES                                   0x8D48
#endif

/* GL_OES_stencil_wrap */
#ifndef GL_OES_stencil_wrap
#define GL_INCR_WRAP_OES                                        0x8507
#define GL_DECR_WRAP_OES                                        0x8508
#endif

/* GL_OES_texture_cube_map */
#ifndef GL_OES_texture_cube_map
#define GL_NORMAL_MAP_OES                                       0x8511
#define GL_REFLECTION_MAP_OES                                   0x8512
#define GL_TEXTURE_CUBE_MAP_OES                                 0x8513
#define GL_TEXTURE_BINDING_CUBE_MAP_OES                         0x8514
#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES                      0x8515
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES                      0x8516
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES                      0x8517
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES                      0x8518
#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES                      0x8519
#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES                      0x851A
#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES                        0x851C
#define GL_TEXTURE_GEN_MODE_OES                                 0x2500
#define GL_TEXTURE_GEN_STR_OES                                  0x8D60
#endif

/* GL_OES_texture_mirrored_repeat */
#ifndef GL_OES_texture_mirrored_repeat
#define GL_MIRRORED_REPEAT_OES                                  0x8370
#endif

/* GL_OES_vertex_array_object */
#ifndef GL_OES_vertex_array_object
#define GL_VERTEX_ARRAY_BINDING_OES                             0x85B5
#endif

/*------------------------------------------------------------------------*
 * AMD extension tokens
 *------------------------------------------------------------------------*/

/* GL_AMD_compressed_3DC_texture */
#ifndef GL_AMD_compressed_3DC_texture
#define GL_3DC_X_AMD                                            0x87F9
#define GL_3DC_XY_AMD                                           0x87FA
#endif

/* GL_AMD_compressed_ATC_texture */
#ifndef GL_AMD_compressed_ATC_texture
#define GL_ATC_RGB_AMD                                          0x8C92
#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD                          0x8C93
#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD                      0x87EE
#endif

/*------------------------------------------------------------------------*
 * APPLE extension tokens
 *------------------------------------------------------------------------*/

/* GL_APPLE_copy_texture_levels */
/* No new tokens introduced by this extension. */

/* GL_APPLE_framebuffer_multisample */
#ifndef GL_APPLE_framebuffer_multisample
#define GL_RENDERBUFFER_SAMPLES_APPLE                           0x8CAB
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE             0x8D56
#define GL_MAX_SAMPLES_APPLE                                    0x8D57
#define GL_READ_FRAMEBUFFER_APPLE                               0x8CA8
#define GL_DRAW_FRAMEBUFFER_APPLE                               0x8CA9
#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE                       0x8CA6
#define GL_READ_FRAMEBUFFER_BINDING_APPLE                       0x8CAA
#endif

/* GL_APPLE_sync */
#ifndef GL_APPLE_sync

/* These types are defined with reference to <inttypes.h>
 * in the Apple extension spec, but here we use the Khronos
 * portable types in khrplatform.h, and assume those types
 * are always defined.
 * If any other extensions using these types are defined,
 * the typedefs must move out of this block and be shared.
 */
typedef khronos_int64_t GLint64;
typedef khronos_uint64_t GLuint64;
typedef struct __GLsync *GLsync;

#define GL_SYNC_OBJECT_APPLE                                    0x8A53
#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE                        0x9111
#define GL_OBJECT_TYPE_APPLE                                    0x9112
#define GL_SYNC_CONDITION_APPLE                                 0x9113
#define GL_SYNC_STATUS_APPLE                                    0x9114
#define GL_SYNC_FLAGS_APPLE                                     0x9115
#define GL_SYNC_FENCE_APPLE                                     0x9116
#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE                     0x9117
#define GL_UNSIGNALED_APPLE                                     0x9118
#define GL_SIGNALED_APPLE                                       0x9119
#define GL_ALREADY_SIGNALED_APPLE                               0x911A
#define GL_TIMEOUT_EXPIRED_APPLE                                0x911B
#define GL_CONDITION_SATISFIED_APPLE                            0x911C
#define GL_WAIT_FAILED_APPLE                                    0x911D
#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE                        0x00000001
#define GL_TIMEOUT_IGNORED_APPLE                                0xFFFFFFFFFFFFFFFFull
#endif

/* GL_APPLE_texture_2D_limited_npot */
/* No new tokens introduced by this extension. */

/* GL_APPLE_texture_format_BGRA8888 */
#ifndef GL_APPLE_texture_format_BGRA8888
#define GL_BGRA_EXT                                             0x80E1
#endif

/* GL_APPLE_texture_max_level */
#ifndef GL_APPLE_texture_max_level
#define GL_TEXTURE_MAX_LEVEL_APPLE                              0x813D
#endif

/*------------------------------------------------------------------------*
 * ARM extension tokens
 *------------------------------------------------------------------------*/

/* GL_ARM_rgba8 */
/* No new tokens introduced by this extension. */

/*------------------------------------------------------------------------*
 * EXT extension tokens
 *------------------------------------------------------------------------*/

/* GL_EXT_blend_minmax */
#ifndef GL_EXT_blend_minmax
#define GL_MIN_EXT                                              0x8007
#define GL_MAX_EXT                                              0x8008
#endif

/* GL_EXT_discard_framebuffer */
#ifndef GL_EXT_discard_framebuffer
#define GL_COLOR_EXT                                            0x1800
#define GL_DEPTH_EXT                                            0x1801
#define GL_STENCIL_EXT                                          0x1802
#endif

/* GL_EXT_map_buffer_range */
#ifndef GL_EXT_map_buffer_range
#define GL_MAP_READ_BIT_EXT                                     0x0001
#define GL_MAP_WRITE_BIT_EXT                                    0x0002
#define GL_MAP_INVALIDATE_RANGE_BIT_EXT                         0x0004
#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT                        0x0008
#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT                           0x0010
#define GL_MAP_UNSYNCHRONIZED_BIT_EXT                           0x0020
#endif

/* GL_EXT_multisampled_render_to_texture */
#ifndef GL_EXT_multisampled_render_to_texture
#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT           0x8D6C
/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */
#define GL_RENDERBUFFER_SAMPLES_EXT                             0x8CAB
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT               0x8D56
#define GL_MAX_SAMPLES_EXT                                      0x8D57
#endif

/* GL_EXT_multi_draw_arrays */
/* No new tokens introduced by this extension. */

/* GL_EXT_read_format_bgra */
#ifndef GL_EXT_read_format_bgra
#define GL_BGRA_EXT                                             0x80E1
#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT                       0x8365
#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT                       0x8366
#endif

/* GL_EXT_robustness */
#ifndef GL_EXT_robustness
/* reuse GL_NO_ERROR */
#define GL_GUILTY_CONTEXT_RESET_EXT                             0x8253
#define GL_INNOCENT_CONTEXT_RESET_EXT                           0x8254
#define GL_UNKNOWN_CONTEXT_RESET_EXT                            0x8255
#define GL_CONTEXT_ROBUST_ACCESS_EXT                            0x90F3
#define GL_RESET_NOTIFICATION_STRATEGY_EXT                      0x8256
#define GL_LOSE_CONTEXT_ON_RESET_EXT                            0x8252
#define GL_NO_RESET_NOTIFICATION_EXT                            0x8261
#endif

/* GL_EXT_sRGB */
#ifndef GL_EXT_sRGB
#define GL_SRGB_EXT                                             0x8C40
#define GL_SRGB_ALPHA_EXT                                       0x8C42
#define GL_SRGB8_ALPHA8_EXT                                     0x8C43
#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT            0x8210
#endif

/* GL_EXT_texture_compression_dxt1 */
#ifndef GL_EXT_texture_compression_dxt1
#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT                         0x83F0
#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT                        0x83F1
#endif

/* GL_EXT_texture_filter_anisotropic */
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_TEXTURE_MAX_ANISOTROPY_EXT                           0x84FE
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT                       0x84FF
#endif

/* GL_EXT_texture_format_BGRA8888 */
#ifndef GL_EXT_texture_format_BGRA8888
#define GL_BGRA_EXT                                             0x80E1
#endif

/* GL_EXT_texture_lod_bias */
#ifndef GL_EXT_texture_lod_bias
#define GL_MAX_TEXTURE_LOD_BIAS_EXT                             0x84FD
#define GL_TEXTURE_FILTER_CONTROL_EXT                           0x8500
#define GL_TEXTURE_LOD_BIAS_EXT                                 0x8501
#endif

/* GL_EXT_texture_storage */
#ifndef GL_EXT_texture_storage
#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT                         0x912F
#define GL_ALPHA8_EXT                                           0x803C
#define GL_LUMINANCE8_EXT                                       0x8040
#define GL_LUMINANCE8_ALPHA8_EXT                                0x8045
#define GL_RGBA32F_EXT                                          0x8814
#define GL_RGB32F_EXT                                           0x8815
#define GL_ALPHA32F_EXT                                         0x8816
#define GL_LUMINANCE32F_EXT                                     0x8818
#define GL_LUMINANCE_ALPHA32F_EXT                               0x8819
/* reuse GL_RGBA16F_EXT */
#define GL_RGB16F_EXT                                           0x881B
#define GL_ALPHA16F_EXT                                         0x881C
#define GL_LUMINANCE16F_EXT                                     0x881E
#define GL_LUMINANCE_ALPHA16F_EXT                               0x881F
#define GL_RGB10_A2_EXT                                         0x8059
#define GL_RGB10_EXT                                            0x8052
#define GL_BGRA8_EXT                                            0x93A1
#endif

/*------------------------------------------------------------------------*
 * IMG extension tokens
 *------------------------------------------------------------------------*/

/* GL_IMG_read_format */
#ifndef GL_IMG_read_format
#define GL_BGRA_IMG                                             0x80E1
#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG                       0x8365
#endif

/* GL_IMG_texture_compression_pvrtc */
#ifndef GL_IMG_texture_compression_pvrtc
#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
#endif

/* GL_IMG_texture_env_enhanced_fixed_function */
#ifndef GL_IMG_texture_env_enhanced_fixed_function
#define GL_MODULATE_COLOR_IMG                                   0x8C04
#define GL_RECIP_ADD_SIGNED_ALPHA_IMG                           0x8C05
#define GL_TEXTURE_ALPHA_MODULATE_IMG                           0x8C06
#define GL_FACTOR_ALPHA_MODULATE_IMG                            0x8C07
#define GL_FRAGMENT_ALPHA_MODULATE_IMG                          0x8C08
#define GL_ADD_BLEND_IMG                                        0x8C09
#define GL_DOT3_RGBA_IMG                                        0x86AF
#endif

/* GL_IMG_user_clip_plane */
#ifndef GL_IMG_user_clip_plane
#define GL_CLIP_PLANE0_IMG                                      0x3000
#define GL_CLIP_PLANE1_IMG                                      0x3001
#define GL_CLIP_PLANE2_IMG                                      0x3002
#define GL_CLIP_PLANE3_IMG                                      0x3003
#define GL_CLIP_PLANE4_IMG                                      0x3004
#define GL_CLIP_PLANE5_IMG                                      0x3005
#define GL_MAX_CLIP_PLANES_IMG                                  0x0D32
#endif

/* GL_IMG_multisampled_render_to_texture */
#ifndef GL_IMG_multisampled_render_to_texture
#define GL_RENDERBUFFER_SAMPLES_IMG                             0x9133
#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG               0x9134
#define GL_MAX_SAMPLES_IMG                                      0x9135
#define GL_TEXTURE_SAMPLES_IMG                                  0x9136
#endif

/*------------------------------------------------------------------------*
 * NV extension tokens
 *------------------------------------------------------------------------*/

/* GL_NV_fence */
#ifndef GL_NV_fence
#define GL_ALL_COMPLETED_NV                                     0x84F2
#define GL_FENCE_STATUS_NV                                      0x84F3
#define GL_FENCE_CONDITION_NV                                   0x84F4
#endif

/*------------------------------------------------------------------------*
 * QCOM extension tokens
 *------------------------------------------------------------------------*/

/* GL_QCOM_driver_control */
/* No new tokens introduced by this extension. */

/* GL_QCOM_extended_get */
#ifndef GL_QCOM_extended_get
#define GL_TEXTURE_WIDTH_QCOM                                   0x8BD2
#define GL_TEXTURE_HEIGHT_QCOM                                  0x8BD3
#define GL_TEXTURE_DEPTH_QCOM                                   0x8BD4
#define GL_TEXTURE_INTERNAL_FORMAT_QCOM                         0x8BD5
#define GL_TEXTURE_FORMAT_QCOM                                  0x8BD6
#define GL_TEXTURE_TYPE_QCOM                                    0x8BD7
#define GL_TEXTURE_IMAGE_VALID_QCOM                             0x8BD8
#define GL_TEXTURE_NUM_LEVELS_QCOM                              0x8BD9
#define GL_TEXTURE_TARGET_QCOM                                  0x8BDA
#define GL_TEXTURE_OBJECT_VALID_QCOM                            0x8BDB
#define GL_STATE_RESTORE                                        0x8BDC
#endif

/* GL_QCOM_extended_get2 */
/* No new tokens introduced by this extension. */

/* GL_QCOM_perfmon_global_mode */
#ifndef GL_QCOM_perfmon_global_mode
#define GL_PERFMON_GLOBAL_MODE_QCOM                             0x8FA0
#endif

/* GL_QCOM_writeonly_rendering */
#ifndef GL_QCOM_writeonly_rendering
#define GL_WRITEONLY_RENDERING_QCOM                             0x8823
#endif

/* GL_QCOM_tiled_rendering */
#ifndef GL_QCOM_tiled_rendering
#define GL_COLOR_BUFFER_BIT0_QCOM                               0x00000001
#define GL_COLOR_BUFFER_BIT1_QCOM                               0x00000002
#define GL_COLOR_BUFFER_BIT2_QCOM                               0x00000004
#define GL_COLOR_BUFFER_BIT3_QCOM                               0x00000008
#define GL_COLOR_BUFFER_BIT4_QCOM                               0x00000010
#define GL_COLOR_BUFFER_BIT5_QCOM                               0x00000020
#define GL_COLOR_BUFFER_BIT6_QCOM                               0x00000040
#define GL_COLOR_BUFFER_BIT7_QCOM                               0x00000080
#define GL_DEPTH_BUFFER_BIT0_QCOM                               0x00000100
#define GL_DEPTH_BUFFER_BIT1_QCOM                               0x00000200
#define GL_DEPTH_BUFFER_BIT2_QCOM                               0x00000400
#define GL_DEPTH_BUFFER_BIT3_QCOM                               0x00000800
#define GL_DEPTH_BUFFER_BIT4_QCOM                               0x00001000
#define GL_DEPTH_BUFFER_BIT5_QCOM                               0x00002000
#define GL_DEPTH_BUFFER_BIT6_QCOM                               0x00004000
#define GL_DEPTH_BUFFER_BIT7_QCOM                               0x00008000
#define GL_STENCIL_BUFFER_BIT0_QCOM                             0x00010000
#define GL_STENCIL_BUFFER_BIT1_QCOM                             0x00020000
#define GL_STENCIL_BUFFER_BIT2_QCOM                             0x00040000
#define GL_STENCIL_BUFFER_BIT3_QCOM                             0x00080000
#define GL_STENCIL_BUFFER_BIT4_QCOM                             0x00100000
#define GL_STENCIL_BUFFER_BIT5_QCOM                             0x00200000
#define GL_STENCIL_BUFFER_BIT6_QCOM                             0x00400000
#define GL_STENCIL_BUFFER_BIT7_QCOM                             0x00800000
#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM                         0x01000000
#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM                         0x02000000
#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM                         0x04000000
#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM                         0x08000000
#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM                         0x10000000
#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM                         0x20000000
#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM                         0x40000000
#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM                         0x80000000
#endif

/*------------------------------------------------------------------------*
 * End of extension tokens, start of corresponding extension functions
 *------------------------------------------------------------------------*/

/*------------------------------------------------------------------------*
 * OES extension functions
 *------------------------------------------------------------------------*/

/* GL_OES_blend_equation_separate */
#ifndef GL_OES_blend_equation_separate
#define GL_OES_blend_equation_separate 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glBlendEquationSeparateOES (GLenum modeRGB, GLenum modeAlpha);
#endif
typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEOESPROC) (GLenum modeRGB, GLenum modeAlpha);
#endif

/* GL_OES_blend_func_separate */
#ifndef GL_OES_blend_func_separate
#define GL_OES_blend_func_separate 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glBlendFuncSeparateOES (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
#endif
typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEOESPROC) (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
#endif

/* GL_OES_blend_subtract */
#ifndef GL_OES_blend_subtract
#define GL_OES_blend_subtract 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glBlendEquationOES (GLenum mode);
#endif
typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONOESPROC) (GLenum mode);
#endif

/* GL_OES_byte_coordinates */
#ifndef GL_OES_byte_coordinates
#define GL_OES_byte_coordinates 1
#endif

/* GL_OES_compressed_ETC1_RGB8_texture */
#ifndef GL_OES_compressed_ETC1_RGB8_texture
#define GL_OES_compressed_ETC1_RGB8_texture 1
#endif

/* GL_OES_depth24 */
#ifndef GL_OES_depth24
#define GL_OES_depth24 1
#endif

/* GL_OES_depth32 */
#ifndef GL_OES_depth32
#define GL_OES_depth32 1
#endif

/* GL_OES_draw_texture */
#ifndef GL_OES_draw_texture
#define GL_OES_draw_texture 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glDrawTexsOES (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
GL_API void GL_APIENTRY glDrawTexiOES (GLint x, GLint y, GLint z, GLint width, GLint height);
GL_API void GL_APIENTRY glDrawTexxOES (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
GL_API void GL_APIENTRY glDrawTexsvOES (const GLshort *coords);
GL_API void GL_APIENTRY glDrawTexivOES (const GLint *coords);
GL_API void GL_APIENTRY glDrawTexxvOES (const GLfixed *coords);
GL_API void GL_APIENTRY glDrawTexfOES (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
GL_API void GL_APIENTRY glDrawTexfvOES (const GLfloat *coords);
#endif
typedef void (GL_APIENTRYP PFNGLDRAWTEXSOESPROC) (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height);
typedef void (GL_APIENTRYP PFNGLDRAWTEXIOESPROC) (GLint x, GLint y, GLint z, GLint width, GLint height);
typedef void (GL_APIENTRYP PFNGLDRAWTEXXOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height);
typedef void (GL_APIENTRYP PFNGLDRAWTEXSVOESPROC) (const GLshort *coords);
typedef void (GL_APIENTRYP PFNGLDRAWTEXIVOESPROC) (const GLint *coords);
typedef void (GL_APIENTRYP PFNGLDRAWTEXXVOESPROC) (const GLfixed *coords);
typedef void (GL_APIENTRYP PFNGLDRAWTEXFOESPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height);
typedef void (GL_APIENTRYP PFNGLDRAWTEXFVOESPROC) (const GLfloat *coords);
#endif

/* GL_OES_EGL_image */
#ifndef GL_OES_EGL_image
#define GL_OES_EGL_image 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image);
GL_API void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image);
#endif
typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image);
typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image);
#endif

/* GL_OES_EGL_image_external */
#ifndef GL_OES_EGL_image_external
#define GL_OES_EGL_image_external 1
/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */
#endif

/* GL_OES_element_index_uint */
#ifndef GL_OES_element_index_uint
#define GL_OES_element_index_uint 1
#endif

/* GL_OES_extended_matrix_palette */
#ifndef GL_OES_extended_matrix_palette
#define GL_OES_extended_matrix_palette 1
#endif

/* GL_OES_fbo_render_mipmap */
#ifndef GL_OES_fbo_render_mipmap
#define GL_OES_fbo_render_mipmap 1
#endif

/* GL_OES_fixed_point */
#ifndef GL_OES_fixed_point
#define GL_OES_fixed_point 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glAlphaFuncxOES (GLenum func, GLclampx ref);
GL_API void GL_APIENTRY glClearColorxOES (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
GL_API void GL_APIENTRY glClearDepthxOES (GLclampx depth);
GL_API void GL_APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);
GL_API void GL_APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
GL_API void GL_APIENTRY glDepthRangexOES (GLclampx zNear, GLclampx zFar);
GL_API void GL_APIENTRY glFogxOES (GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glFogxvOES (GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glFrustumxOES (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
GL_API void GL_APIENTRY glGetClipPlanexOES (GLenum pname, GLfixed eqn[4]);
GL_API void GL_APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetLightxvOES (GLenum light, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetMaterialxvOES (GLenum face, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetTexEnvxvOES (GLenum env, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);
GL_API void GL_APIENTRY glLightModelxOES (GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glLineWidthxOES (GLfixed width);
GL_API void GL_APIENTRY glLoadMatrixxOES (const GLfixed *m);
GL_API void GL_APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glMultMatrixxOES (const GLfixed *m);
GL_API void GL_APIENTRY glMultiTexCoord4xOES (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
GL_API void GL_APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);
GL_API void GL_APIENTRY glOrthoxOES (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
GL_API void GL_APIENTRY glPointParameterxOES (GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glPointSizexOES (GLfixed size);
GL_API void GL_APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);
GL_API void GL_APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
GL_API void GL_APIENTRY glSampleCoveragexOES (GLclampx value, GLboolean invert);
GL_API void GL_APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);
GL_API void GL_APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);
#endif
typedef void (GL_APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLclampx ref);
typedef void (GL_APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha);
typedef void (GL_APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLclampx depth);
typedef void (GL_APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);
typedef void (GL_APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);
typedef void (GL_APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLclampx zNear, GLclampx zFar);
typedef void (GL_APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum pname, GLfixed eqn[4]);
typedef void (GL_APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);
typedef void (GL_APIENTRYP PFNGLGETLIGHTXVOESPROC) (GLenum light, GLenum pname, GLfixed *params);
typedef void (GL_APIENTRYP PFNGLGETMATERIALXVOESPROC) (GLenum face, GLenum pname, GLfixed *params);
typedef void (GL_APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum env, GLenum pname, GLfixed *params);
typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);
typedef void (GL_APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);
typedef void (GL_APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);
typedef void (GL_APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);
typedef void (GL_APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q);
typedef void (GL_APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);
typedef void (GL_APIENTRYP PFNGLORTHOXOESPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar);
typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXOESPROC) (GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);
typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);
typedef void (GL_APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);
typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEXOESPROC) (GLclampx value, GLboolean invert);
typedef void (GL_APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
typedef void (GL_APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);
#endif

/* GL_OES_framebuffer_object */
#ifndef GL_OES_framebuffer_object
#define GL_OES_framebuffer_object 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API GLboolean GL_APIENTRY glIsRenderbufferOES (GLuint renderbuffer);
GL_API void GL_APIENTRY glBindRenderbufferOES (GLenum target, GLuint renderbuffer);
GL_API void GL_APIENTRY glDeleteRenderbuffersOES (GLsizei n, const GLuint* renderbuffers);
GL_API void GL_APIENTRY glGenRenderbuffersOES (GLsizei n, GLuint* renderbuffers);
GL_API void GL_APIENTRY glRenderbufferStorageOES (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
GL_API void GL_APIENTRY glGetRenderbufferParameterivOES (GLenum target, GLenum pname, GLint* params);
GL_API GLboolean GL_APIENTRY glIsFramebufferOES (GLuint framebuffer);
GL_API void GL_APIENTRY glBindFramebufferOES (GLenum target, GLuint framebuffer);
GL_API void GL_APIENTRY glDeleteFramebuffersOES (GLsizei n, const GLuint* framebuffers);
GL_API void GL_APIENTRY glGenFramebuffersOES (GLsizei n, GLuint* framebuffers);
GL_API GLenum GL_APIENTRY glCheckFramebufferStatusOES (GLenum target);
GL_API void GL_APIENTRY glFramebufferRenderbufferOES (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
GL_API void GL_APIENTRY glFramebufferTexture2DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
GL_API void GL_APIENTRY glGetFramebufferAttachmentParameterivOES (GLenum target, GLenum attachment, GLenum pname, GLint* params);
GL_API void GL_APIENTRY glGenerateMipmapOES (GLenum target);
#endif
typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFEROESPROC) (GLuint renderbuffer);
typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFEROESPROC) (GLenum target, GLuint renderbuffer);
typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSOESPROC) (GLsizei n, const GLuint* renderbuffers);
typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSOESPROC) (GLsizei n, GLuint* renderbuffers);
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVOESPROC) (GLenum target, GLenum pname, GLint* params);
typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFEROESPROC) (GLuint framebuffer);
typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFEROESPROC) (GLenum target, GLuint framebuffer);
typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSOESPROC) (GLsizei n, const GLuint* framebuffers);
typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSOESPROC) (GLsizei n, GLuint* framebuffers);
typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSOESPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEROESPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params);
typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPOESPROC) (GLenum target);
#endif

/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_OES_mapbuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
GL_API GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
GL_API void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid ** params);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid ** params);
#endif

/* GL_OES_matrix_get */
#ifndef GL_OES_matrix_get
#define GL_OES_matrix_get 1
#endif

/* GL_OES_matrix_palette */
#ifndef GL_OES_matrix_palette
#define GL_OES_matrix_palette 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glCurrentPaletteMatrixOES (GLuint matrixpaletteindex);
GL_API void GL_APIENTRY glLoadPaletteFromModelViewMatrixOES (void);
GL_API void GL_APIENTRY glMatrixIndexPointerOES (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
GL_API void GL_APIENTRY glWeightPointerOES (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
#endif
typedef void (GL_APIENTRYP PFNGLCURRENTPALETTEMATRIXOESPROC) (GLuint matrixpaletteindex);
typedef void (GL_APIENTRYP PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC) (void);
typedef void (GL_APIENTRYP PFNGLMATRIXINDEXPOINTEROESPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
typedef void (GL_APIENTRYP PFNGLWEIGHTPOINTEROESPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
#endif

/* GL_OES_packed_depth_stencil */
#ifndef GL_OES_packed_depth_stencil
#define GL_OES_packed_depth_stencil 1
#endif

/* GL_OES_required_internalformat */
#ifndef GL_OES_required_internalformat
#define GL_OES_required_internalformat 1
#endif

/* GL_OES_query_matrix */
#ifndef GL_OES_query_matrix
#define GL_OES_query_matrix 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API GLbitfield GL_APIENTRY glQueryMatrixxOES (GLfixed mantissa[16], GLint exponent[16]);
#endif
typedef GLbitfield (GL_APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed mantissa[16], GLint exponent[16]);
#endif

/* GL_OES_rgb8_rgba8 */
#ifndef GL_OES_rgb8_rgba8
#define GL_OES_rgb8_rgba8 1
#endif

/* GL_OES_single_precision */
#ifndef GL_OES_single_precision
#define GL_OES_single_precision 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glDepthRangefOES (GLclampf zNear, GLclampf zFar);
GL_API void GL_APIENTRY glFrustumfOES (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
GL_API void GL_APIENTRY glOrthofOES (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
GL_API void GL_APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);
GL_API void GL_APIENTRY glGetClipPlanefOES (GLenum pname, GLfloat eqn[4]);
GL_API void GL_APIENTRY glClearDepthfOES (GLclampf depth);
#endif
typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf zNear, GLclampf zFar);
typedef void (GL_APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
typedef void (GL_APIENTRYP PFNGLORTHOFOESPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);
typedef void (GL_APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);
typedef void (GL_APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum pname, GLfloat eqn[4]);
typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);
#endif

/* GL_OES_stencil1 */
#ifndef GL_OES_stencil1
#define GL_OES_stencil1 1
#endif

/* GL_OES_stencil4 */
#ifndef GL_OES_stencil4
#define GL_OES_stencil4 1
#endif

/* GL_OES_stencil8 */
#ifndef GL_OES_stencil8
#define GL_OES_stencil8 1
#endif

/* GL_OES_stencil_wrap */
#ifndef GL_OES_stencil_wrap
#define GL_OES_stencil_wrap 1
#endif

/* GL_OES_texture_cube_map */
#ifndef GL_OES_texture_cube_map
#define GL_OES_texture_cube_map 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glTexGenfOES (GLenum coord, GLenum pname, GLfloat param);
GL_API void GL_APIENTRY glTexGenfvOES (GLenum coord, GLenum pname, const GLfloat *params);
GL_API void GL_APIENTRY glTexGeniOES (GLenum coord, GLenum pname, GLint param);
GL_API void GL_APIENTRY glTexGenivOES (GLenum coord, GLenum pname, const GLint *params);
GL_API void GL_APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);
GL_API void GL_APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);
GL_API void GL_APIENTRY glGetTexGenfvOES (GLenum coord, GLenum pname, GLfloat *params);
GL_API void GL_APIENTRY glGetTexGenivOES (GLenum coord, GLenum pname, GLint *params);
GL_API void GL_APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);
#endif
typedef void (GL_APIENTRYP PFNGLTEXGENFOESPROC) (GLenum coord, GLenum pname, GLfloat param);
typedef void (GL_APIENTRYP PFNGLTEXGENFVOESPROC) (GLenum coord, GLenum pname, const GLfloat *params);
typedef void (GL_APIENTRYP PFNGLTEXGENIOESPROC) (GLenum coord, GLenum pname, GLint param);
typedef void (GL_APIENTRYP PFNGLTEXGENIVOESPROC) (GLenum coord, GLenum pname, const GLint *params);
typedef void (GL_APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);
typedef void (GL_APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);
typedef void (GL_APIENTRYP PFNGLGETTEXGENFVOESPROC) (GLenum coord, GLenum pname, GLfloat *params);
typedef void (GL_APIENTRYP PFNGLGETTEXGENIVOESPROC) (GLenum coord, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);
#endif

/* GL_OES_texture_env_crossbar */
#ifndef GL_OES_texture_env_crossbar
#define GL_OES_texture_env_crossbar 1
#endif

/* GL_OES_texture_mirrored_repeat */
#ifndef GL_OES_texture_mirrored_repeat
#define GL_OES_texture_mirrored_repeat 1
#endif

/* GL_OES_vertex_array_object */
#ifndef GL_OES_vertex_array_object
#define GL_OES_vertex_array_object 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glBindVertexArrayOES (GLuint array);
GL_API void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays);
GL_API void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays);
GL_API GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array);
#endif
typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array);
typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays);
typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays);
typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array);
#endif

/*------------------------------------------------------------------------*
 * AMD extension functions
 *------------------------------------------------------------------------*/

/* GL_AMD_compressed_3DC_texture */
#ifndef GL_AMD_compressed_3DC_texture
#define GL_AMD_compressed_3DC_texture 1
#endif

/* GL_AMD_compressed_ATC_texture */
#ifndef GL_AMD_compressed_ATC_texture
#define GL_AMD_compressed_ATC_texture 1
#endif

/*------------------------------------------------------------------------*
 * APPLE extension functions
 *------------------------------------------------------------------------*/

/* GL_APPLE_copy_texture_levels */
#ifndef GL_APPLE_copy_texture_levels
#define GL_APPLE_copy_texture_levels 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
#endif
typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount);
#endif

/* GL_APPLE_framebuffer_multisample */
#ifndef GL_APPLE_framebuffer_multisample
#define GL_APPLE_framebuffer_multisample 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
GL_API void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void);
#endif /* GL_GLEXT_PROTOTYPES */
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void);
#endif

/* GL_APPLE_sync */
#ifndef GL_APPLE_sync
#define GL_APPLE_sync 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags);
GL_API GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync);
GL_API void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync);
GL_API GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
GL_API void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout);
GL_API void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params);
GL_API void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
#endif
typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags);
typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync);
typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync);
typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params);
typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
#endif

/* GL_APPLE_texture_2D_limited_npot */
#ifndef GL_APPLE_texture_2D_limited_npot
#define GL_APPLE_texture_2D_limited_npot 1
#endif

/* GL_APPLE_texture_format_BGRA8888 */
#ifndef GL_APPLE_texture_format_BGRA8888
#define GL_APPLE_texture_format_BGRA8888 1
#endif

/* GL_APPLE_texture_max_level */
#ifndef GL_APPLE_texture_max_level
#define GL_APPLE_texture_max_level 1
#endif

/*------------------------------------------------------------------------*
 * ARM extension functions
 *------------------------------------------------------------------------*/

/* GL_ARM_rgba8 */
#ifndef GL_ARM_rgba8
#define GL_ARM_rgba8 1
#endif

/*------------------------------------------------------------------------*
 * EXT extension functions
 *------------------------------------------------------------------------*/

/* GL_EXT_blend_minmax */
#ifndef GL_EXT_blend_minmax
#define GL_EXT_blend_minmax 1
#endif

/* GL_EXT_discard_framebuffer */
#ifndef GL_EXT_discard_framebuffer
#define GL_EXT_discard_framebuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments);
#endif
typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);
#endif

/* GL_EXT_map_buffer_range */
#ifndef GL_EXT_map_buffer_range
#define GL_EXT_map_buffer_range 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY *glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
GL_API void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
#endif

/* GL_EXT_multisampled_render_to_texture */
#ifndef GL_EXT_multisampled_render_to_texture
#define GL_EXT_multisampled_render_to_texture 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
GL_API void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
#endif
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
#endif

/* GL_EXT_multi_draw_arrays */
#ifndef GL_EXT_multi_draw_arrays
#define GL_EXT_multi_draw_arrays 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);
GL_API void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
#endif /* GL_GLEXT_PROTOTYPES */
typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
#endif

/* GL_EXT_read_format_bgra */
#ifndef GL_EXT_read_format_bgra
#define GL_EXT_read_format_bgra 1
#endif

/* GL_EXT_robustness */
#ifndef GL_EXT_robustness
#define GL_EXT_robustness 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void);
GL_API void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
GL_API void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params);
GL_API void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params);
#endif
typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void);
typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params);
typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);
#endif

/* GL_EXT_sRGB */
#ifndef GL_EXT_sRGB
#define GL_EXT_sRGB 1
#endif

/* GL_EXT_texture_compression_dxt1 */
#ifndef GL_EXT_texture_compression_dxt1
#define GL_EXT_texture_compression_dxt1 1
#endif

/* GL_EXT_texture_filter_anisotropic */
#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1
#endif

/* GL_EXT_texture_format_BGRA8888 */
#ifndef GL_EXT_texture_format_BGRA8888
#define GL_EXT_texture_format_BGRA8888 1
#endif

/* GL_EXT_texture_lod_bias */
#ifndef GL_EXT_texture_lod_bias
#define GL_EXT_texture_lod_bias 1
#endif

/* GL_EXT_texture_storage */
#ifndef GL_EXT_texture_storage
#define GL_EXT_texture_storage 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
GL_API void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_API void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
GL_API void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
GL_API void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
GL_API void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
#endif
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
#endif

/*------------------------------------------------------------------------*
 * IMG extension functions
 *------------------------------------------------------------------------*/

/* GL_IMG_read_format */
#ifndef GL_IMG_read_format
#define GL_IMG_read_format 1
#endif

/* GL_IMG_texture_compression_pvrtc */
#ifndef GL_IMG_texture_compression_pvrtc
#define GL_IMG_texture_compression_pvrtc 1
#endif

/* GL_IMG_texture_env_enhanced_fixed_function */
#ifndef GL_IMG_texture_env_enhanced_fixed_function
#define GL_IMG_texture_env_enhanced_fixed_function 1
#endif

/* GL_IMG_user_clip_plane */
#ifndef GL_IMG_user_clip_plane
#define GL_IMG_user_clip_plane 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glClipPlanefIMG (GLenum, const GLfloat *);
GL_API void GL_APIENTRY glClipPlanexIMG (GLenum, const GLfixed *);
#endif
typedef void (GL_APIENTRYP PFNGLCLIPPLANEFIMGPROC) (GLenum p, const GLfloat *eqn);
typedef void (GL_APIENTRYP PFNGLCLIPPLANEXIMGPROC) (GLenum p, const GLfixed *eqn);
#endif

/* GL_IMG_multisampled_render_to_texture */
#ifndef GL_IMG_multisampled_render_to_texture
#define GL_IMG_multisampled_render_to_texture 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
GL_API void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei);
#endif
typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
#endif

/*------------------------------------------------------------------------*
 * NV extension functions
 *------------------------------------------------------------------------*/

/* NV_fence */
#ifndef GL_NV_fence
#define GL_NV_fence 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
GL_API void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *);
GL_API GLboolean GL_APIENTRY glIsFenceNV (GLuint);
GL_API GLboolean GL_APIENTRY glTestFenceNV (GLuint);
GL_API void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
GL_API void GL_APIENTRY glFinishFenceNV (GLuint);
GL_API void GL_APIENTRY glSetFenceNV (GLuint, GLenum);
#endif
typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);
typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);
typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);
typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
#endif

/*------------------------------------------------------------------------*
 * QCOM extension functions
 *------------------------------------------------------------------------*/

/* GL_QCOM_driver_control */
#ifndef GL_QCOM_driver_control
#define GL_QCOM_driver_control 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls);
GL_API void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
GL_API void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl);
GL_API void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl);
#endif
typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls);
typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl);
#endif

/* GL_QCOM_extended_get */
#ifndef GL_QCOM_extended_get
#define GL_QCOM_extended_get 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures);
GL_API void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
GL_API void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
GL_API void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
GL_API void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
GL_API void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param);
GL_API void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels);
GL_API void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params);
#endif
typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures);
typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers);
typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers);
typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params);
typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param);
typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels);
typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params);
#endif

/* GL_QCOM_extended_get2 */
#ifndef GL_QCOM_extended_get2
#define GL_QCOM_extended_get2 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders);
GL_API void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
GL_API GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program);
GL_API void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
#endif
typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders);
typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms);
typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program);
typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length);
#endif

/* GL_QCOM_perfmon_global_mode */
#ifndef GL_QCOM_perfmon_global_mode
#define GL_QCOM_perfmon_global_mode 1
#endif

/* GL_QCOM_writeonly_rendering */
#ifndef GL_QCOM_writeonly_rendering
#define GL_QCOM_writeonly_rendering 1
#endif

/* GL_QCOM_tiled_rendering */
#ifndef GL_QCOM_tiled_rendering
#define GL_QCOM_tiled_rendering 1
#ifdef GL_GLEXT_PROTOTYPES
GL_API void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
GL_API void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask);
#endif
typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask);
#endif

#ifdef __cplusplus
}
#endif

#endif /* __glext_h_ */

Added jni/glshim/include/GLES/glplatform.h.




























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef __glplatform_h_
#define __glplatform_h_

/* $Revision: 10601 $ on $Date:: 2010-03-04 22:15:27 -0800 #$ */

/*
 * This document is licensed under the SGI Free Software B License Version
 * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ .
 */

/* Platform-specific types and definitions for OpenGL ES 1.X  gl.h
 *
 * Adopters may modify khrplatform.h and this file to suit their platform.
 * You are encouraged to submit all modifications to the Khronos group so that
 * they can be included in future versions of this file.  Please submit changes
 * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla)
 * by filing a bug against product "OpenGL-ES" component "Registry".
 */

#include <KHR/khrplatform.h>

#ifndef GL_API
#define GL_API      KHRONOS_APICALL
#endif

#ifndef GL_APIENTRY
#define GL_APIENTRY KHRONOS_APIENTRY
#endif

#endif /* __glplatform_h_ */
Added jni/glshim/include/KHR/khrplatform.h.


























































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
#ifndef __khrplatform_h_
#define __khrplatform_h_

/*
** Copyright (c) 2008-2009 The Khronos Group Inc.
**
** Permission is hereby granted, free of charge, to any person obtaining a
** copy of this software and/or associated documentation files (the
** "Materials"), to deal in the Materials without restriction, including
** without limitation the rights to use, copy, modify, merge, publish,
** distribute, sublicense, and/or sell copies of the Materials, and to
** permit persons to whom the Materials are furnished to do so, subject to
** the following conditions:
**
** The above copyright notice and this permission notice shall be included
** in all copies or substantial portions of the Materials.
**
** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
*/

/* Khronos platform-specific types and definitions.
 *
 * $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $
 *
 * Adopters may modify this file to suit their platform. Adopters are
 * encouraged to submit platform specific modifications to the Khronos
 * group so that they can be included in future versions of this file.
 * Please submit changes by sending them to the public Khronos Bugzilla
 * (http://khronos.org/bugzilla) by filing a bug against product
 * "Khronos (general)" component "Registry".
 *
 * A predefined template which fills in some of the bug fields can be
 * reached using http://tinyurl.com/khrplatform-h-bugreport, but you
 * must create a Bugzilla login first.
 *
 *
 * See the Implementer's Guidelines for information about where this file
 * should be located on your system and for more details of its use:
 *    http://www.khronos.org/registry/implementers_guide.pdf
 *
 * This file should be included as
 *        #include <KHR/khrplatform.h>
 * by Khronos client API header files that use its types and defines.
 *
 * The types in khrplatform.h should only be used to define API-specific types.
 *
 * Types defined in khrplatform.h:
 *    khronos_int8_t              signed   8  bit
 *    khronos_uint8_t             unsigned 8  bit
 *    khronos_int16_t             signed   16 bit
 *    khronos_uint16_t            unsigned 16 bit
 *    khronos_int32_t             signed   32 bit
 *    khronos_uint32_t            unsigned 32 bit
 *    khronos_int64_t             signed   64 bit
 *    khronos_uint64_t            unsigned 64 bit
 *    khronos_intptr_t            signed   same number of bits as a pointer
 *    khronos_uintptr_t           unsigned same number of bits as a pointer
 *    khronos_ssize_t             signed   size
 *    khronos_usize_t             unsigned size
 *    khronos_float_t             signed   32 bit floating point
 *    khronos_time_ns_t           unsigned 64 bit time in nanoseconds
 *    khronos_utime_nanoseconds_t unsigned time interval or absolute time in
 *                                         nanoseconds
 *    khronos_stime_nanoseconds_t signed time interval in nanoseconds
 *    khronos_boolean_enum_t      enumerated boolean type. This should
 *      only be used as a base type when a client API's boolean type is
 *      an enum. Client APIs which use an integer or other type for
 *      booleans cannot use this as the base type for their boolean.
 *
 * Tokens defined in khrplatform.h:
 *
 *    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
 *
 *    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
 *    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
 *
 * Calling convention macros defined in this file:
 *    KHRONOS_APICALL
 *    KHRONOS_APIENTRY
 *    KHRONOS_APIATTRIBUTES
 *
 * These may be used in function prototypes as:
 *
 *      KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
 *                                  int arg1,
 *                                  int arg2) KHRONOS_APIATTRIBUTES;
 */

/*-------------------------------------------------------------------------
 * Definition of KHRONOS_APICALL
 *-------------------------------------------------------------------------
 * This precedes the return type of the function in the function prototype.
 */
#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
#   define KHRONOS_APICALL __declspec(dllimport)
#elif defined (__SYMBIAN32__)
#   define KHRONOS_APICALL IMPORT_C
#else
#   define KHRONOS_APICALL
#endif

/*-------------------------------------------------------------------------
 * Definition of KHRONOS_APIENTRY
 *-------------------------------------------------------------------------
 * This follows the return type of the function  and precedes the function
 * name in the function prototype.
 */
#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
    /* Win32 but not WinCE */
#   define KHRONOS_APIENTRY __stdcall
#else
#   define KHRONOS_APIENTRY
#endif

/*-------------------------------------------------------------------------
 * Definition of KHRONOS_APIATTRIBUTES
 *-------------------------------------------------------------------------
 * This follows the closing parenthesis of the function prototype arguments.
 */
#if defined (__ARMCC_2__)
#define KHRONOS_APIATTRIBUTES __softfp
#else
#define KHRONOS_APIATTRIBUTES
#endif

/*-------------------------------------------------------------------------
 * basic type definitions
 *-----------------------------------------------------------------------*/
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)


/*
 * Using <stdint.h>
 */
#include <stdint.h>
typedef int32_t                 khronos_int32_t;
typedef uint32_t                khronos_uint32_t;
typedef int64_t                 khronos_int64_t;
typedef uint64_t                khronos_uint64_t;
#define KHRONOS_SUPPORT_INT64   1
#define KHRONOS_SUPPORT_FLOAT   1

#elif defined(__VMS ) || defined(__sgi)

/*
 * Using <inttypes.h>
 */
#include <inttypes.h>
typedef int32_t                 khronos_int32_t;
typedef uint32_t                khronos_uint32_t;
typedef int64_t                 khronos_int64_t;
typedef uint64_t                khronos_uint64_t;
#define KHRONOS_SUPPORT_INT64   1
#define KHRONOS_SUPPORT_FLOAT   1

#elif defined(_WIN32) && !defined(__SCITECH_SNAP__)

/*
 * Win32
 */
typedef __int32                 khronos_int32_t;
typedef unsigned __int32        khronos_uint32_t;
typedef __int64                 khronos_int64_t;
typedef unsigned __int64        khronos_uint64_t;
#define KHRONOS_SUPPORT_INT64   1
#define KHRONOS_SUPPORT_FLOAT   1

#elif defined(__sun__) || defined(__digital__)

/*
 * Sun or Digital
 */
typedef int                     khronos_int32_t;
typedef unsigned int            khronos_uint32_t;
#if defined(__arch64__) || defined(_LP64)
typedef long int                khronos_int64_t;
typedef unsigned long int       khronos_uint64_t;
#else
typedef long long int           khronos_int64_t;
typedef unsigned long long int  khronos_uint64_t;
#endif /* __arch64__ */
#define KHRONOS_SUPPORT_INT64   1
#define KHRONOS_SUPPORT_FLOAT   1

#elif 0

/*
 * Hypothetical platform with no float or int64 support
 */
typedef int                     khronos_int32_t;
typedef unsigned int            khronos_uint32_t;
#define KHRONOS_SUPPORT_INT64   0
#define KHRONOS_SUPPORT_FLOAT   0

#else

/*
 * Generic fallback
 */
#include <stdint.h>
typedef int32_t                 khronos_int32_t;
typedef uint32_t                khronos_uint32_t;
typedef int64_t                 khronos_int64_t;
typedef uint64_t                khronos_uint64_t;
#define KHRONOS_SUPPORT_INT64   1
#define KHRONOS_SUPPORT_FLOAT   1

#endif


/*
 * Types that are (so far) the same on all platforms
 */
typedef signed   char          khronos_int8_t;
typedef unsigned char          khronos_uint8_t;
typedef signed   short int     khronos_int16_t;
typedef unsigned short int     khronos_uint16_t;
typedef signed   long  int     khronos_intptr_t;
typedef unsigned long  int     khronos_uintptr_t;
typedef signed   long  int     khronos_ssize_t;
typedef unsigned long  int     khronos_usize_t;

#if KHRONOS_SUPPORT_FLOAT
/*
 * Float type
 */
typedef          float         khronos_float_t;
#endif

#if KHRONOS_SUPPORT_INT64
/* Time types
 *
 * These types can be used to represent a time interval in nanoseconds or
 * an absolute Unadjusted System Time.  Unadjusted System Time is the number
 * of nanoseconds since some arbitrary system event (e.g. since the last
 * time the system booted).  The Unadjusted System Time is an unsigned
 * 64 bit value that wraps back to 0 every 584 years.  Time intervals
 * may be either signed or unsigned.
 */
typedef khronos_uint64_t       khronos_utime_nanoseconds_t;
typedef khronos_int64_t        khronos_stime_nanoseconds_t;
#endif

/*
 * Dummy value used to pad enum types to 32 bits.
 */
#ifndef KHRONOS_MAX_ENUM
#define KHRONOS_MAX_ENUM 0x7FFFFFFF
#endif

/*
 * Enumerated boolean type
 *
 * Values other than zero should be considered to be true.  Therefore
 * comparisons should not be made against KHRONOS_TRUE.
 */
typedef enum {
    KHRONOS_FALSE = 0,
    KHRONOS_TRUE  = 1,
    KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
} khronos_boolean_enum_t;

#endif /* __khrplatform_h_ */
Added jni/glshim/spec/build.






































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash -ux
cd "$(dirname "$0")"

base=../src/
gles="yml/gles-1.1.yml,yml/oes.yml"
gles2="yml/gles-2.0.yml"
opengl="yml/opengl.yml"
cats="VERSION_1_0,VERSION_1_1,VERSION_1_2,VERSION_1_3,VERSION_1_4,VERSION_1_5,EXT_swap_control"

./gen.py "$gles" mock.c.j2 mock.c mock.h > "$base/../test/util/mock.c" &
./gen.py "$gles" --ifndef USE_ES2 mock.h.j2 mock.h "gl_str.h" "wrap/gles.h" > "$base/../test/util/mock.h"

./gen.py "$gles" --ifndef USE_ES2 gleswrap.c.j2 gleswrap.c gles.h ../loader.h ../skip.h > "$base/gl/wrap/gles.c" &
./gen.py --deep "$opengl,$gles" --ifndef USE_ES2 glwrap.h.j2 gleswrap.h ../types.h > "$base/gl/wrap/gles.h"

./gen.py "$gles2" --ifdef USE_ES2 gleswrap.c.j2 gles2wrap.c gles2.h ../loader.h > "$base/gl/wrap/gles2.c"
./gen.py "$gles2" --ifdef USE_ES2 glwrap.h.j2 gles2wrap.h > "$base/gl/wrap/gles2.h"

rm -rf "$base/../test/build"
Added jni/glshim/spec/gen.py.






































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/usr/bin/env python

import argparse
import jinja2
import re
from yaml import load

split_re = re.compile(r'^(?P<type>.*?)\s*(?P<name>\w+)$')
env = jinja2.Environment(
    trim_blocks=True,
    loader=jinja2.FileSystemLoader('template'),
)

def args(args, add_type=True):
    return ', '.join(
        '{} {}'.format(arg['type'], arg['name']) if add_type else arg['name']
        for arg in args
    )

f = '0.2f'
printf_lookup = {
    'GLbitfield':    'd',
    'GLboolean':     'd',
    'GLbyte':        'c',
    'GLubyte':       'c',
    'GLchar':        'c',
    'GLdouble':      '0.2f',
    'GLenum':        '0x%04X',
    'GLfloat':       '0.2f',
    'GLint':         'd',
    'GLintptr':      'd',
    'GLintptrARB':   'd',
    'GLshort':       'd',
    'GLsizei':       'd',
    'GLsizeiptr':    'd',
    'GLsizeiptrARB': 'd',
    'GLuint':        'u',
    'GLushort':      'u',
    'GLvoid':        'p',
}

def printf(args):
    if isinstance(args, dict):
        args = (args,)

    types = []
    for arg in args:
        typ = arg['type']
        if '*' in typ:
            t = 'p'
        else:
            t = printf_lookup.get(typ, 'p')
        if not '%' in t:
            t = '%' + t
        types.append(t)

    return ', '.join(types)

def unconst(s):
    split = s.split(' ')
    while 'const' in split:
        split.remove('const')
    return ' '.join(split)

env.filters['args'] = args
env.filters['printf'] = printf
env.filters['unconst'] = unconst

def split_arg(arg):
    match = split_re.match(arg)
    if match:
        return match.groupdict()
    else:
        return {'type': 'unknown', 'name': arg}

def gen(files, template, guard_name, headers,
        deep=False, cats=(), ifdef=None, ifndef=None):
    funcs = {}
    formats = []
    unique_formats = set()
    for data in files:
        if deep and not isinstance(data.values()[0], list):
            functions = []
            for cat, f in data.items():
                if not cats or cat in cats:
                    functions.extend(f.items())
        else:
            functions = data.items()

        for name, args in sorted(functions):
            props = {}
            if args:
                ret = args.pop(0)
            else:
                ret = 'void'

            args = [split_arg(arg) for arg in args if not arg == 'void']
            if any(arg.get('type') == 'unknown' for arg in args):
                continue

            if args:
                args[0]['first'] = True
                args[-1]['last'] = True

            for i, arg in enumerate(args):
                arg['index'] = i

            types = '_'.join(
                arg['type'].replace(' ', '_').replace('*', '__GENPT__')
                for arg in [{'type': ret}] + args)

            props.update({
                'return': ret,
                'name': name,
                'args': args,
                'types': types,
                'void': ret == 'void',
            })
            if not types in unique_formats:
                unique_formats.add(types)
                formats.append(props)

            funcs[name] = props

    context = {
        'functions': [i[1] for i in sorted(funcs.items())],
        'formats': formats,
        'headers': headers,
        'name': guard_name,
        'ifdef': ifdef,
        'ifndef': ifndef,
    }

    t = env.get_template(template)
    return t.render(**context).rstrip('\n')

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Generate code with yml/jinja.')
    parser.add_argument('yaml', help='spec files')
    parser.add_argument('template', help='jinja template to load')
    parser.add_argument('name', help='header guard name')
    parser.add_argument('headers', nargs='*', help='headers to include')
    parser.add_argument('--deep', help='nested definitions', action='store_true')
    parser.add_argument('--cats', help='deep category filter')
    parser.add_argument('--ifdef', help='wrap with ifdef')
    parser.add_argument('--ifndef', help='wrap with ifndef')

    args = parser.parse_args()

    files = []
    for name in args.yaml.split(','):
        with open(name) as f:
            data = load(f)
            if data:
                files.append(data)

    if args.cats:
        cats = args.cats.split(',')
    else:
        cats = None
    print gen(files, args.template, args.name,
              args.headers, args.deep, cats,
              args.ifdef, args.ifndef)
Added jni/glshim/spec/requirements.txt.




>
>
1
2
jinja2
pyyaml
Added jni/glshim/spec/template/base/base.j2.














>
>
>
>
>
>
>
1
2
3
4
5
6
7
{% if ifdef %}#ifdef {{ ifdef }}
{% endif %}
{% if ifndef %}#ifndef {{ ifndef }}
{% endif %}
{% block main %}{% endblock %}
{% if ifdef %}#endif{% endif %}
{% if ifndef %}#endif{% endif %}
Added jni/glshim/spec/template/base/fprint.j2.










>
>
>
>
>
1
2
3
4
5
{% if func.args %}
    printf("{{ func.name }}({{ func.args|printf }});\n", {{ func.args|args(0) }});
{% else %}
    printf("{{ func.name }}();\n");
{% endif %}
Added jni/glshim/spec/template/base/header.j2.




















>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
{% extends "base/base.j2" %}
{% block main %}
{% include "base/headers.j2" %}

{% set guard = name.upper().replace('.', '_') -%}
#ifndef {{ guard }}
#define {{ guard }}
{% block content %}{% endblock %}
#endif
{% endblock %}
Added jni/glshim/spec/template/base/headers.j2.














>
>
>
>
>
>
>
1
2
3
4
5
6
7
{% for header in headers %}
{% if "<" in header %}
#include {{ header }}
{% else %}
#include "{{ header }}"
{% endif %}
{% endfor %}
Added jni/glshim/spec/template/base/indexed_call.j2.












































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void glIndexedCall(const indexed_call_t *packed, void *ret_v) {
    switch (packed->func) {
        {% for f in functions %}
        #ifndef skip_index_{{ f.name }}
        case {{ f.name }}_INDEX: {
            INDEXED_{{ f.types }} *unpacked = (INDEXED_{{ f.types }} *)packed;
            {% if f.args %}
            ARGS_{{ f.types }} args = unpacked->args;
            {% endif %}
            {% if not f.void %}
            {{ f.return }} *ret = ({{ f.return }} *)ret_v;
            *ret =
            {% endif %}
            {{ f.name }}({% for arg in f.args -%}
                args.a{{ loop.index }}{% if not arg.last %}, {% endif %}
            {% endfor %});
            break;
        }
        #endif
        {% endfor %}
    }
}
Added jni/glshim/spec/template/base/packed_call.j2.
































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void glPackedCall(const packed_call_t *packed) {
    switch (packed->format) {
        {% for f in formats %}
        case FORMAT_{{ f.types }}: {
            PACKED_{{ f.types }} *unpacked = (PACKED_{{ f.types }} *)packed;
            {% if f.args %}
            ARGS_{{ f.types }} args = unpacked->args;
            {% endif %}
            unpacked->func({% for arg in f.args -%}
                args.a{{ loop.index }}{% if not arg.last %}, {% endif %}
            {% endfor %});
            break;
        }
        {% endfor %}
    }
}
Added jni/glshim/spec/template/base/wrap.c.j2.
































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{% extends "base/base.j2" %}
{% block main %}
{% block headers %}
{% include "base/headers.j2" %}
{% endblock %}
{% for func in functions %}
{% block definition scoped %}
{{ func.return }} {% block func_prefix %}{% endblock %}{{ func.name }}({{ func.args|args }}) {
    {% block load scoped %}{% endblock %}
    {% block call scoped %}
    {% if not func.void %}return {% endif %}{% block prefix %}wrap{% endblock %}_{{ func.name }}({{ func.args|args(0) }});
    {%- endblock %}
}
{% endblock %}
{% endfor %}
{% endblock %}
Added jni/glshim/spec/template/base/wrap.h.j2.












































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
{% extends "base/header.j2" %}
{% block content %}

enum FORMAT {
{% for f in formats %}
    FORMAT_{{ f.types }},
{% endfor %}
};

{% for f in formats %}
typedef {{ f.return }} (*FUNC_{{ f.types }})({{ f.args|args }});
{% if f.args %}
typedef struct {
    {% for arg in f.args %}
    {{ arg.type|unconst }} a{{ loop.index }}{% if arg.type == 'GLdouble' %} __attribute__ ((aligned(8))){% endif %};
    {% endfor %}
} ARGS_{{ f.types }};
{% endif %}
typedef struct {
    int format;
    FUNC_{{ f.types }} func;
    int refs;
    {% if f.args %}
    ARGS_{{ f.types }} args;
    {% endif %}
} PACKED_{{ f.types }};
typedef struct {
    int func;
    {% if f.args %}
    ARGS_{{ f.types }} args;
    {% endif %}
} INDEXED_{{ f.types }};
{% endfor %}

extern void glPushCall(void *data);
void glPackedCall(const packed_call_t *packed);
void glIndexedCall(const indexed_call_t *packed, void *ret_v);

{% for func in functions %}
#define {{ func.name }}_INDEX {{ loop.index }}
#define {{ func.name }}_RETURN {{ func.return }}
#define {{ func.name }}_ARG_NAMES {{ func.args|args(0) }}
#define {{ func.name }}_ARG_EXPAND {{ func.args|args }}
#define {{ func.name }}_PACKED PACKED_{{ func.types }}
#define {{ func.name }}_INDEXED INDEXED_{{ func.types }}
#define {{ func.name }}_FORMAT FORMAT_{{ func.types }}
{% endfor %}

{% for func in functions %}
{{ func.return }} {{ func.name }}({{ func.name }}_ARG_EXPAND);
typedef {{ func.return }} (*{{ func.name }}_PTR)({{ func.name }}_ARG_EXPAND);
{% endfor %}

{% endblock %}
Added jni/glshim/spec/template/gleswrap.c.j2.










































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{% extends "base/wrap.c.j2" %}
{% block headers %}
{{ super() }}
{% include "base/packed_call.j2" %}

{% endblock %}
{% block definition %}
#ifndef skip_{{ func.name }}
{{ super() -}}
#endif
{% endblock %}
{% block load %}
    LOAD_GLES({{ func.name }});
{% endblock %}
{% block call %}
#ifndef direct_{{ func.name }}
    PUSH_IF_COMPILING({{ func.name }});
#endif
    {{ super() }}
{% endblock %}
{% block prefix %}gles{% endblock %}
Added jni/glshim/spec/template/glwrap.h.j2.










































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{% extends "base/wrap.h.j2" %}
{% block content %}
{{ super() }}

{% for func in functions %}
#ifndef direct_{{ func.name }}
#define push_{{ func.name }}({{ func.args|args(0) }}) { \
    {{ func.name }}_PACKED *packed_data = malloc(sizeof({{ func.name }}_PACKED)); \
    packed_data->format = {{ func.name }}_FORMAT; \
    packed_data->func = {{ func.name }}; \
    packed_data->refs = 0; \
    {% if func.args %}
    {% for arg in func.args %}
    packed_data->args.a{{ loop.index }} = ({{ arg.type|unconst }}){{ arg.name }}; \
    {% endfor %}
    {% endif %}
    glPushCall((void *)packed_data); \
}
#endif
{% endfor %}
{% endblock %}
Added jni/glshim/spec/template/mock.c.j2.






































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{% extends "base/wrap.c.j2" %}
{% block headers %}
{{ super() }}
#include <stdio.h>
#include "tack.h"

static tack_t mock = {0};

const char *mock_name(int func) {
    switch (func) {
        {% for f in functions %}
        case {{ f.name }}_INDEX: return "{{ f.name }}";
        {% endfor %}
    }
}

void mock_print(const indexed_call_t *packed) {
    if (packed == NULL) {
        printf("NULL()\n");
        return;
    }
    switch (packed->func) {
        {% for f in functions %}
        case {{ f.name }}_INDEX: {
            INDEXED_{{ f.types }} *unpacked = (INDEXED_{{ f.types }} *)packed;
            {% if f.args %}
            ARGS_{{ f.types }} args = unpacked->args;
            {% endif %}
            printf("{{ f.name }}({{ f.args|printf }});\n"
            {%- for arg in f.args %}, args.a{{ loop.index }}{% endfor -%});
            break;
        }
        {% endfor %}
    }
}

void *mock_get(int idx) {
    return tack_get(&mock, idx);
}

void *mock_peek() {
    return tack_peek(&mock);
}

void *mock_cur() {
    return tack_cur(&mock);
}

void *mock_shift() {
    return tack_shift(&mock);
}

void *mock_slide(int func) {
    if (mock.pos >= mock.len) {
        return NULL;
    }
    indexed_call_t **stack = (indexed_call_t **)mock.data;
    for (int i = mock.pos; i < mock.len; i++) {
        if (stack[i]->func == func) {
            mock.pos = i + 1;
            return stack[i];
        }
    }
    return NULL;
}

void mock_push(void *call) {
    tack_push(&mock, call);
}

void *mock_pop() {
    return tack_pop(&mock);
}

{% endblock %}

{% block func_prefix %}gles_{% endblock %}
{% block call %}
    emit_{{ func.name }}({{ func.args|args(0) }});
    {% if not func.void %}
    return ({{ func.return }})0;
    {% endif %}
{% endblock %}
Added jni/glshim/spec/template/mock.h.j2.








































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{% extends "base/header.j2" %}
{% block main %}
#ifdef __cplusplus
extern "C" {
#endif
{{ super() }}
#ifdef __cplusplus
} // extern "C"
#endif
{% endblock %}

{% block content %}
{{ super() }}
const char *mock_name(int func);
void *mock_cur();
void *mock_get(int idx);
void *mock_peek();
void *mock_shift();
void *mock_slide(int func);
void mock_print(const indexed_call_t *packed);
void mock_push(void *call);

static int verbose_test = 0;
static int failed_test = 0;
#define verbose { verbose_test = 1; }

#define mock_warningf(...) { printf("WARNING: "), printf(__VA_ARGS__); }
#define mock_errorf(...) { printf("ERROR: "); printf(__VA_ARGS__); failed_test = 1; }
#define mock_assert(cond, ...) { if (!(cond)) { mock_errorf(__VA_ARGS__); }}
#define assert(cond) mock_assert(cond, "%s\n", #cond)

#define mock_print_ptr(prefix, ptr, size) \
    printf("%s ", prefix); \
    if (ptr == NULL) { \
        printf("NULL"); \
    } else { \
        for (size_t i = 0; i < size; i++) { \
            if (i > 0 && i % 4 == 0) printf(" "); \
            printf("%02X", *(uint8_t *)(ptr+i)); \
        } \
    } \
    printf("\n");

#define mock_return { \
    indexed_call_t *call = NULL; \
    while ((call = mock_shift()) != NULL) { \
        mock_warningf("extra "); \
        mock_print(call); \
    } \
    if (state.error) { \
        mock_warningf("Ended with GL error flag: %s\n", gl_str(state.error)); \
    } \
    return failed_test; \
}

{% for func in functions %}
#define pack_{{ func.name }}({{ func.args|args(0) }}) ({ \
    {{ func.name }}_INDEXED *packed_data = malloc(sizeof({{ func.name }}_INDEXED)); \
    packed_data->func = {{ func.name }}_INDEX; \
    {% if func.args %}
    {% for arg in func.args %}
    packed_data->args.a{{ loop.index }} = ({{ arg.type|unconst }}){{ arg.name }}; \
    {% endfor %}
    {% endif %}
    packed_data; \
})
#define emit_{{ func.name }}({{ func.args|args(0) }}) { \
    mock_push(pack_{{ func.name }}({{ func.args|args(0) }})); \
}
#define test_{{ func.name }}({{ func.args|args(0) }}) { \
    {{ func.name }}_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("{{ func.name }} missing (no calls left)\n"); \
    } else if (packed->func != {{ func.name }}_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide({{ func.name }}_INDEX); \
        if (! packed) { \
            mock_errorf("{{ func.name }} missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for {{ func.name }}:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1; \
        void *a, *b; \
        {% for arg in func.args %}
        {% if '*' in arg.type %}
        a = packed->args.a{{ loop.index }}, b = {{ arg.name }}; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof({{ arg.name }})) != 0))) { \
            printf("  ERROR: arg mismatch: {{ arg.name }}\n"); \
            mock_print_ptr("  expected:", b, sizeof({{ arg.name }})); \
            mock_print_ptr("     found:", a, sizeof({{ arg.name }})); \
        {% elif 'float' in arg.type or 'double' in arg.type %}
        if (packed->args.a{{ loop.index }} - {{ arg.name }} >= 0.01) { \
        {% else %}
        if (packed->args.a{{ loop.index }} != {{ arg.name }}) { \
        {% endif %}
            match = 0; \
        } \
        {% endfor %}
        if (! match) { \
            mock_errorf("calls do not match:\n"); \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: {{ func.name }}({{ func.args|printf }});\n", {{ func.args|args(0) }}); \
        } \
    } \
}
{% endfor %}

{% for func in functions %}
#define gles_{{ func.name }}_INDEX {{ loop.index }}
#define gles_{{ func.name }}_RETURN {{ func.return }}
#define gles_{{ func.name }}_ARG_NAMES {{ func.args|args(0) }}
#define gles_{{ func.name }}_ARG_EXPAND {{ func.args|args }}
#define gles_{{ func.name }}_PACKED PACKED_{{ func.types }}
#define gles_{{ func.name }}_INDEXED INDEXED_{{ func.types }}
#define gles_{{ func.name }}_FORMAT FORMAT_{{ func.types }}
{% endfor %}

{% for func in functions %}
{{ func.return }} gles_{{ func.name }}({{ func.name }}_ARG_EXPAND);
{% endfor %}
{% endblock %}
Added jni/glshim/spec/xml/egl.xml.








































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
<?xml version="1.0" encoding="UTF-8"?>
<registry>
    <!-- source: https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/egl.xml -->
    <!--
    Copyright (c) 2013 The Khronos Group Inc.
    
    Permission is hereby granted, free of charge, to any person obtaining a
    copy of this software and/or associated documentation files (the
    "Materials"), to deal in the Materials without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Materials, and to
    permit persons to whom the Materials are furnished to do so, subject to
    the following conditions:
    
    The above copyright notice and this permission notice shall be included
    in all copies or substantial portions of the Materials.
    
    THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
    MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
    -->
    <!--
    This file, egl.xml, is the EGL API Registry. The older ".spec" file
    format has been retired and will no longer be updated with new
    extensions and API versions. The canonical version of the registry,
    together with documentation, schema, and Python generator scripts used
    to generate C header files for EGL, can always be found in the Khronos
    Registry at
        http://www.opengl.org/registry/egl
    -->

    <!-- SECTION: EGL type definitions. Does not include GL types. -->
    <types>
            <!-- These are dependencies EGL types require to be declared legally -->
        <type name="khrplatform"><![CDATA[#include <KHR/khrplatform.h>]]></type>
        <type name="eglplatform" requires="khrplatform"><![CDATA[#include <EGL/eglplatform.h>]]></type>
        <type name="khronos_utime_nanoseconds_t" requires="khrplatform"/>
        <type name="khronos_uint64_t" requires="khrplatform"/>
        <type name="khronos_ssize_t" requires="khrplatform"/>
        <type name="EGLNativeDisplayType" requires="eglplatform"/>
        <type name="EGLNativePixmapType" requires="eglplatform"/>
        <type name="EGLNativeWindowType" requires="eglplatform"/>
        <type name="NativeDisplayType" requires="eglplatform"/>
        <type name="NativePixmapType" requires="eglplatform"/>
        <type name="NativeWindowType" requires="eglplatform"/>
        <!-- Dummy placeholders for non-EGL types -->
        <type name="Bool"/>
            <!-- These are actual EGL types.  -->
        <type>typedef unsigned int <name>EGLBoolean</name>;</type>
        <type>typedef unsigned int <name>EGLenum</name>;</type>
        <type>typedef void *<name>EGLConfig</name>;</type>
        <type>typedef void *<name>EGLContext</name>;</type>
        <type>typedef void *<name>EGLDisplay</name>;</type>
        <type>typedef void *<name>EGLSurface</name>;</type>
        <type>typedef void *<name>EGLClientBuffer</name>;</type>
        <type>typedef void (*<name>__eglMustCastToProperFunctionPointerType</name>)(void);</type>
        <type>typedef void *<name>EGLImageKHR</name>;</type>
        <type>typedef void *<name>EGLSyncKHR</name>;</type>
        <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLTimeKHR</name>;</type>
        <type>typedef void *<name>EGLSyncNV</name>;</type>
        <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLTimeNV</name>;</type>
        <type requires="khrplatform">typedef khronos_utime_nanoseconds_t <name>EGLuint64NV</name>;</type>
        <type>typedef void *<name>EGLStreamKHR</name>;</type>
        <type requires="khrplatform">typedef khronos_uint64_t <name>EGLuint64KHR</name>;</type>
        <type>typedef int <name>EGLNativeFileDescriptorKHR</name>;</type>
        <type requires="khrplatform">typedef khronos_ssize_t <name>EGLsizeiANDROID</name>;</type>
        <type requires="EGLsizeiANDROID">typedef void (*<name>EGLSetBlobFuncANDROID</name>) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize);</type>
        <type requires="EGLsizeiANDROID">typedef EGLsizeiANDROID (*<name>EGLGetBlobFuncANDROID</name>) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize);</type>
        <type>struct <name>EGLClientPixmapHI</name> {
    void  *pData;
    EGLint iWidth;
    EGLint iHeight;
    EGLint iStride;
};</type>
    </types>

    <!-- SECTION: EGL enumerant (token) definitions. -->

    <!-- Bitmasks each have their own namespace, as do a few other
         categories of enumeration -->

    <enums namespace="EGLSurfaceTypeMask" type="bitmask" comment="EGL_SURFACE_TYPE bits">
        <enum value="0x0001"      name="EGL_PBUFFER_BIT"/>
        <enum value="0x0002"      name="EGL_PIXMAP_BIT"/>
        <enum value="0x0004"      name="EGL_WINDOW_BIT"/>
        <enum value="0x0008"      name="EGL_PBUFFER_IMAGE_BIT_TAO" comment="Unreleased TAO extension"/>
        <enum value="0x0010"      name="EGL_PBUFFER_PALETTE_IMAGE_BIT_TAO" comment="Unreleased TAO extension"/>
        <enum value="0x0020"      name="EGL_VG_COLORSPACE_LINEAR_BIT"/>
        <enum value="0x0020"      name="EGL_VG_COLORSPACE_LINEAR_BIT_KHR"/>
        <enum value="0x0040"      name="EGL_VG_ALPHA_FORMAT_PRE_BIT"/>
        <enum value="0x0040"      name="EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR"/>
        <enum value="0x0080"      name="EGL_LOCK_SURFACE_BIT_KHR"/>
        <enum value="0x0100"      name="EGL_OPTIMAL_FORMAT_BIT_KHR"/>
        <enum value="0x0200"      name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT"/>
        <enum value="0x0400"      name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT"/>
        <enum value="0x0800"      name="EGL_STREAM_BIT_KHR"/>
            <!--
        <enum value="0x0800"      name="EGL_STREAM_BIT_NV" comment="Draft EGL_NV_stream_producer_eglsurface extension (bug 8064)"/>
            -->
    </enums>

    <enums namespace="EGLRenderableTypeMask" type="bitmask" comment="EGL_RENDERABLE_TYPE bits">
        <enum value="0x0001"      name="EGL_OPENGL_ES_BIT"/>
        <enum value="0x0002"      name="EGL_OPENVG_BIT"/>
        <enum value="0x0004"      name="EGL_OPENGL_ES2_BIT"/>
        <enum value="0x0008"      name="EGL_OPENGL_BIT"/>
        <enum value="0x0010"      name="EGL_INTEROP_BIT_KHR" comment="EGL_KHR_interop"/>
        <enum value="0x0020"      name="EGL_OPENMAX_IL_BIT_KHR" comment="EGL_KHR_interop"/>
        <enum value="0x00000040"  name="EGL_OPENGL_ES3_BIT_KHR"/>
    </enums>

    <enums namespace="EGLLockUsageHintKHRMask" type="bitmask" comment="EGL_LOCK_USAGE_HINT_KHR bits">
        <enum value="0x0001"      name="EGL_READ_SURFACE_BIT_KHR"/>
        <enum value="0x0002"      name="EGL_WRITE_SURFACE_BIT_KHR"/>
    </enums>

    <enums namespace="EGLSyncFlagsKHR" type="bitmask" comment="Fence/reusable sync wait bits">
        <enum value="0x0001"      name="EGL_SYNC_FLUSH_COMMANDS_BIT_KHR"/>
        <enum value="0x0001"      name="EGL_SYNC_FLUSH_COMMANDS_BIT_NV"/>
    </enums>

    <enums namespace="EGLDRMBufferUseMESAMask" type="bitmask" comment="EGL_DRM_BUFFER_USE_MESA bits">
        <enum value="0x00000001"  name="EGL_DRM_BUFFER_USE_SCANOUT_MESA"/>
        <enum value="0x00000002"  name="EGL_DRM_BUFFER_USE_SHARE_MESA"/>
    </enums>

    <!-- Should be shared with GL, but aren't aren't since the
         FORWARD_COMPATIBLE and DEBUG_BIT values are swapped in the
         corresponding GL enums. Oops :-( -->
    <enums namespace="EGLContextFlagMask" type="bitmask" comment="EGL_CONTEXT_FLAGS_KHR bits">
        <enum value="0x00000001"  name="EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR"/>
        <enum value="0x00000002"  name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR"/>
        <enum value="0x00000004"  name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR"/>
    </enums>

    <enums namespace="EGLContextProfileMask" type="bitmask" comment="Shared with GL">
        <enum value="0x00000001"  name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR"/>
        <enum value="0x00000002"  name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR"/>
    </enums>

    <!-- The default ("API") enum namespace starts here. While some
         assigned values may overlap, and different parts of the
         namespace are reserved for different purposes, it is a single
         namespace. The "class" attribute indicates some of the reserved
         purposes but is by no means complete (and cannot be, since many
         tokens are reused for different purposes in different
         extensions and API versions). -->

    <enums namespace="EGL" start="0x0000" end="0x2FFF" vendor="ARB"/>

    <enums namespace="EGL" group="Boolean" vendor="ARB">
        <enum value="0"           name="EGL_FALSE"/>
        <enum value="1"           name="EGL_TRUE"/>
    </enums>

    <enums namespace="EGL" group="SpecialNumbers"  vendor="ARB" comment="Tokens whose numeric value is intrinsically meaningful">
        <enum value="((EGLint)-1)"                        name="EGL_DONT_CARE"/>
        <enum value="((EGLint)-1)"                        name="EGL_UNKNOWN"/>
        <enum value="-1"                                  name="EGL_NO_NATIVE_FENCE_FD_ANDROID"/>
        <enum value="0"                                   name="EGL_DEPTH_ENCODING_NONE_NV"/>
        <enum value="((EGLContext)0)"                     name="EGL_NO_CONTEXT"/>
        <enum value="((EGLDisplay)0)"                     name="EGL_NO_DISPLAY"/>
        <enum value="((EGLImageKHR)0)"                    name="EGL_NO_IMAGE_KHR"/>
        <enum value="((EGLNativeDisplayType)0)"           name="EGL_DEFAULT_DISPLAY"/>
        <enum value="((EGLNativeFileDescriptorKHR)(-1))"  name="EGL_NO_FILE_DESCRIPTOR_KHR"/>
        <enum value="((EGLStreamKHR)0)"                   name="EGL_NO_STREAM_KHR"/>
        <enum value="((EGLSurface)0)"                     name="EGL_NO_SURFACE"/>
        <enum value="((EGLSyncKHR)0)"                     name="EGL_NO_SYNC_KHR"/>
        <enum value="((EGLSyncNV)0)"                      name="EGL_NO_SYNC_NV"/>
        <enum value="10000"                               name="EGL_DISPLAY_SCALING"/>
        <enum value="0xFFFFFFFFFFFFFFFF"                  name="EGL_FOREVER_KHR" type="ull"/>
        <enum value="0xFFFFFFFFFFFFFFFF"                  name="EGL_FOREVER_NV" type="ull"/>
    </enums>

    <enums namespace="EGL" start="0x3000" end="0x305F" vendor="Khronos">
        <enum value="0x3000"      name="EGL_SUCCESS"/>
        <enum value="0x3001"      name="EGL_NOT_INITIALIZED"/>
        <enum value="0x3002"      name="EGL_BAD_ACCESS"/>
        <enum value="0x3003"      name="EGL_BAD_ALLOC"/>
        <enum value="0x3004"      name="EGL_BAD_ATTRIBUTE"/>
        <enum value="0x3005"      name="EGL_BAD_CONFIG"/>
        <enum value="0x3006"      name="EGL_BAD_CONTEXT"/>
        <enum value="0x3007"      name="EGL_BAD_CURRENT_SURFACE"/>
        <enum value="0x3008"      name="EGL_BAD_DISPLAY"/>
        <enum value="0x3009"      name="EGL_BAD_MATCH"/>
        <enum value="0x300A"      name="EGL_BAD_NATIVE_PIXMAP"/>
        <enum value="0x300B"      name="EGL_BAD_NATIVE_WINDOW"/>
        <enum value="0x300C"      name="EGL_BAD_PARAMETER"/>
        <enum value="0x300D"      name="EGL_BAD_SURFACE"/>
        <enum value="0x300E"      name="EGL_CONTEXT_LOST"/>
            <unused start="0x300F" end="0x301F" comment="for additional errors"/>
        <enum value="0x3020"      name="EGL_BUFFER_SIZE"/>
        <enum value="0x3021"      name="EGL_ALPHA_SIZE"/>
        <enum value="0x3022"      name="EGL_BLUE_SIZE"/>
        <enum value="0x3023"      name="EGL_GREEN_SIZE"/>
        <enum value="0x3024"      name="EGL_RED_SIZE"/>
        <enum value="0x3025"      name="EGL_DEPTH_SIZE"/>
        <enum value="0x3026"      name="EGL_STENCIL_SIZE"/>
        <enum value="0x3027"      name="EGL_CONFIG_CAVEAT"/>
        <enum value="0x3028"      name="EGL_CONFIG_ID"/>
        <enum value="0x3029"      name="EGL_LEVEL"/>
        <enum value="0x302A"      name="EGL_MAX_PBUFFER_HEIGHT"/>
        <enum value="0x302B"      name="EGL_MAX_PBUFFER_PIXELS"/>
        <enum value="0x302C"      name="EGL_MAX_PBUFFER_WIDTH"/>
        <enum value="0x302D"      name="EGL_NATIVE_RENDERABLE"/>
        <enum value="0x302E"      name="EGL_NATIVE_VISUAL_ID"/>
        <enum value="0x302F"      name="EGL_NATIVE_VISUAL_TYPE"/>
        <enum value="0x3031"      name="EGL_SAMPLES"/>
        <enum value="0x3032"      name="EGL_SAMPLE_BUFFERS"/>
        <enum value="0x3033"      name="EGL_SURFACE_TYPE"/>
        <enum value="0x3034"      name="EGL_TRANSPARENT_TYPE"/>
        <enum value="0x3035"      name="EGL_TRANSPARENT_BLUE_VALUE"/>
        <enum value="0x3036"      name="EGL_TRANSPARENT_GREEN_VALUE"/>
        <enum value="0x3037"      name="EGL_TRANSPARENT_RED_VALUE"/>
        <enum value="0x3038"      name="EGL_NONE"                                           comment="Attribute list terminator"/>
        <enum value="0x3039"      name="EGL_BIND_TO_TEXTURE_RGB"/>
        <enum value="0x303A"      name="EGL_BIND_TO_TEXTURE_RGBA"/>
        <enum value="0x303B"      name="EGL_MIN_SWAP_INTERVAL"/>
        <enum value="0x303C"      name="EGL_MAX_SWAP_INTERVAL"/>
        <enum value="0x303D"      name="EGL_LUMINANCE_SIZE"/>
        <enum value="0x303E"      name="EGL_ALPHA_MASK_SIZE"/>
        <enum value="0x303F"      name="EGL_COLOR_BUFFER_TYPE"/>
        <enum value="0x3040"      name="EGL_RENDERABLE_TYPE"/>
        <enum value="0x3041"      name="EGL_MATCH_NATIVE_PIXMAP"/>
        <enum value="0x3042"      name="EGL_CONFORMANT"/>
        <enum value="0x3042"      name="EGL_CONFORMANT_KHR"/>
        <enum value="0x3043"      name="EGL_MATCH_FORMAT_KHR"/>
            <unused start="0x3044" end="0x304F" comment="for additional config attributes"/>
        <enum value="0x3050"      name="EGL_SLOW_CONFIG"/>
        <enum value="0x3051"      name="EGL_NON_CONFORMANT_CONFIG"/>
        <enum value="0x3052"      name="EGL_TRANSPARENT_RGB"/>
        <enum value="0x3053"      name="EGL_VENDOR"/>
        <enum value="0x3054"      name="EGL_VERSION"/>
        <enum value="0x3055"      name="EGL_EXTENSIONS"/>
        <enum value="0x3056"      name="EGL_HEIGHT"/>
        <enum value="0x3057"      name="EGL_WIDTH"/>
        <enum value="0x3058"      name="EGL_LARGEST_PBUFFER"/>
        <enum value="0x3059"      name="EGL_DRAW"/>
        <enum value="0x305A"      name="EGL_READ"/>
        <enum value="0x305B"      name="EGL_CORE_NATIVE_ENGINE"/>
        <enum value="0x305C"      name="EGL_NO_TEXTURE"/>
        <enum value="0x305D"      name="EGL_TEXTURE_RGB"/>
        <enum value="0x305E"      name="EGL_TEXTURE_RGBA"/>
        <enum value="0x305F"      name="EGL_TEXTURE_2D"/>
    </enums>

    <enums namespace="EGL" start="0x3060-0x306F" vendor="TAO" comment="Reserved for Phil Huxley">
        <unused start="0x3060" end="0x306F"/>
    </enums>

    <enums namespace="EGL" start="0x3070-0x307F" vendor="NOK" comment="Reserved for Jani Vaarala">
        <unused start="0x3070" end="0x307F"/>
    </enums>

    <enums namespace="EGL" start="0x3080-0x30AF" vendor="Khronos">
        <enum value="0x3080"      name="EGL_TEXTURE_FORMAT"/>
        <enum value="0x3081"      name="EGL_TEXTURE_TARGET"/>
        <enum value="0x3082"      name="EGL_MIPMAP_TEXTURE"/>
        <enum value="0x3083"      name="EGL_MIPMAP_LEVEL"/>
        <enum value="0x3084"      name="EGL_BACK_BUFFER"/>
        <enum value="0x3085"      name="EGL_SINGLE_BUFFER"/>
        <enum value="0x3086"      name="EGL_RENDER_BUFFER"/>
        <enum value="0x3087"      name="EGL_COLORSPACE"                                     alias="EGL_VG_COLORSPACE"/>
        <enum value="0x3087"      name="EGL_VG_COLORSPACE"/>
        <enum value="0x3088"      name="EGL_ALPHA_FORMAT"                                   alias="EGL_VG_ALPHA_FORMAT"/>
        <enum value="0x3088"      name="EGL_VG_ALPHA_FORMAT"/>
        <enum value="0x3089"      name="EGL_COLORSPACE_sRGB"                                alias="EGL_VG_COLORSPACE_sRGB"/>
        <enum value="0x3089"      name="EGL_VG_COLORSPACE_sRGB"/>
        <enum value="0x308A"      name="EGL_COLORSPACE_LINEAR"                              alias="EGL_VG_COLORSPACE_LINEAR"/>
        <enum value="0x308A"      name="EGL_VG_COLORSPACE_LINEAR"/>
        <enum value="0x308B"      name="EGL_ALPHA_FORMAT_NONPRE"                            alias="EGL_VG_ALPHA_FORMAT_NONPRE"/>
        <enum value="0x308B"      name="EGL_VG_ALPHA_FORMAT_NONPRE"/>
        <enum value="0x308C"      name="EGL_ALPHA_FORMAT_PRE"                               alias="EGL_VG_ALPHA_FORMAT_PRE"/>
        <enum value="0x308C"      name="EGL_VG_ALPHA_FORMAT_PRE"/>
        <enum value="0x308D"      name="EGL_CLIENT_APIS"/>
        <enum value="0x308E"      name="EGL_RGB_BUFFER"/>
        <enum value="0x308F"      name="EGL_LUMINANCE_BUFFER"/>
        <enum value="0x3090"      name="EGL_HORIZONTAL_RESOLUTION"/>
        <enum value="0x3091"      name="EGL_VERTICAL_RESOLUTION"/>
        <enum value="0x3092"      name="EGL_PIXEL_ASPECT_RATIO"/>
        <enum value="0x3093"      name="EGL_SWAP_BEHAVIOR"/>
        <enum value="0x3094"      name="EGL_BUFFER_PRESERVED"/>
        <enum value="0x3095"      name="EGL_BUFFER_DESTROYED"/>
        <enum value="0x3096"      name="EGL_OPENVG_IMAGE"/>
        <enum value="0x3097"      name="EGL_CONTEXT_CLIENT_TYPE"/>
        <enum value="0x3098"      name="EGL_CONTEXT_CLIENT_VERSION"/>
        <enum value="0x3098"      name="EGL_CONTEXT_MAJOR_VERSION_KHR" alias="EGL_CONTEXT_CLIENT_VERSION"/>
        <enum value="0x3099"      name="EGL_MULTISAMPLE_RESOLVE"/>
        <enum value="0x309A"      name="EGL_MULTISAMPLE_RESOLVE_DEFAULT"/>
        <enum value="0x309B"      name="EGL_MULTISAMPLE_RESOLVE_BOX"/>
            <unused start="0x309C" end="0x309F"/>
        <enum value="0x30A0"      name="EGL_OPENGL_ES_API"/>
        <enum value="0x30A1"      name="EGL_OPENVG_API"/>
        <enum value="0x30A2"      name="EGL_OPENGL_API"/>
            <unused start="0x30A3" end="0x30AF" comment="for additional client API names"/>
    </enums>

    <enums namespace="EGL" start="0x30B0-0x30BF" vendor="NV" comment="Reserved for Ignacio Llamas">
        <enum value="0x30B0"      name="EGL_NATIVE_PIXMAP_KHR"/>
        <enum value="0x30B1"      name="EGL_GL_TEXTURE_2D_KHR"/>
        <enum value="0x30B2"      name="EGL_GL_TEXTURE_3D_KHR"/>
        <enum value="0x30B3"      name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR"/>
        <enum value="0x30B4"      name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR"/>
        <enum value="0x30B5"      name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR"/>
        <enum value="0x30B6"      name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR"/>
        <enum value="0x30B7"      name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR"/>
        <enum value="0x30B8"      name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR"/>
        <enum value="0x30B9"      name="EGL_GL_RENDERBUFFER_KHR"/>
        <enum value="0x30BA"      name="EGL_VG_PARENT_IMAGE_KHR"/>
        <enum value="0x30BC"      name="EGL_GL_TEXTURE_LEVEL_KHR"/>
        <enum value="0x30BD"      name="EGL_GL_TEXTURE_ZOFFSET_KHR"/>
        <enum value="0x30BE"      name="EGL_POST_SUB_BUFFER_SUPPORTED_NV"/>
        <enum value="0x30BF"      name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT"/>
    </enums>

    <enums namespace="EGL" start="0x30C0-0x30CF" vendor="KHR">
        <enum value="0x30C0"      name="EGL_FORMAT_RGB_565_EXACT_KHR"/>
        <enum value="0x30C1"      name="EGL_FORMAT_RGB_565_KHR"/>
        <enum value="0x30C2"      name="EGL_FORMAT_RGBA_8888_EXACT_KHR"/>
        <enum value="0x30C3"      name="EGL_FORMAT_RGBA_8888_KHR"/>
        <enum value="0x30C4"      name="EGL_MAP_PRESERVE_PIXELS_KHR"/>
        <enum value="0x30C5"      name="EGL_LOCK_USAGE_HINT_KHR"/>
        <enum value="0x30C6"      name="EGL_BITMAP_POINTER_KHR"/>
        <enum value="0x30C7"      name="EGL_BITMAP_PITCH_KHR"/>
        <enum value="0x30C8"      name="EGL_BITMAP_ORIGIN_KHR"/>
        <enum value="0x30C9"      name="EGL_BITMAP_PIXEL_RED_OFFSET_KHR"/>
        <enum value="0x30CA"      name="EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR"/>
        <enum value="0x30CB"      name="EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR"/>
        <enum value="0x30CC"      name="EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR"/>
        <enum value="0x30CD"      name="EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR"/>
        <enum value="0x30CE"      name="EGL_LOWER_LEFT_KHR"/>
        <enum value="0x30CF"      name="EGL_UPPER_LEFT_KHR"/>
    </enums>

    <enums namespace="EGL" start="0x30D0" end="0x30DF" vendor="Symbian" comment="Reserved for Robert Palmer (bug #2545)">
            <unused start="0x30D0" end="0x30D1"/>
        <enum value="0x30D2"      name="EGL_IMAGE_PRESERVED_KHR"/>
            <unused start="0x30D3" end="0x30D9"/>
        <enum value="0x30DA"      name="EGL_SHARED_IMAGE_NOK" comment="Unreleased extension"/>
            <unused start="0x30DB" end="0x30DF"/>
    </enums>

    <enums namespace="EGL" start="0x30E0" end="0x30EF" vendor="NV" comment="Reserved for Russell Pflughaupt (bug #3314)">
        <enum value="0x30E0"      name="EGL_COVERAGE_BUFFERS_NV"/>
        <enum value="0x30E1"      name="EGL_COVERAGE_SAMPLES_NV"/>
        <enum value="0x30E2"      name="EGL_DEPTH_ENCODING_NV"/>
        <enum value="0x30E3"      name="EGL_DEPTH_ENCODING_NONLINEAR_NV"/>
            <unused start="0x30E4" end="0x30E5"/>
        <enum value="0x30E6"      name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV"/>
        <enum value="0x30E7"      name="EGL_SYNC_STATUS_NV"/>
        <enum value="0x30E8"      name="EGL_SIGNALED_NV"/>
        <enum value="0x30E9"      name="EGL_UNSIGNALED_NV"/>
        <enum value="0x30EA"      name="EGL_ALREADY_SIGNALED_NV"/>
        <enum value="0x30EB"      name="EGL_TIMEOUT_EXPIRED_NV"/>
        <enum value="0x30EC"      name="EGL_CONDITION_SATISFIED_NV"/>
        <enum value="0x30ED"      name="EGL_SYNC_TYPE_NV"/>
        <enum value="0x30EE"      name="EGL_SYNC_CONDITION_NV"/>
        <enum value="0x30EF"      name="EGL_SYNC_FENCE_NV"/>
    </enums>

    <enums namespace="EGL" start="0x30F0" end="0x30FF" vendor="KHR">
        <enum value="0x30F0"      name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR"/>
        <enum value="0x30F1"      name="EGL_SYNC_STATUS_KHR"/>
        <enum value="0x30F2"      name="EGL_SIGNALED_KHR"/>
        <enum value="0x30F3"      name="EGL_UNSIGNALED_KHR"/>
        <enum value="0x30F5"      name="EGL_TIMEOUT_EXPIRED_KHR"/>
        <enum value="0x30F6"      name="EGL_CONDITION_SATISFIED_KHR"/>
        <enum value="0x30F7"      name="EGL_SYNC_TYPE_KHR"/>
        <enum value="0x30F8"      name="EGL_SYNC_CONDITION_KHR"/>
        <enum value="0x30F9"      name="EGL_SYNC_FENCE_KHR"/>
        <enum value="0x30FA"      name="EGL_SYNC_REUSABLE_KHR"/>
        <enum value="0x30FB"      name="EGL_CONTEXT_MINOR_VERSION_KHR"/>
        <enum value="0x30FC"      name="EGL_CONTEXT_FLAGS_KHR"/>
        <enum value="0x30FD"      name="EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR"/>
            <unused start="0x30FE" end="0x30FF"/>
    </enums>

    <enums namespace="EGL" start="0x3100" end="0x310F" vendor="IMG" comment="Reserved for Ben Bowman (Khronos bug 4748)">
        <enum value="0x3100"      name="EGL_CONTEXT_PRIORITY_LEVEL_IMG"/>
        <enum value="0x3101"      name="EGL_CONTEXT_PRIORITY_HIGH_IMG"/>
        <enum value="0x3102"      name="EGL_CONTEXT_PRIORITY_MEDIUM_IMG"/>
        <enum value="0x3103"      name="EGL_CONTEXT_PRIORITY_LOW_IMG"/>
            <unused start="0x3104" end="0x310F"/>
    </enums>

    <enums namespace="EGL" start="0x3110" end="0x311F" vendor="ATX" comment="Reserved for Tim Renouf, Antix (Khronos bug 4949)">
        <enum value="0x3110"      name="EGL_BITMAP_PIXEL_SIZE_KHR"/>
            <unused start="0x3111" end="0x311F"/>
    </enums>

    <enums namespace="EGL" start="0x3120" end="0x312F" vendor="AMD" comment="Reserved for David Garcia (Khronos bug 5149)">
            <unused start="0x3120" end="0x312F"/>
    </enums>

    <enums namespace="EGL" start="0x3130" end="0x313F" vendor="NV" comment="Reserved for Greg Prisament (Khronos bug 5166)">
            <unused start="0x3130"/>
        <enum value="0x3131"      name="EGL_COVERAGE_SAMPLE_RESOLVE_NV"/>
        <enum value="0x3132"      name="EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV"/>
        <enum value="0x3133"      name="EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV"/>
        <enum value="0x3134"      name="EGL_MULTIVIEW_VIEW_COUNT_EXT"/>
            <unused start="0x3135"/>
        <enum value="0x3136"      name="EGL_AUTO_STEREO_NV"/>
            <unused start="0x3137"/>
        <enum value="0x3138"      name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT"/>
            <unused start="0x3139" end="0x313C"/>
        <enum value="0x313D"      name="EGL_BUFFER_AGE_EXT"/>
            <unused start="0x313E" end="0x313F"/>
    </enums>

    <enums namespace="EGL" start="0x3140" end="0x314F" vendor="Google" comment="Reserved for Mathias Agopian (Khronos bug 5199)">
        <enum value="0x3140"      name="EGL_NATIVE_BUFFER_ANDROID"/>
            <unused start="0x3141"/>
        <enum value="0x3142"      name="EGL_RECORDABLE_ANDROID"/>
            <unused start="0x3143"/>
        <enum value="0x3144"      name="EGL_SYNC_NATIVE_FENCE_ANDROID"/>
        <enum value="0x3145"      name="EGL_SYNC_NATIVE_FENCE_FD_ANDROID"/>
        <enum value="0x3146"      name="EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID"/>
        <enum value="0x3147"      name="EGL_FRAMEBUFFER_TARGET_ANDROID"/>
            <unused start="0x3148" end="0x314F"/>
    </enums>

    <enums namespace="EGL" start="0x3150" end="0x315F" vendor="NOK" comment="Reserved for Robert Palmer (Khronos bug 5368)">
            <unused start="0x3150" end="0x315F"/>
    </enums>

    <enums namespace="EGL" start="0x3160" end="0x316F" vendor="Seaweed" comment="Reserved for Sree Sridharan (Khronos public bug 198)">
            <unused start="0x3160" end="0x316F"/>
    </enums>

    <enums namespace="EGL" start="0x3170" end="0x318F" vendor="QNX" comment="Reserved for Joel Pilon (Khronos bug 5834)">
            <unused start="0x3170" end="0x318F"/>
    </enums>

    <enums namespace="EGL" start="0x3190" end="0x31AF" vendor="FSL" comment="Reserved for Brian Murray, Freescale (Khronos bug 5939)">
            <unused start="0x3190" end="0x31AF"/>
    </enums>

    <enums namespace="EGL" start="0x31B0" end="0x31BF" vendor="KHR" comment="Reserved for Marcus Lorentzon (Khronos bug 6437)">
            <unused start="0x31B0" end="0x31BC" comment="Reserved for EGL_image_stream"/>
        <enum value="0x31BD"      name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR"/>
        <enum value="0x31BE"      name="EGL_NO_RESET_NOTIFICATION_EXT"/>
        <enum value="0x31BE"      name="EGL_NO_RESET_NOTIFICATION_KHR"/>
        <enum value="0x31BF"      name="EGL_LOSE_CONTEXT_ON_RESET_EXT"/>
        <enum value="0x31BF"      name="EGL_LOSE_CONTEXT_ON_RESET_KHR"/>
    </enums>

    <enums namespace="EGL" start="0x31C0" end="0x31CF" vendor="QCOM" comment="Reserved for Maurice Ribble (Khronos bug 6644)">
            <unused start="0x31C0" end="0x31CF"/>
    </enums>

    <enums namespace="EGL" start="0x31D0" end="0x31DF" vendor="MESA" comment="Reserved for Kristian Høgsberg (Khronos bug 6757)">
        <enum value="0x31D0"      name="EGL_DRM_BUFFER_FORMAT_MESA"/>
        <enum value="0x31D1"      name="EGL_DRM_BUFFER_USE_MESA"/>
        <enum value="0x31D2"      name="EGL_DRM_BUFFER_FORMAT_ARGB32_MESA"/>
        <enum value="0x31D3"      name="EGL_DRM_BUFFER_MESA"/>
        <enum value="0x31D4"      name="EGL_DRM_BUFFER_STRIDE_MESA"/>
            <unused start="0x31D5" end="0x31DF"/>
    </enums>

    <enums namespace="EGL" start="0x31E0" end="0x31EF" vendor="HI" comment="Reserved for Mark Callow (Khronos bug 6799)">
            <unused start="0x31E0" end="0x31EF"/>
    </enums>

    <enums namespace="EGL" start="0x31F0" end="0x31FF" vendor="KHR">
            <unused start="0x31F0" end="0x31FB" comment="Placeholders for draft extensions follow"/>
        <!--
            <enum value="0x31F0" name="EGL_IMAGE_USE_AS_OPENGL_ES1_RENDERBUFFER_KHR"        comment="Draft KHR_image_use_gl1_renderbuffer"/>
            <enum value="0x31F1" name="EGL_IMAGE_USE_AS_OPENGL_ES1_TEXTURE_2D_KHR"          comment="Draft KHR_image_use_gl1_texture_2d"/>
            <enum value="0x31F2" name="EGL_IMAGE_USE_AS_OPENGL_ES1_TEXTURE_EXTERNAL_KHR"    comment="Draft KHR_image_use_gl1_texture_external"/>
            <enum value="0x31F3" name="EGL_IMAGE_USE_AS_OPENGL_ES2_RENDERBUFFER_KHR"        comment="Draft KHR_image_use_gl2_renderbuffer"/>
            <enum value="0x31F4" name="EGL_IMAGE_USE_AS_OPENGL_ES2_TEXTURE_2D_KHR"          comment="Draft KHR_image_use_gl2_texture_2d"/>
            <enum value="0x31F5" name="EGL_IMAGE_USE_AS_OPENGL_ES2_TEXTURE_EXTERNAL_KHR"    comment="Draft KHR_image_use_gl2_texture_external"/>
            <enum value="0x31F6" name="EGL_IMAGE_USE_AS_OPENVG_IMAGE_KHR"                   comment="Draft KHR_image_use_vg_vgimage"/>
            <enum value="0x31F7" name="EGL_STREAM_CONSUMER_ATTACHMENT_MESA"                 comment="Draft EGL_MESA_image_stream_internal"/>
            <enum value="0x31F8" name="EGL_NO_FORMAT_MESA"                                  comment="Draft EGL_MESA_image_stream_internal"/>
            <enum value="0x31F9" name="EGL_FORMAT_RGBA8888_MESA"                            comment="Draft EGL_MESA_image_stream_internal"/>
            <enum value="0x31FA" name="EGL_FORMAT_RGB888_MESA"                              comment="Draft EGL_MESA_image_stream_internal"/>
            <enum value="0x31FB" name="EGL_FORMAT_RGB565_MESA"                              comment="Draft EGL_MESA_image_stream_internal"/>
        -->
        <enum value="0x31FC"      name="EGL_STREAM_FIFO_LENGTH_KHR"/>
        <enum value="0x31FD"      name="EGL_STREAM_TIME_NOW_KHR"/>
        <enum value="0x31FE"      name="EGL_STREAM_TIME_CONSUMER_KHR"/>
        <enum value="0x31FF"      name="EGL_STREAM_TIME_PRODUCER_KHR"/>
    </enums>

    <enums namespace="EGL" start="0x3200" end="0x320F" vendor="ANGLE" comment="Reserved for Daniel Koch, ANGLE Project (Khronos bug 7139)">
        <enum value="0x3200"      name="EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE"/>
            <unused start="0x3201" end="0x320F"/>
    </enums>

    <enums namespace="EGL" start="0x3210" end="0x321F" vendor="KHR">
        <enum value="0x3210"      name="EGL_CONSUMER_LATENCY_USEC_KHR"/>
            <unused start="0x3211"/>
        <enum value="0x3212"      name="EGL_PRODUCER_FRAME_KHR"/>
        <enum value="0x3213"      name="EGL_CONSUMER_FRAME_KHR"/>
        <enum value="0x3214"      name="EGL_STREAM_STATE_KHR"/>
        <enum value="0x3215"      name="EGL_STREAM_STATE_CREATED_KHR"/>
        <enum value="0x3216"      name="EGL_STREAM_STATE_CONNECTING_KHR"/>
        <enum value="0x3217"      name="EGL_STREAM_STATE_EMPTY_KHR"/>
        <enum value="0x3218"      name="EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR"/>
        <enum value="0x3219"      name="EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR"/>
        <enum value="0x321A"      name="EGL_STREAM_STATE_DISCONNECTED_KHR"/>
        <enum value="0x321B"      name="EGL_BAD_STREAM_KHR"/>
        <enum value="0x321C"      name="EGL_BAD_STATE_KHR"/>
        <enum value="0x321E"      name="EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR"/>
    </enums>

    <enums namespace="EGL" start="0x3220" end="0x325F" vendor="NV" comment="Reserved for Greg Roth (Bug 8220)">
            <unused start="0x3220" end="0x325F"/>
    </enums>

    <enums namespace="EGL" start="0x3260" end="0x326F" vendor="BCOM" comment="Reserved for Gary Sweet, Broadcom (Public bug 620)">
            <unused start="0x3260" end="0x326F"/>
    </enums>

    <enums namespace="EGL" start="0x3270" end="0x328F" vendor="ARM" comment="Reserved for Tom Cooksey (Bug 9963)">
        <enum value="0x3270"      name="EGL_LINUX_DMA_BUF_EXT"/>
        <enum value="0x3271"      name="EGL_LINUX_DRM_FOURCC_EXT"/>
        <enum value="0x3272"      name="EGL_DMA_BUF_PLANE0_FD_EXT"/>
        <enum value="0x3273"      name="EGL_DMA_BUF_PLANE0_OFFSET_EXT"/>
        <enum value="0x3274"      name="EGL_DMA_BUF_PLANE0_PITCH_EXT"/>
        <enum value="0x3275"      name="EGL_DMA_BUF_PLANE1_FD_EXT"/>
        <enum value="0x3276"      name="EGL_DMA_BUF_PLANE1_OFFSET_EXT"/>
        <enum value="0x3277"      name="EGL_DMA_BUF_PLANE1_PITCH_EXT"/>
        <enum value="0x3278"      name="EGL_DMA_BUF_PLANE2_FD_EXT"/>
        <enum value="0x3279"      name="EGL_DMA_BUF_PLANE2_OFFSET_EXT"/>
        <enum value="0x327A"      name="EGL_DMA_BUF_PLANE2_PITCH_EXT"/>
        <enum value="0x327B"      name="EGL_YUV_COLOR_SPACE_HINT_EXT"/>
        <enum value="0x327C"      name="EGL_SAMPLE_RANGE_HINT_EXT"/>
        <enum value="0x327D"      name="EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT"/>
        <enum value="0x327E"      name="EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT"/>
        <enum value="0x327F"      name="EGL_ITU_REC601_EXT"/>
        <enum value="0x3280"      name="EGL_ITU_REC709_EXT"/>
        <enum value="0x3281"      name="EGL_ITU_REC2020_EXT"/>
        <enum value="0x3282"      name="EGL_YUV_FULL_RANGE_EXT"/>
        <enum value="0x3283"      name="EGL_YUV_NARROW_RANGE_EXT"/>
        <enum value="0x3284"      name="EGL_YUV_CHROMA_SITING_0_EXT"/>
        <enum value="0x3285"      name="EGL_YUV_CHROMA_SITING_0_5_EXT"/>
        <enum value="0x3286"      name="EGL_DISCARD_SAMPLES_ARM"/>
            <unused start="0x3287" end="0x328F"/>
    </enums>

    <enums namespace="EGL" start="0x3290" end="0x329F" vendor="MESA" comment="Reserved for John KÃ¥re Alsaker (Public bug 757)">
            <unused start="0x3290" end="0x329F"/>
    </enums>

    <enums namespace="EGL" start="0x32A0" end="0x32AF" vendor="Samsung" comment="Reserved for Dongyeon Kim (Public bug 880)">
            <unused start="0x32A0" end="0x32AF"/>
    </enums>

<!-- Please remember that new enumerant allocations must be obtained by
     request to the Khronos API registrar (see comments at the top of this
     file) File requests in the Khronos Bugzilla, EGL project, Registry
     component. Also note that some EGL enum values are shared with other
     Khronos APIs, and new ranges should be allocated with such overlaps in
     mind. -->

<!-- Reservable for future use: 0x32B0-0x3FFF.
     To generate a new range, allocate multiples of 16 starting at the
     lowest available point in this block. -->
    <enums namespace="EGL" start="0x32B0" end="0x3FFF" vendor="Khronos">
            <unused start="0x32B0" end="0x3FFF" comment="Reserved for future use"/>
    </enums>

    <enums namespace="EGL" start="0x8F70" end="0x8F7F" vendor="HI" comment="For Mark Callow, Khronos bug 4055. Shared with GL.">
        <enum value="0x8F70"      name="EGL_COLOR_FORMAT_HI"/>
        <enum value="0x8F71"      name="EGL_COLOR_RGB_HI"/>
        <enum value="0x8F72"      name="EGL_COLOR_RGBA_HI"/>
        <enum value="0x8F73"      name="EGL_COLOR_ARGB_HI"/>
        <enum value="0x8F74"      name="EGL_CLIENT_PIXMAP_POINTER_HI"/>
    </enums>

    <!-- SECTION: EGL command definitions. -->
    <commands namespace="EGL">
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglBindAPI</name></proto>
            <param><ptype>EGLenum</ptype> <name>api</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglBindTexImage</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> <name>buffer</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglChooseConfig</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
            <param><ptype>EGLConfig</ptype> *<name>configs</name></param>
            <param><ptype>EGLint</ptype> <name>config_size</name></param>
            <param><ptype>EGLint</ptype> *<name>num_config</name></param>
        </command>
        <command>
            <proto><ptype>EGLint</ptype> <name>eglClientWaitSyncKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
            <param><ptype>EGLint</ptype> <name>flags</name></param>
            <param><ptype>EGLTimeKHR</ptype> <name>timeout</name></param>
        </command>
        <command>
            <proto><ptype>EGLint</ptype> <name>eglClientWaitSyncNV</name></proto>
            <param><ptype>EGLSyncNV</ptype> <name>sync</name></param>
            <param><ptype>EGLint</ptype> <name>flags</name></param>
            <param><ptype>EGLTimeNV</ptype> <name>timeout</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglCopyBuffers</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLNativePixmapType</ptype> <name>target</name></param>
        </command>
        <command>
            <proto><ptype>EGLContext</ptype> <name>eglCreateContext</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param><ptype>EGLContext</ptype> <name>share_context</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLImageKHR</ptype> <name>eglCreateDRMImageMESA</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSyncNV</ptype> <name>eglCreateFenceSyncNV</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLenum</ptype> <name>condition</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLImageKHR</ptype> <name>eglCreateImageKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLContext</ptype> <name>ctx</name></param>
            <param><ptype>EGLenum</ptype> <name>target</name></param>
            <param><ptype>EGLClientBuffer</ptype> <name>buffer</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglCreatePbufferFromClientBuffer</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLenum</ptype> <name>buftype</name></param>
            <param><ptype>EGLClientBuffer</ptype> <name>buffer</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglCreatePbufferSurface</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglCreatePixmapSurface</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param><ptype>EGLNativePixmapType</ptype> <name>pixmap</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglCreatePixmapSurfaceHI</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param><ptype>struct EGLClientPixmapHI</ptype> *<name>pixmap</name></param>
        </command>
        <command>
            <proto><ptype>EGLStreamKHR</ptype> <name>eglCreateStreamFromFileDescriptorKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLNativeFileDescriptorKHR</ptype> <name>file_descriptor</name></param>
        </command>
        <command>
            <proto><ptype>EGLStreamKHR</ptype> <name>eglCreateStreamKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglCreateStreamProducerSurfaceKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSyncKHR</ptype> <name>eglCreateSyncKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLenum</ptype> <name>type</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglCreateWindowSurface</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param><ptype>EGLNativeWindowType</ptype> <name>win</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglDestroyContext</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLContext</ptype> <name>ctx</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglDestroyImageKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLImageKHR</ptype> <name>image</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglDestroyStreamKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglDestroySurface</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglDestroySyncKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglDestroySyncNV</name></proto>
            <param><ptype>EGLSyncNV</ptype> <name>sync</name></param>
        </command>
        <command>
            <proto><ptype>EGLint</ptype> <name>eglDupNativeFenceFDANDROID</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglExportDRMImageMESA</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLImageKHR</ptype> <name>image</name></param>
            <param><ptype>EGLint</ptype> *<name>name</name></param>
            <param><ptype>EGLint</ptype> *<name>handle</name></param>
            <param><ptype>EGLint</ptype> *<name>stride</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglFenceNV</name></proto>
            <param><ptype>EGLSyncNV</ptype> <name>sync</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglGetConfigAttrib</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> <name>config</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglGetConfigs</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLConfig</ptype> *<name>configs</name></param>
            <param><ptype>EGLint</ptype> <name>config_size</name></param>
            <param><ptype>EGLint</ptype> *<name>num_config</name></param>
        </command>
        <command>
            <proto><ptype>EGLContext</ptype> <name>eglGetCurrentContext</name></proto>
        </command>
        <command>
            <proto><ptype>EGLDisplay</ptype> <name>eglGetCurrentDisplay</name></proto>
        </command>
        <command>
            <proto><ptype>EGLSurface</ptype> <name>eglGetCurrentSurface</name></proto>
            <param><ptype>EGLint</ptype> <name>readdraw</name></param>
        </command>
        <command>
            <proto><ptype>EGLDisplay</ptype> <name>eglGetDisplay</name></proto>
            <param><ptype>EGLNativeDisplayType</ptype> <name>display_id</name></param>
        </command>
        <command>
            <proto><ptype>EGLint</ptype> <name>eglGetError</name></proto>
        </command>
        <command>
            <proto><ptype>__eglMustCastToProperFunctionPointerType</ptype> <name>eglGetProcAddress</name></proto>
            <param>const char *<name>procname</name></param>
        </command>
        <command>
            <proto><ptype>EGLNativeFileDescriptorKHR</ptype> <name>eglGetStreamFileDescriptorKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglGetSyncAttribKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglGetSyncAttribNV</name></proto>
            <param><ptype>EGLSyncNV</ptype> <name>sync</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLuint64NV</ptype> <name>eglGetSystemTimeFrequencyNV</name></proto>
        </command>
        <command>
            <proto><ptype>EGLuint64NV</ptype> <name>eglGetSystemTimeNV</name></proto>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglInitialize</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLint</ptype> *<name>major</name></param>
            <param><ptype>EGLint</ptype> *<name>minor</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglLockSurfaceKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>display</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param>const <ptype>EGLint</ptype> *<name>attrib_list</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglMakeCurrent</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>draw</name></param>
            <param><ptype>EGLSurface</ptype> <name>read</name></param>
            <param><ptype>EGLContext</ptype> <name>ctx</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglPostSubBufferNV</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> <name>x</name></param>
            <param><ptype>EGLint</ptype> <name>y</name></param>
            <param><ptype>EGLint</ptype> <name>width</name></param>
            <param><ptype>EGLint</ptype> <name>height</name></param>
        </command>
        <command>
            <proto><ptype>EGLenum</ptype> <name>eglQueryAPI</name></proto>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryContext</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLContext</ptype> <name>ctx</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryNativeDisplayNV</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLNativeDisplayType</ptype> *<name>display_id</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryNativePixmapNV</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surf</name></param>
            <param><ptype>EGLNativePixmapType</ptype> *<name>pixmap</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryNativeWindowNV</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surf</name></param>
            <param><ptype>EGLNativeWindowType</ptype> *<name>window</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryStreamKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
            <param><ptype>EGLenum</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryStreamTimeKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
            <param><ptype>EGLenum</ptype> <name>attribute</name></param>
            <param><ptype>EGLTimeKHR</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQueryStreamu64KHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
            <param><ptype>EGLenum</ptype> <name>attribute</name></param>
            <param><ptype>EGLuint64KHR</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto>const char *<name>eglQueryString</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLint</ptype> <name>name</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQuerySurface</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> *<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglQuerySurfacePointerANGLE</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param>void **<name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglReleaseTexImage</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> <name>buffer</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglReleaseThread</name></proto>
        </command>
        <command>
            <proto>void <name>eglSetBlobCacheFuncsANDROID</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSetBlobFuncANDROID</ptype> <name>set</name></param>
            <param><ptype>EGLGetBlobFuncANDROID</ptype> <name>get</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSignalSyncKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
            <param><ptype>EGLenum</ptype> <name>mode</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSignalSyncNV</name></proto>
            <param><ptype>EGLSyncNV</ptype> <name>sync</name></param>
            <param><ptype>EGLenum</ptype> <name>mode</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglStreamAttribKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
            <param><ptype>EGLenum</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> <name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerAcquireKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerGLTextureExternalKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglStreamConsumerReleaseKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLStreamKHR</ptype> <name>stream</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSurfaceAttrib</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> <name>attribute</name></param>
            <param><ptype>EGLint</ptype> <name>value</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffers</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffers</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSwapBuffersWithDamageEXT</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
            <param><ptype>EGLint</ptype> *<name>rects</name></param>
            <param><ptype>EGLint</ptype> <name>n_rects</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglSwapInterval</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLint</ptype> <name>interval</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglTerminate</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglUnlockSurfaceKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>display</name></param>
            <param><ptype>EGLSurface</ptype> <name>surface</name></param>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglWaitClient</name></proto>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglWaitGL</name></proto>
        </command>
        <command>
            <proto><ptype>EGLBoolean</ptype> <name>eglWaitNative</name></proto>
            <param><ptype>EGLint</ptype> <name>engine</name></param>
        </command>
        <command>
            <proto><ptype>EGLint</ptype> <name>eglWaitSyncKHR</name></proto>
            <param><ptype>EGLDisplay</ptype> <name>dpy</name></param>
            <param><ptype>EGLSyncKHR</ptype> <name>sync</name></param>
            <param><ptype>EGLint</ptype> <name>flags</name></param>
        </command>
    </commands>

    <!-- SECTION: EGL API interface definitions. -->
    <feature api="egl" name="EGL_VERSION_1_0" number="1.0">
        <require>
            <enum name="EGL_ALPHA_SIZE"/>
            <enum name="EGL_BAD_ACCESS"/>
            <enum name="EGL_BAD_ALLOC"/>
            <enum name="EGL_BAD_ATTRIBUTE"/>
            <enum name="EGL_BAD_CONFIG"/>
            <enum name="EGL_BAD_CONTEXT"/>
            <enum name="EGL_BAD_CURRENT_SURFACE"/>
            <enum name="EGL_BAD_DISPLAY"/>
            <enum name="EGL_BAD_MATCH"/>
            <enum name="EGL_BAD_NATIVE_PIXMAP"/>
            <enum name="EGL_BAD_NATIVE_WINDOW"/>
            <enum name="EGL_BAD_PARAMETER"/>
            <enum name="EGL_BAD_SURFACE"/>
            <enum name="EGL_BLUE_SIZE"/>
            <enum name="EGL_BUFFER_SIZE"/>
            <enum name="EGL_CONFIG_CAVEAT"/>
            <enum name="EGL_CONFIG_ID"/>
            <enum name="EGL_CORE_NATIVE_ENGINE"/>
            <enum name="EGL_DEPTH_SIZE"/>
            <enum name="EGL_DONT_CARE"/>
            <enum name="EGL_DRAW"/>
            <enum name="EGL_EXTENSIONS"/>
            <enum name="EGL_FALSE"/>
            <enum name="EGL_GREEN_SIZE"/>
            <enum name="EGL_HEIGHT"/>
            <enum name="EGL_LARGEST_PBUFFER"/>
            <enum name="EGL_LEVEL"/>
            <enum name="EGL_MAX_PBUFFER_HEIGHT"/>
            <enum name="EGL_MAX_PBUFFER_PIXELS"/>
            <enum name="EGL_MAX_PBUFFER_WIDTH"/>
            <enum name="EGL_NATIVE_RENDERABLE"/>
            <enum name="EGL_NATIVE_VISUAL_ID"/>
            <enum name="EGL_NATIVE_VISUAL_TYPE"/>
            <enum name="EGL_NONE"/>
            <enum name="EGL_NON_CONFORMANT_CONFIG"/>
            <enum name="EGL_NOT_INITIALIZED"/>
            <enum name="EGL_NO_CONTEXT"/>
            <enum name="EGL_NO_DISPLAY"/>
            <enum name="EGL_NO_SURFACE"/>
            <enum name="EGL_PBUFFER_BIT"/>
            <enum name="EGL_PIXMAP_BIT"/>
            <enum name="EGL_READ"/>
            <enum name="EGL_RED_SIZE"/>
            <enum name="EGL_SAMPLES"/>
            <enum name="EGL_SAMPLE_BUFFERS"/>
            <enum name="EGL_SLOW_CONFIG"/>
            <enum name="EGL_STENCIL_SIZE"/>
            <enum name="EGL_SUCCESS"/>
            <enum name="EGL_SURFACE_TYPE"/>
            <enum name="EGL_TRANSPARENT_BLUE_VALUE"/>
            <enum name="EGL_TRANSPARENT_GREEN_VALUE"/>
            <enum name="EGL_TRANSPARENT_RED_VALUE"/>
            <enum name="EGL_TRANSPARENT_RGB"/>
            <enum name="EGL_TRANSPARENT_TYPE"/>
            <enum name="EGL_TRUE"/>
            <enum name="EGL_VENDOR"/>
            <enum name="EGL_VERSION"/>
            <enum name="EGL_WIDTH"/>
            <enum name="EGL_WINDOW_BIT"/>
            <command name="eglChooseConfig"/>
            <command name="eglCopyBuffers"/>
            <command name="eglCreateContext"/>
            <command name="eglCreatePbufferSurface"/>
            <command name="eglCreatePixmapSurface"/>
            <command name="eglCreateWindowSurface"/>
            <command name="eglDestroyContext"/>
            <command name="eglDestroySurface"/>
            <command name="eglGetConfigAttrib"/>
            <command name="eglGetConfigs"/>
            <command name="eglGetCurrentDisplay"/>
            <command name="eglGetCurrentSurface"/>
            <command name="eglGetDisplay"/>
            <command name="eglGetError"/>
            <command name="eglGetProcAddress"/>
            <command name="eglInitialize"/>
            <command name="eglMakeCurrent"/>
            <command name="eglQueryContext"/>
            <command name="eglQueryString"/>
            <command name="eglQuerySurface"/>
            <command name="eglSwapBuffers"/>
            <command name="eglTerminate"/>
            <command name="eglWaitGL"/>
            <command name="eglWaitNative"/>
        </require>
    </feature>
    <feature api="egl" name="EGL_VERSION_1_1" number="1.1">
        <require>
            <enum name="EGL_BACK_BUFFER"/>
            <enum name="EGL_BIND_TO_TEXTURE_RGB"/>
            <enum name="EGL_BIND_TO_TEXTURE_RGBA"/>
            <enum name="EGL_CONTEXT_LOST"/>
            <enum name="EGL_MIN_SWAP_INTERVAL"/>
            <enum name="EGL_MAX_SWAP_INTERVAL"/>
            <enum name="EGL_MIPMAP_TEXTURE"/>
            <enum name="EGL_MIPMAP_LEVEL"/>
            <enum name="EGL_NO_TEXTURE"/>
            <enum name="EGL_TEXTURE_2D"/>
            <enum name="EGL_TEXTURE_FORMAT"/>
            <enum name="EGL_TEXTURE_RGB"/>
            <enum name="EGL_TEXTURE_RGBA"/>
            <enum name="EGL_TEXTURE_TARGET"/>
            <command name="eglBindTexImage"/>
            <command name="eglReleaseTexImage"/>
            <command name="eglSurfaceAttrib"/>
            <command name="eglSwapInterval"/>
        </require>
    </feature>
    <feature api="egl" name="EGL_VERSION_1_2" number="1.2">
        <require>
            <enum name="EGL_ALPHA_FORMAT"        />
            <enum name="EGL_ALPHA_FORMAT_NONPRE"/>
            <enum name="EGL_ALPHA_FORMAT_PRE"    />
            <enum name="EGL_ALPHA_MASK_SIZE"/>
            <enum name="EGL_BUFFER_PRESERVED"/>
            <enum name="EGL_BUFFER_DESTROYED"/>
            <enum name="EGL_CLIENT_APIS"/>
            <enum name="EGL_COLORSPACE"/>
            <enum name="EGL_COLORSPACE_sRGB"     />
            <enum name="EGL_COLORSPACE_LINEAR"   />
            <enum name="EGL_COLOR_BUFFER_TYPE"/>
            <enum name="EGL_CONTEXT_CLIENT_TYPE"/>
            <enum name="EGL_DISPLAY_SCALING"/>
            <enum name="EGL_HORIZONTAL_RESOLUTION"/>
            <enum name="EGL_LUMINANCE_BUFFER"/>
            <enum name="EGL_LUMINANCE_SIZE"/>
            <enum name="EGL_OPENGL_ES_BIT"/>
            <enum name="EGL_OPENVG_BIT"/>
            <enum name="EGL_OPENGL_ES_API"/>
            <enum name="EGL_OPENVG_API"/>
            <enum name="EGL_OPENVG_IMAGE"/>
            <enum name="EGL_PIXEL_ASPECT_RATIO"/>
            <enum name="EGL_RENDERABLE_TYPE"/>
            <enum name="EGL_RENDER_BUFFER"/>
            <enum name="EGL_RGB_BUFFER"/>
            <enum name="EGL_SINGLE_BUFFER"/>
            <enum name="EGL_SWAP_BEHAVIOR"/>
            <enum name="EGL_UNKNOWN"/>
            <enum name="EGL_VERTICAL_RESOLUTION"/>
            <command name="eglBindAPI"/>
            <command name="eglQueryAPI"/>
            <command name="eglCreatePbufferFromClientBuffer"/>
            <command name="eglReleaseThread"/>
            <command name="eglWaitClient"/>
        </require>
    </feature>
    <feature api="egl" name="EGL_VERSION_1_3" number="1.3">
        <require>
            <enum name="EGL_CONFORMANT"/>
            <enum name="EGL_CONTEXT_CLIENT_VERSION"/>
            <enum name="EGL_MATCH_NATIVE_PIXMAP"/>
            <enum name="EGL_OPENGL_ES2_BIT"/>
            <enum name="EGL_VG_ALPHA_FORMAT"/>
            <enum name="EGL_VG_ALPHA_FORMAT_NONPRE"/>
            <enum name="EGL_VG_ALPHA_FORMAT_PRE"/>
            <enum name="EGL_VG_ALPHA_FORMAT_PRE_BIT"/>
            <enum name="EGL_VG_COLORSPACE"/>
            <enum name="EGL_VG_COLORSPACE_sRGB"/>
            <enum name="EGL_VG_COLORSPACE_LINEAR"/>
            <enum name="EGL_VG_COLORSPACE_LINEAR_BIT"/>
        </require>
    </feature>
    <feature api="egl" name="EGL_VERSION_1_4" number="1.4">
        <require>
            <enum name="EGL_DEFAULT_DISPLAY"/>
            <enum name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT"/>
            <enum name="EGL_MULTISAMPLE_RESOLVE"/>
            <enum name="EGL_MULTISAMPLE_RESOLVE_DEFAULT"/>
            <enum name="EGL_MULTISAMPLE_RESOLVE_BOX"/>
            <enum name="EGL_OPENGL_API"/>
            <enum name="EGL_OPENGL_BIT"/>
            <enum name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT"/>
            <command name="eglGetCurrentContext"/>
        </require>
    </feature>

    <!-- SECTION: EGL extension interface definitions -->
    <extensions>
        <extension name="EGL_ANDROID_blob_cache" supported="egl">
            <require>
                <command name="eglSetBlobCacheFuncsANDROID"/>
            </require>
        </extension>
        <extension name="EGL_ANDROID_framebuffer_target" supported="egl">
            <require>
                <enum name="EGL_FRAMEBUFFER_TARGET_ANDROID"/>
            </require>
        </extension>
        <extension name="EGL_ANDROID_image_native_buffer" supported="egl">
            <require>
                <enum name="EGL_NATIVE_BUFFER_ANDROID"/>
            </require>
        </extension>
        <extension name="EGL_ANDROID_native_fence_sync" supported="egl">
            <require>
                <enum name="EGL_SYNC_NATIVE_FENCE_ANDROID"/>
                <enum name="EGL_SYNC_NATIVE_FENCE_FD_ANDROID"/>
                <enum name="EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID"/>
                <enum name="EGL_NO_NATIVE_FENCE_FD_ANDROID"/>
                <command name="eglDupNativeFenceFDANDROID"/>
            </require>
        </extension>
        <extension name="EGL_ANDROID_recordable" supported="egl">
            <require>
                <enum name="EGL_RECORDABLE_ANDROID"/>
            </require>
        </extension>
        <extension name="EGL_ANGLE_d3d_share_handle_client_buffer" supported="egl">
            <require>
                <enum name="EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE"/>
            </require>
        </extension>
        <extension name="EGL_ANGLE_query_surface_pointer" supported="egl">
            <require>
                <command name="eglQuerySurfacePointerANGLE"/>
            </require>
        </extension>
        <extension name="EGL_ANGLE_surface_d3d_texture_2d_share_handle" supported="egl">
            <require>
                <enum name="EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE"/>
            </require>
        </extension>
        <extension name="EGL_ARM_pixmap_multisample_discard" supported="egl">
            <require>
                <enum name="EGL_DISCARD_SAMPLES_ARM"/>
            </require>
        </extension>
        <extension name="EGL_EXT_buffer_age" supported="egl">
            <require>
                <enum name="EGL_BUFFER_AGE_EXT"/>
            </require>
        </extension>
        <extension name="EGL_EXT_create_context_robustness" supported="egl">
            <require>
                <enum name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT"/>
                <enum name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT"/>
                <enum name="EGL_NO_RESET_NOTIFICATION_EXT"/>
                <enum name="EGL_LOSE_CONTEXT_ON_RESET_EXT"/>
            </require>
        </extension>
        <extension name="EGL_EXT_image_dma_buf_import" supported="egl">
            <require>
                <enum name="EGL_LINUX_DMA_BUF_EXT"/>
                <enum name="EGL_LINUX_DRM_FOURCC_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE0_FD_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE0_OFFSET_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE0_PITCH_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE1_FD_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE1_OFFSET_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE1_PITCH_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE2_FD_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE2_OFFSET_EXT"/>
                <enum name="EGL_DMA_BUF_PLANE2_PITCH_EXT"/>
                <enum name="EGL_YUV_COLOR_SPACE_HINT_EXT"/>
                <enum name="EGL_SAMPLE_RANGE_HINT_EXT"/>
                <enum name="EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT"/>
                <enum name="EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT"/>
                <enum name="EGL_ITU_REC601_EXT"/>
                <enum name="EGL_ITU_REC709_EXT"/>
                <enum name="EGL_ITU_REC2020_EXT"/>
                <enum name="EGL_YUV_FULL_RANGE_EXT"/>
                <enum name="EGL_YUV_NARROW_RANGE_EXT"/>
                <enum name="EGL_YUV_CHROMA_SITING_0_EXT"/>
                <enum name="EGL_YUV_CHROMA_SITING_0_5_EXT"/>
            </require>
        </extension>
        <extension name="EGL_EXT_multiview_window" supported="egl">
            <require>
                <enum name="EGL_MULTIVIEW_VIEW_COUNT_EXT"/>
            </require>
        </extension>
        <extension name="EGL_EXT_swap_buffers_with_damage" supported="egl">
            <require>
                <command name="eglSwapBuffersWithDamageEXT"/>
            </require>
        </extension>
        <extension name="EGL_HI_clientpixmap" supported="egl">
            <require>
                <enum name="EGL_CLIENT_PIXMAP_POINTER_HI"/>
                <command name="eglCreatePixmapSurfaceHI"/>
            </require>
        </extension>
        <extension name="EGL_HI_colorformats" supported="egl">
            <require>
                <enum name="EGL_COLOR_FORMAT_HI"/>
                <enum name="EGL_COLOR_RGB_HI"/>
                <enum name="EGL_COLOR_RGBA_HI"/>
                <enum name="EGL_COLOR_ARGB_HI"/>
            </require>
        </extension>
        <extension name="EGL_IMG_context_priority" supported="egl">
            <require>
                <enum name="EGL_CONTEXT_PRIORITY_LEVEL_IMG"/>
                <enum name="EGL_CONTEXT_PRIORITY_HIGH_IMG"/>
                <enum name="EGL_CONTEXT_PRIORITY_MEDIUM_IMG"/>
                <enum name="EGL_CONTEXT_PRIORITY_LOW_IMG"/>
            </require>
        </extension>
        <extension name="EGL_KHR_config_attribs" supported="egl">
            <require>
                <enum name="EGL_CONFORMANT_KHR"/>
                <enum name="EGL_VG_COLORSPACE_LINEAR_BIT_KHR"/>
                <enum name="EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_create_context" supported="egl">
            <require>
                <enum name="EGL_CONTEXT_MAJOR_VERSION_KHR"/>
                <enum name="EGL_CONTEXT_MINOR_VERSION_KHR"/>
                <enum name="EGL_CONTEXT_FLAGS_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR"/>
                <enum name="EGL_NO_RESET_NOTIFICATION_KHR"/>
                <enum name="EGL_LOSE_CONTEXT_ON_RESET_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR"/>
                <enum name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR"/>
                <enum name="EGL_OPENGL_ES3_BIT_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_fence_sync" protect="KHRONOS_SUPPORT_INT64" supported="egl">
            <require>
                <!-- @ Most interfaces defined by EGL_KHR_reusable sync -->
                <enum name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR"/>
                <enum name="EGL_SYNC_CONDITION_KHR"/>
                <enum name="EGL_SYNC_FENCE_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_gl_renderbuffer_image" supported="egl">
            <require>
                <enum name="EGL_GL_RENDERBUFFER_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_gl_texture_2D_image" supported="egl">
            <require>
                <enum name="EGL_GL_TEXTURE_2D_KHR"/>
                <enum name="EGL_GL_TEXTURE_LEVEL_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_gl_texture_3D_image" supported="egl">
            <require>
                <enum name="EGL_GL_TEXTURE_3D_KHR"/>
                <enum name="EGL_GL_TEXTURE_ZOFFSET_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_gl_texture_cubemap_image" supported="egl">
            <require>
                <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR"/>
                <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR"/>
                <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR"/>
                <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR"/>
                <enum name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR"/>
                <enum name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_image" supported="egl">
            <require>
                <enum name="EGL_NATIVE_PIXMAP_KHR"/>
                <enum name="EGL_NO_IMAGE_KHR"/>
                <command name="eglCreateImageKHR"/>
                <command name="eglDestroyImageKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_image_base" supported="egl">
            <require>
                <!-- @ Most interfaces defined by EGL_KHR_image above -->
                <enum name="EGL_IMAGE_PRESERVED_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_image_pixmap" supported="egl">
            <require>
                <!-- @ Most interfaces defined by EGL_KHR_image above -->
            </require>
        </extension>
        <extension name="EGL_KHR_lock_surface" supported="egl">
            <require>
                <enum name="EGL_READ_SURFACE_BIT_KHR"/>
                <enum name="EGL_WRITE_SURFACE_BIT_KHR"/>
                <enum name="EGL_LOCK_SURFACE_BIT_KHR"/>
                <enum name="EGL_OPTIMAL_FORMAT_BIT_KHR"/>
                <enum name="EGL_MATCH_FORMAT_KHR"/>
                <enum name="EGL_FORMAT_RGB_565_EXACT_KHR"/>
                <enum name="EGL_FORMAT_RGB_565_KHR"/>
                <enum name="EGL_FORMAT_RGBA_8888_EXACT_KHR"/>
                <enum name="EGL_FORMAT_RGBA_8888_KHR"/>
                <enum name="EGL_MAP_PRESERVE_PIXELS_KHR"/>
                <enum name="EGL_LOCK_USAGE_HINT_KHR"/>
                <enum name="EGL_BITMAP_POINTER_KHR"/>
                <enum name="EGL_BITMAP_PITCH_KHR"/>
                <enum name="EGL_BITMAP_ORIGIN_KHR"/>
                <enum name="EGL_BITMAP_PIXEL_RED_OFFSET_KHR"/>
                <enum name="EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR"/>
                <enum name="EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR"/>
                <enum name="EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR"/>
                <enum name="EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR"/>
                <enum name="EGL_LOWER_LEFT_KHR"/>
                <enum name="EGL_UPPER_LEFT_KHR"/>
                <command name="eglLockSurfaceKHR"/>
                <command name="eglUnlockSurfaceKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_lock_surface2" supported="egl">
            <require>
                <enum name="EGL_BITMAP_PIXEL_SIZE_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_reusable_sync" protect="KHRONOS_SUPPORT_INT64" supported="egl">
            <require>
                <enum name="EGL_SYNC_STATUS_KHR"/>
                <enum name="EGL_SIGNALED_KHR"/>
                <enum name="EGL_UNSIGNALED_KHR"/>
                <enum name="EGL_TIMEOUT_EXPIRED_KHR"/>
                <enum name="EGL_CONDITION_SATISFIED_KHR"/>
                <enum name="EGL_SYNC_TYPE_KHR"/>
                <enum name="EGL_SYNC_REUSABLE_KHR"/>
                <enum name="EGL_SYNC_FLUSH_COMMANDS_BIT_KHR"/>
                <enum name="EGL_FOREVER_KHR"/>
                <enum name="EGL_NO_SYNC_KHR"/>
                <command name="eglCreateSyncKHR"/>
                <command name="eglDestroySyncKHR"/>
                <command name="eglClientWaitSyncKHR"/>
                <command name="eglSignalSyncKHR"/>
                <command name="eglGetSyncAttribKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_stream" protect="KHRONOS_SUPPORT_INT64" supported="egl">
            <require>
                <enum name="EGL_NO_STREAM_KHR"/>
                <enum name="EGL_CONSUMER_LATENCY_USEC_KHR"/>
                <enum name="EGL_PRODUCER_FRAME_KHR"/>
                <enum name="EGL_CONSUMER_FRAME_KHR"/>
                <enum name="EGL_STREAM_STATE_KHR"/>
                <enum name="EGL_STREAM_STATE_CREATED_KHR"/>
                <enum name="EGL_STREAM_STATE_CONNECTING_KHR"/>
                <enum name="EGL_STREAM_STATE_EMPTY_KHR"/>
                <enum name="EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR"/>
                <enum name="EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR"/>
                <enum name="EGL_STREAM_STATE_DISCONNECTED_KHR"/>
                <enum name="EGL_BAD_STREAM_KHR"/>
                <enum name="EGL_BAD_STATE_KHR"/>
                <command name="eglCreateStreamKHR"/>
                <command name="eglDestroyStreamKHR"/>
                <command name="eglStreamAttribKHR"/>
                <command name="eglQueryStreamKHR"/>
                <command name="eglQueryStreamu64KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_stream_consumer_gltexture" protect="EGL_KHR_stream" supported="egl">
            <require>
                <enum name="EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR"/>
                <command name="eglStreamConsumerGLTextureExternalKHR"/>
                <command name="eglStreamConsumerAcquireKHR"/>
                <command name="eglStreamConsumerReleaseKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_stream_cross_process_fd" protect="EGL_KHR_stream" supported="egl">
            <require>
                <enum name="EGL_NO_FILE_DESCRIPTOR_KHR"/>
                <command name="eglGetStreamFileDescriptorKHR"/>
                <command name="eglCreateStreamFromFileDescriptorKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_stream_fifo" protect="EGL_KHR_stream" supported="egl">
            <require>
                <enum name="EGL_STREAM_FIFO_LENGTH_KHR"/>
                <enum name="EGL_STREAM_TIME_NOW_KHR"/>
                <enum name="EGL_STREAM_TIME_CONSUMER_KHR"/>
                <enum name="EGL_STREAM_TIME_PRODUCER_KHR"/>
                <command name="eglQueryStreamTimeKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_stream_producer_aldatalocator" protect="EGL_KHR_stream" supported="egl">
            <require>
            </require>
        </extension>
        <extension name="EGL_KHR_stream_producer_eglsurface" protect="EGL_KHR_stream" supported="egl">
            <require>
                <enum name="EGL_STREAM_BIT_KHR"/>
                <command name="eglCreateStreamProducerSurfaceKHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_surfaceless_context" supported="egl">
            <require>
                <!-- No tokens/entry points, just relaxes an error condition -->
            </require>
        </extension>
        <extension name="EGL_KHR_vg_parent_image" supported="egl">
            <require>
                <enum name="EGL_VG_PARENT_IMAGE_KHR"/>
            </require>
        </extension>
        <extension name="EGL_KHR_wait_sync" supported="egl">
            <require>
                <command name="eglWaitSyncKHR"/>
            </require>
        </extension>
        <extension name="EGL_MESA_drm_image" supported="egl">
            <require>
                <enum name="EGL_DRM_BUFFER_FORMAT_MESA"/>
                <enum name="EGL_DRM_BUFFER_USE_MESA"/>
                <enum name="EGL_DRM_BUFFER_FORMAT_ARGB32_MESA"/>
                <enum name="EGL_DRM_BUFFER_MESA"/>
                <enum name="EGL_DRM_BUFFER_STRIDE_MESA"/>
                <enum name="EGL_DRM_BUFFER_USE_SCANOUT_MESA"/>
                <enum name="EGL_DRM_BUFFER_USE_SHARE_MESA"/>
                <command name="eglCreateDRMImageMESA"/>
                <command name="eglExportDRMImageMESA"/>
            </require>
        </extension>
        <extension name="EGL_NV_3dvision_surface" supported="egl">
            <require>
                <enum name="EGL_AUTO_STEREO_NV"/>
            </require>
        </extension>
        <extension name="EGL_NV_coverage_sample" supported="egl">
            <require>
                <enum name="EGL_COVERAGE_BUFFERS_NV"/>
                <enum name="EGL_COVERAGE_SAMPLES_NV"/>
            </require>
        </extension>
        <extension name="EGL_NV_coverage_sample_resolve" supported="egl">
            <require>
                <enum name="EGL_COVERAGE_SAMPLE_RESOLVE_NV"/>
                <enum name="EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV"/>
                <enum name="EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV"/>
            </require>
        </extension>
        <extension name="EGL_NV_depth_nonlinear" supported="egl">
            <require>
                <enum name="EGL_DEPTH_ENCODING_NV"/>
                <enum name="EGL_DEPTH_ENCODING_NONE_NV"/>
                <enum name="EGL_DEPTH_ENCODING_NONLINEAR_NV"/>
            </require>
        </extension>
        <extension name="EGL_NV_native_query" supported="egl">
            <require>
                <command name="eglQueryNativeDisplayNV"/>
                <command name="eglQueryNativeWindowNV"/>
                <command name="eglQueryNativePixmapNV"/>
            </require>
        </extension>
        <extension name="EGL_NV_post_convert_rounding" supported="egl">
            <require>
            </require>
        </extension>
        <extension name="EGL_NV_post_sub_buffer" supported="egl">
            <require>
                <enum name="EGL_POST_SUB_BUFFER_SUPPORTED_NV"/>
                <command name="eglPostSubBufferNV"/>
            </require>
        </extension>
        <extension name="EGL_NV_sync" protect="KHRONOS_SUPPORT_INT64" supported="egl">
            <require>
                <enum name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV"/>
                <enum name="EGL_SYNC_STATUS_NV"/>
                <enum name="EGL_SIGNALED_NV"/>
                <enum name="EGL_UNSIGNALED_NV"/>
                <enum name="EGL_SYNC_FLUSH_COMMANDS_BIT_NV"/>
                <enum name="EGL_FOREVER_NV"/>
                <enum name="EGL_ALREADY_SIGNALED_NV"/>
                <enum name="EGL_TIMEOUT_EXPIRED_NV"/>
                <enum name="EGL_CONDITION_SATISFIED_NV"/>
                <enum name="EGL_SYNC_TYPE_NV"/>
                <enum name="EGL_SYNC_CONDITION_NV"/>
                <enum name="EGL_SYNC_FENCE_NV"/>
                <enum name="EGL_NO_SYNC_NV"/>
                <command name="eglCreateFenceSyncNV"/>
                <command name="eglDestroySyncNV"/>
                <command name="eglFenceNV"/>
                <command name="eglClientWaitSyncNV"/>
                <command name="eglSignalSyncNV"/>
                <command name="eglGetSyncAttribNV"/>
            </require>
        </extension>
        <extension name="EGL_NV_system_time" protect="KHRONOS_SUPPORT_INT64" supported="egl">
            <require>
                <command name="eglGetSystemTimeFrequencyNV"/>
                <command name="eglGetSystemTimeNV"/>
            </require>
        </extension>
    </extensions>
</registry>
Added jni/glshim/spec/xml/gles-2.0.xml.
































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
<?xml version="1.0" encoding="UTF-8"?>
<!-- Source: https://raw.github.com/laanwj/etna_viv/master/tools/data/gles2.xml -->
<!-- Copyright (c) 2012-2013 Wladimir J. van der Laan

 Permission is hereby granted, free of charge, to any person obtaining a
 copy of this software and associated documentation files (the "Software"),
 to deal in the Software without restriction, including without limitation
 the rights to use, copy, modify, merge, publish, distribute, sub license,
 and/or sell copies of the Software, and to permit persons to whom the
 Software is furnished to do so, subject to the following conditions:

 The above copyright notice and this permission notice (including the
 next paragraph) shall be included in all copies or substantial portions
 of the Software.

 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 DEALINGS IN THE SOFTWARE.
-->
<!-- List of OpenGL ES 2.0 functions with parameters.
     GLES2 specification in machine-parseable format for state probing.
 -->
<root>

<!-- format roughly based on rnndb -->
<!-- should be extendable by extensions (later work)
     values are not important here and would only cause clutter, as the values of state bits depend on the hw,
     also the same tokens can (and should) be part of multiple enumerations without any harm,
     they could be mapped with another map (tokens.xml) if important, ie to build hash tables
  -->
<enum name="Boolean">
    <value name="FALSE"/>
    <value name="TRUE"/>
</enum>
<bitset name="ClearBufferMask">
    <bitfield name="DEPTH_BUFFER_BIT"/>
    <bitfield name="STENCIL_BUFFER_BIT"/>
    <bitfield name="COLOR_BUFFER_BIT"/>
</bitset>
<enum name="BeginMode"> <!-- primitive type -->
    <value name="POINTS"/>
    <value name="LINES"/>
    <value name="LINE_LOOP"/>
    <value name="LINE_STRIP"/>
    <value name="TRIANGLES"/>
    <value name="TRIANGLE_STRIP"/>
    <value name="TRIANGLE_FAN"/>
    <!-- XXX QUADS also supported by Vivante blob, not in GLES2 -->
</enum>
<enum name="BlendingFactorDest">
    <value name="ZERO"/>
    <value name="ONE"/>
    <value name="SRC_COLOR"/>
    <value name="ONE_MINUS_SRC_COLOR"/>
    <value name="DST_COLOR"/>
    <value name="ONE_MINUS_DST_COLOR"/>
    <value name="SRC_ALPHA"/>
    <value name="ONE_MINUS_SRC_ALPHA"/>
    <value name="DST_ALPHA"/>
    <value name="ONE_MINUS_DST_ALPHA"/>
    <value name="CONSTANT_COLOR"/>
    <value name="ONE_MINUS_CONSTANT_COLOR"/>
    <value name="CONSTANT_ALPHA"/>
    <value name="ONE_MINUS_CONSTANT_ALPHA"/>
</enum>
<enum name="BlendingFactorSrc">
    <value name="ZERO"/>
    <value name="ONE"/>
    <value name="SRC_COLOR"/>
    <value name="ONE_MINUS_SRC_COLOR"/>
    <value name="DST_COLOR"/>
    <value name="ONE_MINUS_DST_COLOR"/>
    <value name="SRC_ALPHA"/>
    <value name="ONE_MINUS_SRC_ALPHA"/>
    <value name="DST_ALPHA"/>
    <value name="ONE_MINUS_DST_ALPHA"/>
    <value name="CONSTANT_COLOR"/>
    <value name="ONE_MINUS_CONSTANT_COLOR"/>
    <value name="CONSTANT_ALPHA"/>
    <value name="ONE_MINUS_CONSTANT_ALPHA"/>
    <value name="SRC_ALPHA_SATURATE"/>
</enum>
<enum name="BlendEquation">
    <value name="FUNC_ADD"/>
    <value name="FUNC_SUBTRACT"/>
    <value name="FUNC_REVERSE_SUBTRACT"/>
    <!-- MIN -->
    <!-- MAX -->
</enum>
<enum name="CullFaceMode"> <!-- Used by CullFace and XXXSeparate to specify face -->
    <value name="FRONT"/>
    <value name="BACK"/>
    <value name="FRONT_AND_BACK"/>
</enum>
<enum name="EnableCap"> <!-- Enable/Disable/IsEnabled -->
    <value name="BLEND"/>
    <value name="CULL_FACE"/>
    <value name="DEPTH_TEST"/>
    <value name="DITHER"/>
    <value name="POLYGON_OFFSET_FILL"/>
    <value name="SAMPLE_ALPHA_TO_COVERAGE"/>
    <value name="SAMPLE_COVERAGE"/>
    <value name="SCISSOR_TEST"/>
    <value name="STENCIL_TEST"/>
</enum>
<enum name="DepthFunction">
    <value name="NEVER"/>
    <value name="LESS"/>
    <value name="EQUAL"/>
    <value name="LEQUAL"/>
    <value name="GREATER"/>
    <value name="NOTEQUAL"/>
    <value name="GEQUAL"/>
    <value name="ALWAYS"/>
</enum>
<enum name="ErrorCode">
    <value name="NO_ERROR"/>
    <value name="INVALID_ENUM"/>
    <value name="INVALID_VALUE"/>
    <value name="INVALID_OPERATION"/>
    <value name="INVALID_FRAMEBUFFER_OPERATION"/>
    <value name="OUT_OF_MEMORY"/>
</enum>
<enum name="FrontFaceDirection">
    <value name="CW"/>
    <value name="CCW"/>
</enum>
<enum name="HintMode">
    <value name="DONT_CARE"/>
    <value name="FASTEST"/>
    <value name="NICEST"/>
</enum>
<enum name="HintTarget">
    <value name="GENERATE_MIPMAP_HINT"/>
</enum>
<enum name="DataType">  
    <value name="BYTE"/>
    <value name="UNSIGNED_BYTE"/>
    <value name="SHORT"/>
    <value name="UNSIGNED_SHORT"/>
    <value name="INT"/>
    <value name="UNSIGNED_INT"/>
    <value name="FLOAT"/>
    <value name="FIXED"/>
</enum>
<enum name="PixelFormat"> 
     <!-- XXX split up? used by various functions; 
         ReadPixels only accepts ALPHA, RGB, RGBA 
         TexImage2D only accepts ALPHA, RGB, RGBA, LUMINANCE, LUMINANCE_ALPHA
         See also TextureInternalFormat
       -->
    <value name="DEPTH_COMPONENT"/>
    <value name="ALPHA"/>
    <value name="RGB"/>
    <value name="RGBA"/>
    <value name="LUMINANCE"/>
    <value name="LUMINANCE_ALPHA"/>
</enum>
<enum name="PixelType">
    <value name="UNSIGNED_BYTE"/>
    <value name="UNSIGNED_SHORT_4_4_4_4"/>
    <value name="UNSIGNED_SHORT_5_5_5_1"/>
    <value name="UNSIGNED_SHORT_5_6_5"/>
</enum>
<enum name="StencilFunction">
    <value name="NEVER"/>
    <value name="LESS"/>
    <value name="EQUAL"/>
    <value name="LEQUAL"/>
    <value name="GREATER"/>
    <value name="NOTEQUAL"/>
    <value name="GEQUAL"/>
    <value name="ALWAYS"/>
</enum>
<enum name="StencilOp">
    <value name="ZERO"/>
    <value name="KEEP"/>
    <value name="REPLACE"/>
    <value name="INCR"/>
    <value name="DECR"/>
    <value name="INVERT"/>
    <value name="INCR_WRAP"/>
    <value name="DECR_WRAP"/>
</enum>
<enum name="StringName">
    <value name="VENDOR"/>
    <value name="RENDERER"/>
    <value name="VERSION"/>
    <value name="SHADING_LANGUAGE_VERSION"/>
    <value name="EXTENSIONS"/>
</enum>
<enum name="TextureMagFilter">
    <value name="NEAREST"/>
    <value name="LINEAR"/>
</enum>
<enum name="TextureMinFilter">
    <value name="NEAREST"/>
    <value name="LINEAR"/>
    <value name="NEAREST_MIPMAP_NEAREST"/>
    <value name="LINEAR_MIPMAP_NEAREST"/>
    <value name="NEAREST_MIPMAP_LINEAR"/>
    <value name="LINEAR_MIPMAP_LINEAR"/>
</enum>
<enum name="TextureParameterName">
    <value name="TEXTURE_MAG_FILTER"/>
    <value name="TEXTURE_MIN_FILTER"/>
    <value name="TEXTURE_WRAP_S"/>
    <value name="TEXTURE_WRAP_T"/>
</enum>
<enum name="TextureTarget"> <!-- general texture target -->
    <value name="TEXTURE_2D"/>
    <value name="TEXTURE_CUBE_MAP"/>
</enum>
<enum name="TextureTargetFace"> <!-- used when a specific face is to be specified, ie when uploading or binding framebuffer texture -->
    <value name="TEXTURE_2D"/>
    <value name="TEXTURE_CUBE_MAP_POSITIVE_X"/>
    <value name="TEXTURE_CUBE_MAP_NEGATIVE_X"/>
    <value name="TEXTURE_CUBE_MAP_POSITIVE_Y"/>
    <value name="TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
    <value name="TEXTURE_CUBE_MAP_POSITIVE_Z"/>
    <value name="TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
</enum>
<enum name="TextureUnit">
    <value name="TEXTURE0"/>
    <value name="TEXTURE1"/>
    <value name="TEXTURE2"/>
    <value name="TEXTURE3"/>
    <value name="TEXTURE4"/>
    <value name="TEXTURE5"/>
    <value name="TEXTURE6"/>
    <value name="TEXTURE7"/>
    <value name="TEXTURE8"/>
    <value name="TEXTURE9"/>
    <value name="TEXTURE10"/>
    <value name="TEXTURE11"/>
    <value name="TEXTURE12"/>
    <value name="TEXTURE13"/>
    <value name="TEXTURE14"/>
    <value name="TEXTURE15"/>
    <value name="TEXTURE16"/>
    <value name="TEXTURE17"/>
    <value name="TEXTURE18"/>
    <value name="TEXTURE19"/>
    <value name="TEXTURE20"/>
    <value name="TEXTURE21"/>
    <value name="TEXTURE22"/>
    <value name="TEXTURE23"/>
    <value name="TEXTURE24"/>
    <value name="TEXTURE25"/>
    <value name="TEXTURE26"/>
    <value name="TEXTURE27"/>
    <value name="TEXTURE28"/>
    <value name="TEXTURE29"/>
    <value name="TEXTURE30"/>
    <value name="TEXTURE31"/>
</enum>
<enum name="TextureWrapMode">
    <value name="REPEAT"/>
    <value name="CLAMP_TO_EDGE"/>
    <value name="MIRRORED_REPEAT"/>
</enum>
<enum name="TextureInternalFormat"> <!-- (Copy)TexImage2D -->
    <value name="ALPHA"/>
    <value name="LUMINANCE"/>
    <value name="LUMINANCE_ALPHA"/>
    <value name="RGB"/>
    <value name="RGBA"/>
</enum>
<enum name="RenderbufferInternalFormat"> <!-- RenderbufferStorage / GetRenderbufferParameter -->
    <value name="RGBA4"/> 
    <value name="RGB565"/> 
    <value name="RGB5_A1"/> 
    <value name="DEPTH_COMPONENT16"/> 
    <value name="STENCIL_INDEX8"/> 
</enum>
<enum name="UniformType"> <!-- GetActiveAttrib/GetActiveUniform -->
    <value name="FLOAT"/>
    <value name="FLOAT_VEC2"/>
    <value name="FLOAT_VEC3"/>
    <value name="FLOAT_VEC4"/>
    <value name="INT"/>
    <value name="INT_VEC2"/>
    <value name="INT_VEC3"/>
    <value name="INT_VEC4"/>
    <value name="BOOL"/>
    <value name="BOOL_VEC2"/>
    <value name="BOOL_VEC3"/>
    <value name="BOOL_VEC4"/>
    <value name="FLOAT_MAT2"/>
    <value name="FLOAT_MAT3"/>
    <value name="FLOAT_MAT4"/>
    <value name="SAMPLER_2D"/>
    <value name="SAMPLER_CUBE"/>
</enum>
<enum name="FramebufferAttachment">
    <value name="COLOR_ATTACHMENT0"/>
    <value name="DEPTH_ATTACHMENT"/>
    <value name="STENCIL_ATTACHMENT"/>
</enum>
<enum name="FramebufferStatus"> <!-- as returned by CheckFramebufferStatus -->
    <value name="FRAMEBUFFER_COMPLETE"/>
    <value name="FRAMEBUFFER_INCOMPLETE_ATTACHMENT"/>
    <value name="FRAMEBUFFER_INCOMPLETE_DIMENSIONS"/>
    <value name="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"/>
    <value name="FRAMEBUFFER_UNSUPPORTED"/>
</enum>
<enum name="FramebufferTarget">
    <value name="FRAMEBUFFER"/>
</enum>
<enum name="RenderbufferTarget">
    <value name="RENDERBUFFER"/>
</enum>
<enum name="GetVertexAttribParameterPName"> 
    <value name="VERTEX_ATTRIB_ARRAY_ENABLED"/>
    <value name="VERTEX_ATTRIB_ARRAY_SIZE"/>
    <value name="VERTEX_ATTRIB_ARRAY_STRIDE"/>
    <value name="VERTEX_ATTRIB_ARRAY_TYPE"/>
    <value name="VERTEX_ATTRIB_ARRAY_NORMALIZED"/>
    <value name="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"/>
    <value name="CURRENT_VERTEX_ATTRIB"/>
</enum>
<enum name="GetBufferParameterPName">
    <value name="BUFFER_SIZE"/>
    <value name="BUFFER_USAGE"/>
</enum>
<enum name="BufferTarget">
    <value name="ARRAY_BUFFER"/>
    <value name="ELEMENT_ARRAY_BUFFER"/>
</enum>
<enum name="BufferUsage">
    <value name="STREAM_DRAW"/>
    <value name="STATIC_DRAW"/>
    <value name="DYNAMIC_DRAW"/>
</enum>
<enum name="ShaderType">
    <value name="VERTEX_SHADER"/>
    <value name="FRAGMENT_SHADER"/>
</enum>
<enum name="PrecisionType"> <!-- GetShaderPrecisionFormat -->
    <value name="LOW_FLOAT"/>
    <value name="MEDIUM_FLOAT"/>
    <value name="HIGH_FLOAT"/>
    <value name="LOW_INT"/>
    <value name="MEDIUM_INT"/>
    <value name="HIGH_INT"/>
</enum>
<enum name="IndexType"> <!-- glDrawElephants type -->
    <value name="UNSIGNED_SHORT" brief="16 bit indices"/>
    <value name="UNSIGNED_BYTE" brief="32 bit indices"/>
</enum>
<enum name="GetPName">
    <value name="ACTIVE_TEXTURE"/>
    <value name="ALIASED_LINE_WIDTH_RANGE"/>
    <value name="ALIASED_POINT_SIZE_RANGE"/>
    <value name="ALPHA_BITS"/>
    <value name="ARRAY_BUFFER_BINDING"/>
    <value name="BLEND"/>
    <value name="BLEND_COLOR"/>
    <value name="BLEND_DST_ALPHA"/>
    <value name="BLEND_DST_RGB"/>
    <value name="BLEND_EQUATION_ALPHA"/>
    <value name="BLEND_EQUATION_RGB"/>
    <value name="BLEND_SRC_ALPHA"/>
    <value name="BLEND_SRC_RGB"/>
    <value name="BLUE_BITS"/>
    <value name="COLOR_CLEAR_VALUE"/>
    <value name="COLOR_WRITEMASK"/>
    <value name="COMPRESSED_TEXTURE_FORMATS"/>
    <value name="CULL_FACE"/>
    <value name="CULL_FACE_MODE"/>
    <value name="CURRENT_PROGRAM"/>
    <value name="DEPTH_BITS"/>
    <value name="DEPTH_CLEAR_VALUE"/>
    <value name="DEPTH_FUNC"/>
    <value name="DEPTH_RANGE"/>
    <value name="DEPTH_TEST"/>
    <value name="DEPTH_WRITEMASK"/>
    <value name="DITHER"/>
    <value name="ELEMENT_ARRAY_BUFFER_BINDING"/>
    <value name="FRAMEBUFFER_BINDING"/>
    <value name="FRONT_FACE"/>
    <value name="GENERATE_MIPMAP_HINT"/>
    <value name="GREEN_BITS"/>
    <value name="IMPLEMENTATION_COLOR_READ_FORMAT"/>
    <value name="IMPLEMENTATION_COLOR_READ_TYPE"/>
    <value name="LINE_WIDTH"/>
    <value name="MAX_COMBINED_TEXTURE_IMAGE_UNITS"/>
    <value name="MAX_CUBE_MAP_TEXTURE_SIZE"/>
    <value name="MAX_FRAGMENT_UNIFORM_VECTORS"/>
    <value name="MAX_RENDERBUFFER_SIZE"/>
    <value name="MAX_TEXTURE_IMAGE_UNITS"/>
    <value name="MAX_TEXTURE_SIZE"/>
    <value name="MAX_VARYING_VECTORS"/>
    <value name="MAX_VERTEX_ATTRIBS"/>
    <value name="MAX_VERTEX_TEXTURE_IMAGE_UNITS"/>
    <value name="MAX_VERTEX_UNIFORM_VECTORS"/>
    <value name="MAX_VIEWPORT_DIMS"/>
    <value name="NUM_COMPRESSED_TEXTURE_FORMATS"/>
    <value name="NUM_SHADER_BINARY_FORMATS"/>
    <value name="PACK_ALIGNMENT"/>
    <value name="POLYGON_OFFSET_FACTOR"/>
    <value name="POLYGON_OFFSET_FILL"/>
    <value name="POLYGON_OFFSET_UNITS"/>
    <value name="RED_BITS"/>
    <value name="RENDERBUFFER_BINDING"/>
    <value name="SAMPLE_TO_ALPHA_COVERAGE"/>
    <value name="SAMPLE_BUFFERS"/>
    <value name="SAMPLE_COVERAGE"/>
    <value name="SAMPLE_COVERAGE_INVERT"/>
    <value name="SAMPLE_COVERAGE_VALUE"/>
    <value name="SAMPLES"/>
    <value name="SCISSOR_BOX"/>
    <value name="SCISSOR_TEST"/>
    <value name="SHADER_BINARY_FORMATS"/>
    <value name="SHADER_COMPILER"/>
    <value name="STENCIL_BACK_FAIL"/>
    <value name="STENCIL_BACK_FUNC"/>
    <value name="STENCIL_BACK_PASS_DEPTH_FAIL"/>
    <value name="STENCIL_BACK_PASS_DEPTH_PASS"/>
    <value name="STENCIL_BACK_REF"/>
    <value name="STENCIL_BACK_VALUE_MASK"/>
    <value name="STENCIL_BACK_WRITEMASK"/>
    <value name="STENCIL_BITS"/>
    <value name="STENCIL_CLEAR_VALUE"/>
    <value name="STENCIL_FAIL"/>
    <value name="STENCIL_FUNC"/>
    <value name="STENCIL_PASS_DEPTH_FAIL"/>
    <value name="STENCIL_PASS_DEPTH_PASS"/>
    <value name="STENCIL_REF"/>
    <value name="STENCIL_TEST"/>
    <value name="STENCIL_VALUE_MASK"/>
    <value name="STENCIL_WRITEMASK"/>
    <value name="SUBPIXEL_BITS"/>
    <value name="TEXTURE_BINDING_2D"/>
    <value name="TEXTURE_BINDING_CUBE_MAP"/>
    <value name="UNPACK_ALIGNMENT"/>
    <value name="VIEWPORT"/>
</enum>
<enum name="FramebufferAttachmentParameter">
    <value name="ATTACHMENT_OBJECT_TYPE"/>
    <value name="ATTACHMENT_OBJECT_NAME"/>
    <value name="ATTACHMENT_TEXTURE_LEVEL"/>
    <value name="ATTACHMENT_TEXTURE_CUBE_MAP_FACE"/>
</enum>
<enum name="FramebufferAttachmentObjectType"> <!-- returned by GetFrameBufferAttachmentParameteriv -->
    <value name="RENDERBUFFER"/>
    <value name="TEXTURE"/>
    <value name="NONE"/>
</enum>
<enum name="GetProgramPName">
    <value name="DELETE_STATUS"/>
    <value name="LINK_STATUS"/>
    <value name="VALIDATE_STATUS"/>
    <value name="INFO_LOG_LENGTH"/>
    <value name="ATTACHED_SHADERS"/>
    <value name="ACTIVE_ATTRIBUTES"/>
    <value name="ACTIVE_ATTRIBUTE_MAX_LENGTH"/>
    <value name="ACTIVE_UNIFORMS"/>
    <value name="ACTIVE_UNIFORM_MAX_LENGTH"/>
</enum>
<enum name="GetRenderbufferParameterPName">
    <value name="RENDERBUFFER_WIDTH"/>
    <value name="RENDERBUFFER_HEIGHT"/>
    <value name="RENDERBUFFER_INTERNAL_FORMAT"/>
    <value name="RENDERBUFFER_RED_SIZE"/>
    <value name="RENDERBUFFER_GREEN_SIZE"/>
    <value name="RENDERBUFFER_BLUE_SIZE"/>
    <value name="RENDERBUFFER_ALPHA_SIZE"/>
    <value name="RENDERBUFFER_DEPTH_SIZE"/>
    <value name="RENDERBUFFER_STENCIL_SIZE"/>
</enum>
<enum name="GetVertexAttribPointerPName">
    <value name="VERTEX_ATTRIB_ARRAY_POINTER"/>
</enum>
<enum name="PixelStorePName">
    <value name="PACK_ALIGNMENT"/>
    <value name="UNPACK_ALIGNMENT"/>
</enum>
<enum name="ShaderBinaryFormat">
    <!-- None by default, provided by extensions -->
</enum>
<enum name="CompressedTextureFormat">
    <!-- None by default, provided by extensions -->
</enum>
<enum name="VertexAttribType"> <!-- subset of DataType -->
    <!-- VertexAttribPointer only needs BYTE, UNSIGNED_BYTE, SHORT, UNSIGNED_SHORT, FIXED, FLOAT 
         What about (UNSIGNED_)INT? Are these part of an extension?
     -->
    <value name="BYTE"/>
    <value name="UNSIGNED_BYTE"/>
    <value name="SHORT"/>
    <value name="UNSIGNED_SHORT"/>
    <!-- <value name="INT"/> -->
    <!-- <value name="UNSIGNED_INT"/> -->
    <value name="FLOAT"/>
    <value name="FIXED"/>
</enum>
<enum name="GetFramebufferAttachmentParameterPName">
    <value name="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"/>
    <value name="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"/>
    <value name="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"/>
    <value name="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"/>
</enum>
<enum name="GetShaderPName">
    <value name="SHADER_TYPE"/>
    <value name="DELETE_STATUS"/>
    <value name="COMPILE_STATUS"/>
    <value name="INFO_LOG_LENGTH"/>
    <value name="SHADER_SOURCE_LENGTH"/>
</enum>

<functions>
<!-- based on mesa/src/mapi/glapi/gen/*.xml -->
    <function name="glActiveTexture">
        <param name="texture" type="GLenum" enum="TextureUnit"/>
    </function>
    <function name="glAttachShader">
        <param name="program" type="GLuint"/>
        <param name="shader" type="GLuint"/>
    </function>
    <function name="glBindAttribLocation">
        <param name="program" type="GLuint"/>
        <param name="index" type="GLuint"/>
        <param name="name" type="const GLchar *"/>
    </function>
    <function name="glBindBuffer">
        <param name="target" type="GLenum" enum="BufferTarget"/>
        <param name="buffer" type="GLuint"/>
    </function>
    <function name="glBindFramebuffer">
        <param name="target" type="GLenum" enum="FramebufferTarget"/>
        <param name="framebuffer" type="GLuint"/>
    </function>
    <function name="glBindRenderbuffer">
        <param name="target" type="GLenum" enum="RenderbufferTarget"/>
        <param name="renderbuffer" type="GLuint"/>
    </function>
    <function name="glBindTexture">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="texture" type="GLuint"/>
    </function>
    <function name="glBlendColor">
        <param name="red" type="GLclampf"/>
        <param name="green" type="GLclampf"/>
        <param name="blue" type="GLclampf"/>
        <param name="alpha" type="GLclampf"/>
    </function>
    <function name="glBlendEquation">
        <param name="mode" type="GLenum" enum="BlendEquation"/>
    </function>
    <function name="glBlendEquationSeparate">
        <param name="modeRGB" type="GLenum" enum="BlendEquation"/>
        <param name="modeA" type="GLenum" enum="BlendEquation"/>
    </function>
    <function name="glBlendFunc">
        <param name="sfactor" type="GLenum" enum="BlendingFactorSrc"/>
        <param name="dfactor" type="GLenum" enum="BlendingFactorDest"/>
    </function>
    <function name="glBlendFuncSeparate">
        <param name="sfactorRGB" type="GLenum" enum="BlendingFactorSrc"/>
        <param name="dfactorRGB" type="GLenum" enum="BlendingFactorDest"/>
        <param name="sfactorAlpha" type="GLenum" enum="BlendingFactorSrc"/>
        <param name="dfactorAlpha" type="GLenum" enum="BlendingFactorDest"/>
    </function>
    <function name="glBufferData">
        <param name="target" type="GLenum" enum="BufferTarget"/>
        <param name="size" type="GLsizeiptr" counter="true"/>
        <param name="data" type="const GLvoid *" count="size" img_null_flag="true"/>
        <param name="usage" type="GLenum" enum="BufferUsage"/>
    </function>
    <function name="glBufferSubData">
        <param name="target" type="GLenum" enum="BufferTarget"/>
        <param name="offset" type="GLintptr"/>
        <param name="size" type="GLsizeiptr" counter="true"/>
        <param name="data" type="const GLvoid *" count="size"/>
    </function>
    <function name="glCheckFramebufferStatus">
        <param name="target" type="GLenum" enum="FramebufferTarget"/>
	<return type="GLenum" enum="FramebufferStatus"/>
    </function>
    <function name="glClear">
        <param name="mask" type="GLbitfield" bitfield="ClearBufferMask"/>
    </function>
    <function name="glClearColor">
        <param name="red" type="GLclampf"/>
        <param name="green" type="GLclampf"/>
        <param name="blue" type="GLclampf"/>
        <param name="alpha" type="GLclampf"/>
    </function>
    <function name="glClearDepthf">
        <param name="depth" type="GLclampf"/>
    </function>
    <function name="glClearStencil">
        <param name="s" type="GLint"/>
    </function>
    <function name="glColorMask">
        <param name="red" type="GLboolean"/>
        <param name="green" type="GLboolean"/>
        <param name="blue" type="GLboolean"/>
        <param name="alpha" type="GLboolean"/>
    </function>
    <function name="glCompileShader">
        <param name="shader" type="GLuint"/>
    </function>
    <function name="glCompressedTexImage2D">
        <param name="target" type="GLenum" enum="TextureTargetFace"/>
        <param name="level" type="GLint"/>
        <param name="internalformat" type="GLenum" enum="CompressedTextureFormat"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
        <param name="border" type="GLint"/>
        <param name="imageSize" type="GLsizei" counter="true"/>
        <param name="data" type="const GLvoid *" count="imageSize"/>
    </function>
    <function name="glCompressedTexSubImage2D">
        <param name="target" type="GLenum" enum="TextureTargetFace"/>
        <param name="level" type="GLint"/>
        <param name="xoffset" type="GLint"/>
        <param name="yoffset" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
        <param name="format" type="GLenum" enum="CompressedTextureFormat"/>
        <param name="imageSize" type="GLsizei" counter="true"/>
        <param name="data" type="const GLvoid *" count="imageSize"/>
    </function>
    <function name="glCopyTexImage2D">
        <param name="target" type="GLenum" enum="TextureTargetFace"/>
        <param name="level" type="GLint"/>
        <param name="internalformat" type="GLenum" enum="TextureInternalFormat"/>
        <param name="x" type="GLint"/>
        <param name="y" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
        <param name="border" type="GLint"/>
    </function>
    <function name="glCopyTexSubImage2D">
        <param name="target" type="GLenum" enum="TextureTargetFace"/>
        <param name="level" type="GLint"/>
        <param name="xoffset" type="GLint"/>
        <param name="yoffset" type="GLint"/>
        <param name="x" type="GLint"/>
        <param name="y" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
    </function>
    <function name="glCreateProgram">
        <return type="GLuint"/>
    </function>
    <function name="glCreateShader">
        <param name="type" type="GLenum" enum="ShaderType"/>
        <return type="GLuint"/>
    </function>
    <function name="glCullFace">
        <param name="mode" type="GLenum" enum="CullFaceMode"/>
    </function>
    <function name="glDeleteBuffers">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="buffer" type="const GLuint *" count="n"/>
    </function>
    <function name="glDeleteFramebuffers">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="framebuffers" type="const GLuint *" count="n"/>
    </function>
    <function name="glDeleteProgram">
        <param name="program" type="GLuint"/>
    </function>
    <function name="glDeleteRenderbuffers">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="renderbuffers" type="const GLuint *" count="n"/>
    </function>
    <function name="glDeleteShader">
        <param name="program" type="GLuint"/>
    </function>
    <function name="glDeleteTextures">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="textures" type="const GLuint *" count="n"/>
    </function>
    <function name="glDepthFunc">
        <param name="func" type="GLenum" enum="DepthFunction"/>
    </function>
    <function name="glDepthMask">
        <param name="flag" type="GLboolean"/>
    </function>
    <function name="glDepthRangef">
        <param name="zNear" type="GLclampf"/>
        <param name="zFar" type="GLclampf"/>
    </function>
    <function name="glDetachShader">
        <param name="program" type="GLuint"/>
        <param name="shader" type="GLuint"/>
    </function>
    <function name="glDisable">
        <param name="cap" type="GLenum" enum="EnableCap"/>
    </function>
    <function name="glDisableVertexAttribArray">
        <param name="index" type="GLuint"/>
    </function>
    <function name="glDrawArrays">
        <param name="mode" type="GLenum" enum="BeginMode"/>
        <param name="first" type="GLint"/>
        <param name="count" type="GLsizei"/>
    </function>
    <function name="glDrawElements">
        <param name="mode" type="GLenum" enum="BeginMode"/>
        <param name="count" type="GLsizei"/>
        <param name="type" type="GLenum" enum="IndexType"/>
        <param name="indices" type="const GLvoid *"/>
    </function>
    <function name="glEnable">
        <param name="cap" type="GLenum" enum="EnableCap"/>
    </function>
    <function name="glEnableVertexAttribArray">
        <param name="index" type="GLuint"/>
    </function>
    <function name="glFinish">
    </function>
    <function name="glFlush">
    </function>
    <function name="glFramebufferRenderbuffer">
        <param name="target" type="GLenum" enum="FramebufferTarget"/>
        <param name="attachment" type="GLenum" enum="FramebufferAttachment"/>
        <param name="renderbuffertarget" type="GLenum" enum="RenderbufferTarget"/>
        <param name="renderbuffer" type="GLuint"/>
    </function>
    <function name="glFramebufferTexture2D">
        <param name="target" type="GLenum" enum="FramebufferTarget"/>
        <param name="attachment" type="GLenum" enum="FramebufferAttachment"/>
        <param name="textarget" type="GLenum" enum="TextureTargetFace"/>
        <param name="texture" type="GLuint"/>
        <param name="level" type="GLint"/>
    </function>
    <function name="glFrontFace">
        <param name="mode" type="GLenum" enum="FrontFaceDirection"/>
    </function>
    <function name="glGenBuffers">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="buffer" type="GLuint *" output="true" count="n"/>
    </function>
    <function name="glGenerateMipmap">
        <param name="target" type="GLenum" enum="TextureTarget"/>
    </function>
    <function name="glGenFramebuffers">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="framebuffers" type="GLuint *" count="n" output="true"/>
    </function>
    <function name="glGenRenderbuffers">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="renderbuffers" type="GLuint *" count="n" output="true"/>
    </function>
    <function name="glGenTextures">
        <param name="n" type="GLsizei" counter="true"/>
        <param name="textures" type="GLuint *" output="true" count="n"/>
    </function>
    <function name="glGetActiveAttrib">
        <param name="program" type="GLuint"/>
        <param name="index" type="GLuint"/>
        <param name="bufSize" type="GLsizei"/>
        <param name="length" type="GLsizei *" output="true"/>
        <param name="size" type="GLint *" output="true"/>
        <param name="type" type="GLenum *" output="true" enum="UniformType"/>
        <param name="name" type="GLchar *" output="true"/>
    </function>
    <function name="glGetActiveUniform">
        <param name="program" type="GLuint"/>
        <param name="index" type="GLuint"/>
        <param name="bufSize" type="GLsizei"/>
        <param name="length" type="GLsizei *" output="true"/>
        <param name="size" type="GLint *" output="true"/>
        <param name="type" type="GLenum *" output="true" enum="UniformType"/>
        <param name="name" type="GLchar *" output="true"/>
    </function>
    <function name="glGetAttachedShaders">
        <param name="program" type="GLuint"/>
        <param name="maxCount" type="GLsizei"/>
        <param name="count" type="GLsizei *" output="true"/>
        <param name="obj" type="GLuint *" output="true"/>
    </function>
    <function name="glGetAttribLocation">
        <param name="program" type="GLuint"/>
        <param name="name" type="const GLchar *"/>
        <return type="GLint"/>
    </function>
    <function name="glGetBooleanv">
        <param name="pname" type="GLenum" enum="GetPName"/>
        <param name="params" type="GLboolean *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetBufferParameteriv">
        <param name="target" type="GLenum" enum="BufferTarget"/>
        <param name="pname" type="GLenum" enum="GetBufferParameterPName"/>
        <param name="params" type="GLint *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetError">
        <return type="GLenum" enum="ErrorCode"/>
    </function>
    <function name="glGetFloatv">
        <param name="pname" type="GLenum" enum="GetPName"/>
        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetFramebufferAttachmentParameteriv">
        <param name="target" type="GLenum" enum="FramebufferTarget"/>
        <param name="attachment" type="GLenum" enum="FramebufferAttachment"/>
        <param name="pname" type="GLenum" enum="GetFramebufferAttachmentParameterPName"/>
        <param name="params" type="GLint *" output="true"/>
    </function>
    <function name="glGetIntegerv">
        <param name="pname" type="GLenum" enum="GetPName"/>
        <param name="params" type="GLint *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetProgramiv">
        <param name="program" type="GLuint"/>
        <param name="pname" type="GLenum" enum="GetProgramPName"/>
        <param name="params" type="GLint *"/>
    </function>
    <function name="glGetProgramInfoLog">
        <param name="program" type="GLuint"/>
        <param name="bufSize" type="GLsizei"/>
        <param name="length" type="GLsizei *"/>
        <param name="infoLog" type="GLchar *"/>
    </function>
    <function name="glGetRenderbufferParameteriv">
        <param name="target" type="GLenum" enum="RenderbufferTarget"/>
        <param name="pname" type="GLenum" enum="GetRenderbufferParameterPName"/>
        <param name="params" type="GLint *" output="true"/>
    </function>
    <function name="glGetShaderiv">
        <param name="shader" type="GLuint"/>
        <param name="pname" type="GLenum" enum="GetShaderPName"/>
        <param name="params" type="GLint *"/>
    </function>
    <function name="glGetShaderInfoLog">
        <param name="shader" type="GLuint"/>
        <param name="bufSize" type="GLsizei"/>
        <param name="length" type="GLsizei *"/>
        <param name="infoLog" type="GLchar *"/>
    </function>
    <function name="glGetShaderPrecisionFormat">
        <param name="shadertype" type="GLenum" enum="ShaderType"/>
        <param name="precisiontype" type="GLenum" enum="PrecisionType"/>
        <param name="range" type="GLint *"/>
        <param name="precision" type="GLint *"/>
    </function>
    <function name="glGetShaderSource">
        <param name="shader" type="GLuint"/>
        <param name="bufSize" type="GLsizei"/>
        <param name="length" type="GLsizei *" output="true"/>
        <param name="source" type="GLchar *" output="true"/>
    </function>
    <function name="glGetString">
        <param name="name" type="GLenum" enum="StringName"/>
        <return type="const GLubyte *"/>
    </function>
    <function name="glGetTexParameterfv">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="pname" type="GLenum" enum="TextureParameterName"/>
        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetTexParameteriv">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="pname" type="GLenum" enum="TextureParameterName"/>
        <param name="params" type="GLint *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetUniformfv">
        <param name="program" type="GLuint"/>
        <param name="location" type="GLint"/>
        <param name="params" type="GLfloat *" output="true"/>
    </function>
    <function name="glGetUniformiv">
        <param name="program" type="GLuint"/>
        <param name="location" type="GLint"/>
        <param name="params" type="GLint *" output="true"/>
    </function>
    <function name="glGetUniformLocation">
        <param name="program" type="GLuint"/>
        <param name="name" type="const GLchar *"/>
        <return type="GLint"/>
    </function>
    <function name="glGetVertexAttribfv">
        <param name="index" type="GLuint"/>
        <param name="pname" type="GLenum" enum="GetVertexAttribParameterPName"/>
        <param name="params" type="GLfloat *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetVertexAttribiv">
        <param name="index" type="GLuint"/>
        <param name="pname" type="GLenum" enum="GetVertexAttribParameterPName"/>
        <param name="params" type="GLint *" output="true" variable_param="pname"/>
    </function>
    <function name="glGetVertexAttribPointerv">
        <param name="index" type="GLuint"/>
        <param name="pname" type="GLenum" enum="GetVertexAttribPointerPName"/>
        <param name="pointer" type="GLvoid **" output="true"/>
    </function>
    <function name="glHint">
        <param name="target" type="GLenum" enum="HintTarget"/>
        <param name="mode" type="GLenum" enum="HintMode"/>
    </function>
    <function name="glIsBuffer">
        <param name="buffer" type="GLuint"/>
        <return type="GLboolean"/>
    </function>
    <function name="glIsEnabled">
        <param name="cap" type="GLenum" enum="EnableCap"/>
        <return type="GLboolean"/>
    </function>
    <function name="glIsFramebuffer">
        <param name="framebuffer" type="GLuint"/>
	<return type="GLboolean"/>
    </function>
    <function name="glIsProgram">
        <param name="program" type="GLuint"/>
        <return type="GLboolean"/>
    </function>
    <function name="glIsRenderbuffer">
        <param name="renderbuffer" type="GLuint"/>
	<return type="GLboolean"/>
    </function>
    <function name="glIsShader">
        <param name="shader" type="GLuint"/>
        <return type="GLboolean"/>
    </function>
    <function name="glIsTexture">
        <param name="texture" type="GLuint"/>
        <return type="GLboolean"/>
    </function>
    <function name="glLineWidth">
        <param name="width" type="GLfloat"/>
    </function>
    <function name="glLinkProgram">
        <param name="program" type="GLuint"/>
    </function>
    <function name="glPixelStorei">
        <param name="pname" type="GLenum" enum="PixelStorePName"/>
        <param name="param" type="GLint"/>
    </function>
    <function name="glPolygonOffset">
        <param name="factor" type="GLfloat"/>
        <param name="units" type="GLfloat"/>
    </function>
    <function name="glReadPixels">
        <param name="x" type="GLint"/>
        <param name="y" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
        <param name="format" type="GLenum" enum="PixelFormat"/>
        <param name="type" type="GLenum" enum="PixelType"/>
        <param name="pixels" type="GLvoid *" output="true"  img_width="width" img_height="height" img_format="format" img_type="type" img_target="0"/>
    </function>
    <function name="glReleaseShaderCompiler">
    </function>
    <function name="glRenderbufferStorage">
        <param name="target" type="GLenum" enum="RenderbufferTarget"/>
        <param name="internalformat" type="GLenum" enum="RenderbufferInternalFormat"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
    </function>
    <function name="glSampleCoverage">
        <param name="value" type="GLclampf"/>
        <param name="invert" type="GLboolean"/>
    </function>
    <function name="glScissor">
        <param name="x" type="GLint"/>
        <param name="y" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
    </function>
    <function name="glShaderBinary">
        <param name="n" type="GLsizei"/>
        <param name="shaders" type="const GLuint *"/>
        <param name="binaryformat" type="GLenum" enum="ShaderBinaryFormat"/>
        <param name="binary" type="const GLvoid *"/>
        <param name="length" type="GLsizei"/>
    </function>
    <function name="glShaderSource">
        <param name="shader" type="GLuint"/>
        <param name="count" type="GLsizei"/>
        <param name="string" type="const GLchar * const *"/>
        <param name="length" type="const GLint *"/>
    </function>
    <function name="glStencilFunc">
        <param name="func" type="GLenum" enum="StencilFunction"/>
        <param name="ref" type="GLint"/>
        <param name="mask" type="GLuint"/>
    </function>
    <function name="glStencilFuncSeparate">
        <param name="face" type="GLenum" enum="CullFaceMode"/>
        <param name="func" type="GLenum" enum="StencilFunction"/>
        <param name="ref" type="GLint"/>
        <param name="mask" type="GLuint"/>
    </function>
    <function name="glStencilMask">
        <param name="mask" type="GLuint"/>
    </function>
    <function name="glStencilMaskSeparate">
        <param name="face" type="GLenum" enum="CullFaceMode"/>
        <param name="mask" type="GLuint"/>
    </function>
    <function name="glStencilOp">
        <param name="fail" type="GLenum" enum="StencilOp"/>
        <param name="zfail" type="GLenum" enum="StencilOp"/>
        <param name="zpass" type="GLenum" enum="StencilOp"/>
    </function>
    <function name="glStencilOpSeparate">
        <param name="face" type="GLenum" enum="CullFaceMode"/>
        <param name="sfail" type="GLenum" enum="StencilOp"/>
        <param name="zfail" type="GLenum" enum="StencilOp"/>
        <param name="zpass" type="GLenum" enum="StencilOp"/>
    </function>
    <function name="glTexImage2D">
        <param name="target" type="GLenum" enum="TextureTargetFace"/>
        <param name="level" type="GLint"/>
        <param name="internalformat" type="GLint" enum="TextureInternalFormat"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
        <param name="border" type="GLint"/>
        <param name="format" type="GLenum" enum="PixelFormat"/>
        <param name="type" type="GLenum" enum="PixelType"/>
        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_format="format" img_type="type" img_target="target" img_send_null="true" img_pad_dimensions="true"/>
    </function>
    <function name="glTexParameterf">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="pname" type="GLenum" enum="TextureParameterName"/>
        <param name="param" type="GLfloat"/>
    </function>
    <function name="glTexParameterfv">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="pname" type="GLenum" enum="TextureParameterName"/>
        <param name="params" type="const GLfloat *" variable_param="pname"/>
    </function>
    <function name="glTexParameteri">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="pname" type="GLenum" enum="TextureParameterName"/>
        <param name="param" type="GLint"/>
    </function>
    <function name="glTexParameteriv">
        <param name="target" type="GLenum" enum="TextureTarget"/>
        <param name="pname" type="GLenum" enum="TextureParameterName"/>
        <param name="params" type="const GLint *" variable_param="pname"/>
    </function>
    <function name="glTexSubImage2D">
        <param name="target" type="GLenum" enum="TextureTargetFace"/>
        <param name="level" type="GLint"/>
        <param name="xoffset" type="GLint"/>
        <param name="yoffset" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
        <param name="format" type="GLenum" enum="PixelFormat"/>
        <param name="type" type="GLenum" enum="PixelType"/>
        <param name="pixels" type="const GLvoid *" img_width="width" img_height="height" img_xoff="xoffset" img_yoff="yoffset" img_format="format" img_type="type" img_target="target" img_pad_dimensions="true"/>
    </function>
    <function name="glUniform1f">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLfloat"/>
    </function>
    <function name="glUniform1fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUniform1i">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLint"/>
    </function>
    <function name="glUniform1iv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLint *"/>
    </function>
    <function name="glUniform2f">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLfloat"/>
        <param name="v1" type="GLfloat"/>
    </function>
    <function name="glUniform2fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUniform2i">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLint"/>
        <param name="v1" type="GLint"/>
    </function>
    <function name="glUniform2iv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLint *"/>
    </function>
    <function name="glUniform3f">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLfloat"/>
        <param name="v1" type="GLfloat"/>
        <param name="v2" type="GLfloat"/>
    </function>
    <function name="glUniform3fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUniform3i">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLint"/>
        <param name="v1" type="GLint"/>
        <param name="v2" type="GLint"/>
    </function>
    <function name="glUniform3iv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLint *"/>
    </function>
    <function name="glUniform4f">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLfloat"/>
        <param name="v1" type="GLfloat"/>
        <param name="v2" type="GLfloat"/>
        <param name="v3" type="GLfloat"/>
    </function>
    <function name="glUniform4fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUniform4i">
        <param name="location" type="GLint"/>
        <param name="v0" type="GLint"/>
        <param name="v1" type="GLint"/>
        <param name="v2" type="GLint"/>
        <param name="v3" type="GLint"/>
    </function>
    <function name="glUniform4iv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="value" type="const GLint *"/>
    </function>
    <function name="glUniformMatrix2fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="transpose" type="GLboolean"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUniformMatrix3fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="transpose" type="GLboolean"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUniformMatrix4fv">
        <param name="location" type="GLint"/>
        <param name="count" type="GLsizei"/>
        <param name="transpose" type="GLboolean"/>
        <param name="value" type="const GLfloat *"/>
    </function>
    <function name="glUseProgram">
        <param name="program" type="GLuint"/>
    </function>
    <function name="glValidateProgram">
        <param name="program" type="GLuint"/>
    </function>
    <function name="glVertexAttrib1f">
        <param name="index" type="GLuint"/>
        <param name="x" type="GLfloat"/>
    </function>
    <function name="glVertexAttrib1fv">
        <param name="index" type="GLuint"/>
        <param name="v" type="const GLfloat *"/>
    </function>
    <function name="glVertexAttrib2f">
        <param name="index" type="GLuint"/>
        <param name="x" type="GLfloat"/>
        <param name="y" type="GLfloat"/>
    </function>
    <function name="glVertexAttrib2fv">
        <param name="index" type="GLuint"/>
        <param name="v" type="const GLfloat *"/>
    </function>
    <function name="glVertexAttrib3f">
        <param name="index" type="GLuint"/>
        <param name="x" type="GLfloat"/>
        <param name="y" type="GLfloat"/>
        <param name="z" type="GLfloat"/>
    </function>
    <function name="glVertexAttrib3fv">
        <param name="index" type="GLuint"/>
        <param name="v" type="const GLfloat *"/>
    </function>
    <function name="glVertexAttrib4f">
        <param name="index" type="GLuint"/>
        <param name="x" type="GLfloat"/>
        <param name="y" type="GLfloat"/>
        <param name="z" type="GLfloat"/>
        <param name="w" type="GLfloat"/>
    </function>
    <function name="glVertexAttrib4fv">
        <param name="index" type="GLuint"/>
        <param name="v" type="const GLfloat *"/>
    </function>
    <function name="glVertexAttribPointer">
        <param name="index" type="GLuint"/>
        <param name="size" type="GLint"/>
        <param name="type" type="GLenum" enum="VertexAttribType"/>
        <param name="normalized" type="GLboolean"/>
        <param name="stride" type="GLsizei"/>
        <param name="pointer" type="const GLvoid *"/>
    </function>
    <function name="glViewport">
        <param name="x" type="GLint"/>
        <param name="y" type="GLint"/>
        <param name="width" type="GLsizei"/>
        <param name="height" type="GLsizei"/>
    </function>
</functions>

</root>

Added jni/glshim/spec/xml/glx.xml.






































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
<?xml version="1.0" encoding="UTF-8"?>

<specification xmlns="http://www.opengl.org/registry/" name="GLX" specversion="1.3" fileversion="0.0.1" >
	<typemap >
        <type-def typename="Int32" C-lang="uint32_t" />
		<type-def typename="GLXPixmap" C-lang="GLXPixmap" />
		<type-def typename="FunctionPointer" C-lang="__GLXextFuncPtr" />
		<type-def typename="GLXPbufferSGIX" C-lang="GLXPbufferSGIX" />
		<type-def typename="long" C-lang="long" />
		<type-def typename="DMbuffer" C-lang="DMbuffer" />
		<type-def typename="GLXFBConfig" C-lang="GLXFBConfig" />
		<type-def typename="VLServer" C-lang="VLServer" />
		<type-def typename="GLXPbuffer" C-lang="GLXPbuffer" />
		<type-def typename="int64_t" C-lang="int64_t" />
		<type-def typename="GLXFBConfigSGIX" C-lang="GLXFBConfigSGIX" />
		<type-def typename="GLubyte" C-lang="GLubyte" />
		<type-def typename="GLenum" C-lang="GLenum" />
		<type-def typename="VLPath" C-lang="VLPath" />
		<type-def typename="GLXHyperpipeConfigSGIXPointer" C-lang="GLXHyperpipeConfigSGIX *" />
		<type-def typename="constGLXContext" C-lang="const GLXContext" />
		<type-def typename="GLXDrawable" C-lang="GLXDrawable" />
		<type-def typename="Pixmap" C-lang="Pixmap" />
		<type-def typename="Colormap" C-lang="Colormap" />
		<type-def typename="GLXFBConfigPointer" C-lang="GLXFBConfig *" />
		<type-def typename="Uint" C-lang="unsigned int" />
		<type-def typename="int32_t" C-lang="int32_t" />
		<type-def typename="GLint" C-lang="GLint" />
		<type-def typename="uintPointer" C-lang="unsigned int *" />
		<type-def typename="GLXVideoDeviceNV" C-lang="GLXVideoDeviceNV" />
		<type-def typename="Window" C-lang="Window" />
		<type-def typename="GLfunction" C-lang="GLfunction" />
		<type-def typename="GLXVideoCaptureDeviceNVPointer" C-lang="GLXVideoCaptureDeviceNV *" />
		<type-def typename="GLXVideoSourceSGIX" C-lang="GLXVideoSourceSGIX" />
		<type-def typename="Display" C-lang="Display" />
		<type-def typename="GLXFBConfigSGIXPointer" C-lang="GLXFBConfigSGIX *" />
		<type-def typename="XVisualInfoPointer" C-lang="XVisualInfo *" />
		<type-def typename="Status" C-lang="Status" />
		<type-def typename="GLboolean" C-lang="GLboolean" />
		<type-def typename="Bool" C-lang="Bool" />
		<type-def typename="GLXVideoCaptureDeviceNV" C-lang="GLXVideoCaptureDeviceNV" />
		<type-def typename="GLXHyperpipeNetworkSGIXPointer" C-lang="GLXHyperpipeNetworkSGIX *" />
		<type-def typename="DisplayPointer" C-lang="Display *" />
		<type-def typename="VLNode" C-lang="VLNode" />
		<type-def typename="GLuint" C-lang="GLuint" />
		<type-def typename="GLXContext" C-lang="GLXContext" />
		<type-def typename="GLXContextID" C-lang="GLXContextID" />
		<type-def typename="GLsizei" C-lang="GLsizei" />
		<type-def typename="DMparams" C-lang="DMparams" />
		<type-def typename="GLXHyperpipeConfigSGIX" C-lang="GLXHyperpipeConfigSGIX" />
		<type-def typename="GLXWindow" C-lang="GLXWindow" />
		<type-def typename="XVisualInfo" C-lang="XVisualInfo" />
		<type-def typename="float" C-lang="float" />
		<type-def typename="void" C-lang="void" />
		<type-def typename="int" C-lang="int" />
		<type-def typename="uint" C-lang="unsigned int" />
		<type-def typename="ulong" C-lang="unsigned long" />
	</typemap>
	<extensions >
		<ext name="GLXStringName" />
		<ext name="GLXErrorCode" />
		<ext name="GLXDrawableTypeMask" />
		<ext name="GLXRenderTypeMask" />
		<ext name="GLXSyncType" />
		<ext name="GLXEventMask" />
		<ext name="GLXPbufferClobberMask" />
		<ext name="GLXHyperpipeTypeMask" />
		<ext name="GLXHyperpipeAttrib" />
		<ext name="GLXHyperpipeMisc" />
		<ext name="GLXBindToTextureTargetMask" />
		<ext name="GLXContextFlags" />
		<ext name="GLXContextProfileMask" />
		<ext name="GLXAttribute" />
		<ext name="NV_present_video" />
		<ext name="EXT_swap_control" />
		<ext name="EXT_swap_control_tear" />
		<ext name="EXT_buffer_age" />
		<ext name="GLX_AMD_gpu_association" />
		<ext name="GLX_ARB_create_context_robustness" />
		<ext name="ARB_create_context_profile" />
	</extensions>
	<enumerations >
		<enum name="VENDOR" value="0x1" >
			<ext name="GLXStringName" />
		</enum>
		<enum name="VERSION" value="0x2" >
			<ext name="GLXStringName" />
		</enum>
		<enum name="EXTENSIONS" value="0x3" >
			<ext name="GLXStringName" />
		</enum>
		<enum name="BAD_SCREEN" value="1" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_ATTRIBUTE" value="2" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="NO_EXTENSION" value="3" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_VISUAL" value="4" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_CONTEXT" value="5" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_VALUE" value="6" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_ENUM" value="7" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_HYPERPIPE_CONFIG_SGIX" value="91" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="BAD_HYPERPIPE_SGIX" value="92" >
			<ext name="GLXErrorCode" />
		</enum>
		<enum name="WINDOW_BIT" value="0x00000001" >
			<ext name="GLXDrawableTypeMask" />
		</enum>
		<enum name="PIXMAP_BIT" value="0x00000002" >
			<ext name="GLXDrawableTypeMask" />
		</enum>
		<enum name="PBUFFER_BIT" value="0x00000004" >
			<ext name="GLXDrawableTypeMask" />
		</enum>
		<enum name="WINDOW_BIT_SGIX" value="0x00000001" >
			<ext name="GLXDrawableTypeMask" />
		</enum>
		<enum name="PIXMAP_BIT_SGIX" value="0x00000002" >
			<ext name="GLXDrawableTypeMask" />
		</enum>
		<enum name="PBUFFER_BIT_SGIX" value="0x00000004" >
			<ext name="GLXDrawableTypeMask" />
		</enum>
		<enum name="RGBA_BIT" value="0x00000001" >
			<ext name="GLXRenderTypeMask" />
		</enum>
		<enum name="COLOR_INDEX_BIT" value="0x00000002" >
			<ext name="GLXRenderTypeMask" />
		</enum>
		<enum name="RGBA_BIT_SGIX" value="0x00000001" >
			<ext name="GLXRenderTypeMask" />
		</enum>
		<enum name="COLOR_INDEX_BIT_SGIX" value="0x00000002" >
			<ext name="GLXRenderTypeMask" />
		</enum>
		<enum name="RGBA_FLOAT_BIT_ARB" value="0x00000004" >
			<ext name="GLXRenderTypeMask" />
		</enum>
		<enum name="RGBA_UNSIGNED_FLOAT_BIT_EXT" value="0x00000008" >
			<ext name="GLXRenderTypeMask" />
		</enum>
		<enum name="SYNC_FRAME_SGIX" value="0x00000000" >
			<ext name="GLXSyncType" />
		</enum>
		<enum name="SYNC_SWAP_SGIX" value="0x00000001" >
			<ext name="GLXSyncType" />
		</enum>
		<enum name="PBUFFER_CLOBBER_MASK" value="0x08000000" >
			<ext name="GLXEventMask" />
		</enum>
		<enum name="BUFFER_CLOBBER_MASK_SGIX" value="0x08000000" >
			<ext name="GLXEventMask" />
		</enum>
		<enum name="BUFFER_SWAP_COMPLETE_INTEL_MASK" value="0x04000000" >
			<ext name="GLXEventMask" />
		</enum>
		<enum name="FRONT_LEFT_BUFFER_BIT" value="0x00000001" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="FRONT_RIGHT_BUFFER_BIT" value="0x00000002" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="BACK_LEFT_BUFFER_BIT" value="0x00000004" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="BACK_RIGHT_BUFFER_BIT" value="0x00000008" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="AUX_BUFFERS_BIT" value="0x00000010" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="DEPTH_BUFFER_BIT" value="0x00000020" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="STENCIL_BUFFER_BIT" value="0x00000040" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="ACCUM_BUFFER_BIT" value="0x00000080" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="FRONT_LEFT_BUFFER_BIT_SGIX" value="0x00000001" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="FRONT_RIGHT_BUFFER_BIT_SGIX" value="0x00000002" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="BACK_LEFT_BUFFER_BIT_SGIX" value="0x00000004" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="BACK_RIGHT_BUFFER_BIT_SGIX" value="0x00000008" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="AUX_BUFFERS_BIT_SGIX" value="0x00000010" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="DEPTH_BUFFER_BIT_SGIX" value="0x00000020" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="STENCIL_BUFFER_BIT_SGIX" value="0x00000040" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="ACCUM_BUFFER_BIT_SGIX" value="0x00000080" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="SAMPLE_BUFFERS_BIT_SGIX" value="0x00000100" >
			<ext name="GLXPbufferClobberMask" />
		</enum>
		<enum name="HYPERPIPE_DISPLAY_PIPE_SGIX" value="0x00000001" >
			<ext name="GLXHyperpipeTypeMask" />
		</enum>
		<enum name="HYPERPIPE_RENDER_PIPE_SGIX" value="0x00000002" >
			<ext name="GLXHyperpipeTypeMask" />
		</enum>
		<enum name="PIPE_RECT_SGIX" value="0x00000001" >
			<ext name="GLXHyperpipeAttrib" />
		</enum>
		<enum name="PIPE_RECT_LIMITS_SGIX" value="0x00000002" >
			<ext name="GLXHyperpipeAttrib" />
		</enum>
		<enum name="HYPERPIPE_STEREO_SGIX" value="0x00000003" >
			<ext name="GLXHyperpipeAttrib" />
		</enum>
		<enum name="HYPERPIPE_PIXEL_AVERAGE_SGIX" value="0x00000004" >
			<ext name="GLXHyperpipeAttrib" />
		</enum>
		<enum name="HYPERPIPE_PIPE_NAME_LENGTH_SGIX" value="80" >
			<ext name="GLXHyperpipeMisc" />
		</enum>
		<enum name="TEXTURE_1D_BIT_EXT" value="0x00000001" >
			<ext name="GLXBindToTextureTargetMask" />
		</enum>
		<enum name="TEXTURE_2D_BIT_EXT" value="0x00000002" >
			<ext name="GLXBindToTextureTargetMask" />
		</enum>
		<enum name="TEXTURE_RECTANGLE_BIT_EXT" value="0x00000004" >
			<ext name="GLXBindToTextureTargetMask" />
		</enum>
		<enum name="CONTEXT_DEBUG_BIT_ARB" value="0x00000001" >
			<ext name="GLXContextFlags" />
		</enum>
		<enum name="CONTEXT_FORWARD_COMPATIBLE_BIT_ARB" value="0x00000002" >
			<ext name="GLXContextFlags" />
		</enum>
		<enum name="CONTEXT_ROBUST_ACCESS_BIT_ARB" value="0x00000004" >
			<ext name="GLXContextFlags" />
		</enum>
		<enum name="CONTEXT_RESET_ISOLATION_BIT_ARB" value="0x00000008" >
			<ext name="GLXContextFlags" />
		</enum>
		<enum name="CONTEXT_CORE_PROFILE_BIT_ARB" value="0x00000001" >
			<ext name="GLXContextProfileMask" />
		</enum>
		<enum name="CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB" value="0x00000002" >
			<ext name="GLXContextProfileMask" />
		</enum>
		<enum name="CONTEXT_ES_PROFILE_BIT_EXT" value="0x00000004" >
			<ext name="GLXContextProfileMask" />
		</enum>
		<enum name="CONTEXT_ES2_PROFILE_BIT_EXT" value="0x00000004" >
			<ext name="GLXContextProfileMask" />
		</enum>
		<enum name="USE_GL" value="1" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BUFFER_SIZE" value="2" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="LEVEL" value="3" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RGBA" value="4" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DOUBLEBUFFER" value="5" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="STEREO" value="6" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX_BUFFERS" value="7" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RED_SIZE" value="8" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="GREEN_SIZE" value="9" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BLUE_SIZE" value="10" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="ALPHA_SIZE" value="11" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DEPTH_SIZE" value="12" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="STENCIL_SIZE" value="13" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="ACCUM_RED_SIZE" value="14" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="ACCUM_GREEN_SIZE" value="15" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="ACCUM_BLUE_SIZE" value="16" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="ACCUM_ALPHA_SIZE" value="17" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="CONFIG_CAVEAT" value="0x20" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="X_VISUAL_TYPE" value="0x22" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_TYPE" value="0x23" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_INDEX_VALUE" value="0x24" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_RED_VALUE" value="0x25" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_GREEN_VALUE" value="0x26" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_BLUE_VALUE" value="0x27" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_ALPHA_VALUE" value="0x28" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DONT_CARE" value="0xFFFFFFFF" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="NONE" value="0x8000" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SLOW_CONFIG" value="0x8001" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRUE_COLOR" value="0x8002" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DIRECT_COLOR" value="0x8003" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PSEUDO_COLOR" value="0x8004" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="STATIC_COLOR" value="0x8005" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="GRAY_SCALE" value="0x8006" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="STATIC_GRAY" value="0x8007" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_RGB" value="0x8008" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_INDEX" value="0x8009" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VISUAL_ID" value="0x800B" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SCREEN" value="0x800C" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="NON_CONFORMANT_CONFIG" value="0x800D" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DRAWABLE_TYPE" value="0x8010" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RENDER_TYPE" value="0x8011" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="X_RENDERABLE" value="0x8012" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FBCONFIG_ID" value="0x8013" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RGBA_TYPE" value="0x8014" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="COLOR_INDEX_TYPE" value="0x8015" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MAX_PBUFFER_WIDTH" value="0x8016" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MAX_PBUFFER_HEIGHT" value="0x8017" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MAX_PBUFFER_PIXELS" value="0x8018" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PRESERVED_CONTENTS" value="0x801B" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="LARGEST_PBUFFER" value="0x801C" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="WIDTH" value="0x801D" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="HEIGHT" value="0x801E" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="EVENT_MASK" value="0x801F" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DAMAGED" value="0x8020" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAVED" value="0x8021" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="WINDOW" value="0x8022" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PBUFFER" value="0x8023" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PBUFFER_HEIGHT" value="0x8040" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PBUFFER_WIDTH" value="0x8041" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VISUAL_CAVEAT_EXT" value="0x20" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="X_VISUAL_TYPE_EXT" value="0x22" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_TYPE_EXT" value="0x23" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_INDEX_VALUE_EXT" value="0x24" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_RED_VALUE_EXT" value="0x25" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_GREEN_VALUE_EXT" value="0x26" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_BLUE_VALUE_EXT" value="0x27" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_ALPHA_VALUE_EXT" value="0x28" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="NONE_EXT" value="0x8000" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SLOW_VISUAL_EXT" value="0x8001" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRUE_COLOR_EXT" value="0x8002" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DIRECT_COLOR_EXT" value="0x8003" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PSEUDO_COLOR_EXT" value="0x8004" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="STATIC_COLOR_EXT" value="0x8005" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="GRAY_SCALE_EXT" value="0x8006" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="STATIC_GRAY_EXT" value="0x8007" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_RGB_EXT" value="0x8008" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TRANSPARENT_INDEX_EXT" value="0x8009" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SHARE_CONTEXT_EXT" value="0x800A" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VISUAL_ID_EXT" value="0x800B" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SCREEN_EXT" value="0x800C" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="NON_CONFORMANT_VISUAL_EXT" value="0x800D" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DRAWABLE_TYPE_SGIX" value="0x8010" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RENDER_TYPE_SGIX" value="0x8011" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="X_RENDERABLE_SGIX" value="0x8012" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FBCONFIG_ID_SGIX" value="0x8013" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RGBA_TYPE_SGIX" value="0x8014" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="COLOR_INDEX_TYPE_SGIX" value="0x8015" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MAX_PBUFFER_WIDTH_SGIX" value="0x8016" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MAX_PBUFFER_HEIGHT_SGIX" value="0x8017" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MAX_PBUFFER_PIXELS_SGIX" value="0x8018" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="OPTIMAL_PBUFFER_WIDTH_SGIX" value="0x8019" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="OPTIMAL_PBUFFER_HEIGHT_SGIX" value="0x801A" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PRESERVED_CONTENTS_SGIX" value="0x801B" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="LARGEST_PBUFFER_SGIX" value="0x801C" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="WIDTH_SGIX" value="0x801D" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="HEIGHT_SGIX" value="0x801E" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="EVENT_MASK_SGIX" value="0x801F" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DAMAGED_SGIX" value="0x8020" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAVED_SGIX" value="0x8021" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="WINDOW_SGIX" value="0x8022" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="PBUFFER_SGIX" value="0x8023" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DIGITAL_MEDIA_PBUFFER_SGIX" value="0x8024" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BLENDED_RGBA_SGIS" value="0x8025" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MULTISAMPLE_SUB_RECT_WIDTH_SGIS" value="0x8026" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MULTISAMPLE_SUB_RECT_HEIGHT_SGIS" value="0x8027" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VISUAL_SELECT_GROUP_SGIX" value="0x8028" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="HYPERPIPE_ID_SGIX" value="0x8030" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAMPLE_BUFFERS_SGIS" value="100000" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAMPLES_SGIS" value="100001" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAMPLE_BUFFERS_ARB" value="100000" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAMPLES_ARB" value="100001" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAMPLE_BUFFERS" value="100000" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="SAMPLES" value="100001" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="COVERAGE_SAMPLES_NV" value="100001" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="CONTEXT_MAJOR_VERSION_ARB" value="0x2091" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="CONTEXT_MINOR_VERSION_ARB" value="0x2092" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="CONTEXT_FLAGS_ARB" value="0x2094" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB" value="0x2095" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FLOAT_COMPONENTS_NV" value="0x20B0" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RGBA_UNSIGNED_FLOAT_TYPE_EXT" value="0x20B1" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FRAMEBUFFER_SRGB_CAPABLE_ARB" value="0x20B2" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FRAMEBUFFER_SRGB_CAPABLE_EXT" value="0x20B2" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="COLOR_SAMPLES_NV" value="0x20B3" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="RGBA_FLOAT_TYPE_ARB" value="0x20B9" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_NV" value="0x20C3" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_ALPHA_NV" value="0x20C4" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_DEPTH_NV" value="0x20C5" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_AND_ALPHA_NV" value="0x20C6" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_AND_DEPTH_NV" value="0x20C7" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_FRAME_NV" value="0x20C8" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_FIELD_1_NV" value="0x20C9" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_FIELD_2_NV" value="0x20CA" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_STACKED_FIELDS_1_2_NV" value="0x20CB" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="VIDEO_OUT_STACKED_FIELDS_2_1_NV" value="0x20CC" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="DEVICE_ID_NV" value="0x20CD" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="UNIQUE_ID_NV" value="0x20CE" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="NUM_VIDEO_CAPTURE_SLOTS_NV" value="0x20CF" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RGB_EXT" value="0x20D0" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RGBA_EXT" value="0x20D1" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BIND_TO_MIPMAP_TEXTURE_EXT" value="0x20D2" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BIND_TO_TEXTURE_TARGETS_EXT" value="0x20D3" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="Y_INVERTED_EXT" value="0x20D4" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_FORMAT_EXT" value="0x20D5" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_TARGET_EXT" value="0x20D6" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="MIPMAP_TEXTURE_EXT" value="0x20D7" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_FORMAT_NONE_EXT" value="0x20D8" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_FORMAT_RGB_EXT" value="0x20D9" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_FORMAT_RGBA_EXT" value="0x20DA" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_1D_EXT" value="0x20DB" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_2D_EXT" value="0x20DC" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="TEXTURE_RECTANGLE_EXT" value="0x20DD" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FRONT_LEFT_EXT" value="0x20DE" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FRONT_RIGHT_EXT" value="0x20DF" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BACK_LEFT_EXT" value="0x20E0" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BACK_RIGHT_EXT" value="0x20E1" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="FRONT_EXT" ref="FRONT_LEFT_EXT" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="BACK_EXT" ref="BACK_LEFT_EXT" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX0_EXT" value="0x20E2" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX1_EXT" value="0x20E3" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX2_EXT" value="0x20E4" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX3_EXT" value="0x20E5" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX4_EXT" value="0x20E6" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX5_EXT" value="0x20E7" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX6_EXT" value="0x20E8" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX7_EXT" value="0x20E9" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX8_EXT" value="0x20EA" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="AUX9_EXT" value="0x20EB" >
			<ext name="GLXAttribute" />
		</enum>
		<enum name="NUM_VIDEO_SLOTS_NV" value="0x20F0" >
			<ext name="NV_present_video" />
		</enum>
		<enum name="SWAP_INTERVAL_EXT" value="0x20F1" >
			<ext name="EXT_swap_control" />
		</enum>
		<enum name="MAX_SWAP_INTERVAL_EXT" value="0x20F2" >
			<ext name="EXT_swap_control" />
		</enum>
		<enum name="LATE_SWAPS_TEAR_EXT" value="0x20F3" >
			<ext name="EXT_swap_control_tear" />
		</enum>
		<enum name="BACK_BUFFER_AGE_EXT" value="0x20F4" >
			<ext name="EXT_buffer_age" />
		</enum>
		<enum name="GPU_VENDOR_AMD" value="0x1F00" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_RENDERER_STRING_AMD" value="0x1F01" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_OPENGL_VERSION_STRING_AMD" value="0x1F02" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_FASTEST_TARGET_GPUS_AMD" value="0x21A2" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_RAM_AMD" value="0x21A3" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_CLOCK_AMD" value="0x21A4" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_PIPES_AMD" value="0x21A5" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_SIMD_AMD" value="0x21A6" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_RB_AMD" value="0x21A7" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_SPI_AMD" value="0x21A8" >
			<ext name="GLX_AMD_gpu_association" />
		</enum>
		<enum name="LOSE_CONTEXT_ON_RESET_ARB" value="0x8252" >
			<ext name="GLX_ARB_create_context_robustness" />
		</enum>
		<enum name="CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB" value="0x8256" >
			<ext name="GLX_ARB_create_context_robustness" />
		</enum>
		<enum name="NO_RESET_NOTIFICATION_ARB" value="0x8261" >
			<ext name="GLX_ARB_create_context_robustness" />
		</enum>
		<enum name="CONTEXT_PROFILE_MASK_ARB" value="0x9126" >
			<ext name="ARB_create_context_profile" />
		</enum>
	</enumerations>
	<functions >
		<passthru ><![CDATA[]]></passthru>
		<property-defs >
			<property name="glxvendorglx" any="true" />
			<property name="vectorequiv" any="true" />
			<property name="required-props" any="true" />
			<property name="category" >
				<value >pixel-rw</value>
				<value >bgn-end</value>
				<value >display-list</value>
				<value >drawing</value>
				<value >drawing-control</value>
				<value >feedback</value>
				<value >framebuf</value>
				<value >misc</value>
				<value >modeling</value>
				<value >pixel-op</value>
				<value >pixel-rw</value>
				<value >state-req</value>
				<value >xform</value>
				<value >glx</value>
				<value >glxopcode</value>
			</property>
			<property name="dlflags" >
				<value >notlistable</value>
				<value >handcode</value>
				<value >nop</value>
			</property>
			<property name="glxopcode" any="true" />
			<property name="glxflags" >
				<value >client-handcode</value>
				<value >server-handcode</value>
			</property>
			<property name="param" >
				<value >retval</value>
				<value >retained</value>
			</property>
		</property-defs>
		<function-defs >
			<function name="glXRender" return="void" category="glx" dlflags="notlistable" glxopcode="1" glxflags="client-handcode" />
			<function name="glXRenderLarge" return="void" category="glx" dlflags="notlistable" glxopcode="2" glxflags="client-handcode" />
			<function name="glXCreateContext" return="void" glxflags="client-handcode" category="glx" glxopcode="3" dlflags="notlistable" >
				<param name="gc_id" kind="value" type="Int32" input="true" />
				<param name="screen" kind="value" type="Int32" input="true" />
				<param name="visual" kind="value" type="Int32" input="true" />
				<param name="share_list" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXDestroyContext" return="void" glxflags="client-handcode" category="glx" glxopcode="4" dlflags="notlistable" >
				<param name="context" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXMakeCurrent" return="void" glxflags="client-handcode" category="glx" glxopcode="5" dlflags="notlistable" >
				<param name="drawable" kind="value" type="Int32" input="true" />
				<param name="context" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXIsDirect" return="void" glxflags="client-handcode" category="glx" glxopcode="6" dlflags="notlistable" >
				<param name="dpy" kind="value" type="Int32" input="true" />
				<param name="context" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXQueryVersion" return="void" dlflags="notlistable" category="glx" glxopcode="7" glxflags="client-handcode" >
				<param name="major" kind="reference" type="Int32" input="false" />
				<param name="minor" kind="reference" type="Int32" input="false" />
			</function>
			<function name="glXWaitGL" return="void" dlflags="notlistable" category="glx" glxopcode="8" glxflags="client-handcode" >
				<param name="context" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXWaitX" return="void" category="glx" dlflags="notlistable" glxopcode="9" glxflags="client-handcode" />
			<function name="glXCopyContext" return="void" dlflags="notlistable" category="glx" glxopcode="10" glxflags="client-handcode" >
				<param name="source" kind="value" type="Int32" input="true" />
				<param name="dest" kind="value" type="Int32" input="true" />
				<param name="mask" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXSwapBuffers" return="void" dlflags="notlistable" category="glx" glxopcode="11" glxflags="client-handcode" >
				<param name="drawable" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXUseXFont" return="void" dlflags="notlistable" category="glx" glxopcode="12" glxflags="client-handcode" >
				<param name="font" kind="value" type="Int32" input="true" />
				<param name="first" kind="value" type="Int32" input="true" />
				<param name="count" kind="value" type="Int32" input="true" />
				<param name="list_base" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreateGLXPixmap" return="void" dlflags="notlistable" category="glx" glxopcode="13" glxflags="client-handcode" >
				<param name="visual" kind="value" type="Int32" input="true" />
				<param name="pixmap" kind="value" type="Int32" input="true" />
				<param name="glxpixmap" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXGetVisualConfigs" return="void" category="glx" dlflags="notlistable" glxopcode="14" glxflags="client-handcode" />
			<function name="glXDestroyGLXPixmap" return="void" glxflags="client-handcode" category="glx" glxopcode="15" dlflags="notlistable" >
				<param name="pixmap" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXVendorPrivate" return="void" category="glx" glxflags="client-handcode" glxopcode="16" dlflags="notlistable" />
			<function name="glXVendorPrivateWithReply" return="void" category="glx" glxflags="client-handcode" glxopcode="17" dlflags="notlistable" />
			<function name="glXQueryExtensionsString" return="void" glxflags="client-handcode" category="glx" glxopcode="18" dlflags="notlistable" >
				<param name="screen" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXQueryServerString" return="void" glxflags="client-handcode" category="glx" glxopcode="19" dlflags="notlistable" >
				<param name="screen" kind="value" type="Int32" input="true" />
				<param name="name" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXClientInfo" return="void" category="glx" glxflags="client-handcode" glxopcode="20" dlflags="notlistable" />
			<function name="glXGetFBConfigs" return="void" category="glx" dlflags="notlistable" glxopcode="21" glxflags="client-handcode" />
			<function name="glXCreatePixmap" return="void" dlflags="notlistable" category="glx" glxopcode="22" glxflags="client-handcode" >
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="pixmap" kind="value" type="Int32" input="true" />
				<param name="glxpixmap" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXDestroyPixmap" return="void" dlflags="notlistable" category="glx" glxopcode="23" glxflags="client-handcode" >
				<param name="glxpixmap" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreateNewContext" return="void" dlflags="notlistable" category="glx" glxopcode="24" glxflags="client-handcode" >
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="render_type" kind="value" type="Int32" input="true" />
				<param name="share_list" kind="value" type="Int32" input="true" />
				<param name="direct" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXQueryContext" return="void" category="glx" dlflags="notlistable" glxopcode="25" glxflags="client-handcode" />
			<function name="glXMakeContextCurrent" return="void" dlflags="notlistable" category="glx" glxopcode="26" glxflags="client-handcode" >
				<param name="drawable" kind="value" type="Int32" input="true" />
				<param name="readdrawable" kind="value" type="Int32" input="true" />
				<param name="context" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreatePbuffer" return="void" dlflags="notlistable" category="glx" glxopcode="27" glxflags="client-handcode" >
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="pbuffer" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXDestroyPbuffer" return="void" dlflags="notlistable" category="glx" glxopcode="28" glxflags="client-handcode" >
				<param name="pbuffer" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXGetDrawableAttributes" return="void" dlflags="notlistable" category="glx" glxopcode="29" glxflags="client-handcode" >
				<param name="drawable" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXChangeDrawableAttributes" return="void" dlflags="notlistable" category="glx" glxopcode="30" glxflags="client-handcode" >
				<param name="drawable" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreateWindow" return="void" dlflags="notlistable" category="glx" glxopcode="31" glxflags="client-handcode" >
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="window" kind="value" type="Int32" input="true" />
				<param name="glxwindow" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXDestroyWindow" return="void" dlflags="notlistable" category="glx" glxopcode="32" glxflags="client-handcode" >
				<param name="glxwindow" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXSwapIntervalSGI" return="void" glxvendorglx="65536" category="glx" glxflags="client-handcode" dlflags="notlistable" />
			<function name="glXMakeCurrentReadSGI" return="void" glxvendorglx="65537" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="drawable" kind="value" type="Int32" input="true" />
				<param name="readdrawable" kind="value" type="Int32" input="true" />
				<param name="context" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreateGLXVideoSourceSGIX" return="void" glxvendorglx="65538" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="value" type="Int32" input="true" />
				<param name="screen" kind="value" type="Int32" input="true" />
				<param name="server" kind="value" type="Int32" input="true" />
				<param name="path" kind="value" type="Int32" input="true" />
				<param name="class" kind="value" type="Int32" input="true" />
				<param name="node" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXDestroyGLXVideoSourceSGIX" return="void" glxvendorglx="65539" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="value" type="Int32" input="true" />
				<param name="glxvideosource" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXQueryContextInfoEXT" return="void" glxvendorglx="1024" category="glx" dlflags="notlistable" glxflags="client-handcode" />
			<function name="glXGetFBConfigsSGIX" return="void" glxvendorglx="65540" category="glx" dlflags="notlistable" glxflags="client-handcode" />
			<function name="glXCreateContextWithConfigSGIX" return="void" glxvendorglx="65541" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="gc_id" kind="value" type="Int32" input="true" />
				<param name="screen" kind="value" type="Int32" input="true" />
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="share_list" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreateGLXPixmapWithConfigSGIX" return="void" glxvendorglx="65542" dlflags="notlistable" category="glx" glxflags="client-handcode" >
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="pixmap" kind="value" type="Int32" input="true" />
				<param name="glxpixmap" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXCreateGLXPbufferSGIX" return="void" glxvendorglx="65543" category="glx" dlflags="notlistable" glxflags="client-handcode" >
				<param name="config" kind="value" type="Int32" input="true" />
				<param name="pbuffer" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXDestroyGLXPbufferSGIX" return="void" glxvendorglx="65544" category="glx" dlflags="notlistable" glxflags="client-handcode" >
				<param name="pbuffer" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXChangeDrawableAttributesSGIX" return="void" glxvendorglx="65545" category="glx" dlflags="notlistable" glxflags="client-handcode" >
				<param name="drawable" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXGetDrawableAttributesSGIX" return="void" glxvendorglx="65546" category="glx" dlflags="notlistable" glxflags="client-handcode" >
				<param name="drawable" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXJoinSwapGroupSGIX" return="void" glxvendorglx="65547" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="window" kind="value" type="Int32" input="true" />
				<param name="group" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXBindSwapBarrierSGIX" return="void" glxvendorglx="65548" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="window" kind="value" type="Int32" input="true" />
				<param name="barrier" kind="value" type="Int32" input="true" />
			</function>
			<function name="glXQueryMaxSwapBarriersSGIX" return="void" glxvendorglx="65549" category="glx" glxflags="client-handcode" dlflags="notlistable" />
			<function name="glXQueryHyperpipeNetworkSGIX" return="GLXHyperpipeNetworkSGIXPointer" glxvendorglx="65550" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="npipes" kind="reference" type="int" input="false" />
			</function>
			<function name="glXHyperpipeConfigSGIX" return="int" glxvendorglx="65552" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="networkId" kind="value" type="int" input="true" />
				<param name="npipes" kind="value" type="int" input="true" />
				<param name="cfg" kind="array[npipes]" type="GLXHyperpipeConfigSGIX" input="true" />
				<param name="hpId" kind="reference" type="int" input="false" />
			</function>
			<function name="glXQueryHyperpipeConfigSGIX" return="GLXHyperpipeConfigSGIXPointer" glxvendorglx="65551" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="hpId" kind="value" type="int" input="true" />
				<param name="npipes" kind="reference" type="int" input="false" />
			</function>
			<function name="glXDestroyHyperpipeConfigSGIX" return="int" glxvendorglx="65553" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="hpId" kind="value" type="int" input="true" />
			</function>
			<function name="glXBindHyperpipeSGIX" return="int" glxvendorglx="???" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="hpId" kind="value" type="int" input="true" />
			</function>
			<function name="glXQueryHyperpipeBestAttribSGIX" return="int" glxvendorglx="???" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="timeSlice" kind="value" type="int" input="true" />
				<param name="attrib" kind="value" type="int" input="true" />
				<param name="size" kind="value" type="int" input="true" />
				<param name="attribList" kind="array[size]" type="void" input="true" />
				<param name="returnAttribList" kind="array[size]" type="void" input="false" />
			</function>
			<function name="glXHyperpipeAttribSGIX" return="int" glxvendorglx="???" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="timeSlice" kind="value" type="int" input="true" />
				<param name="attrib" kind="value" type="int" input="true" />
				<param name="size" kind="value" type="int" input="true" />
				<param name="attribList" kind="array[size]" type="void" input="true" />
			</function>
			<function name="glXQueryHyperpipeAttribSGIX" return="int" glxvendorglx="???" glxflags="client-handcode" category="glx" dlflags="notlistable" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="timeSlice" kind="value" type="int" input="true" />
				<param name="attrib" kind="value" type="int" input="true" />
				<param name="size" kind="value" type="int" input="true" />
				<param name="returnAttribList" kind="array[size]" type="void" input="true" />
			</function>
		</function-defs>
	</functions>
</specification>
Added jni/glshim/spec/xml/glxext.xml.






































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
<?xml version="1.0" encoding="UTF-8"?>

<specification xmlns="http://www.opengl.org/registry/" name="GLX" specversion="1.3" fileversion="0.0.1" >
	<typemap >
		<type-def typename="GLXPixmap" C-lang="GLXPixmap" />
		<type-def typename="FunctionPointer" C-lang="__GLXextFuncPtr" />
		<type-def typename="GLXPbufferSGIX" C-lang="GLXPbufferSGIX" />
		<type-def typename="long" C-lang="long" />
		<type-def typename="DMbuffer" C-lang="DMbuffer" />
		<type-def typename="GLXFBConfig" C-lang="GLXFBConfig" />
		<type-def typename="VLServer" C-lang="VLServer" />
		<type-def typename="GLXPbuffer" C-lang="GLXPbuffer" />
		<type-def typename="int64_t" C-lang="int64_t" />
		<type-def typename="GLXFBConfigSGIX" C-lang="GLXFBConfigSGIX" />
		<type-def typename="GLubyte" C-lang="GLubyte" />
		<type-def typename="GLenum" C-lang="GLenum" />
		<type-def typename="VLPath" C-lang="VLPath" />
		<type-def typename="GLXHyperpipeConfigSGIXPointer" C-lang="GLXHyperpipeConfigSGIX *" />
		<type-def typename="constGLXContext" C-lang="const GLXContext" />
		<type-def typename="GLXDrawable" C-lang="GLXDrawable" />
		<type-def typename="Pixmap" C-lang="Pixmap" />
		<type-def typename="Colormap" C-lang="Colormap" />
		<type-def typename="GLXFBConfigPointer" C-lang="GLXFBConfig *" />
		<type-def typename="Uint" C-lang="unsigned int" />
		<type-def typename="int32_t" C-lang="int32_t" />
		<type-def typename="GLint" C-lang="GLint" />
		<type-def typename="uintPointer" C-lang="unsigned int *" />
		<type-def typename="GLXVideoDeviceNV" C-lang="GLXVideoDeviceNV" />
		<type-def typename="Window" C-lang="Window" />
		<type-def typename="GLfunction" C-lang="GLfunction" />
		<type-def typename="GLXVideoCaptureDeviceNVPointer" C-lang="GLXVideoCaptureDeviceNV *" />
		<type-def typename="GLXVideoSourceSGIX" C-lang="GLXVideoSourceSGIX" />
		<type-def typename="Display" C-lang="Display" />
		<type-def typename="GLXFBConfigSGIXPointer" C-lang="GLXFBConfigSGIX *" />
		<type-def typename="XVisualInfoPointer" C-lang="XVisualInfo *" />
		<type-def typename="Status" C-lang="Status" />
		<type-def typename="GLboolean" C-lang="GLboolean" />
		<type-def typename="Bool" C-lang="Bool" />
		<type-def typename="GLXVideoCaptureDeviceNV" C-lang="GLXVideoCaptureDeviceNV" />
		<type-def typename="GLXHyperpipeNetworkSGIXPointer" C-lang="GLXHyperpipeNetworkSGIX *" />
		<type-def typename="DisplayPointer" C-lang="Display *" />
		<type-def typename="VLNode" C-lang="VLNode" />
		<type-def typename="GLuint" C-lang="GLuint" />
		<type-def typename="GLXContext" C-lang="GLXContext" />
		<type-def typename="GLXContextID" C-lang="GLXContextID" />
		<type-def typename="GLsizei" C-lang="GLsizei" />
		<type-def typename="DMparams" C-lang="DMparams" />
		<type-def typename="GLXHyperpipeConfigSGIX" C-lang="GLXHyperpipeConfigSGIX" />
		<type-def typename="GLXWindow" C-lang="GLXWindow" />
		<type-def typename="XVisualInfo" C-lang="XVisualInfo" />
		<type-def typename="float" C-lang="float" />
		<type-def typename="void" C-lang="void" />
		<type-def typename="int" C-lang="int" />
		<type-def typename="uint" C-lang="unsigned int" />
		<type-def typename="ulong" C-lang="unsigned long" />
	</typemap>
	<extensions >
		<ext name="ARB_get_proc_address" />
		<ext name="ARB_multisample" />
		<ext name="ARB_vertex_buffer_object" />
		<ext name="ARB_fbconfig_float" />
		<ext name="ARB_framebuffer_sRGB" />
		<ext name="ARB_create_context" />
		<ext name="ARB_create_context_profile" />
		<ext name="ARB_create_context_robustness" />
		<ext name="SGIS_multisample" />
		<ext name="EXT_visual_info" />
		<ext name="SGI_swap_control" />
		<ext name="SGI_video_sync" />
		<ext name="SGI_make_current_read" />
		<ext name="SGIX_video_source" />
		<ext name="EXT_visual_rating" />
		<ext name="EXT_import_context" />
		<ext name="SGIX_fbconfig" />
		<ext name="SGIX_pbuffer" />
		<ext name="SGI_cushion" />
		<ext name="SGIX_video_resize" />
		<ext name="SGIX_dmbuffer" />
		<ext name="SGIX_swap_group" />
		<ext name="SGIX_swap_barrier" />
		<ext name="SGIS_blended_overlay" />
		<ext name="SGIS_shared_multisample" />
		<ext name="SUN_get_transparent_index" />
		<ext name="3DFX_multisample" />
		<ext name="MESA_copy_sub_buffer" />
		<ext name="MESA_pixmap_colormap" />
		<ext name="MESA_release_buffers" />
		<ext name="MESA_set_3dfx_mode" />
		<ext name="SGIX_visual_select_group" />
		<ext name="OML_swap_method" />
		<ext name="OML_sync_control" />
		<ext name="NV_float_buffer" />
		<ext name="SGIX_hyperpipe" />
		<ext name="MESA_agp_offset" />
		<ext name="EXT_fbconfig_packed_float" />
		<ext name="EXT_framebuffer_sRGB" />
		<ext name="EXT_texture_from_pixmap" />
		<ext name="NV_present_video" />
		<ext name="NV_video_out" />
		<ext name="NV_swap_group" />
		<ext name="NV_video_capture" />
		<ext name="EXT_swap_control" />
		<ext name="NV_copy_image" />
		<ext name="INTEL_swap_event" />
		<ext name="NV_multisample_coverage" />
		<ext name="AMD_gpu_association" />
		<ext name="EXT_create_context_es2_profile" />
		<ext name="EXT_create_context_es_profile" />
		<ext name="EXT_swap_control_tear" />
		<ext name="EXT_buffer_age" />
	</extensions>
	<enumerations >
		<enum name="WINDOW_BIT" value="0x00000001" version="1.3" />
		<enum name="PIXMAP_BIT" value="0x00000002" version="1.3" />
		<enum name="PBUFFER_BIT" value="0x00000004" version="1.3" />
		<enum name="RGBA_BIT" value="0x00000001" version="1.3" />
		<enum name="COLOR_INDEX_BIT" value="0x00000002" version="1.3" />
		<enum name="PBUFFER_CLOBBER_MASK" value="0x08000000" version="1.3" />
		<enum name="FRONT_LEFT_BUFFER_BIT" value="0x00000001" version="1.3" />
		<enum name="FRONT_RIGHT_BUFFER_BIT" value="0x00000002" version="1.3" />
		<enum name="BACK_LEFT_BUFFER_BIT" value="0x00000004" version="1.3" />
		<enum name="BACK_RIGHT_BUFFER_BIT" value="0x00000008" version="1.3" />
		<enum name="AUX_BUFFERS_BIT" value="0x00000010" version="1.3" />
		<enum name="DEPTH_BUFFER_BIT" value="0x00000020" version="1.3" />
		<enum name="STENCIL_BUFFER_BIT" value="0x00000040" version="1.3" />
		<enum name="ACCUM_BUFFER_BIT" value="0x00000080" version="1.3" />
		<enum name="CONFIG_CAVEAT" value="0x20" version="1.3" />
		<enum name="X_VISUAL_TYPE" value="0x22" version="1.3" />
		<enum name="TRANSPARENT_TYPE" value="0x23" version="1.3" />
		<enum name="TRANSPARENT_INDEX_VALUE" value="0x24" version="1.3" />
		<enum name="TRANSPARENT_RED_VALUE" value="0x25" version="1.3" />
		<enum name="TRANSPARENT_GREEN_VALUE" value="0x26" version="1.3" />
		<enum name="TRANSPARENT_BLUE_VALUE" value="0x27" version="1.3" />
		<enum name="TRANSPARENT_ALPHA_VALUE" value="0x28" version="1.3" />
		<enum name="DONT_CARE" value="0xFFFFFFFF" version="1.3" />
		<enum name="NONE" value="0x8000" version="1.3" />
		<enum name="SLOW_CONFIG" value="0x8001" version="1.3" />
		<enum name="TRUE_COLOR" value="0x8002" version="1.3" />
		<enum name="DIRECT_COLOR" value="0x8003" version="1.3" />
		<enum name="PSEUDO_COLOR" value="0x8004" version="1.3" />
		<enum name="STATIC_COLOR" value="0x8005" version="1.3" />
		<enum name="GRAY_SCALE" value="0x8006" version="1.3" />
		<enum name="STATIC_GRAY" value="0x8007" version="1.3" />
		<enum name="TRANSPARENT_RGB" value="0x8008" version="1.3" />
		<enum name="TRANSPARENT_INDEX" value="0x8009" version="1.3" />
		<enum name="VISUAL_ID" value="0x800B" version="1.3" />
		<enum name="SCREEN" value="0x800C" version="1.3" />
		<enum name="NON_CONFORMANT_CONFIG" value="0x800D" version="1.3" />
		<enum name="DRAWABLE_TYPE" value="0x8010" version="1.3" />
		<enum name="RENDER_TYPE" value="0x8011" version="1.3" />
		<enum name="X_RENDERABLE" value="0x8012" version="1.3" />
		<enum name="FBCONFIG_ID" value="0x8013" version="1.3" />
		<enum name="RGBA_TYPE" value="0x8014" version="1.3" />
		<enum name="COLOR_INDEX_TYPE" value="0x8015" version="1.3" />
		<enum name="MAX_PBUFFER_WIDTH" value="0x8016" version="1.3" />
		<enum name="MAX_PBUFFER_HEIGHT" value="0x8017" version="1.3" />
		<enum name="MAX_PBUFFER_PIXELS" value="0x8018" version="1.3" />
		<enum name="PRESERVED_CONTENTS" value="0x801B" version="1.3" />
		<enum name="LARGEST_PBUFFER" value="0x801C" version="1.3" />
		<enum name="WIDTH" value="0x801D" version="1.3" />
		<enum name="HEIGHT" value="0x801E" version="1.3" />
		<enum name="EVENT_MASK" value="0x801F" version="1.3" />
		<enum name="DAMAGED" value="0x8020" version="1.3" />
		<enum name="SAVED" value="0x8021" version="1.3" />
		<enum name="WINDOW" value="0x8022" version="1.3" />
		<enum name="PBUFFER" value="0x8023" version="1.3" />
		<enum name="PBUFFER_HEIGHT" value="0x8040" version="1.3" />
		<enum name="PBUFFER_WIDTH" value="0x8041" version="1.3" />
		<enum name="SAMPLE_BUFFERS" value="100000" version="1.4" />
		<enum name="SAMPLES" value="100001" version="1.4" />
		<enum name="SAMPLE_BUFFERS_ARB" value="100000" >
			<ext name="ARB_multisample" />
		</enum>
		<enum name="SAMPLES_ARB" value="100001" >
			<ext name="ARB_multisample" />
		</enum>
		<enum name="CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB" value="0x2095" >
			<ext name="ARB_vertex_buffer_object" />
		</enum>
		<enum name="RGBA_FLOAT_TYPE_ARB" value="0x20B9" >
			<ext name="ARB_fbconfig_float" />
		</enum>
		<enum name="RGBA_FLOAT_BIT_ARB" value="0x00000004" >
			<ext name="ARB_fbconfig_float" />
		</enum>
		<enum name="FRAMEBUFFER_SRGB_CAPABLE_ARB" value="0x20B2" >
			<ext name="ARB_framebuffer_sRGB" />
		</enum>
		<enum name="CONTEXT_DEBUG_BIT_ARB" value="0x00000001" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_FORWARD_COMPATIBLE_BIT_ARB" value="0x00000002" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_MAJOR_VERSION_ARB" value="0x2091" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_MINOR_VERSION_ARB" value="0x2092" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_FLAGS_ARB" value="0x2094" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_CORE_PROFILE_BIT_ARB" value="0x00000001" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB" value="0x00000002" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="CONTEXT_PROFILE_MASK_ARB" value="0x9126" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="CONTEXT_ROBUST_ACCESS_BIT_ARB" value="0x00000004" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="LOSE_CONTEXT_ON_RESET_ARB" value="0x8252" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB" value="0x8256" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="NO_RESET_NOTIFICATION_ARB" value="0x8261" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="SAMPLE_BUFFERS_SGIS" value="100000" >
			<ext name="SGIS_multisample" />
		</enum>
		<enum name="SAMPLES_SGIS" value="100001" >
			<ext name="SGIS_multisample" />
		</enum>
		<enum name="X_VISUAL_TYPE_EXT" value="0x22" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_TYPE_EXT" value="0x23" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_INDEX_VALUE_EXT" value="0x24" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_RED_VALUE_EXT" value="0x25" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_GREEN_VALUE_EXT" value="0x26" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_BLUE_VALUE_EXT" value="0x27" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_ALPHA_VALUE_EXT" value="0x28" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="NONE_EXT" value="0x8000" >
			<ext name="EXT_visual_info" />
			<ext name="EXT_visual_rating" />
		</enum>
		<enum name="TRUE_COLOR_EXT" value="0x8002" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="DIRECT_COLOR_EXT" value="0x8003" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="PSEUDO_COLOR_EXT" value="0x8004" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="STATIC_COLOR_EXT" value="0x8005" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="GRAY_SCALE_EXT" value="0x8006" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="STATIC_GRAY_EXT" value="0x8007" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_RGB_EXT" value="0x8008" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="TRANSPARENT_INDEX_EXT" value="0x8009" >
			<ext name="EXT_visual_info" />
		</enum>
		<enum name="VISUAL_CAVEAT_EXT" value="0x20" >
			<ext name="EXT_visual_rating" />
		</enum>
		<enum name="SLOW_VISUAL_EXT" value="0x8001" >
			<ext name="EXT_visual_rating" />
		</enum>
		<enum name="NON_CONFORMANT_VISUAL_EXT" value="0x800D" >
			<ext name="EXT_visual_rating" />
		</enum>
		<enum name="SHARE_CONTEXT_EXT" value="0x800A" >
			<ext name="EXT_import_context" />
		</enum>
		<enum name="VISUAL_ID_EXT" value="0x800B" >
			<ext name="EXT_import_context" />
		</enum>
		<enum name="SCREEN_EXT" value="0x800C" >
			<ext name="EXT_import_context" />
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="WINDOW_BIT_SGIX" value="0x00000001" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="PIXMAP_BIT_SGIX" value="0x00000002" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="RGBA_BIT_SGIX" value="0x00000001" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="COLOR_INDEX_BIT_SGIX" value="0x00000002" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="DRAWABLE_TYPE_SGIX" value="0x8010" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="RENDER_TYPE_SGIX" value="0x8011" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="X_RENDERABLE_SGIX" value="0x8012" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="FBCONFIG_ID_SGIX" value="0x8013" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="RGBA_TYPE_SGIX" value="0x8014" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="COLOR_INDEX_TYPE_SGIX" value="0x8015" >
			<ext name="SGIX_fbconfig" />
		</enum>
		<enum name="PBUFFER_BIT_SGIX" value="0x00000004" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="BUFFER_CLOBBER_MASK_SGIX" value="0x08000000" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="FRONT_LEFT_BUFFER_BIT_SGIX" value="0x00000001" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="FRONT_RIGHT_BUFFER_BIT_SGIX" value="0x00000002" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="BACK_LEFT_BUFFER_BIT_SGIX" value="0x00000004" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="BACK_RIGHT_BUFFER_BIT_SGIX" value="0x00000008" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="AUX_BUFFERS_BIT_SGIX" value="0x00000010" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="DEPTH_BUFFER_BIT_SGIX" value="0x00000020" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="STENCIL_BUFFER_BIT_SGIX" value="0x00000040" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="ACCUM_BUFFER_BIT_SGIX" value="0x00000080" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="SAMPLE_BUFFERS_BIT_SGIX" value="0x00000100" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_WIDTH_SGIX" value="0x8016" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_HEIGHT_SGIX" value="0x8017" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_PIXELS_SGIX" value="0x8018" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="OPTIMAL_PBUFFER_WIDTH_SGIX" value="0x8019" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="OPTIMAL_PBUFFER_HEIGHT_SGIX" value="0x801A" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="PRESERVED_CONTENTS_SGIX" value="0x801B" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="LARGEST_PBUFFER_SGIX" value="0x801C" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="WIDTH_SGIX" value="0x801D" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="HEIGHT_SGIX" value="0x801E" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="EVENT_MASK_SGIX" value="0x801F" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="DAMAGED_SGIX" value="0x8020" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="SAVED_SGIX" value="0x8021" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="WINDOW_SGIX" value="0x8022" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="PBUFFER_SGIX" value="0x8023" >
			<ext name="SGIX_pbuffer" />
		</enum>
		<enum name="SYNC_FRAME_SGIX" value="0x00000000" >
			<ext name="SGIX_video_resize" />
		</enum>
		<enum name="SYNC_SWAP_SGIX" value="0x00000001" >
			<ext name="SGIX_video_resize" />
		</enum>
		<enum name="DIGITAL_MEDIA_PBUFFER_SGIX" value="0x8024" >
			<ext name="SGIX_dmbuffer" />
		</enum>
		<enum name="BLENDED_RGBA_SGIS" value="0x8025" >
			<ext name="SGIS_blended_overlay" />
		</enum>
		<enum name="MULTISAMPLE_SUB_RECT_WIDTH_SGIS" value="0x8026" >
			<ext name="SGIS_shared_multisample" />
		</enum>
		<enum name="MULTISAMPLE_SUB_RECT_HEIGHT_SGIS" value="0x8027" >
			<ext name="SGIS_shared_multisample" />
		</enum>
		<enum name="SAMPLE_BUFFERS_3DFX" value="0x8050" >
			<ext name="3DFX_multisample" />
		</enum>
		<enum name="SAMPLES_3DFX" value="0x8051" >
			<ext name="3DFX_multisample" />
		</enum>
		<enum name="3DFX_WINDOW_MODE_MESA" value="0x1" >
			<ext name="MESA_set_3dfx_mode" />
		</enum>
		<enum name="3DFX_FULLSCREEN_MODE_MESA" value="0x2" >
			<ext name="MESA_set_3dfx_mode" />
		</enum>
		<enum name="VISUAL_SELECT_GROUP_SGIX" value="0x8028" >
			<ext name="SGIX_visual_select_group" />
		</enum>
		<enum name="SWAP_METHOD_OML" value="0x8060" >
			<ext name="OML_swap_method" />
		</enum>
		<enum name="SWAP_EXCHANGE_OML" value="0x8061" >
			<ext name="OML_swap_method" />
		</enum>
		<enum name="SWAP_COPY_OML" value="0x8062" >
			<ext name="OML_swap_method" />
		</enum>
		<enum name="SWAP_UNDEFINED_OML" value="0x8063" >
			<ext name="OML_swap_method" />
		</enum>
		<enum name="FLOAT_COMPONENTS_NV" value="0x20B0" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="HYPERPIPE_PIPE_NAME_LENGTH_SGIX" value="80" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="BAD_HYPERPIPE_CONFIG_SGIX" value="91" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="BAD_HYPERPIPE_SGIX" value="92" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="HYPERPIPE_DISPLAY_PIPE_SGIX" value="0x00000001" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="HYPERPIPE_RENDER_PIPE_SGIX" value="0x00000002" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="PIPE_RECT_SGIX" value="0x00000001" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="PIPE_RECT_LIMITS_SGIX" value="0x00000002" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="HYPERPIPE_STEREO_SGIX" value="0x00000003" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="HYPERPIPE_PIXEL_AVERAGE_SGIX" value="0x00000004" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="HYPERPIPE_ID_SGIX" value="0x8030" >
			<ext name="SGIX_hyperpipe" />
		</enum>
		<enum name="RGBA_UNSIGNED_FLOAT_TYPE_EXT" value="0x20B1" >
			<ext name="EXT_fbconfig_packed_float" />
		</enum>
		<enum name="RGBA_UNSIGNED_FLOAT_BIT_EXT" value="0x00000008" >
			<ext name="EXT_fbconfig_packed_float" />
		</enum>
		<enum name="FRAMEBUFFER_SRGB_CAPABLE_EXT" value="0x20B2" >
			<ext name="EXT_framebuffer_sRGB" />
		</enum>
		<enum name="TEXTURE_1D_BIT_EXT" value="0x00000001" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_2D_BIT_EXT" value="0x00000002" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_RECTANGLE_BIT_EXT" value="0x00000004" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RGB_EXT" value="0x20D0" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RGBA_EXT" value="0x20D1" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BIND_TO_MIPMAP_TEXTURE_EXT" value="0x20D2" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BIND_TO_TEXTURE_TARGETS_EXT" value="0x20D3" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="Y_INVERTED_EXT" value="0x20D4" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_FORMAT_EXT" value="0x20D5" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_TARGET_EXT" value="0x20D6" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="MIPMAP_TEXTURE_EXT" value="0x20D7" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_FORMAT_NONE_EXT" value="0x20D8" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_FORMAT_RGB_EXT" value="0x20D9" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_FORMAT_RGBA_EXT" value="0x20DA" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_1D_EXT" value="0x20DB" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_2D_EXT" value="0x20DC" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="TEXTURE_RECTANGLE_EXT" value="0x20DD" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="FRONT_LEFT_EXT" value="0x20DE" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="FRONT_RIGHT_EXT" value="0x20DF" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BACK_LEFT_EXT" value="0x20E0" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BACK_RIGHT_EXT" value="0x20E1" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="FRONT_EXT" ref="FRONT_LEFT_EXT" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="BACK_EXT" ref="BACK_LEFT_EXT" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX0_EXT" value="0x20E2" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX1_EXT" value="0x20E3" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX2_EXT" value="0x20E4" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX3_EXT" value="0x20E5" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX4_EXT" value="0x20E6" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX5_EXT" value="0x20E7" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX6_EXT" value="0x20E8" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX7_EXT" value="0x20E9" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX8_EXT" value="0x20EA" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="AUX9_EXT" value="0x20EB" >
			<ext name="EXT_texture_from_pixmap" />
		</enum>
		<enum name="NUM_VIDEO_SLOTS_NV" value="0x20F0" >
			<ext name="NV_present_video" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_NV" value="0x20C3" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_ALPHA_NV" value="0x20C4" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_DEPTH_NV" value="0x20C5" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_AND_ALPHA_NV" value="0x20C6" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_AND_DEPTH_NV" value="0x20C7" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_FRAME_NV" value="0x20C8" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_FIELD_1_NV" value="0x20C9" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_FIELD_2_NV" value="0x20CA" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_STACKED_FIELDS_1_2_NV" value="0x20CB" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="VIDEO_OUT_STACKED_FIELDS_2_1_NV" value="0x20CC" >
			<ext name="NV_video_out" />
		</enum>
		<enum name="DEVICE_ID_NV" value="0x20CD" >
			<ext name="NV_video_capture" />
		</enum>
		<enum name="UNIQUE_ID_NV" value="0x20CE" >
			<ext name="NV_video_capture" />
		</enum>
		<enum name="NUM_VIDEO_CAPTURE_SLOTS_NV" value="0x20CF" >
			<ext name="NV_video_capture" />
		</enum>
		<enum name="SWAP_INTERVAL_EXT" value="0x20F1" >
			<ext name="EXT_swap_control" />
		</enum>
		<enum name="MAX_SWAP_INTERVAL_EXT" value="0x20F2" >
			<ext name="EXT_swap_control" />
		</enum>
		<enum name="BUFFER_SWAP_COMPLETE_INTEL_MASK" value="0x04000000" >
			<ext name="INTEL_swap_event" />
		</enum>
		<enum name="EXCHANGE_COMPLETE_INTEL" value="0x8180" >
			<ext name="INTEL_swap_event" />
		</enum>
		<enum name="COPY_COMPLETE_INTEL" value="0x8181" >
			<ext name="INTEL_swap_event" />
		</enum>
		<enum name="FLIP_COMPLETE_INTEL" value="0x8182" >
			<ext name="INTEL_swap_event" />
		</enum>
		<enum name="COVERAGE_SAMPLES_NV" value="100001" >
			<ext name="NV_multisample_coverage" />
		</enum>
		<enum name="COLOR_SAMPLES_NV" value="0x20B3" >
			<ext name="NV_multisample_coverage" />
		</enum>
		<enum name="GPU_VENDOR_AMD" value="0x1F00" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_RENDERER_STRING_AMD" value="0x1F01" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_OPENGL_VERSION_STRING_AMD" value="0x1F02" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_FASTEST_TARGET_GPUS_AMD" value="0x21A2" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_RAM_AMD" value="0x21A3" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_CLOCK_AMD" value="0x21A4" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_PIPES_AMD" value="0x21A5" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_SIMD_AMD" value="0x21A6" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_RB_AMD" value="0x21A7" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_SPI_AMD" value="0x21A8" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="CONTEXT_ES2_PROFILE_BIT_EXT" value="0x00000004" >
			<ext name="EXT_create_context_es2_profile" />
		</enum>
		<enum name="CONTEXT_ES_PROFILE_BIT_EXT" value="0x00000004" >
			<ext name="EXT_create_context_es_profile" />
		</enum>
		<enum name="LATE_SWAPS_TEAR_EXT" value="0x20F3" >
			<ext name="EXT_swap_control_tear" />
		</enum>
		<enum name="BACK_BUFFER_AGE_EXT" value="0x20F4" >
			<ext name="EXT_buffer_age" />
		</enum>
	</enumerations>
	<functions >
		<passthru ><![CDATA[#ifndef GLX_ARB_get_proc_address
typedef void (*__GLXextFuncPtr)(void);
#endif
#ifndef GLX_SGIX_video_source
typedef XID GLXVideoSourceSGIX;
#endif
#ifndef GLX_SGIX_fbconfig
typedef XID GLXFBConfigIDSGIX;
typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
#endif
#ifndef GLX_SGIX_pbuffer
typedef XID GLXPbufferSGIX;
typedef struct {
    int type;
    unsigned long serial;	  /* # of last request processed by server */
    Bool send_event;		  /* true if this came for SendEvent request */
    Display *display;		  /* display the event was read from */
    GLXDrawable drawable;	  /* i.d. of Drawable */
    int event_type;		  /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
    int draw_type;		  /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
    unsigned int mask;	  /* mask indicating which buffers are affected*/
    int x, y;
    int width, height;
    int count;		  /* if nonzero, at least this many more */
} GLXBufferClobberEventSGIX;
#endif
#ifndef GLX_NV_video_output
typedef unsigned int GLXVideoDeviceNV;
#endif
#ifndef GLX_NV_video_capture
typedef XID GLXVideoCaptureDeviceNV;
#endif
#ifndef GLEXT_64_TYPES_DEFINED
/* This code block is duplicated in glext.h, so must be protected */
#define GLEXT_64_TYPES_DEFINED
/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
/* (as used in the GLX_OML_sync_control extension). */
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#include <inttypes.h>
#elif defined(__sun__) || defined(__digital__)
#include <inttypes.h>
#if defined(__STDC__)
#if defined(__arch64__) || defined(_LP64)
typedef long int int64_t;
typedef unsigned long int uint64_t;
#else
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#endif /* __arch64__ */
#endif /* __STDC__ */
#elif defined( __VMS ) || defined(__sgi)
#include <inttypes.h>
#elif defined(__SCO__) || defined(__USLC__)
#include <stdint.h>
#elif defined(__UNIXOS2__) || defined(__SOL64__)
typedef long int int32_t;
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#elif defined(_WIN32) && defined(__GNUC__)
#include <stdint.h>
#elif defined(_WIN32)
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
#include <inttypes.h>     /* Fallback option */
#endif
#endif]]></passthru>
		<property-defs >
			<property name="glxvendorglx" any="true" />
			<property name="vectorequiv" any="true" />
			<property name="required-props" any="true" />
			<property name="category" >
				<value >VERSION_1_3</value>
				<value >VERSION_1_4</value>
				<value >ARB_get_proc_address</value>
				<value >ARB_multisample</value>
				<value >ARB_fbconfig_float</value>
				<value >EXT_import_context</value>
				<value >SGIX_dmbuffer</value>
				<value >SGIX_fbconfig</value>
				<value >SGIX_pbuffer</value>
				<value >SGIX_swap_barrier</value>
				<value >SGIX_swap_group</value>
				<value >SGIX_video_resize</value>
				<value >SGIX_video_source</value>
				<value >SGI_cushion</value>
				<value >SGI_make_current_read</value>
				<value >SGI_swap_control</value>
				<value >SGI_video_sync</value>
				<value >SUN_get_transparent_index</value>
				<value >MESA_agp_offset</value>
				<value >MESA_copy_sub_buffer</value>
				<value >MESA_pixmap_colormap</value>
				<value >MESA_release_buffers</value>
				<value >MESA_set_3dfx_mode</value>
				<value >SGIX_visual_select_group</value>
				<value >OML_sync_control</value>
				<value >SGIX_hyperpipe</value>
				<value >EXT_texture_from_pixmap</value>
				<value >NV_swap_group</value>
				<value >NV_video_output</value>
				<value >NV_present_video</value>
				<value >ARB_create_context</value>
				<value >NV_video_capture</value>
				<value >NV_copy_image</value>
				<value >EXT_swap_control</value>
				<value >ARB_framebuffer_sRGB</value>
			</property>
			<property name="glxflags" >
				<value >client-handcode</value>
				<value >client-intercept</value>
				<value >server-handcode</value>
			</property>
			<property name="glxopcode" any="true" />
			<property name="passthru" any="true" />
			<property name="param" >
				<value >retval</value>
				<value >retained</value>
			</property>
		</property-defs>
		<function-defs >
			<function name="glXGetFBConfigs" return="GLXFBConfigPointer" category="VERSION_1_3" glxopcode="21" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="nelements" kind="reference" type="int" input="false" />
			</function>
			<function name="glXChooseFBConfig" return="GLXFBConfigPointer" category="VERSION_1_3" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
				<param name="nelements" kind="reference" type="int" input="false" />
			</function>
			<function name="glXGetFBConfigAttrib" return="int" category="VERSION_1_3" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="reference" type="int" input="false" />
			</function>
			<function name="glXGetVisualFromFBConfig" return="XVisualInfoPointer" category="VERSION_1_3" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
			</function>
			<function name="glXCreateWindow" return="GLXWindow" category="VERSION_1_3" glxopcode="31" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
				<param name="win" kind="value" type="Window" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
			</function>
			<function name="glXDestroyWindow" return="void" category="VERSION_1_3" glxopcode="32" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="win" kind="value" type="GLXWindow" input="true" />
			</function>
			<function name="glXCreatePixmap" return="GLXPixmap" category="VERSION_1_3" glxopcode="22" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
				<param name="pixmap" kind="value" type="Pixmap" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
			</function>
			<function name="glXDestroyPixmap" return="void" category="VERSION_1_3" glxopcode="23" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pixmap" kind="value" type="GLXPixmap" input="true" />
			</function>
			<function name="glXCreatePbuffer" return="GLXPbuffer" category="VERSION_1_3" glxopcode="27" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
			</function>
			<function name="glXDestroyPbuffer" return="void" category="VERSION_1_3" glxopcode="28" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pbuf" kind="value" type="GLXPbuffer" input="true" />
			</function>
			<function name="glXQueryDrawable" return="void" category="VERSION_1_3" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="draw" kind="value" type="GLXDrawable" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="reference" type="uint" input="false" />
			</function>
			<function name="glXCreateNewContext" return="GLXContext" category="VERSION_1_3" glxopcode="24" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
				<param name="render_type" kind="value" type="int" input="true" />
				<param name="share_list" kind="value" type="GLXContext" input="true" />
				<param name="direct" kind="value" type="Bool" input="true" />
			</function>
			<function name="glXMakeContextCurrent" return="Bool" category="VERSION_1_3" glxopcode="26" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="draw" kind="value" type="GLXDrawable" input="true" />
				<param name="read" kind="value" type="GLXDrawable" input="true" />
				<param name="ctx" kind="value" type="GLXContext" input="true" />
			</function>
			<function name="glXGetCurrentReadDrawable" return="GLXDrawable" category="VERSION_1_3" glxflags="client-handcode" />
			<function name="glXGetCurrentDisplay" return="DisplayPointer" category="VERSION_1_3" glxflags="client-handcode" />
			<function name="glXQueryContext" return="int" category="VERSION_1_3" glxopcode="25" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="ctx" kind="value" type="GLXContext" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="reference" type="int" input="false" />
			</function>
			<function name="glXSelectEvent" return="void" category="VERSION_1_3" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="draw" kind="value" type="GLXDrawable" input="true" />
				<param name="event_mask" kind="value" type="ulong" input="true" />
			</function>
			<function name="glXGetSelectedEvent" return="void" category="VERSION_1_3" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="draw" kind="value" type="GLXDrawable" input="true" />
				<param name="event_mask" kind="reference" type="ulong" input="false" />
			</function>
			<function name="glXGetProcAddress" return="FunctionPointer" category="VERSION_1_4" glxflags="client-handcode" >
				<param name="procName" kind="reference" type="GLubyte" input="true" />
			</function>
			<function name="glXGetProcAddressARB" return="FunctionPointer" category="ARB_get_proc_address" glxflags="client-handcode" >
				<param name="procName" kind="reference" type="GLubyte" input="true" />
			</function>
			<function name="glXCreateContextAttribsARB" return="GLXContext" category="ARB_create_context" glxopcode="34" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfig" input="true" />
				<param name="share_context" kind="value" type="GLXContext" input="true" />
				<param name="direct" kind="value" type="Bool" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
			</function>
			<function name="glXSwapIntervalSGI" return="int" glxvendorglx="65536" category="SGI_swap_control" glxflags="client-handcode" >
				<param name="interval" kind="value" type="int" input="true" />
			</function>
			<function name="glXGetVideoSyncSGI" return="int" category="SGI_video_sync" glxflags="client-handcode" >
				<param name="count" kind="reference" type="uint" input="false" />
			</function>
			<function name="glXWaitVideoSyncSGI" return="int" category="SGI_video_sync" glxflags="client-handcode" >
				<param name="divisor" kind="value" type="int" input="true" />
				<param name="remainder" kind="value" type="int" input="true" />
				<param name="count" kind="reference" type="uint" input="false" />
			</function>
			<function name="glXMakeCurrentReadSGI" return="Bool" glxvendorglx="65537" category="SGI_make_current_read" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="draw" kind="value" type="GLXDrawable" input="true" />
				<param name="read" kind="value" type="GLXDrawable" input="true" />
				<param name="ctx" kind="value" type="GLXContext" input="true" />
			</function>
			<function name="glXGetCurrentReadDrawableSGI" return="GLXDrawable" category="SGI_make_current_read" glxflags="client-handcode" />
			<function name="glXCreateGLXVideoSourceSGIX" return="GLXVideoSourceSGIX" glxvendorglx="65538" category="SGIX_video_source" glxflags="client-handcode" >
				<param name="display" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="server" kind="value" type="VLServer" input="true" />
				<param name="path" kind="value" type="VLPath" input="true" />
				<param name="nodeClass" kind="value" type="int" input="true" />
				<param name="drainNode" kind="value" type="VLNode" input="true" />
			</function>
			<function name="glXDestroyGLXVideoSourceSGIX" return="void" glxvendorglx="65539" category="SGIX_video_source" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="glxvideosource" kind="value" type="GLXVideoSourceSGIX" input="true" />
			</function>
			<function name="glXGetCurrentDisplayEXT" return="DisplayPointer" category="EXT_import_context" glxflags="client-handcode" />
			<function name="glXQueryContextInfoEXT" return="int" glxvendorglx="1024" category="EXT_import_context" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="context" kind="value" type="GLXContext" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="reference" type="int" input="false" />
			</function>
			<function name="glXGetContextIDEXT" return="GLXContextID" category="EXT_import_context" glxflags="client-handcode" >
				<param name="context" kind="value" type="constGLXContext" input="true" />
			</function>
			<function name="glXImportContextEXT" return="GLXContext" category="EXT_import_context" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="contextID" kind="value" type="GLXContextID" input="true" />
			</function>
			<function name="glXFreeContextEXT" return="void" category="EXT_import_context" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="context" kind="value" type="GLXContext" input="true" />
			</function>
			<function name="glXGetFBConfigAttribSGIX" return="int" category="SGIX_fbconfig" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfigSGIX" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="reference" type="int" input="false" />
			</function>
			<function name="glXChooseFBConfigSGIX" return="GLXFBConfigSGIXPointer" category="SGIX_fbconfig" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="false" />
				<param name="nelements" kind="reference" type="int" input="false" />
			</function>
			<function name="glXCreateGLXPixmapWithConfigSGIX" return="GLXPixmap" glxvendorglx="65542" category="SGIX_fbconfig" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfigSGIX" input="true" />
				<param name="pixmap" kind="value" type="Pixmap" input="true" />
			</function>
			<function name="glXCreateContextWithConfigSGIX" return="GLXContext" glxvendorglx="65541" category="SGIX_fbconfig" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfigSGIX" input="true" />
				<param name="render_type" kind="value" type="int" input="true" />
				<param name="share_list" kind="value" type="GLXContext" input="true" />
				<param name="direct" kind="value" type="Bool" input="true" />
			</function>
			<function name="glXGetVisualFromFBConfigSGIX" return="XVisualInfoPointer" category="SGIX_fbconfig" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfigSGIX" input="true" />
			</function>
			<function name="glXGetFBConfigFromVisualSGIX" return="GLXFBConfigSGIX" category="SGIX_fbconfig" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="vis" kind="reference" type="XVisualInfo" input="false" />
			</function>
			<function name="glXCreateGLXPbufferSGIX" return="GLXPbufferSGIX" glxvendorglx="65543" category="SGIX_pbuffer" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="config" kind="value" type="GLXFBConfigSGIX" input="true" />
				<param name="width" kind="value" type="uint" input="true" />
				<param name="height" kind="value" type="uint" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="false" />
			</function>
			<function name="glXDestroyGLXPbufferSGIX" return="void" glxvendorglx="65544" category="SGIX_pbuffer" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pbuf" kind="value" type="GLXPbufferSGIX" input="true" />
			</function>
			<function name="glXQueryGLXPbufferSGIX" return="int" category="SGIX_pbuffer" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pbuf" kind="value" type="GLXPbufferSGIX" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="reference" type="uint" input="false" />
			</function>
			<function name="glXSelectEventSGIX" return="void" category="SGIX_pbuffer" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="mask" kind="value" type="ulong" input="true" />
			</function>
			<function name="glXGetSelectedEventSGIX" return="void" category="SGIX_pbuffer" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="mask" kind="reference" type="ulong" input="false" />
			</function>
			<function name="glXCushionSGI" return="void" category="SGI_cushion" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="window" kind="value" type="Window" input="true" />
				<param name="cushion" kind="value" type="float" input="true" />
			</function>
			<function name="glXBindChannelToWindowSGIX" return="int" category="SGIX_video_resize" >
				<param name="display" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="channel" kind="value" type="int" input="true" />
				<param name="window" kind="value" type="Window" input="true" />
			</function>
			<function name="glXChannelRectSGIX" return="int" category="SGIX_video_resize" >
				<param name="display" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="channel" kind="value" type="int" input="true" />
				<param name="x" kind="value" type="int" input="true" />
				<param name="y" kind="value" type="int" input="true" />
				<param name="w" kind="value" type="int" input="true" />
				<param name="h" kind="value" type="int" input="true" />
			</function>
			<function name="glXQueryChannelRectSGIX" return="int" category="SGIX_video_resize" >
				<param name="display" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="channel" kind="value" type="int" input="true" />
				<param name="dx" kind="reference" type="int" input="false" />
				<param name="dy" kind="reference" type="int" input="false" />
				<param name="dw" kind="reference" type="int" input="false" />
				<param name="dh" kind="reference" type="int" input="false" />
			</function>
			<function name="glXQueryChannelDeltasSGIX" return="int" category="SGIX_video_resize" >
				<param name="display" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="channel" kind="value" type="int" input="true" />
				<param name="x" kind="reference" type="int" input="false" />
				<param name="y" kind="reference" type="int" input="false" />
				<param name="w" kind="reference" type="int" input="false" />
				<param name="h" kind="reference" type="int" input="false" />
			</function>
			<function name="glXChannelRectSyncSGIX" return="int" category="SGIX_video_resize" >
				<param name="display" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="channel" kind="value" type="int" input="true" />
				<param name="synctype" kind="value" type="GLenum" input="true" />
			</function>
			<function name="glXAssociateDMPbufferSGIX" return="Bool" category="SGIX_dmbuffer" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pbuffer" kind="value" type="GLXPbufferSGIX" input="true" />
				<param name="params" kind="reference" type="DMparams" input="false" />
				<param name="dmbuffer" kind="value" type="DMbuffer" input="true" />
			</function>
			<function name="glXJoinSwapGroupSGIX" return="void" glxvendorglx="65547" category="SGIX_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="member" kind="value" type="GLXDrawable" input="true" />
			</function>
			<function name="glXBindSwapBarrierSGIX" return="void" glxvendorglx="65548" category="SGIX_swap_barrier" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="barrier" kind="value" type="int" input="true" />
			</function>
			<function name="glXQueryMaxSwapBarriersSGIX" return="Bool" glxvendorglx="65549" category="SGIX_swap_barrier" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="max" kind="reference" type="int" input="false" />
			</function>
			<function name="glXGetTransparentIndexSUN" return="Status" category="SUN_get_transparent_index" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="overlay" kind="value" type="Window" input="true" />
				<param name="underlay" kind="value" type="Window" input="true" />
				<param name="pTransparentIndex" kind="reference" type="long" input="false" />
			</function>
			<function name="glXCopySubBufferMESA" return="void" category="MESA_copy_sub_buffer" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="x" kind="value" type="int" input="true" />
				<param name="y" kind="value" type="int" input="true" />
				<param name="width" kind="value" type="int" input="true" />
				<param name="height" kind="value" type="int" input="true" />
			</function>
			<function name="glXCreateGLXPixmapMESA" return="GLXPixmap" category="MESA_pixmap_colormap" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="visual" kind="reference" type="XVisualInfo" input="false" />
				<param name="pixmap" kind="value" type="Pixmap" input="true" />
				<param name="cmap" kind="value" type="Colormap" input="true" />
			</function>
			<function name="glXReleaseBuffersMESA" return="Bool" category="MESA_release_buffers" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
			</function>
			<function name="glXSet3DfxModeMESA" return="Bool" category="MESA_set_3dfx_mode" glxflags="client-handcode" >
				<param name="mode" kind="value" type="int" input="true" />
			</function>
			<function name="glXGetSyncValuesOML" return="Bool" category="OML_sync_control" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="ust" kind="reference" type="int64_t" input="false" />
				<param name="msc" kind="reference" type="int64_t" input="false" />
				<param name="sbc" kind="reference" type="int64_t" input="false" />
			</function>
			<function name="glXGetMscRateOML" return="Bool" category="OML_sync_control" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="numerator" kind="reference" type="int32_t" input="false" />
				<param name="denominator" kind="reference" type="int32_t" input="false" />
			</function>
			<function name="glXSwapBuffersMscOML" return="int64_t" category="OML_sync_control" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="target_msc" kind="value" type="int64_t" input="true" />
				<param name="divisor" kind="value" type="int64_t" input="true" />
				<param name="remainder" kind="value" type="int64_t" input="true" />
			</function>
			<function name="glXWaitForMscOML" return="Bool" category="OML_sync_control" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="target_msc" kind="value" type="int64_t" input="true" />
				<param name="divisor" kind="value" type="int64_t" input="true" />
				<param name="remainder" kind="value" type="int64_t" input="true" />
				<param name="ust" kind="reference" type="int64_t" input="false" />
				<param name="msc" kind="reference" type="int64_t" input="false" />
				<param name="sbc" kind="reference" type="int64_t" input="false" />
			</function>
			<function name="glXWaitForSbcOML" return="Bool" category="OML_sync_control" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="target_sbc" kind="value" type="int64_t" input="true" />
				<param name="ust" kind="reference" type="int64_t" input="false" />
				<param name="msc" kind="reference" type="int64_t" input="false" />
				<param name="sbc" kind="reference" type="int64_t" input="false" />
			</function>
			<function name="glXQueryHyperpipeNetworkSGIX" return="GLXHyperpipeNetworkSGIXPointer" glxvendorglx="65550" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="npipes" kind="reference" type="int" input="false" />
			</function>
			<function name="glXHyperpipeConfigSGIX" return="int" glxvendorglx="65552" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="networkId" kind="value" type="int" input="true" />
				<param name="npipes" kind="value" type="int" input="true" />
				<param name="cfg" kind="array" type="GLXHyperpipeConfigSGIX" input="false" compute="[COMPSIZE(npipes)]" />
				<param name="hpId" kind="reference" type="int" input="false" />
			</function>
			<function name="glXQueryHyperpipeConfigSGIX" return="GLXHyperpipeConfigSGIXPointer" glxvendorglx="65551" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="hpId" kind="value" type="int" input="true" />
				<param name="npipes" kind="reference" type="int" input="false" />
			</function>
			<function name="glXDestroyHyperpipeConfigSGIX" return="int" glxvendorglx="65553" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="hpId" kind="value" type="int" input="true" />
			</function>
			<function name="glXBindHyperpipeSGIX" return="int" glxvendorglx="???" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="hpId" kind="value" type="int" input="true" />
			</function>
			<function name="glXQueryHyperpipeBestAttribSGIX" return="int" glxvendorglx="???" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="timeSlice" kind="value" type="int" input="true" />
				<param name="attrib" kind="value" type="int" input="true" />
				<param name="size" kind="value" type="int" input="true" />
				<param name="attribList" kind="array" type="void" input="false" compute="[COMPSIZE(size)]" />
				<param name="returnAttribList" kind="array" type="void" input="false" compute="[COMPSIZE(size)]" />
			</function>
			<function name="glXHyperpipeAttribSGIX" return="int" glxvendorglx="???" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="timeSlice" kind="value" type="int" input="true" />
				<param name="attrib" kind="value" type="int" input="true" />
				<param name="size" kind="value" type="int" input="true" />
				<param name="attribList" kind="array" type="void" input="false" compute="[COMPSIZE(size)]" />
			</function>
			<function name="glXQueryHyperpipeAttribSGIX" return="int" glxvendorglx="???" category="SGIX_hyperpipe" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="timeSlice" kind="value" type="int" input="true" />
				<param name="attrib" kind="value" type="int" input="true" />
				<param name="size" kind="value" type="int" input="true" />
				<param name="returnAttribList" kind="array" type="void" input="false" compute="[COMPSIZE(size)]" />
			</function>
			<function name="glXGetAGPOffsetMESA" return="uint" category="MESA_agp_offset" glxflags="client-handcode" >
				<param name="pointer" kind="reference" type="void" input="true" />
			</function>
			<function name="glXBindTexImageEXT" return="void" glxvendorglx="1330" category="EXT_texture_from_pixmap" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="buffer" kind="value" type="int" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
			</function>
			<function name="glXReleaseTexImageEXT" return="void" glxvendorglx="1331" category="EXT_texture_from_pixmap" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="buffer" kind="value" type="int" input="true" />
			</function>
			<function name="glXEnumerateVideoDevicesNV" return="uintPointer" category="NV_present_video" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="nelements" kind="reference" type="int" input="false" />
			</function>
			<function name="glXBindVideoDeviceNV" return="int" category="NV_present_video" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="video_slot" kind="value" type="uint" input="true" />
				<param name="video_device" kind="value" type="uint" input="true" />
				<param name="attrib_list" kind="reference" type="int" input="true" />
			</function>
			<function name="glXGetVideoDeviceNV" return="int" glxvendorglx="1313" category="NV_video_output" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="numVideoDevices" kind="value" type="int" input="true" />
				<param name="pVideoDevice" kind="array" type="GLXVideoDeviceNV" input="false" compute="[COMPSIZE(numVideoDevices)]" />
			</function>
			<function name="glXReleaseVideoDeviceNV" return="int" glxvendorglx="1314" category="NV_video_output" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="VideoDevice" kind="value" type="GLXVideoDeviceNV" input="true" />
			</function>
			<function name="glXBindVideoImageNV" return="int" glxvendorglx="1315" category="NV_video_output" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="VideoDevice" kind="value" type="GLXVideoDeviceNV" input="true" />
				<param name="pbuf" kind="value" type="GLXPbuffer" input="true" />
				<param name="iVideoBuffer" kind="value" type="int" input="true" />
			</function>
			<function name="glXReleaseVideoImageNV" return="int" glxvendorglx="1316" category="NV_video_output" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pbuf" kind="value" type="GLXPbuffer" input="true" />
			</function>
			<function name="glXSendPbufferToVideoNV" return="int" glxvendorglx="1317" category="NV_video_output" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="pbuf" kind="value" type="GLXPbuffer" input="true" />
				<param name="iBufferType" kind="value" type="int" input="true" />
				<param name="pulCounterPbuffer" kind="reference" type="ulong" input="false" />
				<param name="bBlock" kind="value" type="GLboolean" input="true" />
			</function>
			<function name="glXGetVideoInfoNV" return="int" glxvendorglx="1318" category="NV_video_output" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="VideoDevice" kind="value" type="GLXVideoDeviceNV" input="true" />
				<param name="pulCounterOutputPbuffer" kind="reference" type="ulong" input="false" />
				<param name="pulCounterOutputVideo" kind="reference" type="ulong" input="false" />
			</function>
			<function name="glXJoinSwapGroupNV" return="Bool" category="NV_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="group" kind="value" type="GLuint" input="true" />
			</function>
			<function name="glXBindSwapBarrierNV" return="Bool" category="NV_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="group" kind="value" type="GLuint" input="true" />
				<param name="barrier" kind="value" type="GLuint" input="true" />
			</function>
			<function name="glXQuerySwapGroupNV" return="Bool" category="NV_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="group" kind="reference" type="GLuint" input="false" />
				<param name="barrier" kind="reference" type="GLuint" input="false" />
			</function>
			<function name="glXQueryMaxSwapGroupsNV" return="Bool" category="NV_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="maxGroups" kind="reference" type="GLuint" input="false" />
				<param name="maxBarriers" kind="reference" type="GLuint" input="false" />
			</function>
			<function name="glXQueryFrameCountNV" return="Bool" category="NV_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="count" kind="reference" type="GLuint" input="false" />
			</function>
			<function name="glXResetFrameCountNV" return="Bool" category="NV_swap_group" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
			</function>
			<function name="glXBindVideoCaptureDeviceNV" return="int" category="NV_video_capture" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="video_capture_slot" kind="value" type="uint" input="true" />
				<param name="device" kind="value" type="GLXVideoCaptureDeviceNV" input="true" />
			</function>
			<function name="glXEnumerateVideoCaptureDevicesNV" return="GLXVideoCaptureDeviceNVPointer" category="NV_video_capture" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="screen" kind="value" type="int" input="true" />
				<param name="nelements" kind="reference" type="int" input="false" />
			</function>
			<function name="glXLockVideoCaptureDeviceNV" return="void" category="NV_video_capture" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="device" kind="value" type="GLXVideoCaptureDeviceNV" input="true" />
			</function>
			<function name="glXQueryVideoCaptureDeviceNV" return="int" category="NV_video_capture" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="device" kind="value" type="GLXVideoCaptureDeviceNV" input="true" />
				<param name="attribute" kind="value" type="int" input="true" />
				<param name="value" kind="array" type="int" input="false" compute="[COMPSIZE(attribute)]" />
			</function>
			<function name="glXReleaseVideoCaptureDeviceNV" return="void" category="NV_video_capture" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="device" kind="value" type="GLXVideoCaptureDeviceNV" input="true" />
			</function>
			<function name="glXSwapIntervalEXT" return="void" glxvendorglx="1416" category="EXT_swap_control" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="drawable" kind="value" type="GLXDrawable" input="true" />
				<param name="interval" kind="value" type="int" input="true" />
			</function>
			<function name="glXCopyImageSubDataNV" return="void" glxvendorglx="1360" category="NV_copy_image" glxflags="client-handcode" >
				<param name="dpy" kind="reference" type="Display" input="false" />
				<param name="srcCtx" kind="value" type="GLXContext" input="true" />
				<param name="srcName" kind="value" type="GLuint" input="true" />
				<param name="srcTarget" kind="value" type="GLenum" input="true" />
				<param name="srcLevel" kind="value" type="GLint" input="true" />
				<param name="srcX" kind="value" type="GLint" input="true" />
				<param name="srcY" kind="value" type="GLint" input="true" />
				<param name="srcZ" kind="value" type="GLint" input="true" />
				<param name="dstCtx" kind="value" type="GLXContext" input="true" />
				<param name="dstName" kind="value" type="GLuint" input="true" />
				<param name="dstTarget" kind="value" type="GLenum" input="true" />
				<param name="dstLevel" kind="value" type="GLint" input="true" />
				<param name="dstX" kind="value" type="GLint" input="true" />
				<param name="dstY" kind="value" type="GLint" input="true" />
				<param name="dstZ" kind="value" type="GLint" input="true" />
				<param name="width" kind="value" type="GLsizei" input="true" />
				<param name="height" kind="value" type="GLsizei" input="true" />
				<param name="depth" kind="value" type="GLsizei" input="true" />
			</function>
		</function-defs>
	</functions>
</specification>
Added jni/glshim/spec/xml/opengl.xml.

more than 10,000 changes

Added jni/glshim/spec/xml/toyml.py.
































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python
from collections import defaultdict
import re
import xml.etree.ElementTree as ET
import yaml


def etna_to_yml(xml):
    defs = xml.find('functions')
    functions = defaultdict(dict)
    for f in defs.findall('function'):
        name = f.get('name')
        ret = f.find('return')
        if ret is not None:
            ret = ret.get('type')
        if ret is None:
            ret = 'void'

        params = []
        for p in f.findall('param'):
            params.append('{} {}'.format(p.get('type'), p.get('name')))

        functions[name] = [ret] + params

    return functions


def lua_to_yml(xml):
    typemap = xml.find('typemap')
    types = {}
    for t in typemap:
        name = t.get('typename')
        types[name] = t.get('C-lang', name)

    defs = xml.find('functions').find('function-defs')
    functions = defaultdict(dict)
    for f in defs.findall('function'):
        cat = f.get('category')
        ret = f.get('return')
        ret = types.get(ret, ret)
        func = f.get('name')

        params = []
        for param in f.findall('param'):
            typ = param.get('type')
            typ = types.get(typ, typ)
            name = param.get('name')
            kind = param.get('kind')
            if kind in ('array', 'reference', 'array[size]'):
                typ = typ.rstrip()
                if not typ.endswith('*') or kind == 'reference':
                    typ += ' *'
                if not 'const' in typ and param.get('input', 'false') == 'true':
                    typ = 'const ' + typ
            p = '{} {}'.format(typ, name)
            p = p.replace('* ', '*')
            params.append(p)

        args = [ret]
        args.extend(params)
        functions[cat][func] = args
    return functions


def khronos_to_yml(xml):
    def extract(node):
        return node.findtext('ptype') or node.text, node.findtext('name')

    def clean(s):
        return re.sub('\s+', ' ', s).strip()

    defs = xml.find('commands')
    functions = defaultdict(dict)
    for f in defs.findall('command'):
        proto = f.find('proto')
        ret, name = extract(proto)
        params = []
        for param in f.findall('param'):
            params.append(clean(' '.join((param.itertext()))))

        functions[name] = [ret] + params
    return functions


def to_yml(filename):
    with open(filename, 'r') as f:
        data = f.read()

    data = re.sub(' xmlns="[^"]+"', '', data, count=1)
    xml = ET.fromstring(data)

    if xml.tag == 'root':
        functions = etna_to_yml(xml)
    elif xml.tag == 'specification':
        functions = lua_to_yml(xml)
    elif xml.tag == 'registry':
        functions = khronos_to_yml(xml)
    else:
        print 'unrecognized root tag:', xml.tag

    yml = yaml.dump(dict(functions))
    with open(filename.replace('xml', 'yml'), 'w') as o:
        o.write(yml)

if __name__ == '__main__':
    import sys
    if len(sys.argv) < 2:
        print 'Usage: {} <file.xml> [file.xml...]'.format(sys.argv[0])
        sys.exit(1)
    
    for name in sys.argv[1:]:
        to_yml(name)
Added jni/glshim/spec/xml/wgl.xml.












































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
<?xml version="1.0" encoding="UTF-8"?>

<specification xmlns="http://www.opengl.org/registry/" name="WGL" specversion="4.3" fileversion="0.0.1" >
	<typemap >
		<type-def typename="LPVOID" C-lang="LPVOID" />
		<type-def typename="HPBUFFERARB" C-lang="HPBUFFERARB" />
		<type-def typename="GLfloat" C-lang="GLfloat" />
		<type-def typename="HVIDEOOUTPUTDEVICENV" C-lang="HVIDEOOUTPUTDEVICENV" />
		<type-def typename="HGLRC" C-lang="HGLRC" />
		<type-def typename="GLbitfield" C-lang="GLbitfield" />
		<type-def typename="INT64" C-lang="INT64" />
		<type-def typename="BOOL" C-lang="BOOL" />
		<type-def typename="HPGPUNV" C-lang="HPGPUNV" />
		<type-def typename="PGPU_DEVICE" C-lang="PGPU_DEVICE" />
		<type-def typename="PROC" C-lang="PROC" />
		<type-def typename="USHORT" C-lang="USHORT" />
		<type-def typename="String" C-lang="const char *" />
		<type-def typename="GLint" C-lang="GLint" />
		<type-def typename="GLuint" C-lang="GLuint" />
		<type-def typename="INT" C-lang="INT" />
		<type-def typename="DWORD" C-lang="DWORD" />
		<type-def typename="GLushort" C-lang="GLushort" />
		<type-def typename="float" C-lang="float" />
		<type-def typename="FLOAT" C-lang="FLOAT" />
		<type-def typename="HVIDEOINPUTDEVICENV" C-lang="HVIDEOINPUTDEVICENV" />
		<type-def typename="GLboolean" C-lang="GLboolean" />
		<type-def typename="HPVIDEODEV" C-lang="HPVIDEODEV" />
		<type-def typename="UINT" C-lang="UINT" />
		<type-def typename="int" C-lang="int" />
		<type-def typename="GLsizei" C-lang="GLsizei" />
		<type-def typename="HGPUNV" C-lang="HGPUNV" />
		<type-def typename="uint" C-lang="unsigned int" />
		<type-def typename="HDC" C-lang="HDC" />
		<type-def typename="VOID" C-lang="VOID" />
		<type-def typename="GLenum" C-lang="GLenum" />
		<type-def typename="HANDLE" C-lang="HANDLE" />
		<type-def typename="VoidPointer" C-lang="void *" />
		<type-def typename="void" C-lang="void *" />
		<type-def typename="HPBUFFEREXT" C-lang="HPBUFFEREXT" />
		<type-def typename="INT32" C-lang="INT32" />
		<type-def typename="ulong" C-lang="unsigned long" />
	</typemap>
	<extensions >
		<ext name="ARB_buffer_region" />
		<ext name="ARB_multisample" />
		<ext name="ARB_extensions_string" />
		<ext name="ARB_pixel_format" />
		<ext name="ARB_make_current_read" />
		<ext name="ARB_pbuffer" />
		<ext name="ARB_render_texture" />
		<ext name="ARB_pixel_format_float" />
		<ext name="ARB_framebuffer_sRGB" />
		<ext name="ARB_create_context" />
		<ext name="ARB_create_context_profile" />
		<ext name="ARB_create_context_robustness" />
		<ext name="EXT_make_current_read" />
		<ext name="EXT_pixel_format" />
		<ext name="EXT_pbuffer" />
		<ext name="EXT_swap_control" />
		<ext name="EXT_depth_float" />
		<ext name="3DFX_multisample" />
		<ext name="EXT_multisample" />
		<ext name="I3D_digital_video_control" />
		<ext name="I3D_gamma" />
		<ext name="I3D_genlock" />
		<ext name="I3D_image_buffer" />
		<ext name="I3D_swap_frame_lock" />
		<ext name="NV_render_depth_texture" />
		<ext name="NV_render_texture_rectangle" />
		<ext name="ATI_pixel_format_float" />
		<ext name="NV_float_buffer" />
		<ext name="3DL_stereo_control" />
		<ext name="EXT_pixel_format_packed_float" />
		<ext name="EXT_framebuffer_sRGB" />
		<ext name="NV_present_video" />
		<ext name="NV_video_output" />
		<ext name="NV_swap_group" />
		<ext name="NV_gpu_affinity" />
		<ext name="AMD_gpu_association" />
		<ext name="NV_video_capture" />
		<ext name="NV_copy_image" />
		<ext name="NV_multisample_coverage" />
		<ext name="EXT_create_context_es2_profile" />
		<ext name="NV_DX_interop" />
		<ext name="NV_DX_interop2" />
		<ext name="EXT_swap_control_tear" />
	</extensions>
	<enumerations >
		<enum name="FRONT_COLOR_BUFFER_BIT_ARB" value="0x00000001" >
			<ext name="ARB_buffer_region" />
		</enum>
		<enum name="BACK_COLOR_BUFFER_BIT_ARB" value="0x00000002" >
			<ext name="ARB_buffer_region" />
		</enum>
		<enum name="DEPTH_BUFFER_BIT_ARB" value="0x00000004" >
			<ext name="ARB_buffer_region" />
		</enum>
		<enum name="STENCIL_BUFFER_BIT_ARB" value="0x00000008" >
			<ext name="ARB_buffer_region" />
		</enum>
		<enum name="SAMPLE_BUFFERS_ARB" value="0x2041" >
			<ext name="ARB_multisample" />
		</enum>
		<enum name="SAMPLES_ARB" value="0x2042" >
			<ext name="ARB_multisample" />
		</enum>
		<enum name="NUMBER_PIXEL_FORMATS_ARB" value="0x2000" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="DRAW_TO_WINDOW_ARB" value="0x2001" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="DRAW_TO_BITMAP_ARB" value="0x2002" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ACCELERATION_ARB" value="0x2003" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="NEED_PALETTE_ARB" value="0x2004" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="NEED_SYSTEM_PALETTE_ARB" value="0x2005" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SWAP_LAYER_BUFFERS_ARB" value="0x2006" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SWAP_METHOD_ARB" value="0x2007" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="NUMBER_OVERLAYS_ARB" value="0x2008" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="NUMBER_UNDERLAYS_ARB" value="0x2009" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="TRANSPARENT_ARB" value="0x200A" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="TRANSPARENT_RED_VALUE_ARB" value="0x2037" >
			<ext name="ARB_pixel_format" />
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="TRANSPARENT_GREEN_VALUE_ARB" value="0x2038" >
			<ext name="ARB_pixel_format" />
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="TRANSPARENT_BLUE_VALUE_ARB" value="0x2039" >
			<ext name="ARB_pixel_format" />
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="TRANSPARENT_ALPHA_VALUE_ARB" value="0x203A" >
			<ext name="ARB_pixel_format" />
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="TRANSPARENT_INDEX_VALUE_ARB" value="0x203B" >
			<ext name="ARB_pixel_format" />
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="SHARE_DEPTH_ARB" value="0x200C" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SHARE_STENCIL_ARB" value="0x200D" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SHARE_ACCUM_ARB" value="0x200E" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SUPPORT_GDI_ARB" value="0x200F" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SUPPORT_OPENGL_ARB" value="0x2010" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="DOUBLE_BUFFER_ARB" value="0x2011" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="STEREO_ARB" value="0x2012" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="PIXEL_TYPE_ARB" value="0x2013" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="COLOR_BITS_ARB" value="0x2014" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="RED_BITS_ARB" value="0x2015" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="RED_SHIFT_ARB" value="0x2016" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="GREEN_BITS_ARB" value="0x2017" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="GREEN_SHIFT_ARB" value="0x2018" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="BLUE_BITS_ARB" value="0x2019" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="BLUE_SHIFT_ARB" value="0x201A" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ALPHA_BITS_ARB" value="0x201B" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ALPHA_SHIFT_ARB" value="0x201C" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ACCUM_BITS_ARB" value="0x201D" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ACCUM_RED_BITS_ARB" value="0x201E" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ACCUM_GREEN_BITS_ARB" value="0x201F" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ACCUM_BLUE_BITS_ARB" value="0x2020" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ACCUM_ALPHA_BITS_ARB" value="0x2021" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="DEPTH_BITS_ARB" value="0x2022" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="STENCIL_BITS_ARB" value="0x2023" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="AUX_BUFFERS_ARB" value="0x2024" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="NO_ACCELERATION_ARB" value="0x2025" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="GENERIC_ACCELERATION_ARB" value="0x2026" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="FULL_ACCELERATION_ARB" value="0x2027" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SWAP_EXCHANGE_ARB" value="0x2028" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SWAP_COPY_ARB" value="0x2029" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="SWAP_UNDEFINED_ARB" value="0x202A" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="TYPE_RGBA_ARB" value="0x202B" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="TYPE_COLORINDEX_ARB" value="0x202C" >
			<ext name="ARB_pixel_format" />
		</enum>
		<enum name="ERROR_INVALID_PIXEL_TYPE_ARB" value="0x2043" >
			<ext name="ARB_make_current_read" />
		</enum>
		<enum name="ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB" value="0x2054" >
			<ext name="ARB_make_current_read" />
		</enum>
		<enum name="DRAW_TO_PBUFFER_ARB" value="0x202D" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_PIXELS_ARB" value="0x202E" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_WIDTH_ARB" value="0x202F" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_HEIGHT_ARB" value="0x2030" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="PBUFFER_LARGEST_ARB" value="0x2033" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="PBUFFER_WIDTH_ARB" value="0x2034" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="PBUFFER_HEIGHT_ARB" value="0x2035" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="PBUFFER_LOST_ARB" value="0x2036" >
			<ext name="ARB_pbuffer" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RGB_ARB" value="0x2070" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RGBA_ARB" value="0x2071" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_FORMAT_ARB" value="0x2072" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_TARGET_ARB" value="0x2073" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="MIPMAP_TEXTURE_ARB" value="0x2074" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_RGB_ARB" value="0x2075" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_RGBA_ARB" value="0x2076" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="NO_TEXTURE_ARB" value="0x2077" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_ARB" value="0x2078" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_1D_ARB" value="0x2079" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_2D_ARB" value="0x207A" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="MIPMAP_LEVEL_ARB" value="0x207B" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="CUBE_MAP_FACE_ARB" value="0x207C" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_POSITIVE_X_ARB" value="0x207D" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_NEGATIVE_X_ARB" value="0x207E" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_POSITIVE_Y_ARB" value="0x207F" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB" value="0x2080" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_POSITIVE_Z_ARB" value="0x2081" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB" value="0x2082" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="FRONT_LEFT_ARB" value="0x2083" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="FRONT_RIGHT_ARB" value="0x2084" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="BACK_LEFT_ARB" value="0x2085" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="BACK_RIGHT_ARB" value="0x2086" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX0_ARB" value="0x2087" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX1_ARB" value="0x2088" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX2_ARB" value="0x2089" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX3_ARB" value="0x208A" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX4_ARB" value="0x208B" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX5_ARB" value="0x208C" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX6_ARB" value="0x208D" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX7_ARB" value="0x208E" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX8_ARB" value="0x208F" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="AUX9_ARB" value="0x2090" >
			<ext name="ARB_render_texture" />
		</enum>
		<enum name="TYPE_RGBA_FLOAT_ARB" value="0x21A0" >
			<ext name="ARB_pixel_format_float" />
		</enum>
		<enum name="FRAMEBUFFER_SRGB_CAPABLE_ARB" value="0x20A9" >
			<ext name="ARB_framebuffer_sRGB" />
		</enum>
		<enum name="CONTEXT_DEBUG_BIT_ARB" value="0x00000001" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_FORWARD_COMPATIBLE_BIT_ARB" value="0x00000002" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_MAJOR_VERSION_ARB" value="0x2091" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_MINOR_VERSION_ARB" value="0x2092" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_LAYER_PLANE_ARB" value="0x2093" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_FLAGS_ARB" value="0x2094" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="ERROR_INVALID_VERSION_ARB" value="0x2095" >
			<ext name="ARB_create_context" />
		</enum>
		<enum name="CONTEXT_PROFILE_MASK_ARB" value="0x9126" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="CONTEXT_CORE_PROFILE_BIT_ARB" value="0x00000001" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB" value="0x00000002" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="ERROR_INVALID_PROFILE_ARB" value="0x2096" >
			<ext name="ARB_create_context_profile" />
		</enum>
		<enum name="CONTEXT_ROBUST_ACCESS_BIT_ARB" value="0x00000004" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="LOSE_CONTEXT_ON_RESET_ARB" value="0x8252" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB" value="0x8256" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="NO_RESET_NOTIFICATION_ARB" value="0x8261" >
			<ext name="ARB_create_context_robustness" />
		</enum>
		<enum name="ERROR_INVALID_PIXEL_TYPE_EXT" value="0x2043" >
			<ext name="EXT_make_current_read" />
		</enum>
		<enum name="NUMBER_PIXEL_FORMATS_EXT" value="0x2000" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="DRAW_TO_WINDOW_EXT" value="0x2001" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="DRAW_TO_BITMAP_EXT" value="0x2002" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ACCELERATION_EXT" value="0x2003" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="NEED_PALETTE_EXT" value="0x2004" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="NEED_SYSTEM_PALETTE_EXT" value="0x2005" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SWAP_LAYER_BUFFERS_EXT" value="0x2006" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SWAP_METHOD_EXT" value="0x2007" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="NUMBER_OVERLAYS_EXT" value="0x2008" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="NUMBER_UNDERLAYS_EXT" value="0x2009" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="TRANSPARENT_EXT" value="0x200A" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="TRANSPARENT_VALUE_EXT" value="0x200B" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SHARE_DEPTH_EXT" value="0x200C" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SHARE_STENCIL_EXT" value="0x200D" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SHARE_ACCUM_EXT" value="0x200E" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SUPPORT_GDI_EXT" value="0x200F" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SUPPORT_OPENGL_EXT" value="0x2010" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="DOUBLE_BUFFER_EXT" value="0x2011" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="STEREO_EXT" value="0x2012" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="PIXEL_TYPE_EXT" value="0x2013" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="COLOR_BITS_EXT" value="0x2014" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="RED_BITS_EXT" value="0x2015" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="RED_SHIFT_EXT" value="0x2016" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="GREEN_BITS_EXT" value="0x2017" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="GREEN_SHIFT_EXT" value="0x2018" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="BLUE_BITS_EXT" value="0x2019" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="BLUE_SHIFT_EXT" value="0x201A" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ALPHA_BITS_EXT" value="0x201B" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ALPHA_SHIFT_EXT" value="0x201C" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ACCUM_BITS_EXT" value="0x201D" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ACCUM_RED_BITS_EXT" value="0x201E" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ACCUM_GREEN_BITS_EXT" value="0x201F" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ACCUM_BLUE_BITS_EXT" value="0x2020" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="ACCUM_ALPHA_BITS_EXT" value="0x2021" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="DEPTH_BITS_EXT" value="0x2022" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="STENCIL_BITS_EXT" value="0x2023" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="AUX_BUFFERS_EXT" value="0x2024" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="NO_ACCELERATION_EXT" value="0x2025" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="GENERIC_ACCELERATION_EXT" value="0x2026" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="FULL_ACCELERATION_EXT" value="0x2027" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SWAP_EXCHANGE_EXT" value="0x2028" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SWAP_COPY_EXT" value="0x2029" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="SWAP_UNDEFINED_EXT" value="0x202A" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="TYPE_RGBA_EXT" value="0x202B" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="TYPE_COLORINDEX_EXT" value="0x202C" >
			<ext name="EXT_pixel_format" />
		</enum>
		<enum name="DRAW_TO_PBUFFER_EXT" value="0x202D" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_PIXELS_EXT" value="0x202E" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_WIDTH_EXT" value="0x202F" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="MAX_PBUFFER_HEIGHT_EXT" value="0x2030" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="OPTIMAL_PBUFFER_WIDTH_EXT" value="0x2031" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="OPTIMAL_PBUFFER_HEIGHT_EXT" value="0x2032" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="PBUFFER_LARGEST_EXT" value="0x2033" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="PBUFFER_WIDTH_EXT" value="0x2034" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="PBUFFER_HEIGHT_EXT" value="0x2035" >
			<ext name="EXT_pbuffer" />
		</enum>
		<enum name="DEPTH_FLOAT_EXT" value="0x2040" >
			<ext name="EXT_depth_float" />
		</enum>
		<enum name="SAMPLE_BUFFERS_3DFX" value="0x2060" >
			<ext name="3DFX_multisample" />
		</enum>
		<enum name="SAMPLES_3DFX" value="0x2061" >
			<ext name="3DFX_multisample" />
		</enum>
		<enum name="SAMPLE_BUFFERS_EXT" value="0x2041" >
			<ext name="EXT_multisample" />
		</enum>
		<enum name="SAMPLES_EXT" value="0x2042" >
			<ext name="EXT_multisample" />
		</enum>
		<enum name="DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D" value="0x2050" >
			<ext name="I3D_digital_video_control" />
		</enum>
		<enum name="DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D" value="0x2051" >
			<ext name="I3D_digital_video_control" />
		</enum>
		<enum name="DIGITAL_VIDEO_CURSOR_INCLUDED_I3D" value="0x2052" >
			<ext name="I3D_digital_video_control" />
		</enum>
		<enum name="DIGITAL_VIDEO_GAMMA_CORRECTED_I3D" value="0x2053" >
			<ext name="I3D_digital_video_control" />
		</enum>
		<enum name="GAMMA_TABLE_SIZE_I3D" value="0x204E" >
			<ext name="I3D_gamma" />
		</enum>
		<enum name="GAMMA_EXCLUDE_DESKTOP_I3D" value="0x204F" >
			<ext name="I3D_gamma" />
		</enum>
		<enum name="GENLOCK_SOURCE_MULTIVIEW_I3D" value="0x2044" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_EXTERNAL_SYNC_I3D" value="0x2045" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_EXTERNAL_FIELD_I3D" value="0x2046" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_EXTERNAL_TTL_I3D" value="0x2047" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_DIGITAL_SYNC_I3D" value="0x2048" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_DIGITAL_FIELD_I3D" value="0x2049" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_EDGE_FALLING_I3D" value="0x204A" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_EDGE_RISING_I3D" value="0x204B" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="GENLOCK_SOURCE_EDGE_BOTH_I3D" value="0x204C" >
			<ext name="I3D_genlock" />
		</enum>
		<enum name="IMAGE_BUFFER_MIN_ACCESS_I3D" value="0x00000001" >
			<ext name="I3D_image_buffer" />
		</enum>
		<enum name="IMAGE_BUFFER_LOCK_I3D" value="0x00000002" >
			<ext name="I3D_image_buffer" />
		</enum>
		<enum name="BIND_TO_TEXTURE_DEPTH_NV" value="0x20A3" >
			<ext name="NV_render_depth_texture" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV" value="0x20A4" >
			<ext name="NV_render_depth_texture" />
		</enum>
		<enum name="DEPTH_TEXTURE_FORMAT_NV" value="0x20A5" >
			<ext name="NV_render_depth_texture" />
		</enum>
		<enum name="TEXTURE_DEPTH_COMPONENT_NV" value="0x20A6" >
			<ext name="NV_render_depth_texture" />
		</enum>
		<enum name="DEPTH_COMPONENT_NV" value="0x20A7" >
			<ext name="NV_render_depth_texture" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_RGB_NV" value="0x20A0" >
			<ext name="NV_render_texture_rectangle" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_RGBA_NV" value="0x20A1" >
			<ext name="NV_render_texture_rectangle" />
		</enum>
		<enum name="TEXTURE_RECTANGLE_NV" value="0x20A2" >
			<ext name="NV_render_texture_rectangle" />
		</enum>
		<enum name="TYPE_RGBA_FLOAT_ATI" value="0x21A0" >
			<ext name="ATI_pixel_format_float" />
		</enum>
		<enum name="FLOAT_COMPONENTS_NV" value="0x20B0" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV" value="0x20B1" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV" value="0x20B2" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV" value="0x20B3" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV" value="0x20B4" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="TEXTURE_FLOAT_R_NV" value="0x20B5" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="TEXTURE_FLOAT_RG_NV" value="0x20B6" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="TEXTURE_FLOAT_RGB_NV" value="0x20B7" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="TEXTURE_FLOAT_RGBA_NV" value="0x20B8" >
			<ext name="NV_float_buffer" />
		</enum>
		<enum name="STEREO_EMITTER_ENABLE_3DL" value="0x2055" >
			<ext name="3DL_stereo_control" />
		</enum>
		<enum name="STEREO_EMITTER_DISABLE_3DL" value="0x2056" >
			<ext name="3DL_stereo_control" />
		</enum>
		<enum name="STEREO_POLARITY_NORMAL_3DL" value="0x2057" >
			<ext name="3DL_stereo_control" />
		</enum>
		<enum name="STEREO_POLARITY_INVERT_3DL" value="0x2058" >
			<ext name="3DL_stereo_control" />
		</enum>
		<enum name="TYPE_RGBA_UNSIGNED_FLOAT_EXT" value="0x20A8" >
			<ext name="EXT_pixel_format_packed_float" />
		</enum>
		<enum name="FRAMEBUFFER_SRGB_CAPABLE_EXT" value="0x20A9" >
			<ext name="EXT_framebuffer_sRGB" />
		</enum>
		<enum name="NUM_VIDEO_SLOTS_NV" value="0x20F0" >
			<ext name="NV_present_video" />
		</enum>
		<enum name="BIND_TO_VIDEO_RGB_NV" value="0x20C0" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="BIND_TO_VIDEO_RGBA_NV" value="0x20C1" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="BIND_TO_VIDEO_RGB_AND_DEPTH_NV" value="0x20C2" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_NV" value="0x20C3" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_ALPHA_NV" value="0x20C4" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_DEPTH_NV" value="0x20C5" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_AND_ALPHA_NV" value="0x20C6" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_COLOR_AND_DEPTH_NV" value="0x20C7" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_FRAME" value="0x20C8" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_FIELD_1" value="0x20C9" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_FIELD_2" value="0x20CA" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_STACKED_FIELDS_1_2" value="0x20CB" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="VIDEO_OUT_STACKED_FIELDS_2_1" value="0x20CC" >
			<ext name="NV_video_output" />
		</enum>
		<enum name="ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV" value="0x20D0" >
			<ext name="NV_gpu_affinity" />
		</enum>
		<enum name="ERROR_MISSING_AFFINITY_MASK_NV" value="0x20D1" >
			<ext name="NV_gpu_affinity" />
		</enum>
		<enum name="GPU_VENDOR_AMD" value="0x1F00" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_RENDERER_STRING_AMD" value="0x1F01" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_OPENGL_VERSION_STRING_AMD" value="0x1F02" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_FASTEST_TARGET_GPUS_AMD" value="0x21A2" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_RAM_AMD" value="0x21A3" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_CLOCK_AMD" value="0x21A4" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_PIPES_AMD" value="0x21A5" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_SIMD_AMD" value="0x21A6" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_RB_AMD" value="0x21A7" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="GPU_NUM_SPI_AMD" value="0x21A8" >
			<ext name="AMD_gpu_association" />
		</enum>
		<enum name="UNIQUE_ID_NV" value="0x20CE" >
			<ext name="NV_video_capture" />
		</enum>
		<enum name="NUM_VIDEO_CAPTURE_SLOTS_NV" value="0x20CF" >
			<ext name="NV_video_capture" />
		</enum>
		<enum name="COVERAGE_SAMPLES_NV" value="0x2042" >
			<ext name="NV_multisample_coverage" />
		</enum>
		<enum name="COLOR_SAMPLES_NV" value="0x20B9" >
			<ext name="NV_multisample_coverage" />
		</enum>
		<enum name="CONTEXT_ES2_PROFILE_BIT_EXT" value="0x00000004" >
			<ext name="EXT_create_context_es2_profile" />
		</enum>
		<enum name="ACCESS_READ_ONLY_NV" value="0x00000000" >
			<ext name="NV_DX_interop" />
		</enum>
		<enum name="ACCESS_READ_WRITE_NV" value="0x00000001" >
			<ext name="NV_DX_interop" />
		</enum>
		<enum name="ACCESS_WRITE_DISCARD_NV" value="0x00000002" >
			<ext name="NV_DX_interop" />
		</enum>
	</enumerations>
	<functions >
		<passthru ><![CDATA[#ifndef WGL_ARB_pbuffer
DECLARE_HANDLE(HPBUFFERARB);
#endif
#ifndef WGL_EXT_pbuffer
DECLARE_HANDLE(HPBUFFEREXT);
#endif
#ifndef WGL_NV_present_video
DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
#endif
#ifndef WGL_NV_video_output
DECLARE_HANDLE(HPVIDEODEV);
#endif
#ifndef WGL_NV_gpu_affinity
DECLARE_HANDLE(HPGPUNV);
DECLARE_HANDLE(HGPUNV);
typedef struct _GPU_DEVICE {
    DWORD  cb;
    CHAR   DeviceName[32];
    CHAR   DeviceString[128];
    DWORD  Flags;
    RECT   rcVirtualScreen;
} GPU_DEVICE, *PGPU_DEVICE;
#endif
#ifndef WGL_NV_video_capture
DECLARE_HANDLE(HVIDEOINPUTDEVICENV);
#endif]]></passthru>
		<property-defs >
			<property name="param" >
				<value >retval</value>
				<value >retained</value>
			</property>
			<property name="required-props" any="true" />
			<property name="passthru" any="true" />
			<property name="category" >
				<value >wgl</value>
				<value >ARB_buffer_region</value>
				<value >ARB_extensions_string</value>
				<value >ARB_pixel_format</value>
				<value >ARB_make_current_read</value>
				<value >ARB_pbuffer</value>
				<value >ARB_render_texture</value>
				<value >ARB_pixel_format_float</value>
				<value >EXT_display_color_table</value>
				<value >EXT_extensions_string</value>
				<value >EXT_make_current_read</value>
				<value >EXT_pbuffer</value>
				<value >EXT_pixel_format</value>
				<value >EXT_swap_control</value>
				<value >OML_sync_control</value>
				<value >I3D_digital_video_control</value>
				<value >I3D_gamma</value>
				<value >I3D_genlock</value>
				<value >I3D_image_buffer</value>
				<value >I3D_swap_frame_lock</value>
				<value >I3D_swap_frame_usage</value>
				<value >NV_vertex_array_range</value>
				<value >3DL_stereo_control</value>
				<value >NV_swap_group</value>
				<value >NV_video_output</value>
				<value >NV_present_video</value>
				<value >ARB_create_context</value>
				<value >NV_gpu_affinity</value>
				<value >AMD_gpu_association</value>
				<value >NV_video_capture</value>
				<value >NV_copy_image</value>
				<value >ARB_framebuffer_sRGB</value>
				<value >NV_DX_interop</value>
			</property>
		</property-defs>
		<function-defs >
			<function name="wglCreateBufferRegionARB" return="HANDLE" category="ARB_buffer_region" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iLayerPlane" kind="value" type="int" input="true" />
				<param name="uType" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglDeleteBufferRegionARB" return="VOID" category="ARB_buffer_region" >
				<param name="hRegion" kind="value" type="HANDLE" input="true" />
			</function>
			<function name="wglSaveBufferRegionARB" return="BOOL" category="ARB_buffer_region" >
				<param name="hRegion" kind="value" type="HANDLE" input="true" />
				<param name="x" kind="value" type="int" input="true" />
				<param name="y" kind="value" type="int" input="true" />
				<param name="width" kind="value" type="int" input="true" />
				<param name="height" kind="value" type="int" input="true" />
			</function>
			<function name="wglRestoreBufferRegionARB" return="BOOL" category="ARB_buffer_region" >
				<param name="hRegion" kind="value" type="HANDLE" input="true" />
				<param name="x" kind="value" type="int" input="true" />
				<param name="y" kind="value" type="int" input="true" />
				<param name="width" kind="value" type="int" input="true" />
				<param name="height" kind="value" type="int" input="true" />
				<param name="xSrc" kind="value" type="int" input="true" />
				<param name="ySrc" kind="value" type="int" input="true" />
			</function>
			<function name="wglGetExtensionsStringARB" return="String" category="ARB_extensions_string" >
				<param name="hdc" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglGetPixelFormatAttribivARB" return="BOOL" category="ARB_pixel_format" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="iPixelFormat" kind="value" type="int" input="true" />
				<param name="iLayerPlane" kind="value" type="int" input="true" />
				<param name="nAttributes" kind="value" type="UINT" input="true" />
				<param name="piAttributes" kind="array" type="int" input="true" compute="[nAttributes]" />
				<param name="piValues" kind="array" type="int" input="false" compute="[nAttributes]" />
			</function>
			<function name="wglGetPixelFormatAttribfvARB" return="BOOL" category="ARB_pixel_format" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="iPixelFormat" kind="value" type="int" input="true" />
				<param name="iLayerPlane" kind="value" type="int" input="true" />
				<param name="nAttributes" kind="value" type="UINT" input="true" />
				<param name="piAttributes" kind="array" type="int" input="true" compute="[nAttributes]" />
				<param name="pfValues" kind="array" type="FLOAT" input="false" compute="[nAttributes]" />
			</function>
			<function name="wglChoosePixelFormatARB" return="BOOL" category="ARB_pixel_format" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="piAttribIList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
				<param name="pfAttribFList" kind="array" type="FLOAT" input="true" compute="[COMPSIZE()]" />
				<param name="nMaxFormats" kind="value" type="UINT" input="true" />
				<param name="piFormats" kind="array" type="int" input="false" compute="[COMPSIZE(nNumFormats)]" />
				<param name="nNumFormats" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglMakeContextCurrentARB" return="BOOL" category="ARB_make_current_read" >
				<param name="hDrawDC" kind="value" type="HDC" input="true" />
				<param name="hReadDC" kind="value" type="HDC" input="true" />
				<param name="hglrc" kind="value" type="HGLRC" input="true" />
			</function>
			<function name="wglGetCurrentReadDCARB" return="HDC" category="ARB_make_current_read" />
			<function name="wglCreatePbufferARB" return="HPBUFFERARB" category="ARB_pbuffer" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iPixelFormat" kind="value" type="int" input="true" />
				<param name="iWidth" kind="value" type="int" input="true" />
				<param name="iHeight" kind="value" type="int" input="true" />
				<param name="piAttribList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglGetPbufferDCARB" return="HDC" category="ARB_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
			</function>
			<function name="wglReleasePbufferDCARB" return="int" category="ARB_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="hDC" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglDestroyPbufferARB" return="BOOL" category="ARB_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
			</function>
			<function name="wglQueryPbufferARB" return="BOOL" category="ARB_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="reference" type="int" input="false" />
			</function>
			<function name="wglBindTexImageARB" return="BOOL" category="ARB_render_texture" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="iBuffer" kind="value" type="int" input="true" />
			</function>
			<function name="wglReleaseTexImageARB" return="BOOL" category="ARB_render_texture" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="iBuffer" kind="value" type="int" input="true" />
			</function>
			<function name="wglSetPbufferAttribARB" return="BOOL" category="ARB_render_texture" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="piAttribList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglCreateContextAttribsARB" return="HGLRC" category="ARB_create_context" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="hShareContext" kind="value" type="HGLRC" input="true" />
				<param name="attribList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglCreateDisplayColorTableEXT" return="GLboolean" category="EXT_display_color_table" >
				<param name="id" kind="value" type="GLushort" input="true" />
			</function>
			<function name="wglLoadDisplayColorTableEXT" return="GLboolean" category="EXT_display_color_table" >
				<param name="table" kind="array" type="GLushort" input="true" compute="[length]" />
				<param name="length" kind="value" type="GLuint" input="true" />
			</function>
			<function name="wglBindDisplayColorTableEXT" return="GLboolean" category="EXT_display_color_table" >
				<param name="id" kind="value" type="GLushort" input="true" />
			</function>
			<function name="wglDestroyDisplayColorTableEXT" return="VOID" category="EXT_display_color_table" >
				<param name="id" kind="value" type="GLushort" input="true" />
			</function>
			<function name="wglGetExtensionsStringEXT" return="String" category="EXT_extensions_string" />
			<function name="wglMakeContextCurrentEXT" return="BOOL" category="EXT_make_current_read" >
				<param name="hDrawDC" kind="value" type="HDC" input="true" />
				<param name="hReadDC" kind="value" type="HDC" input="true" />
				<param name="hglrc" kind="value" type="HGLRC" input="true" />
			</function>
			<function name="wglGetCurrentReadDCEXT" return="HDC" category="EXT_make_current_read" />
			<function name="wglCreatePbufferEXT" return="HPBUFFEREXT" category="EXT_pbuffer" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iPixelFormat" kind="value" type="int" input="true" />
				<param name="iWidth" kind="value" type="int" input="true" />
				<param name="iHeight" kind="value" type="int" input="true" />
				<param name="piAttribList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglGetPbufferDCEXT" return="HDC" category="EXT_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFEREXT" input="true" />
			</function>
			<function name="wglReleasePbufferDCEXT" return="int" category="EXT_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFEREXT" input="true" />
				<param name="hDC" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglDestroyPbufferEXT" return="BOOL" category="EXT_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFEREXT" input="true" />
			</function>
			<function name="wglQueryPbufferEXT" return="BOOL" category="EXT_pbuffer" >
				<param name="hPbuffer" kind="value" type="HPBUFFEREXT" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="reference" type="int" input="false" />
			</function>
			<function name="wglGetPixelFormatAttribivEXT" return="BOOL" category="EXT_pixel_format" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="iPixelFormat" kind="value" type="int" input="true" />
				<param name="iLayerPlane" kind="value" type="int" input="true" />
				<param name="nAttributes" kind="value" type="UINT" input="true" />
				<param name="piAttributes" kind="array" type="int" input="false" compute="[nAttributes]" />
				<param name="piValues" kind="array" type="int" input="false" compute="[nAttributes]" />
			</function>
			<function name="wglGetPixelFormatAttribfvEXT" return="BOOL" category="EXT_pixel_format" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="iPixelFormat" kind="value" type="int" input="true" />
				<param name="iLayerPlane" kind="value" type="int" input="true" />
				<param name="nAttributes" kind="value" type="UINT" input="true" />
				<param name="piAttributes" kind="array" type="int" input="false" compute="[nAttributes]" />
				<param name="pfValues" kind="array" type="FLOAT" input="false" compute="[nAttributes]" />
			</function>
			<function name="wglChoosePixelFormatEXT" return="BOOL" category="EXT_pixel_format" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="piAttribIList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
				<param name="pfAttribFList" kind="array" type="FLOAT" input="true" compute="[COMPSIZE()]" />
				<param name="nMaxFormats" kind="value" type="UINT" input="true" />
				<param name="piFormats" kind="array" type="int" input="false" compute="[COMPSIZE(nNumFormats)]" />
				<param name="nNumFormats" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglSwapIntervalEXT" return="BOOL" category="EXT_swap_control" >
				<param name="interval" kind="value" type="int" input="true" />
			</function>
			<function name="wglGetSwapIntervalEXT" return="int" category="EXT_swap_control" />
			<function name="wglAllocateMemoryNV" return="VoidPointer" category="NV_vertex_array_range" >
				<param name="size" kind="value" type="GLsizei" input="true" />
				<param name="readfreq" kind="value" type="GLfloat" input="true" />
				<param name="writefreq" kind="value" type="GLfloat" input="true" />
				<param name="priority" kind="value" type="GLfloat" input="true" />
			</function>
			<function name="wglFreeMemoryNV" return="void" category="NV_vertex_array_range" >
				<param name="pointer" kind="array" type="void" input="false" compute="[1]" />
			</function>
			<function name="wglGetSyncValuesOML" return="BOOL" category="OML_sync_control" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="ust" kind="array" type="INT64" input="false" compute="[1]" />
				<param name="msc" kind="array" type="INT64" input="false" compute="[1]" />
				<param name="sbc" kind="array" type="INT64" input="false" compute="[1]" />
			</function>
			<function name="wglGetMscRateOML" return="BOOL" category="OML_sync_control" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="numerator" kind="array" type="INT32" input="false" compute="[1]" />
				<param name="denominator" kind="array" type="INT32" input="false" compute="[1]" />
			</function>
			<function name="wglSwapBuffersMscOML" return="INT64" category="OML_sync_control" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="target_msc" kind="value" type="INT64" input="true" />
				<param name="divisor" kind="value" type="INT64" input="true" />
				<param name="remainder" kind="value" type="INT64" input="true" />
			</function>
			<function name="wglSwapLayerBuffersMscOML" return="INT64" category="OML_sync_control" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="fuPlanes" kind="value" type="int" input="true" />
				<param name="target_msc" kind="value" type="INT64" input="true" />
				<param name="divisor" kind="value" type="INT64" input="true" />
				<param name="remainder" kind="value" type="INT64" input="true" />
			</function>
			<function name="wglWaitForMscOML" return="BOOL" category="OML_sync_control" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="target_msc" kind="value" type="INT64" input="true" />
				<param name="divisor" kind="value" type="INT64" input="true" />
				<param name="remainder" kind="value" type="INT64" input="true" />
				<param name="ust" kind="array" type="INT64" input="false" compute="[1]" />
				<param name="msc" kind="array" type="INT64" input="false" compute="[1]" />
				<param name="sbc" kind="array" type="INT64" input="false" compute="[1]" />
			</function>
			<function name="wglWaitForSbcOML" return="BOOL" category="OML_sync_control" >
				<param name="hdc" kind="value" type="HDC" input="true" />
				<param name="target_sbc" kind="value" type="INT64" input="true" />
				<param name="ust" kind="array" type="INT64" input="false" compute="[1]" />
				<param name="msc" kind="array" type="INT64" input="false" compute="[1]" />
				<param name="sbc" kind="array" type="INT64" input="false" compute="[1]" />
			</function>
			<function name="wglGetDigitalVideoParametersI3D" return="BOOL" category="I3D_digital_video_control" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="array" type="int" input="false" compute="[COMPSIZE(iAttribute)]" />
			</function>
			<function name="wglSetDigitalVideoParametersI3D" return="BOOL" category="I3D_digital_video_control" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="array" type="int" input="true" compute="[COMPSIZE(iAttribute)]" />
			</function>
			<function name="wglGetGammaTableParametersI3D" return="BOOL" category="I3D_gamma" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="array" type="int" input="false" compute="[COMPSIZE(iAttribute)]" />
			</function>
			<function name="wglSetGammaTableParametersI3D" return="BOOL" category="I3D_gamma" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="array" type="int" input="true" compute="[COMPSIZE(iAttribute)]" />
			</function>
			<function name="wglGetGammaTableI3D" return="BOOL" category="I3D_gamma" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iEntries" kind="value" type="int" input="true" />
				<param name="puRed" kind="array" type="USHORT" input="false" compute="[iEntries]" />
				<param name="puGreen" kind="array" type="USHORT" input="false" compute="[iEntries]" />
				<param name="puBlue" kind="array" type="USHORT" input="false" compute="[iEntries]" />
			</function>
			<function name="wglSetGammaTableI3D" return="BOOL" category="I3D_gamma" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="iEntries" kind="value" type="int" input="true" />
				<param name="puRed" kind="array" type="USHORT" input="true" compute="[iEntries]" />
				<param name="puGreen" kind="array" type="USHORT" input="true" compute="[iEntries]" />
				<param name="puBlue" kind="array" type="USHORT" input="true" compute="[iEntries]" />
			</function>
			<function name="wglEnableGenlockI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglDisableGenlockI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglIsEnabledGenlockI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="pFlag" kind="reference" type="BOOL" input="false" />
			</function>
			<function name="wglGenlockSourceI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uSource" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglGetGenlockSourceI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uSource" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglGenlockSourceEdgeI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uEdge" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglGetGenlockSourceEdgeI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uEdge" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglGenlockSampleRateI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uRate" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglGetGenlockSampleRateI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uRate" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglGenlockSourceDelayI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uDelay" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglGetGenlockSourceDelayI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uDelay" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglQueryGenlockMaxSourceDelayI3D" return="BOOL" category="I3D_genlock" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uMaxLineDelay" kind="reference" type="UINT" input="false" />
				<param name="uMaxPixelDelay" kind="reference" type="UINT" input="false" />
			</function>
			<function name="wglCreateImageBufferI3D" return="LPVOID" category="I3D_image_buffer" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="dwSize" kind="value" type="DWORD" input="true" />
				<param name="uFlags" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglDestroyImageBufferI3D" return="BOOL" category="I3D_image_buffer" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="pAddress" kind="value" type="LPVOID" input="true" />
			</function>
			<function name="wglAssociateImageBufferEventsI3D" return="BOOL" category="I3D_image_buffer" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="pEvent" kind="array" type="HANDLE" input="true" compute="[count]" />
				<param name="pAddress" kind="array" type="LPVOID" input="true" compute="[count]" />
				<param name="pSize" kind="array" type="DWORD" input="true" compute="[count]" />
				<param name="count" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglReleaseImageBufferEventsI3D" return="BOOL" category="I3D_image_buffer" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="pAddress" kind="array" type="LPVOID" input="true" compute="[count]" />
				<param name="count" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglEnableFrameLockI3D" return="BOOL" category="I3D_swap_frame_lock" />
			<function name="wglDisableFrameLockI3D" return="BOOL" category="I3D_swap_frame_lock" />
			<function name="wglIsEnabledFrameLockI3D" return="BOOL" category="I3D_swap_frame_lock" >
				<param name="pFlag" kind="reference" type="BOOL" input="false" />
			</function>
			<function name="wglQueryFrameLockMasterI3D" return="BOOL" category="I3D_swap_frame_lock" >
				<param name="pFlag" kind="reference" type="BOOL" input="false" />
			</function>
			<function name="wglGetFrameUsageI3D" return="BOOL" category="I3D_swap_frame_usage" >
				<param name="pUsage" kind="reference" type="float" input="false" />
			</function>
			<function name="wglBeginFrameTrackingI3D" return="BOOL" category="I3D_swap_frame_usage" />
			<function name="wglEndFrameTrackingI3D" return="BOOL" category="I3D_swap_frame_usage" />
			<function name="wglQueryFrameTrackingI3D" return="BOOL" category="I3D_swap_frame_usage" >
				<param name="pFrameCount" kind="reference" type="DWORD" input="false" />
				<param name="pMissedFrames" kind="reference" type="DWORD" input="false" />
				<param name="pLastMissedUsage" kind="reference" type="float" input="false" />
			</function>
			<function name="wglSetStereoEmitterState3DL" return="BOOL" category="3DL_stereo_control" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uState" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglEnumerateVideoDevicesNV" return="int" category="NV_present_video" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="phDeviceList" kind="array" type="HVIDEOOUTPUTDEVICENV" input="false" />
			</function>
			<function name="wglBindVideoDeviceNV" return="BOOL" category="NV_present_video" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="uVideoSlot" kind="value" type="uint" input="true" />
				<param name="hVideoDevice" kind="value" type="HVIDEOOUTPUTDEVICENV" input="true" />
				<param name="piAttribList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglQueryCurrentContextNV" return="BOOL" category="NV_present_video" >
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="array" type="int" input="false" compute="[COMPSIZE()]" />
			</function>
			<function name="wglGetVideoDeviceNV" return="BOOL" category="NV_video_output" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="numDevices" kind="value" type="int" input="true" />
				<param name="hVideoDevice" kind="reference" type="HPVIDEODEV" input="false" />
			</function>
			<function name="wglReleaseVideoDeviceNV" return="BOOL" category="NV_video_output" >
				<param name="hVideoDevice" kind="value" type="HPVIDEODEV" input="true" />
			</function>
			<function name="wglBindVideoImageNV" return="BOOL" category="NV_video_output" >
				<param name="hVideoDevice" kind="value" type="HPVIDEODEV" input="true" />
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="iVideoBuffer" kind="value" type="int" input="true" />
			</function>
			<function name="wglReleaseVideoImageNV" return="BOOL" category="NV_video_output" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="iVideoBuffer" kind="value" type="int" input="true" />
			</function>
			<function name="wglSendPbufferToVideoNV" return="BOOL" category="NV_video_output" >
				<param name="hPbuffer" kind="value" type="HPBUFFERARB" input="true" />
				<param name="iBufferType" kind="value" type="int" input="true" />
				<param name="pulCounterPbuffer" kind="reference" type="ulong" input="false" />
				<param name="bBlock" kind="value" type="BOOL" input="true" />
			</function>
			<function name="wglGetVideoInfoNV" return="BOOL" category="NV_video_output" >
				<param name="hpVideoDevice" kind="value" type="HPVIDEODEV" input="true" />
				<param name="pulCounterOutputPbuffer" kind="reference" type="ulong" input="false" />
				<param name="pulCounterOutputVideo" kind="reference" type="ulong" input="false" />
			</function>
			<function name="wglJoinSwapGroupNV" return="BOOL" category="NV_swap_group" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="group" kind="value" type="GLuint" input="true" />
			</function>
			<function name="wglBindSwapBarrierNV" return="BOOL" category="NV_swap_group" >
				<param name="group" kind="value" type="GLuint" input="true" />
				<param name="barrier" kind="value" type="GLuint" input="true" />
			</function>
			<function name="wglQuerySwapGroupNV" return="BOOL" category="NV_swap_group" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="group" kind="reference" type="GLuint" input="false" />
				<param name="barrier" kind="reference" type="GLuint" input="false" />
			</function>
			<function name="wglQueryMaxSwapGroupsNV" return="BOOL" category="NV_swap_group" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="maxGroups" kind="reference" type="GLuint" input="false" />
				<param name="maxBarriers" kind="reference" type="GLuint" input="false" />
			</function>
			<function name="wglQueryFrameCountNV" return="BOOL" category="NV_swap_group" >
				<param name="hDC" kind="value" type="HDC" input="true" />
				<param name="count" kind="reference" type="GLuint" input="false" />
			</function>
			<function name="wglResetFrameCountNV" return="BOOL" category="NV_swap_group" >
				<param name="hDC" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglEnumGpusNV" return="BOOL" category="NV_gpu_affinity" >
				<param name="iGpuIndex" kind="value" type="UINT" input="true" />
				<param name="phGpu" kind="reference" type="HGPUNV" input="false" />
			</function>
			<function name="wglEnumGpuDevicesNV" return="BOOL" category="NV_gpu_affinity" >
				<param name="hGpu" kind="value" type="HGPUNV" input="true" />
				<param name="iDeviceIndex" kind="value" type="UINT" input="true" />
				<param name="lpGpuDevice" kind="value" type="PGPU_DEVICE" input="true" />
			</function>
			<function name="wglCreateAffinityDCNV" return="HDC" category="NV_gpu_affinity" >
				<param name="phGpuList" kind="array" type="HGPUNV" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglEnumGpusFromAffinityDCNV" return="BOOL" category="NV_gpu_affinity" >
				<param name="hAffinityDC" kind="value" type="HDC" input="true" />
				<param name="iGpuIndex" kind="value" type="UINT" input="true" />
				<param name="hGpu" kind="reference" type="HGPUNV" input="false" />
			</function>
			<function name="wglDeleteDCNV" return="BOOL" category="NV_gpu_affinity" >
				<param name="hdc" kind="value" type="HDC" input="true" />
			</function>
			<function name="wglGetGPUIDsAMD" return="UINT" category="AMD_gpu_association" >
				<param name="maxCount" kind="value" type="UINT" input="true" />
				<param name="ids" kind="array" type="UINT" input="false" compute="[maxCount]" />
			</function>
			<function name="wglGetGPUInfoAMD" return="INT" category="AMD_gpu_association" >
				<param name="id" kind="value" type="UINT" input="true" />
				<param name="property" kind="value" type="int" input="true" />
				<param name="dataType" kind="value" type="GLenum" input="true" />
				<param name="size" kind="value" type="UINT" input="true" />
				<param name="data" kind="array" type="void" input="false" compute="[COMPSIZE(dataType,size)]" />
			</function>
			<function name="wglGetContextGPUIDAMD" return="UINT" category="AMD_gpu_association" >
				<param name="hglrc" kind="value" type="HGLRC" input="true" />
			</function>
			<function name="wglCreateAssociatedContextAMD" return="HGLRC" category="AMD_gpu_association" >
				<param name="id" kind="value" type="UINT" input="true" />
			</function>
			<function name="wglCreateAssociatedContextAttribsAMD" return="HGLRC" category="AMD_gpu_association" >
				<param name="id" kind="value" type="UINT" input="true" />
				<param name="hShareContext" kind="value" type="HGLRC" input="true" />
				<param name="attribList" kind="array" type="int" input="true" compute="[COMPSIZE()]" />
			</function>
			<function name="wglDeleteAssociatedContextAMD" return="BOOL" category="AMD_gpu_association" >
				<param name="hglrc" kind="value" type="HGLRC" input="true" />
			</function>
			<function name="wglMakeAssociatedContextCurrentAMD" return="BOOL" category="AMD_gpu_association" >
				<param name="hglrc" kind="value" type="HGLRC" input="true" />
			</function>
			<function name="wglGetCurrentAssociatedContextAMD" return="HGLRC" category="AMD_gpu_association" />
			<function name="wglBlitContextFramebufferAMD" return="VOID" category="AMD_gpu_association" >
				<param name="dstCtx" kind="value" type="HGLRC" input="true" />
				<param name="srcX0" kind="value" type="GLint" input="true" />
				<param name="srcY0" kind="value" type="GLint" input="true" />
				<param name="srcX1" kind="value" type="GLint" input="true" />
				<param name="srcY1" kind="value" type="GLint" input="true" />
				<param name="dstX0" kind="value" type="GLint" input="true" />
				<param name="dstY0" kind="value" type="GLint" input="true" />
				<param name="dstX1" kind="value" type="GLint" input="true" />
				<param name="dstY1" kind="value" type="GLint" input="true" />
				<param name="mask" kind="value" type="GLbitfield" input="true" />
				<param name="filter" kind="value" type="GLenum" input="true" />
			</function>
			<function name="wglBindVideoCaptureDeviceNV" return="BOOL" category="NV_video_capture" >
				<param name="uVideoSlot" kind="value" type="UINT" input="true" />
				<param name="hDevice" kind="value" type="HVIDEOINPUTDEVICENV" input="true" />
			</function>
			<function name="wglEnumerateVideoCaptureDevicesNV" return="UINT" category="NV_video_capture" >
				<param name="hDc" kind="value" type="HDC" input="true" />
				<param name="phDeviceList" kind="reference" type="HVIDEOINPUTDEVICENV" input="false" />
			</function>
			<function name="wglLockVideoCaptureDeviceNV" return="BOOL" category="NV_video_capture" >
				<param name="hDc" kind="value" type="HDC" input="true" />
				<param name="hDevice" kind="value" type="HVIDEOINPUTDEVICENV" input="true" />
			</function>
			<function name="wglQueryVideoCaptureDeviceNV" return="BOOL" category="NV_video_capture" >
				<param name="hDc" kind="value" type="HDC" input="true" />
				<param name="hDevice" kind="value" type="HVIDEOINPUTDEVICENV" input="true" />
				<param name="iAttribute" kind="value" type="int" input="true" />
				<param name="piValue" kind="reference" type="int" input="false" />
			</function>
			<function name="wglReleaseVideoCaptureDeviceNV" return="BOOL" category="NV_video_capture" >
				<param name="hDc" kind="value" type="HDC" input="true" />
				<param name="hDevice" kind="value" type="HVIDEOINPUTDEVICENV" input="true" />
			</function>
			<function name="wglCopyImageSubDataNV" return="BOOL" category="NV_copy_image" >
				<param name="hSrcRC" kind="value" type="HGLRC" input="true" />
				<param name="srcName" kind="value" type="GLuint" input="true" />
				<param name="srcTarget" kind="value" type="GLenum" input="true" />
				<param name="srcLevel" kind="value" type="GLint" input="true" />
				<param name="srcX" kind="value" type="GLint" input="true" />
				<param name="srcY" kind="value" type="GLint" input="true" />
				<param name="srcZ" kind="value" type="GLint" input="true" />
				<param name="hDstRC" kind="value" type="HGLRC" input="true" />
				<param name="dstName" kind="value" type="GLuint" input="true" />
				<param name="dstTarget" kind="value" type="GLenum" input="true" />
				<param name="dstLevel" kind="value" type="GLint" input="true" />
				<param name="dstX" kind="value" type="GLint" input="true" />
				<param name="dstY" kind="value" type="GLint" input="true" />
				<param name="dstZ" kind="value" type="GLint" input="true" />
				<param name="width" kind="value" type="GLsizei" input="true" />
				<param name="height" kind="value" type="GLsizei" input="true" />
				<param name="depth" kind="value" type="GLsizei" input="true" />
			</function>
			<function name="wglDXSetResourceShareHandleNV" return="BOOL" category="NV_DX_interop" >
				<param name="dxObject" kind="array" type="void" input="false" compute="[1]" />
				<param name="shareHandle" kind="value" type="HANDLE" input="true" />
			</function>
			<function name="wglDXOpenDeviceNV" return="HANDLE" category="NV_DX_interop" >
				<param name="dxDevice" kind="array" type="void" input="false" compute="[1]" />
			</function>
			<function name="wglDXCloseDeviceNV" return="BOOL" category="NV_DX_interop" >
				<param name="hDevice" kind="value" type="HANDLE" input="true" />
			</function>
			<function name="wglDXRegisterObjectNV" return="HANDLE" category="NV_DX_interop" >
				<param name="hDevice" kind="value" type="HANDLE" input="true" />
				<param name="dxObject" kind="array" type="void" input="false" compute="[1]" />
				<param name="name" kind="value" type="GLuint" input="true" />
				<param name="type" kind="value" type="GLenum" input="true" />
				<param name="access" kind="value" type="GLenum" input="true" />
			</function>
			<function name="wglDXUnregisterObjectNV" return="BOOL" category="NV_DX_interop" >
				<param name="hDevice" kind="value" type="HANDLE" input="true" />
				<param name="hObject" kind="value" type="HANDLE" input="true" />
			</function>
			<function name="wglDXObjectAccessNV" return="BOOL" category="NV_DX_interop" >
				<param name="hObject" kind="value" type="HANDLE" input="true" />
				<param name="access" kind="value" type="GLenum" input="true" />
			</function>
			<function name="wglDXLockObjectsNV" return="BOOL" category="NV_DX_interop" >
				<param name="hDevice" kind="value" type="HANDLE" input="true" />
				<param name="count" kind="value" type="GLint" input="true" />
				<param name="hObjects" kind="array" type="HANDLE" input="false" compute="[count]" />
			</function>
			<function name="wglDXUnlockObjectsNV" return="BOOL" category="NV_DX_interop" >
				<param name="hDevice" kind="value" type="HANDLE" input="true" />
				<param name="count" kind="value" type="GLint" input="true" />
				<param name="hObjects" kind="array" type="HANDLE" input="false" compute="[count]" />
			</function>
		</function-defs>
	</functions>
</specification>
Added jni/glshim/spec/yml/gles-1.1.yml.






































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
glActiveTexture: [void, GLenum texture]
glAlphaFunc: [void, GLenum func, GLclampf ref]
glAlphaFuncx: [void, GLenum func, GLclampx ref]
glBindBuffer: [void, GLenum target, GLuint buffer]
glBindTexture: [void, GLenum target, GLuint texture]
glBlendFunc: [void, GLenum sfactor, GLenum dfactor]
glBufferData: [void, GLenum target, GLsizeiptr size, "const GLvoid *data", GLenum usage]
glBufferSubData: [void, GLenum target, GLintptr offset, GLsizeiptr size, "const GLvoid *data"]
glClear: [void, GLbitfield mask]
glClearColor: [void, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha]
glClearColorx: [void, GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha]
glClearDepthf: [void, GLclampf depth]
glClearDepthx: [void, GLclampx depth]
glClearStencil: [void, GLint s]
glClientActiveTexture: [void, GLenum texture]
glClipPlanef: [void, GLenum plane, "const GLfloat *equation"]
glClipPlanex: [void, GLenum plane, "const GLfixed *equation"]
glColor4f: [void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha]
glColor4ub: [void, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha]
glColor4x: [void, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha]
glColorMask: [void, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha]
glColorPointer: [void, GLint size, GLenum type, GLsizei stride, "const GLvoid *pointer"]
glCompressedTexImage2D: [void, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, "const GLvoid *data"]
glCompressedTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, "const GLvoid *data"]
glCopyTexImage2D: [void, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border]
glCopyTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height]
glCullFace: [void, GLenum mode]
glDeleteBuffers: [void, GLsizei n, "const GLuint *buffers"]
glDeleteTextures: [void, GLsizei n, "const GLuint *textures"]
glDepthFunc: [void, GLenum func]
glDepthMask: [void, GLboolean flag]
glDepthRangef: [void, GLclampf near, GLclampf far]
glDepthRangex: [void, GLclampx near, GLclampx far]
glDisable: [void, GLenum cap]
glDisableClientState: [void, GLenum array]
glDisableClientState: [void, GLenum array]
glDrawArrays: [void, GLenum mode, GLint first, GLsizei count]
glDrawElements: [void, GLenum mode, GLsizei count, GLenum type, "const GLvoid *indices"]
glEnable: [void, GLenum cap]
glEnableClientState: [void, GLenum array]
glEnableClientState: [void, GLenum array]
glFinish: [void, void]
glFlush: [void, void]
glFogf: [void, GLenum pname, GLfloat param]
glFogfv: [void, GLenum pname, "const GLfloat *params"]
glFogx: [void, GLenum pname, GLfixed param]
glFogxv: [void, GLenum pname, "const GLfixed *params"]
glFrontFace: [void, GLenum mode]
glFrustumf: [void, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far]
glFrustumx: [void, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far]
glGenBuffers: [void, GLsizei n, "GLuint *buffers"]
glGenTextures: [void, GLsizei n, "GLuint *textures"]
glGetBooleanv: [void, GLenum pname, "GLboolean *params"]
glGetBufferParameteriv: [void, GLenum target, GLenum pname, "GLint *params"]
glGetClipPlanef: [void, GLenum plane, "GLfloat *equation"]
glGetClipPlanex: [void, GLenum plane, "GLfixed *equation"]
glGetError: [GLenum, void]
glGetFixedv: [void, GLenum pname, "GLfixed *params"]
glGetFloatv: [void, GLenum pname, "GLfloat *params"]
glGetIntegerv: [void, GLenum pname, "GLint *params"]
glGetLightfv: [void, GLenum light, GLenum pname, "GLfloat *params"]
glGetLightxv: [void, GLenum light, GLenum pname, "GLfixed *params"]
glGetMaterialfv: [void, GLenum face, GLenum pname, "GLfloat *params"]
glGetMaterialxv: [void, GLenum face, GLenum pname, "GLfixed *params"]
glGetPointerv: [void, GLenum pname, "GLvoid **params"]
glGetString: [const GLubyte *, GLenum name]
glGetTexEnvfv: [void, GLenum target, GLenum pname, "GLfloat *params"]
glGetTexEnviv: [void, GLenum target, GLenum pname, "GLint *params"]
glGetTexEnvxv: [void, GLenum target, GLenum pname, "GLfixed *params"]
glGetTexParameterfv: [void, GLenum target, GLenum pname, "GLfloat *params"]
glGetTexParameteriv: [void, GLenum target, GLenum pname, "GLint *params"]
glGetTexParameterxv: [void, GLenum target, GLenum pname, "GLfixed *params"]
glHint: [void, GLenum target, GLenum mode]
glIsBuffer: [GLboolean, GLuint buffer]
glIsEnabled: [GLboolean, GLenum cap]
glIsTexture: [GLboolean, GLuint texture]
glLightf: [void, GLenum light, GLenum pname, GLfloat param]
glLightfv: [void, GLenum light, GLenum pname, "const GLfloat *params"]
glLightModelf: [void, GLenum pname, GLfloat param]
glLightModelfv: [void, GLenum pname, "const GLfloat *params"]
glLightModelx: [void, GLenum pname, GLfixed param]
glLightModelxv: [void, GLenum pname, "const GLfixed *params"]
glLightx: [void, GLenum light, GLenum pname, GLfixed param]
glLightxv: [void, GLenum light, GLenum pname, "const GLfixed *params"]
glLineWidth: [void, GLfloat width]
glLineWidthx: [void, GLfixed width]
glLoadIdentity: [void, void]
glLoadMatrixf: [void, "const GLfloat *m"]
glLoadMatrixx: [void, "const GLfixed *m"]
glLogicOp: [void, GLenum opcode]
glMaterialf: [void, GLenum face, GLenum pname, GLfloat param]
glMaterialfv: [void, GLenum face, GLenum pname, "const GLfloat *params"]
glMaterialx: [void, GLenum face, GLenum pname, GLfixed param]
glMaterialxv: [void, GLenum face, GLenum pname, "const GLfixed *params"]
glMatrixMode: [void, GLenum mode]
glMultiTexCoord4f: [void, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q]
glMultiTexCoord4x: [void, GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q]
glMultMatrixf: [void, "const GLfloat *m"]
glMultMatrixx: [void, "const GLfixed *m"]
glNormal3f: [void, GLfloat nx, GLfloat ny, GLfloat nz]
glNormal3x: [void, GLfixed nx, GLfixed ny, GLfixed nz]
glNormalPointer: [void, GLenum type, GLsizei stride, "const GLvoid *pointer"]
glOrthof: [void, GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far]
glOrthox: [void, GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far]
glPixelStorei: [void, GLenum pname, GLint param]
glPointParameterf: [void, GLenum pname, GLfloat param]
glPointParameterfv: [void, GLenum pname, "const GLfloat *params"]
glPointParameterx: [void, GLenum pname, GLfixed param]
glPointParameterxv: [void, GLenum pname, "const GLfixed *params"]
glPointSize: [void, GLfloat size]
glPointSizePointerOES: [void, GLenum type, GLsizei stride, "const GLvoid *pointer"]
glPointSizex: [void, GLfixed size]
glPolygonOffset: [void, GLfloat factor, GLfloat units]
glPolygonOffsetx: [void, GLfixed factor, GLfixed units]
glPopMatrix: [void, void]
glPushMatrix: [void, void]
glReadPixels: [void, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, "GLvoid *pixels"]
glRotatef: [void, GLfloat angle, GLfloat x, GLfloat y, GLfloat z]
glRotatex: [void, GLfixed angle, GLfixed x, GLfixed y, GLfixed z]
glSampleCoverage: [void, GLclampf value, GLboolean invert]
glSampleCoveragex: [void, GLclampx value, GLboolean invert]
glScalef: [void, GLfloat x, GLfloat y, GLfloat z]
glScalex: [void, GLfixed x, GLfixed y, GLfixed z]
glScissor: [void, GLint x, GLint y, GLsizei width, GLsizei height]
glShadeModel: [void, GLenum mode]
glStencilFunc: [void, GLenum func, GLint ref, GLuint mask]
glStencilMask: [void, GLuint mask]
glStencilOp: [void, GLenum fail, GLenum zfail, GLenum zpass]
glTexCoordPointer: [void, GLint size, GLenum type, GLsizei stride, "const GLvoid *pointer"]
glTexEnvf: [void, GLenum target, GLenum pname, GLfloat param]
glTexEnvfv: [void, GLenum target, GLenum pname, "const GLfloat *params"]
glTexEnvi: [void, GLenum target, GLenum pname, GLint param]
glTexEnviv: [void, GLenum target, GLenum pname, "const GLint *params"]
glTexEnvx: [void, GLenum target, GLenum pname, GLfixed param]
glTexEnvxv: [void, GLenum target, GLenum pname, "const GLfixed *params"]
glTexImage2D: [void, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, "const GLvoid *pixels"]
glTexParameterf: [void, GLenum target, GLenum pname, GLfloat param]
glTexParameterfv: [void, GLenum target, GLenum pname, "const GLfloat *params"]
glTexParameteri: [void, GLenum target, GLenum pname, GLint param]
glTexParameteriv: [void, GLenum target, GLenum pname, "const GLint *params"]
glTexParameterx: [void, GLenum target, GLenum pname, GLfixed param]
glTexParameterxv: [void, GLenum target, GLenum pname, "const GLfixed *params"]
glTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, "const GLvoid *pixels"]
glTranslatef: [void, GLfloat x, GLfloat y, GLfloat z]
glTranslatex: [void, GLfixed x, GLfixed y, GLfixed z]
glVertexPointer: [void, GLint size, GLenum type, GLsizei stride, "const GLvoid *pointer"]
glViewport: [void, GLint x, GLint y, GLsizei width, GLsizei height]
Added jni/glshim/spec/yml/gles-2.0.yml.


















































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
glActiveTexture: [void, GLenum texture]
glAttachShader: [void, GLuint program, GLuint shader]
glBindAttribLocation: [void, GLuint program, GLuint index, const GLchar * name]
glBindBuffer: [void, GLenum target, GLuint buffer]
glBindFramebuffer: [void, GLenum target, GLuint framebuffer]
glBindRenderbuffer: [void, GLenum target, GLuint renderbuffer]
glBindTexture: [void, GLenum target, GLuint texture]
glBlendColor: [void, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha]
glBlendEquation: [void, GLenum mode]
glBlendEquationSeparate: [void, GLenum modeRGB, GLenum modeA]
glBlendFunc: [void, GLenum sfactor, GLenum dfactor]
glBlendFuncSeparate: [void, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha,
  GLenum dfactorAlpha]
glBufferData: [void, GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage]
glBufferSubData: [void, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid
    * data]
glCheckFramebufferStatus: [GLenum, GLenum target]
glClear: [void, GLbitfield mask]
glClearColor: [void, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha]
glClearDepthf: [void, GLclampf depth]
glClearStencil: [void, GLint s]
glColorMask: [void, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha]
glCompileShader: [void, GLuint shader]
glCompressedTexImage2D: [void, GLenum target, GLint level, GLenum internalformat,
  GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data]
glCompressedTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint
    yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const
    GLvoid * data]
glCopyTexImage2D: [void, GLenum target, GLint level, GLenum internalformat, GLint
    x, GLint y, GLsizei width, GLsizei height, GLint border]
glCopyTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
  GLint x, GLint y, GLsizei width, GLsizei height]
glCreateProgram: [GLuint]
glCreateShader: [GLuint, GLenum type]
glCullFace: [void, GLenum mode]
glDeleteBuffers: [void, GLsizei n, const GLuint * buffer]
glDeleteFramebuffers: [void, GLsizei n, const GLuint * framebuffers]
glDeleteProgram: [void, GLuint program]
glDeleteRenderbuffers: [void, GLsizei n, const GLuint * renderbuffers]
glDeleteShader: [void, GLuint program]
glDeleteTextures: [void, GLsizei n, const GLuint * textures]
glDepthFunc: [void, GLenum func]
glDepthMask: [void, GLboolean flag]
glDepthRangef: [void, GLclampf zNear, GLclampf zFar]
glDetachShader: [void, GLuint program, GLuint shader]
glDisable: [void, GLenum cap]
glDisableVertexAttribArray: [void, GLuint index]
glDrawArrays: [void, GLenum mode, GLint first, GLsizei count]
glDrawElements: [void, GLenum mode, GLsizei count, GLenum type, const GLvoid * indices]
glEnable: [void, GLenum cap]
glEnableVertexAttribArray: [void, GLuint index]
glFinish: [void]
glFlush: [void]
glFramebufferRenderbuffer: [void, GLenum target, GLenum attachment, GLenum renderbuffertarget,
  GLuint renderbuffer]
glFramebufferTexture2D: [void, GLenum target, GLenum attachment, GLenum textarget,
  GLuint texture, GLint level]
glFrontFace: [void, GLenum mode]
glGenBuffers: [void, GLsizei n, GLuint * buffer]
glGenFramebuffers: [void, GLsizei n, GLuint * framebuffers]
glGenRenderbuffers: [void, GLsizei n, GLuint * renderbuffers]
glGenTextures: [void, GLsizei n, GLuint * textures]
glGenerateMipmap: [void, GLenum target]
glGetActiveAttrib: [void, GLuint program, GLuint index, GLsizei bufSize, GLsizei *
    length, GLint * size, GLenum * type, GLchar * name]
glGetActiveUniform: [void, GLuint program, GLuint index, GLsizei bufSize, GLsizei
    * length, GLint * size, GLenum * type, GLchar * name]
glGetAttachedShaders: [void, GLuint program, GLsizei maxCount, GLsizei * count, GLuint
    * obj]
glGetAttribLocation: [GLint, GLuint program, const GLchar * name]
glGetBooleanv: [void, GLenum pname, GLboolean * params]
glGetBufferParameteriv: [void, GLenum target, GLenum pname, GLint * params]
glGetError: [GLenum]
glGetFloatv: [void, GLenum pname, GLfloat * params]
glGetFramebufferAttachmentParameteriv: [void, GLenum target, GLenum attachment, GLenum
    pname, GLint * params]
glGetIntegerv: [void, GLenum pname, GLint * params]
glGetProgramInfoLog: [void, GLuint program, GLsizei bufSize, GLsizei * length, GLchar
    * infoLog]
glGetProgramiv: [void, GLuint program, GLenum pname, GLint * params]
glGetRenderbufferParameteriv: [void, GLenum target, GLenum pname, GLint * params]
glGetShaderInfoLog: [void, GLuint shader, GLsizei bufSize, GLsizei * length, GLchar
    * infoLog]
glGetShaderPrecisionFormat: [void, GLenum shadertype, GLenum precisiontype, GLint
    * range, GLint * precision]
glGetShaderSource: [void, GLuint shader, GLsizei bufSize, GLsizei * length, GLchar
    * source]
glGetShaderiv: [void, GLuint shader, GLenum pname, GLint * params]
glGetString: [const GLubyte *, GLenum name]
glGetTexParameterfv: [void, GLenum target, GLenum pname, GLfloat * params]
glGetTexParameteriv: [void, GLenum target, GLenum pname, GLint * params]
glGetUniformLocation: [GLint, GLuint program, const GLchar * name]
glGetUniformfv: [void, GLuint program, GLint location, GLfloat * params]
glGetUniformiv: [void, GLuint program, GLint location, GLint * params]
glGetVertexAttribPointerv: [void, GLuint index, GLenum pname, GLvoid ** pointer]
glGetVertexAttribfv: [void, GLuint index, GLenum pname, GLfloat * params]
glGetVertexAttribiv: [void, GLuint index, GLenum pname, GLint * params]
glHint: [void, GLenum target, GLenum mode]
glIsBuffer: [GLboolean, GLuint buffer]
glIsEnabled: [GLboolean, GLenum cap]
glIsFramebuffer: [GLboolean, GLuint framebuffer]
glIsProgram: [GLboolean, GLuint program]
glIsRenderbuffer: [GLboolean, GLuint renderbuffer]
glIsShader: [GLboolean, GLuint shader]
glIsTexture: [GLboolean, GLuint texture]
glLineWidth: [void, GLfloat width]
glLinkProgram: [void, GLuint program]
glPixelStorei: [void, GLenum pname, GLint param]
glPolygonOffset: [void, GLfloat factor, GLfloat units]
glReadPixels: [void, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
  GLenum type, GLvoid * pixels]
glReleaseShaderCompiler: [void]
glRenderbufferStorage: [void, GLenum target, GLenum internalformat, GLsizei width,
  GLsizei height]
glSampleCoverage: [void, GLclampf value, GLboolean invert]
glScissor: [void, GLint x, GLint y, GLsizei width, GLsizei height]
glShaderBinary: [void, GLsizei n, const GLuint * shaders, GLenum binaryformat, const
    GLvoid * binary, GLsizei length]
glShaderSource: [void, GLuint shader, GLsizei count, const GLchar * const * string,
  const GLint * length]
glStencilFunc: [void, GLenum func, GLint ref, GLuint mask]
glStencilFuncSeparate: [void, GLenum face, GLenum func, GLint ref, GLuint mask]
glStencilMask: [void, GLuint mask]
glStencilMaskSeparate: [void, GLenum face, GLuint mask]
glStencilOp: [void, GLenum fail, GLenum zfail, GLenum zpass]
glStencilOpSeparate: [void, GLenum face, GLenum sfail, GLenum zfail, GLenum zpass]
glTexImage2D: [void, GLenum target, GLint level, GLint internalformat, GLsizei width,
  GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels]
glTexParameterf: [void, GLenum target, GLenum pname, GLfloat param]
glTexParameterfv: [void, GLenum target, GLenum pname, const GLfloat * params]
glTexParameteri: [void, GLenum target, GLenum pname, GLint param]
glTexParameteriv: [void, GLenum target, GLenum pname, const GLint * params]
glTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
  GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels]
glUniform1f: [void, GLint location, GLfloat v0]
glUniform1fv: [void, GLint location, GLsizei count, const GLfloat * value]
glUniform1i: [void, GLint location, GLint v0]
glUniform1iv: [void, GLint location, GLsizei count, const GLint * value]
glUniform2f: [void, GLint location, GLfloat v0, GLfloat v1]
glUniform2fv: [void, GLint location, GLsizei count, const GLfloat * value]
glUniform2i: [void, GLint location, GLint v0, GLint v1]
glUniform2iv: [void, GLint location, GLsizei count, const GLint * value]
glUniform3f: [void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2]
glUniform3fv: [void, GLint location, GLsizei count, const GLfloat * value]
glUniform3i: [void, GLint location, GLint v0, GLint v1, GLint v2]
glUniform3iv: [void, GLint location, GLsizei count, const GLint * value]
glUniform4f: [void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3]
glUniform4fv: [void, GLint location, GLsizei count, const GLfloat * value]
glUniform4i: [void, GLint location, GLint v0, GLint v1, GLint v2, GLint v3]
glUniform4iv: [void, GLint location, GLsizei count, const GLint * value]
glUniformMatrix2fv: [void, GLint location, GLsizei count, GLboolean transpose, const
    GLfloat * value]
glUniformMatrix3fv: [void, GLint location, GLsizei count, GLboolean transpose, const
    GLfloat * value]
glUniformMatrix4fv: [void, GLint location, GLsizei count, GLboolean transpose, const
    GLfloat * value]
glUseProgram: [void, GLuint program]
glValidateProgram: [void, GLuint program]
glVertexAttrib1f: [void, GLuint index, GLfloat x]
glVertexAttrib1fv: [void, GLuint index, const GLfloat * v]
glVertexAttrib2f: [void, GLuint index, GLfloat x, GLfloat y]
glVertexAttrib2fv: [void, GLuint index, const GLfloat * v]
glVertexAttrib3f: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z]
glVertexAttrib3fv: [void, GLuint index, const GLfloat * v]
glVertexAttrib4f: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w]
glVertexAttrib4fv: [void, GLuint index, const GLfloat * v]
glVertexAttribPointer: [void, GLuint index, GLint size, GLenum type, GLboolean normalized,
  GLsizei stride, const GLvoid * pointer]
glViewport: [void, GLint x, GLint y, GLsizei width, GLsizei height]
Added jni/glshim/spec/yml/glext-1.1.yml.








>
>
>
>
1
2
3
4
# glTexGenfOES: [void, GLenum coord, GLenum pname, GLfloat param]
# glTexGenfvOES: [void, GLenum coord, GLenum pname, "const GLfloat *params"]
# glTexGeniOES: [void, GLenum coord, GLenum pname, GLint param]
# glTexGenivOES: [void, GLenum coord, GLenum pname, "const GLint *params"]
Added jni/glshim/spec/yml/oes.yml.








>
>
>
>
1
2
3
4
glBlendColorOES: [void, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha]
glBlendEquationOES: [void, GLenum mode]
glBlendEquationSeparateOES: [void, GLenum modeRGB, GLenum modeAlpha]
glBlendFuncSeparateOES: [void, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha]
Added jni/glshim/spec/yml/opengl.yml.
















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3DFX_tbuffer:
  glTbufferMask3DFX: [void, GLuint mask]
AMD_debug_output:
  glDebugMessageCallbackAMD: [void, GLDEBUGPROCAMD callback, GLvoid *userParam]
  glDebugMessageEnableAMD: [void, GLenum category, GLenum severity, GLsizei count,
    const GLuint *ids, GLboolean enabled]
  glDebugMessageInsertAMD: [void, GLenum category, GLenum severity, GLuint id, GLsizei
      length, const GLchar *buf]
  glGetDebugMessageLogAMD: [GLuint, GLuint count, GLsizei bufsize, GLenum *categories,
    GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message]
AMD_draw_buffers_blend:
  glBlendEquationIndexedAMD: [void, GLuint buf, GLenum mode]
  glBlendEquationSeparateIndexedAMD: [void, GLuint buf, GLenum modeRGB, GLenum modeAlpha]
  glBlendFuncIndexedAMD: [void, GLuint buf, GLenum src, GLenum dst]
  glBlendFuncSeparateIndexedAMD: [void, GLuint buf, GLenum srcRGB, GLenum dstRGB,
    GLenum srcAlpha, GLenum dstAlpha]
AMD_multi_draw_indirect:
  glMultiDrawArraysIndirectAMD: [void, GLenum mode, const GLvoid *indirect, GLsizei
      primcount, GLsizei stride]
  glMultiDrawElementsIndirectAMD: [void, GLenum mode, GLenum type, const GLvoid *indirect,
    GLsizei primcount, GLsizei stride]
AMD_name_gen_delete:
  glDeleteNamesAMD: [void, GLenum identifier, GLuint num, const GLuint *names]
  glGenNamesAMD: [void, GLenum identifier, GLuint num, GLuint *names]
  glIsNameAMD: [GLboolean, GLenum identifier, GLuint name]
AMD_performance_monitor:
  glBeginPerfMonitorAMD: [void, GLuint monitor]
  glDeletePerfMonitorsAMD: [void, GLsizei n, GLuint *monitors]
  glEndPerfMonitorAMD: [void, GLuint monitor]
  glGenPerfMonitorsAMD: [void, GLsizei n, GLuint *monitors]
  glGetPerfMonitorCounterDataAMD: [void, GLuint monitor, GLenum pname, GLsizei dataSize,
    GLuint *data, GLint *bytesWritten]
  glGetPerfMonitorCounterInfoAMD: [void, GLuint group, GLuint counter, GLenum pname,
    GLvoid *data]
  glGetPerfMonitorCounterStringAMD: [void, GLuint group, GLuint counter, GLsizei bufSize,
    GLsizei *length, GLchar *counterString]
  glGetPerfMonitorCountersAMD: [void, GLuint group, GLint *numCounters, GLint *maxActiveCounters,
    GLsizei counterSize, GLuint *counters]
  glGetPerfMonitorGroupStringAMD: [void, GLuint group, GLsizei bufSize, GLsizei *length,
    GLchar *groupString]
  glGetPerfMonitorGroupsAMD: [void, GLint *numGroups, GLsizei groupsSize, GLuint *groups]
  glSelectPerfMonitorCountersAMD: [void, GLuint monitor, GLboolean enable, GLuint
      group, GLint numCounters, GLuint *counterList]
AMD_sample_positions:
  glSetMultisamplefvAMD: [void, GLenum pname, GLuint index, const GLfloat *val]
AMD_sparse_texture:
  glTexStorageSparseAMD: [void, GLenum target, GLenum internalFormat, GLsizei width,
    GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags]
  glTextureStorageSparseAMD: [void, GLuint texture, GLenum target, GLenum internalFormat,
    GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags]
AMD_stencil_operation_extended:
  glStencilOpValueAMD: [void, GLenum face, GLuint value]
AMD_vertex_shader_tessellator:
  glTessellationFactorAMD: [void, GLfloat factor]
  glTessellationModeAMD: [void, GLenum mode]
APPLE_element_array:
  glDrawElementArrayAPPLE: [void, GLenum mode, GLint first, GLsizei count]
  glDrawRangeElementArrayAPPLE: [void, GLenum mode, GLuint start, GLuint end, GLint
      first, GLsizei count]
  glElementPointerAPPLE: [void, GLenum type, const GLvoid *pointer]
  glMultiDrawElementArrayAPPLE: [void, GLenum mode, const GLint *first, const GLsizei
      *count, GLsizei primcount]
  glMultiDrawRangeElementArrayAPPLE: [void, GLenum mode, GLuint start, GLuint end,
    const GLint *first, const GLsizei *count, GLsizei primcount]
APPLE_fence:
  glDeleteFencesAPPLE: [void, GLsizei n, const GLuint *fences]
  glFinishFenceAPPLE: [void, GLuint fence]
  glFinishObjectAPPLE: [void, GLenum object, GLint name]
  glGenFencesAPPLE: [void, GLsizei n, GLuint *fences]
  glIsFenceAPPLE: [GLboolean, GLuint fence]
  glSetFenceAPPLE: [void, GLuint fence]
  glTestFenceAPPLE: [GLboolean, GLuint fence]
  glTestObjectAPPLE: [GLboolean, GLenum object, GLuint name]
APPLE_flush_buffer_range:
  glBufferParameteriAPPLE: [void, GLenum target, GLenum pname, GLint param]
  glFlushMappedBufferRangeAPPLE: [void, GLenum target, GLintptr offset, GLsizeiptr
      size]
APPLE_object_purgeable:
  glGetObjectParameterivAPPLE: [void, GLenum objectType, GLuint name, GLenum pname,
    GLint *params]
  glObjectPurgeableAPPLE: [GLenum, GLenum objectType, GLuint name, GLenum option]
  glObjectUnpurgeableAPPLE: [GLenum, GLenum objectType, GLuint name, GLenum option]
APPLE_texture_range:
  glGetTexParameterPointervAPPLE: [void, GLenum target, GLenum pname, GLvoid *params]
  glTextureRangeAPPLE: [void, GLenum target, GLsizei length, const GLvoid *pointer]
APPLE_vertex_array_object:
  glBindVertexArrayAPPLE: [void, GLuint array]
  glDeleteVertexArraysAPPLE: [void, GLsizei n, const GLuint *arrays]
  glGenVertexArraysAPPLE: [void, GLsizei n, GLuint *arrays]
  glIsVertexArrayAPPLE: [GLboolean, GLuint array]
APPLE_vertex_array_range:
  glFlushVertexArrayRangeAPPLE: [void, GLsizei length, GLvoid *pointer]
  glVertexArrayParameteriAPPLE: [void, GLenum pname, GLint param]
  glVertexArrayRangeAPPLE: [void, GLsizei length, GLvoid *pointer]
APPLE_vertex_program_evaluators:
  glDisableVertexAttribAPPLE: [void, GLuint index, GLenum pname]
  glEnableVertexAttribAPPLE: [void, GLuint index, GLenum pname]
  glIsVertexAttribEnabledAPPLE: [GLboolean, GLuint index, GLenum pname]
  glMapVertexAttrib1dAPPLE: [void, GLuint index, GLuint size, GLdouble u1, GLdouble
      u2, GLint stride, GLint order, const GLdouble *points]
  glMapVertexAttrib1fAPPLE: [void, GLuint index, GLuint size, GLfloat u1, GLfloat
      u2, GLint stride, GLint order, const GLfloat *points]
  glMapVertexAttrib2dAPPLE: [void, GLuint index, GLuint size, GLdouble u1, GLdouble
      u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint
      vorder, const GLdouble *points]
  glMapVertexAttrib2fAPPLE: [void, GLuint index, GLuint size, GLfloat u1, GLfloat
      u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint
      vorder, const GLfloat *points]
ARB_ES2_compatibility:
  glClearDepthf: [void, GLfloat d]
  glDepthRangef: [void, GLfloat n, GLfloat f]
  glGetShaderPrecisionFormat: [void, GLenum shadertype, GLenum precisiontype, GLint
      *range, GLint *precision]
  glReleaseShaderCompiler: [void]
  glShaderBinary: [void, GLsizei count, const GLuint *shaders, GLenum binaryformat,
    const GLvoid *binary, GLsizei length]
ARB_base_instance:
  glDrawArraysInstancedBaseInstance: [void, GLenum mode, GLint first, GLsizei count,
    GLsizei instancecount, GLuint baseinstance]
  glDrawElementsInstancedBaseInstance: [void, GLenum mode, GLsizei count, GLenum type,
    const void *indices, GLsizei instancecount, GLuint baseinstance]
  glDrawElementsInstancedBaseVertexBaseInstance: [void, GLenum mode, GLsizei count,
    GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint
      baseinstance]
ARB_blend_func_extended:
  glBindFragDataLocationIndexed: [void, GLuint program, GLuint colorNumber, GLuint
      index, const GLchar *name]
  glGetFragDataIndex: [GLint, GLuint program, const GLchar *name]
ARB_cl_event:
  glCreateSyncFromCLeventARB: [GLsync, struct _cl_context *context, struct _cl_event
      *event, GLbitfield flags]
ARB_clear_buffer_object:
  glClearBufferData: [void, GLenum target, GLenum internalformat, GLenum format, GLenum
      type, const void *data]
  glClearBufferSubData: [void, GLenum target, GLenum internalformat, GLintptr offset,
    GLsizeiptr size, GLenum format, GLenum type, const void *data]
  glClearNamedBufferDataEXT: [void, GLuint buffer, GLenum internalformat, GLenum format,
    GLenum type, const void *data]
  glClearNamedBufferSubDataEXT: [void, GLuint buffer, GLenum internalformat, GLenum
      format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data]
ARB_color_buffer_float:
  glClampColorARB: [void, GLenum target, GLenum clamp]
ARB_compute_shader:
  glDispatchCompute: [void, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z]
  glDispatchComputeIndirect: [void, GLintptr indirect]
ARB_copy_buffer:
  glCopyBufferSubData: [void, GLenum readTarget, GLenum writeTarget, GLintptr readOffset,
    GLintptr writeOffset, GLsizeiptr size]
ARB_copy_image:
  glCopyImageSubData: [void, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint
      srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel,
    GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei
      srcDepth]
ARB_debug_output:
  glDebugMessageCallbackARB: [void, GLDEBUGPROCARB callback, const GLvoid *userParam]
  glDebugMessageControlARB: [void, GLenum source, GLenum type, GLenum severity, GLsizei
      count, const GLuint *ids, GLboolean enabled]
  glDebugMessageInsertARB: [void, GLenum source, GLenum type, GLuint id, GLenum severity,
    GLsizei length, const GLchar *buf]
  glGetDebugMessageLogARB: [GLuint, GLuint count, GLsizei bufsize, GLenum *sources,
    GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog]
ARB_draw_buffers:
  glDrawBuffersARB: [void, GLsizei n, const GLenum *bufs]
ARB_draw_buffers_blend:
  glBlendEquationSeparateiARB: [void, GLuint buf, GLenum modeRGB, GLenum modeAlpha]
  glBlendEquationiARB: [void, GLuint buf, GLenum mode]
  glBlendFuncSeparateiARB: [void, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum
      srcAlpha, GLenum dstAlpha]
  glBlendFunciARB: [void, GLuint buf, GLenum src, GLenum dst]
ARB_draw_elements_base_vertex:
  glDrawElementsBaseVertex: [void, GLenum mode, GLsizei count, GLenum type, const
      GLvoid *indices, GLint basevertex]
  glDrawElementsInstancedBaseVertex: [void, GLenum mode, GLsizei count, GLenum type,
    const GLvoid *indices, GLsizei instancecount, GLint basevertex]
  glDrawRangeElementsBaseVertex: [void, GLenum mode, GLuint start, GLuint end, GLsizei
      count, GLenum type, const GLvoid *indices, GLint basevertex]
  glMultiDrawElementsBaseVertex: [void, GLenum mode, const GLsizei *count, GLenum
      type, GLvoid*const *indices, GLsizei drawcount, const GLint *basevertex]
ARB_draw_indirect:
  glDrawArraysIndirect: [void, GLenum mode, const GLvoid *indirect]
  glDrawElementsIndirect: [void, GLenum mode, GLenum type, const GLvoid *indirect]
ARB_draw_instanced:
  glDrawArraysInstancedARB: [void, GLenum mode, GLint first, GLsizei count, GLsizei
      primcount]
  glDrawElementsInstancedARB: [void, GLenum mode, GLsizei count, GLenum type, const
      GLvoid *indices, GLsizei primcount]
ARB_framebuffer_no_attachments:
  glFramebufferParameteri: [void, GLenum target, GLenum pname, GLint param]
  glGetFramebufferParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glGetNamedFramebufferParameterivEXT: [void, GLuint framebuffer, GLenum pname, GLint
      *params]
  glNamedFramebufferParameteriEXT: [void, GLuint framebuffer, GLenum pname, GLint
      param]
ARB_framebuffer_object:
  glBindFramebuffer: [void, GLenum target, GLuint framebuffer]
  glBindRenderbuffer: [void, GLenum target, GLuint renderbuffer]
  glBlitFramebuffer: [void, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint
      dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter]
  glCheckFramebufferStatus: [GLenum, GLenum target]
  glDeleteFramebuffers: [void, GLsizei n, const GLuint *framebuffers]
  glDeleteRenderbuffers: [void, GLsizei n, const GLuint *renderbuffers]
  glFramebufferRenderbuffer: [void, GLenum target, GLenum attachment, GLenum renderbuffertarget,
    GLuint renderbuffer]
  glFramebufferTexture1D: [void, GLenum target, GLenum attachment, GLenum textarget,
    GLuint texture, GLint level]
  glFramebufferTexture2D: [void, GLenum target, GLenum attachment, GLenum textarget,
    GLuint texture, GLint level]
  glFramebufferTexture3D: [void, GLenum target, GLenum attachment, GLenum textarget,
    GLuint texture, GLint level, GLint zoffset]
  glFramebufferTextureLayer: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level, GLint layer]
  glGenFramebuffers: [void, GLsizei n, GLuint *framebuffers]
  glGenRenderbuffers: [void, GLsizei n, GLuint *renderbuffers]
  glGenerateMipmap: [void, GLenum target]
  glGetFramebufferAttachmentParameteriv: [void, GLenum target, GLenum attachment,
    GLenum pname, GLint *params]
  glGetRenderbufferParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glIsFramebuffer: [GLboolean, GLuint framebuffer]
  glIsRenderbuffer: [GLboolean, GLuint renderbuffer]
  glRenderbufferStorage: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLsizei height]
  glRenderbufferStorageMultisample: [void, GLenum target, GLsizei samples, GLenum
      internalformat, GLsizei width, GLsizei height]
ARB_geometry_shader4:
  glFramebufferTextureARB: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level]
  glFramebufferTextureFaceARB: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level, GLenum face]
  glFramebufferTextureLayerARB: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level, GLint layer]
  glProgramParameteriARB: [void, GLuint program, GLenum pname, GLint value]
ARB_get_program_binary:
  glGetProgramBinary: [void, GLuint program, GLsizei bufSize, GLsizei *length, GLenum
      *binaryFormat, GLvoid *binary]
  glProgramBinary: [void, GLuint program, GLenum binaryFormat, const GLvoid *binary,
    GLsizei length]
  glProgramParameteri: [void, GLuint program, GLenum pname, GLint value]
ARB_gpu_shader_fp64:
  glGetUniformdv: [void, GLuint program, GLint location, GLdouble *params]
  glUniform1d: [void, GLint location, GLdouble x]
  glUniform1dv: [void, GLint location, GLsizei count, const GLdouble *value]
  glUniform2d: [void, GLint location, GLdouble x, GLdouble y]
  glUniform2dv: [void, GLint location, GLsizei count, const GLdouble *value]
  glUniform3d: [void, GLint location, GLdouble x, GLdouble y, GLdouble z]
  glUniform3dv: [void, GLint location, GLsizei count, const GLdouble *value]
  glUniform4d: [void, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glUniform4dv: [void, GLint location, GLsizei count, const GLdouble *value]
  glUniformMatrix2dv: [void, GLint location, GLsizei count, GLboolean transpose, const
      GLdouble *value]
  glUniformMatrix2x3dv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLdouble *value]
  glUniformMatrix2x4dv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLdouble *value]
  glUniformMatrix3dv: [void, GLint location, GLsizei count, GLboolean transpose, const
      GLdouble *value]
  glUniformMatrix3x2dv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLdouble *value]
  glUniformMatrix3x4dv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLdouble *value]
  glUniformMatrix4dv: [void, GLint location, GLsizei count, GLboolean transpose, const
      GLdouble *value]
  glUniformMatrix4x2dv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLdouble *value]
  glUniformMatrix4x3dv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLdouble *value]
ARB_instanced_arrays:
  glVertexAttribDivisorARB: [void, GLuint index, GLuint divisor]
ARB_internalformat_query:
  glGetInternalformativ: [void, GLenum target, GLenum internalformat, GLenum pname,
    GLsizei bufSize, GLint *params]
ARB_internalformat_query2:
  glGetInternalformati64v: [void, GLenum target, GLenum internalformat, GLenum pname,
    GLsizei bufSize, GLint64 *params]
ARB_invalidate_subdata:
  glInvalidateBufferData: [void, GLuint buffer]
  glInvalidateBufferSubData: [void, GLuint buffer, GLintptr offset, GLsizeiptr length]
  glInvalidateFramebuffer: [void, GLenum target, GLsizei numAttachments, const GLenum
      *attachments]
  glInvalidateSubFramebuffer: [void, GLenum target, GLsizei numAttachments, const
      GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height]
  glInvalidateTexImage: [void, GLuint texture, GLint level]
  glInvalidateTexSubImage: [void, GLuint texture, GLint level, GLint xoffset, GLint
      yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth]
ARB_map_buffer_range:
  glFlushMappedBufferRange: [void, GLenum target, GLintptr offset, GLsizeiptr length]
  glMapBufferRange: [GLvoid *, GLenum target, GLintptr offset, GLsizeiptr length,
    GLbitfield access]
ARB_matrix_palette:
  glCurrentPaletteMatrixARB: [void, GLint index]
  glMatrixIndexPointerARB: [void, GLint size, GLenum type, GLsizei stride, const GLvoid
      *pointer]
  glMatrixIndexubvARB: [void, GLint size, const GLubyte *indices]
  glMatrixIndexuivARB: [void, GLint size, const GLuint *indices]
  glMatrixIndexusvARB: [void, GLint size, const GLushort *indices]
ARB_multi_draw_indirect:
  glMultiDrawArraysIndirect: [void, GLenum mode, const void *indirect, GLsizei drawcount,
    GLsizei stride]
  glMultiDrawElementsIndirect: [void, GLenum mode, GLenum type, const void *indirect,
    GLsizei drawcount, GLsizei stride]
ARB_multisample:
  glSampleCoverageARB: [void, GLfloat value, GLboolean invert]
ARB_multitexture:
  glActiveTextureARB: [void, GLenum texture]
  glClientActiveTextureARB: [void, GLenum texture]
  glMultiTexCoord1dARB: [void, GLenum target, GLdouble s]
  glMultiTexCoord1dvARB: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord1fARB: [void, GLenum target, GLfloat s]
  glMultiTexCoord1fvARB: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord1iARB: [void, GLenum target, GLint s]
  glMultiTexCoord1ivARB: [void, GLenum target, const GLint *v]
  glMultiTexCoord1sARB: [void, GLenum target, GLshort s]
  glMultiTexCoord1svARB: [void, GLenum target, const GLshort *v]
  glMultiTexCoord2dARB: [void, GLenum target, GLdouble s, GLdouble t]
  glMultiTexCoord2dvARB: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord2fARB: [void, GLenum target, GLfloat s, GLfloat t]
  glMultiTexCoord2fvARB: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord2iARB: [void, GLenum target, GLint s, GLint t]
  glMultiTexCoord2ivARB: [void, GLenum target, const GLint *v]
  glMultiTexCoord2sARB: [void, GLenum target, GLshort s, GLshort t]
  glMultiTexCoord2svARB: [void, GLenum target, const GLshort *v]
  glMultiTexCoord3dARB: [void, GLenum target, GLdouble s, GLdouble t, GLdouble r]
  glMultiTexCoord3dvARB: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord3fARB: [void, GLenum target, GLfloat s, GLfloat t, GLfloat r]
  glMultiTexCoord3fvARB: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord3iARB: [void, GLenum target, GLint s, GLint t, GLint r]
  glMultiTexCoord3ivARB: [void, GLenum target, const GLint *v]
  glMultiTexCoord3sARB: [void, GLenum target, GLshort s, GLshort t, GLshort r]
  glMultiTexCoord3svARB: [void, GLenum target, const GLshort *v]
  glMultiTexCoord4dARB: [void, GLenum target, GLdouble s, GLdouble t, GLdouble r,
    GLdouble q]
  glMultiTexCoord4dvARB: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord4fARB: [void, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat
      q]
  glMultiTexCoord4fvARB: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord4iARB: [void, GLenum target, GLint s, GLint t, GLint r, GLint q]
  glMultiTexCoord4ivARB: [void, GLenum target, const GLint *v]
  glMultiTexCoord4sARB: [void, GLenum target, GLshort s, GLshort t, GLshort r, GLshort
      q]
  glMultiTexCoord4svARB: [void, GLenum target, const GLshort *v]
ARB_occlusion_query:
  glBeginQueryARB: [void, GLenum target, GLuint id]
  glDeleteQueriesARB: [void, GLsizei n, const GLuint *ids]
  glEndQueryARB: [void, GLenum target]
  glGenQueriesARB: [void, GLsizei n, GLuint *ids]
  glGetQueryObjectivARB: [void, GLuint id, GLenum pname, GLint *params]
  glGetQueryObjectuivARB: [void, GLuint id, GLenum pname, GLuint *params]
  glGetQueryivARB: [void, GLenum target, GLenum pname, GLint *params]
  glIsQueryARB: [GLboolean, GLuint id]
ARB_point_parameters:
  glPointParameterfARB: [void, GLenum pname, GLfloat param]
  glPointParameterfvARB: [void, GLenum pname, const GLfloat *params]
ARB_program_interface_query:
  glGetProgramInterfaceiv: [void, GLuint program, GLenum programInterface, GLenum
      pname, GLint *params]
  glGetProgramResourceIndex: [GLuint, GLuint program, GLenum programInterface, const
      GLchar *name]
  glGetProgramResourceLocation: [GLint, GLuint program, GLenum programInterface, const
      GLchar *name]
  glGetProgramResourceLocationIndex: [GLint, GLuint program, GLenum programInterface,
    const GLchar *name]
  glGetProgramResourceName: [void, GLuint program, GLenum programInterface, GLuint
      index, GLsizei bufSize, GLsizei *length, GLchar *name]
  glGetProgramResourceiv: [void, GLuint program, GLenum programInterface, GLuint index,
    GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint
      *params]
ARB_provoking_vertex:
  glProvokingVertex: [void, GLenum mode]
ARB_robustness:
  glGetGraphicsResetStatusARB: [GLenum]
  glGetnColorTableARB: [void, GLenum target, GLenum format, GLenum type, GLsizei bufSize,
    GLvoid *table]
  glGetnCompressedTexImageARB: [void, GLenum target, GLint lod, GLsizei bufSize, GLvoid
      *img]
  glGetnConvolutionFilterARB: [void, GLenum target, GLenum format, GLenum type, GLsizei
      bufSize, GLvoid *image]
  glGetnHistogramARB: [void, GLenum target, GLboolean reset, GLenum format, GLenum
      type, GLsizei bufSize, GLvoid *values]
  glGetnMapdvARB: [void, GLenum target, GLenum query, GLsizei bufSize, GLdouble *v]
  glGetnMapfvARB: [void, GLenum target, GLenum query, GLsizei bufSize, GLfloat *v]
  glGetnMapivARB: [void, GLenum target, GLenum query, GLsizei bufSize, GLint *v]
  glGetnMinmaxARB: [void, GLenum target, GLboolean reset, GLenum format, GLenum type,
    GLsizei bufSize, GLvoid *values]
  glGetnPixelMapfvARB: [void, GLenum map, GLsizei bufSize, GLfloat *values]
  glGetnPixelMapuivARB: [void, GLenum map, GLsizei bufSize, GLuint *values]
  glGetnPixelMapusvARB: [void, GLenum map, GLsizei bufSize, GLushort *values]
  glGetnPolygonStippleARB: [void, GLsizei bufSize, GLubyte *pattern]
  glGetnSeparableFilterARB: [void, GLenum target, GLenum format, GLenum type, GLsizei
      rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span]
  glGetnTexImageARB: [void, GLenum target, GLint level, GLenum format, GLenum type,
    GLsizei bufSize, GLvoid *img]
  glGetnUniformdvARB: [void, GLuint program, GLint location, GLsizei bufSize, GLdouble
      *params]
  glGetnUniformfvARB: [void, GLuint program, GLint location, GLsizei bufSize, GLfloat
      *params]
  glGetnUniformivARB: [void, GLuint program, GLint location, GLsizei bufSize, GLint
      *params]
  glGetnUniformuivARB: [void, GLuint program, GLint location, GLsizei bufSize, GLuint
      *params]
  glReadnPixelsARB: [void, GLint x, GLint y, GLsizei width, GLsizei height, GLenum
      format, GLenum type, GLsizei bufSize, GLvoid *data]
ARB_sample_shading:
  glMinSampleShadingARB: [void, GLfloat value]
ARB_sampler_objects:
  glBindSampler: [void, GLuint unit, GLuint sampler]
  glDeleteSamplers: [void, GLsizei count, const GLuint *samplers]
  glGenSamplers: [void, GLsizei count, GLuint *samplers]
  glGetSamplerParameterIiv: [void, GLuint sampler, GLenum pname, GLint *params]
  glGetSamplerParameterIuiv: [void, GLuint sampler, GLenum pname, GLuint *params]
  glGetSamplerParameterfv: [void, GLuint sampler, GLenum pname, GLfloat *params]
  glGetSamplerParameteriv: [void, GLuint sampler, GLenum pname, GLint *params]
  glIsSampler: [GLboolean, GLuint sampler]
  glSamplerParameterIiv: [void, GLuint sampler, GLenum pname, const GLint *param]
  glSamplerParameterIuiv: [void, GLuint sampler, GLenum pname, const GLuint *param]
  glSamplerParameterf: [void, GLuint sampler, GLenum pname, GLfloat param]
  glSamplerParameterfv: [void, GLuint sampler, GLenum pname, const GLfloat *param]
  glSamplerParameteri: [void, GLuint sampler, GLenum pname, GLint param]
  glSamplerParameteriv: [void, GLuint sampler, GLenum pname, const GLint *param]
ARB_separate_shader_objects:
  glActiveShaderProgram: [void, GLuint pipeline, GLuint program]
  glBindProgramPipeline: [void, GLuint pipeline]
  glCreateShaderProgramv: [GLuint, GLenum type, GLsizei count, GLchar*const *strings]
  glDeleteProgramPipelines: [void, GLsizei n, const GLuint *pipelines]
  glGenProgramPipelines: [void, GLsizei n, GLuint *pipelines]
  glGetProgramPipelineInfoLog: [void, GLuint pipeline, GLsizei bufSize, GLsizei *length,
    GLchar *infoLog]
  glGetProgramPipelineiv: [void, GLuint pipeline, GLenum pname, GLint *params]
  glIsProgramPipeline: [GLboolean, GLuint pipeline]
  glProgramUniform1d: [void, GLuint program, GLint location, GLdouble v0]
  glProgramUniform1dv: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform1f: [void, GLuint program, GLint location, GLfloat v0]
  glProgramUniform1fv: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform1i: [void, GLuint program, GLint location, GLint v0]
  glProgramUniform1iv: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform1ui: [void, GLuint program, GLint location, GLuint v0]
  glProgramUniform1uiv: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniform2d: [void, GLuint program, GLint location, GLdouble v0, GLdouble
      v1]
  glProgramUniform2dv: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform2f: [void, GLuint program, GLint location, GLfloat v0, GLfloat v1]
  glProgramUniform2fv: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform2i: [void, GLuint program, GLint location, GLint v0, GLint v1]
  glProgramUniform2iv: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform2ui: [void, GLuint program, GLint location, GLuint v0, GLuint v1]
  glProgramUniform2uiv: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniform3d: [void, GLuint program, GLint location, GLdouble v0, GLdouble
      v1, GLdouble v2]
  glProgramUniform3dv: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform3f: [void, GLuint program, GLint location, GLfloat v0, GLfloat v1,
    GLfloat v2]
  glProgramUniform3fv: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform3i: [void, GLuint program, GLint location, GLint v0, GLint v1, GLint
      v2]
  glProgramUniform3iv: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform3ui: [void, GLuint program, GLint location, GLuint v0, GLuint v1,
    GLuint v2]
  glProgramUniform3uiv: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniform4d: [void, GLuint program, GLint location, GLdouble v0, GLdouble
      v1, GLdouble v2, GLdouble v3]
  glProgramUniform4dv: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform4f: [void, GLuint program, GLint location, GLfloat v0, GLfloat v1,
    GLfloat v2, GLfloat v3]
  glProgramUniform4fv: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform4i: [void, GLuint program, GLint location, GLint v0, GLint v1, GLint
      v2, GLint v3]
  glProgramUniform4iv: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform4ui: [void, GLuint program, GLint location, GLuint v0, GLuint v1,
    GLuint v2, GLuint v3]
  glProgramUniform4uiv: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniformMatrix2dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix2fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix2x3dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix2x3fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix2x4dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix2x4fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix3dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix3fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix3x2dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix3x2fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix3x4dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix3x4fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix4dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix4fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix4x2dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix4x2fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix4x3dv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix4x3fv: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glUseProgramStages: [void, GLuint pipeline, GLbitfield stages, GLuint program]
  glValidateProgramPipeline: [void, GLuint pipeline]
ARB_shader_atomic_counters:
  glGetActiveAtomicCounterBufferiv: [void, GLuint program, GLuint bufferIndex, GLenum
      pname, GLint *params]
ARB_shader_image_load_store:
  glBindImageTexture: [void, GLuint unit, GLuint texture, GLint level, GLboolean layered,
    GLint layer, GLenum access, GLenum format]
  glMemoryBarrier: [void, GLbitfield barriers]
ARB_shader_objects:
  glAttachObjectARB: [void, GLhandleARB containerObj, GLhandleARB obj]
  glCompileShaderARB: [void, GLhandleARB shaderObj]
  glCreateProgramObjectARB: [GLhandleARB]
  glCreateShaderObjectARB: [GLhandleARB, GLenum shaderType]
  glDeleteObjectARB: [void, GLhandleARB obj]
  glDetachObjectARB: [void, GLhandleARB containerObj, GLhandleARB attachedObj]
  glGetActiveUniformARB: [void, GLhandleARB programObj, GLuint index, GLsizei maxLength,
    GLsizei *length, GLint *size, GLenum *type, GLcharARB *name]
  glGetAttachedObjectsARB: [void, GLhandleARB containerObj, GLsizei maxCount, GLsizei
      *count, GLhandleARB *obj]
  glGetHandleARB: [GLhandleARB, GLenum pname]
  glGetInfoLogARB: [void, GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB
      *infoLog]
  glGetObjectParameterfvARB: [void, GLhandleARB obj, GLenum pname, GLfloat *params]
  glGetObjectParameterivARB: [void, GLhandleARB obj, GLenum pname, GLint *params]
  glGetShaderSourceARB: [void, GLhandleARB obj, GLsizei maxLength, GLsizei *length,
    GLcharARB *source]
  glGetUniformLocationARB: [GLint, GLhandleARB programObj, const GLcharARB *name]
  glGetUniformfvARB: [void, GLhandleARB programObj, GLint location, GLfloat *params]
  glGetUniformivARB: [void, GLhandleARB programObj, GLint location, GLint *params]
  glLinkProgramARB: [void, GLhandleARB programObj]
  glShaderSourceARB: [void, GLhandleARB shaderObj, GLsizei count, const GLcharARB
      *string, const GLint *length]
  glUniform1fARB: [void, GLint location, GLfloat v0]
  glUniform1fvARB: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform1iARB: [void, GLint location, GLint v0]
  glUniform1ivARB: [void, GLint location, GLsizei count, const GLint *value]
  glUniform2fARB: [void, GLint location, GLfloat v0, GLfloat v1]
  glUniform2fvARB: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform2iARB: [void, GLint location, GLint v0, GLint v1]
  glUniform2ivARB: [void, GLint location, GLsizei count, const GLint *value]
  glUniform3fARB: [void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2]
  glUniform3fvARB: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform3iARB: [void, GLint location, GLint v0, GLint v1, GLint v2]
  glUniform3ivARB: [void, GLint location, GLsizei count, const GLint *value]
  glUniform4fARB: [void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat
      v3]
  glUniform4fvARB: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform4iARB: [void, GLint location, GLint v0, GLint v1, GLint v2, GLint v3]
  glUniform4ivARB: [void, GLint location, GLsizei count, const GLint *value]
  glUniformMatrix2fvARB: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix3fvARB: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix4fvARB: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUseProgramObjectARB: [void, GLhandleARB programObj]
  glValidateProgramARB: [void, GLhandleARB programObj]
ARB_shader_storage_buffer_object:
  glShaderStorageBlockBinding: [void, GLuint program, GLuint storageBlockIndex, GLuint
      storageBlockBinding]
ARB_shader_subroutine:
  glGetActiveSubroutineName: [void, GLuint program, GLenum shadertype, GLuint index,
    GLsizei bufsize, GLsizei *length, GLchar *name]
  glGetActiveSubroutineUniformName: [void, GLuint program, GLenum shadertype, GLuint
      index, GLsizei bufsize, GLsizei *length, GLchar *name]
  glGetActiveSubroutineUniformiv: [void, GLuint program, GLenum shadertype, GLuint
      index, GLenum pname, GLint *values]
  glGetProgramStageiv: [void, GLuint program, GLenum shadertype, GLenum pname, GLint
      *values]
  glGetSubroutineIndex: [GLuint, GLuint program, GLenum shadertype, const GLchar *name]
  glGetSubroutineUniformLocation: [GLint, GLuint program, GLenum shadertype, const
      GLchar *name]
  glGetUniformSubroutineuiv: [void, GLenum shadertype, GLint location, GLuint *params]
  glUniformSubroutinesuiv: [void, GLenum shadertype, GLsizei count, const GLuint *indices]
ARB_shading_language_include:
  glCompileShaderIncludeARB: [void, GLuint shader, GLsizei count, const GLchar *path,
    const GLint *length]
  glDeleteNamedStringARB: [void, GLint namelen, const GLchar *name]
  glGetNamedStringARB: [void, GLint namelen, const GLchar *name, GLsizei bufSize,
    GLint *stringlen, GLchar *string]
  glGetNamedStringivARB: [void, GLint namelen, const GLchar *name, GLenum pname, GLint
      *params]
  glIsNamedStringARB: [GLboolean, GLint namelen, const GLchar *name]
  glNamedStringARB: [void, GLenum type, GLint namelen, const GLchar *name, GLint stringlen,
    const GLchar *string]
ARB_sync:
  glClientWaitSync: [GLenum, GLsync sync, GLbitfield flags, GLuint64 timeout]
  glDeleteSync: [void, GLsync sync]
  glFenceSync: [GLsync, GLenum condition, GLbitfield flags]
  glGetInteger64v: [void, GLenum pname, GLint64 *params]
  glGetSynciv: [void, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length,
    GLint *values]
  glIsSync: [GLboolean, GLsync sync]
  glWaitSync: [void, GLsync sync, GLbitfield flags, GLuint64 timeout]
ARB_tessellation_shader:
  glPatchParameterfv: [void, GLenum pname, const GLfloat *values]
  glPatchParameteri: [void, GLenum pname, GLint value]
ARB_texture_buffer_object:
  glTexBufferARB: [void, GLenum target, GLenum internalformat, GLuint buffer]
ARB_texture_buffer_range:
  glTexBufferRange: [void, GLenum target, GLenum internalformat, GLuint buffer, GLintptr
      offset, GLsizeiptr size]
  glTextureBufferRangeEXT: [void, GLuint texture, GLenum target, GLenum internalformat,
    GLuint buffer, GLintptr offset, GLsizeiptr size]
ARB_texture_compression:
  glCompressedTexImage1DARB: [void, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data]
  glCompressedTexImage2DARB: [void, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data]
  glCompressedTexImage3DARB: [void, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize,
    const GLvoid *data]
  glCompressedTexSubImage1DARB: [void, GLenum target, GLint level, GLint xoffset,
    GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data]
  glCompressedTexSubImage2DARB: [void, GLenum target, GLint level, GLint xoffset,
    GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize,
    const GLvoid *data]
  glCompressedTexSubImage3DARB: [void, GLenum target, GLint level, GLint xoffset,
    GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum
      format, GLsizei imageSize, const GLvoid *data]
  glGetCompressedTexImageARB: [void, GLenum target, GLint level, GLvoid *img]
ARB_texture_multisample:
  glGetMultisamplefv: [void, GLenum pname, GLuint index, GLfloat *val]
  glSampleMaski: [void, GLuint index, GLbitfield mask]
  glTexImage2DMultisample: [void, GLenum target, GLsizei samples, GLint internalformat,
    GLsizei width, GLsizei height, GLboolean fixedsamplelocations]
  glTexImage3DMultisample: [void, GLenum target, GLsizei samples, GLint internalformat,
    GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations]
ARB_texture_storage:
  glTexStorage1D: [void, GLenum target, GLsizei levels, GLenum internalformat, GLsizei
      width]
  glTexStorage2D: [void, GLenum target, GLsizei levels, GLenum internalformat, GLsizei
      width, GLsizei height]
  glTexStorage3D: [void, GLenum target, GLsizei levels, GLenum internalformat, GLsizei
      width, GLsizei height, GLsizei depth]
  glTextureStorage1DEXT: [void, GLuint texture, GLenum target, GLsizei levels, GLenum
      internalformat, GLsizei width]
  glTextureStorage2DEXT: [void, GLuint texture, GLenum target, GLsizei levels, GLenum
      internalformat, GLsizei width, GLsizei height]
  glTextureStorage3DEXT: [void, GLuint texture, GLenum target, GLsizei levels, GLenum
      internalformat, GLsizei width, GLsizei height, GLsizei depth]
ARB_texture_storage_multisample:
  glTexStorage2DMultisample: [void, GLenum target, GLsizei samples, GLenum internalformat,
    GLsizei width, GLsizei height, GLboolean fixedsamplelocations]
  glTexStorage3DMultisample: [void, GLenum target, GLsizei samples, GLenum internalformat,
    GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations]
  glTextureStorage2DMultisampleEXT: [void, GLuint texture, GLenum target, GLsizei
      samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations]
  glTextureStorage3DMultisampleEXT: [void, GLuint texture, GLenum target, GLsizei
      samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth,
    GLboolean fixedsamplelocations]
ARB_texture_view:
  glTextureView: [void, GLuint texture, GLenum target, GLuint origtexture, GLenum
      internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers]
ARB_timer_query:
  glGetQueryObjecti64v: [void, GLuint id, GLenum pname, GLint64 *params]
  glGetQueryObjectui64v: [void, GLuint id, GLenum pname, GLuint64 *params]
  glQueryCounter: [void, GLuint id, GLenum target]
ARB_transform_feedback2:
  glBindTransformFeedback: [void, GLenum target, GLuint id]
  glDeleteTransformFeedbacks: [void, GLsizei n, const GLuint *ids]
  glDrawTransformFeedback: [void, GLenum mode, GLuint id]
  glGenTransformFeedbacks: [void, GLsizei n, GLuint *ids]
  glIsTransformFeedback: [GLboolean, GLuint id]
  glPauseTransformFeedback: [void]
  glResumeTransformFeedback: [void]
ARB_transform_feedback3:
  glBeginQueryIndexed: [void, GLenum target, GLuint index, GLuint id]
  glDrawTransformFeedbackStream: [void, GLenum mode, GLuint id, GLuint stream]
  glEndQueryIndexed: [void, GLenum target, GLuint index]
  glGetQueryIndexediv: [void, GLenum target, GLuint index, GLenum pname, GLint *params]
ARB_transform_feedback_instanced:
  glDrawTransformFeedbackInstanced: [void, GLenum mode, GLuint id, GLsizei instancecount]
  glDrawTransformFeedbackStreamInstanced: [void, GLenum mode, GLuint id, GLuint stream,
    GLsizei instancecount]
ARB_transpose_matrix:
  glLoadTransposeMatrixdARB: [void, const GLdouble *m]
  glLoadTransposeMatrixfARB: [void, const GLfloat *m]
  glMultTransposeMatrixdARB: [void, const GLdouble *m]
  glMultTransposeMatrixfARB: [void, const GLfloat *m]
ARB_uniform_buffer_object:
  glGetActiveUniformBlockName: [void, GLuint program, GLuint uniformBlockIndex, GLsizei
      bufSize, GLsizei *length, GLchar *uniformBlockName]
  glGetActiveUniformBlockiv: [void, GLuint program, GLuint uniformBlockIndex, GLenum
      pname, GLint *params]
  glGetActiveUniformName: [void, GLuint program, GLuint uniformIndex, GLsizei bufSize,
    GLsizei *length, GLchar *uniformName]
  glGetActiveUniformsiv: [void, GLuint program, GLsizei uniformCount, const GLuint
      *uniformIndices, GLenum pname, GLint *params]
  glGetUniformBlockIndex: [GLuint, GLuint program, const GLchar *uniformBlockName]
  glGetUniformIndices: [void, GLuint program, GLsizei uniformCount, GLchar*const *uniformNames,
    GLuint *uniformIndices]
  glUniformBlockBinding: [void, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding]
ARB_vertex_array_object:
  glBindVertexArray: [void, GLuint array]
  glDeleteVertexArrays: [void, GLsizei n, const GLuint *arrays]
  glGenVertexArrays: [void, GLsizei n, GLuint *arrays]
  glIsVertexArray: [GLboolean, GLuint array]
ARB_vertex_attrib_64bit:
  glGetVertexAttribLdv: [void, GLuint index, GLenum pname, GLdouble *params]
  glVertexAttribL1d: [void, GLuint index, GLdouble x]
  glVertexAttribL1dv: [void, GLuint index, const GLdouble *v]
  glVertexAttribL2d: [void, GLuint index, GLdouble x, GLdouble y]
  glVertexAttribL2dv: [void, GLuint index, const GLdouble *v]
  glVertexAttribL3d: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z]
  glVertexAttribL3dv: [void, GLuint index, const GLdouble *v]
  glVertexAttribL4d: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glVertexAttribL4dv: [void, GLuint index, const GLdouble *v]
  glVertexAttribLPointer: [void, GLuint index, GLint size, GLenum type, GLsizei stride,
    const GLvoid *pointer]
ARB_vertex_attrib_binding:
  glBindVertexBuffer: [void, GLuint bindingindex, GLuint buffer, GLintptr offset,
    GLsizei stride]
  glVertexArrayBindVertexBufferEXT: [void, GLuint vaobj, GLuint bindingindex, GLuint
      buffer, GLintptr offset, GLsizei stride]
  glVertexArrayVertexAttribBindingEXT: [void, GLuint vaobj, GLuint attribindex, GLuint
      bindingindex]
  glVertexArrayVertexAttribFormatEXT: [void, GLuint vaobj, GLuint attribindex, GLint
      size, GLenum type, GLboolean normalized, GLuint relativeoffset]
  glVertexArrayVertexAttribIFormatEXT: [void, GLuint vaobj, GLuint attribindex, GLint
      size, GLenum type, GLuint relativeoffset]
  glVertexArrayVertexAttribLFormatEXT: [void, GLuint vaobj, GLuint attribindex, GLint
      size, GLenum type, GLuint relativeoffset]
  glVertexArrayVertexBindingDivisorEXT: [void, GLuint vaobj, GLuint bindingindex,
    GLuint divisor]
  glVertexAttribBinding: [void, GLuint attribindex, GLuint bindingindex]
  glVertexAttribFormat: [void, GLuint attribindex, GLint size, GLenum type, GLboolean
      normalized, GLuint relativeoffset]
  glVertexAttribIFormat: [void, GLuint attribindex, GLint size, GLenum type, GLuint
      relativeoffset]
  glVertexAttribLFormat: [void, GLuint attribindex, GLint size, GLenum type, GLuint
      relativeoffset]
  glVertexBindingDivisor: [void, GLuint bindingindex, GLuint divisor]
ARB_vertex_blend:
  glVertexBlendARB: [void, GLint count]
  glWeightPointerARB: [void, GLint size, GLenum type, GLsizei stride, const GLvoid
      *pointer]
  glWeightbvARB: [void, GLint size, const GLbyte *weights]
  glWeightdvARB: [void, GLint size, const GLdouble *weights]
  glWeightfvARB: [void, GLint size, const GLfloat *weights]
  glWeightivARB: [void, GLint size, const GLint *weights]
  glWeightsvARB: [void, GLint size, const GLshort *weights]
  glWeightubvARB: [void, GLint size, const GLubyte *weights]
  glWeightuivARB: [void, GLint size, const GLuint *weights]
  glWeightusvARB: [void, GLint size, const GLushort *weights]
ARB_vertex_buffer_object:
  glBindBufferARB: [void, GLenum target, GLuint buffer]
  glBufferDataARB: [void, GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum
      usage]
  glBufferSubDataARB: [void, GLenum target, GLintptrARB offset, GLsizeiptrARB size,
    const GLvoid *data]
  glDeleteBuffersARB: [void, GLsizei n, const GLuint *buffers]
  glGenBuffersARB: [void, GLsizei n, GLuint *buffers]
  glGetBufferParameterivARB: [void, GLenum target, GLenum pname, GLint *params]
  glGetBufferPointervARB: [void, GLenum target, GLenum pname, GLvoid *params]
  glGetBufferSubDataARB: [void, GLenum target, GLintptrARB offset, GLsizeiptrARB size,
    GLvoid *data]
  glIsBufferARB: [GLboolean, GLuint buffer]
  glMapBufferARB: [GLvoid *, GLenum target, GLenum access]
  glUnmapBufferARB: [GLboolean, GLenum target]
ARB_vertex_program:
  glBindProgramARB: [void, GLenum target, GLuint program]
  glDeleteProgramsARB: [void, GLsizei n, const GLuint *programs]
  glDisableVertexAttribArrayARB: [void, GLuint index]
  glEnableVertexAttribArrayARB: [void, GLuint index]
  glGenProgramsARB: [void, GLsizei n, GLuint *programs]
  glGetProgramEnvParameterdvARB: [void, GLenum target, GLuint index, GLdouble *params]
  glGetProgramEnvParameterfvARB: [void, GLenum target, GLuint index, GLfloat *params]
  glGetProgramLocalParameterdvARB: [void, GLenum target, GLuint index, GLdouble *params]
  glGetProgramLocalParameterfvARB: [void, GLenum target, GLuint index, GLfloat *params]
  glGetProgramStringARB: [void, GLenum target, GLenum pname, GLvoid *string]
  glGetProgramivARB: [void, GLenum target, GLenum pname, GLint *params]
  glGetVertexAttribPointervARB: [void, GLuint index, GLenum pname, GLvoid *pointer]
  glGetVertexAttribdvARB: [void, GLuint index, GLenum pname, GLdouble *params]
  glGetVertexAttribfvARB: [void, GLuint index, GLenum pname, GLfloat *params]
  glGetVertexAttribivARB: [void, GLuint index, GLenum pname, GLint *params]
  glIsProgramARB: [GLboolean, GLuint program]
  glProgramEnvParameter4dARB: [void, GLenum target, GLuint index, GLdouble x, GLdouble
      y, GLdouble z, GLdouble w]
  glProgramEnvParameter4dvARB: [void, GLenum target, GLuint index, const GLdouble
      *params]
  glProgramEnvParameter4fARB: [void, GLenum target, GLuint index, GLfloat x, GLfloat
      y, GLfloat z, GLfloat w]
  glProgramEnvParameter4fvARB: [void, GLenum target, GLuint index, const GLfloat *params]
  glProgramLocalParameter4dARB: [void, GLenum target, GLuint index, GLdouble x, GLdouble
      y, GLdouble z, GLdouble w]
  glProgramLocalParameter4dvARB: [void, GLenum target, GLuint index, const GLdouble
      *params]
  glProgramLocalParameter4fARB: [void, GLenum target, GLuint index, GLfloat x, GLfloat
      y, GLfloat z, GLfloat w]
  glProgramLocalParameter4fvARB: [void, GLenum target, GLuint index, const GLfloat
      *params]
  glProgramStringARB: [void, GLenum target, GLenum format, GLsizei len, const GLvoid
      *string]
  glVertexAttrib1dARB: [void, GLuint index, GLdouble x]
  glVertexAttrib1dvARB: [void, GLuint index, const GLdouble *v]
  glVertexAttrib1fARB: [void, GLuint index, GLfloat x]
  glVertexAttrib1fvARB: [void, GLuint index, const GLfloat *v]
  glVertexAttrib1sARB: [void, GLuint index, GLshort x]
  glVertexAttrib1svARB: [void, GLuint index, const GLshort *v]
  glVertexAttrib2dARB: [void, GLuint index, GLdouble x, GLdouble y]
  glVertexAttrib2dvARB: [void, GLuint index, const GLdouble *v]
  glVertexAttrib2fARB: [void, GLuint index, GLfloat x, GLfloat y]
  glVertexAttrib2fvARB: [void, GLuint index, const GLfloat *v]
  glVertexAttrib2sARB: [void, GLuint index, GLshort x, GLshort y]
  glVertexAttrib2svARB: [void, GLuint index, const GLshort *v]
  glVertexAttrib3dARB: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z]
  glVertexAttrib3dvARB: [void, GLuint index, const GLdouble *v]
  glVertexAttrib3fARB: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z]
  glVertexAttrib3fvARB: [void, GLuint index, const GLfloat *v]
  glVertexAttrib3sARB: [void, GLuint index, GLshort x, GLshort y, GLshort z]
  glVertexAttrib3svARB: [void, GLuint index, const GLshort *v]
  glVertexAttrib4NbvARB: [void, GLuint index, const GLbyte *v]
  glVertexAttrib4NivARB: [void, GLuint index, const GLint *v]
  glVertexAttrib4NsvARB: [void, GLuint index, const GLshort *v]
  glVertexAttrib4NubARB: [void, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte
      w]
  glVertexAttrib4NubvARB: [void, GLuint index, const GLubyte *v]
  glVertexAttrib4NuivARB: [void, GLuint index, const GLuint *v]
  glVertexAttrib4NusvARB: [void, GLuint index, const GLushort *v]
  glVertexAttrib4bvARB: [void, GLuint index, const GLbyte *v]
  glVertexAttrib4dARB: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glVertexAttrib4dvARB: [void, GLuint index, const GLdouble *v]
  glVertexAttrib4fARB: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat
      w]
  glVertexAttrib4fvARB: [void, GLuint index, const GLfloat *v]
  glVertexAttrib4ivARB: [void, GLuint index, const GLint *v]
  glVertexAttrib4sARB: [void, GLuint index, GLshort x, GLshort y, GLshort z, GLshort
      w]
  glVertexAttrib4svARB: [void, GLuint index, const GLshort *v]
  glVertexAttrib4ubvARB: [void, GLuint index, const GLubyte *v]
  glVertexAttrib4uivARB: [void, GLuint index, const GLuint *v]
  glVertexAttrib4usvARB: [void, GLuint index, const GLushort *v]
  glVertexAttribPointerARB: [void, GLuint index, GLint size, GLenum type, GLboolean
      normalized, GLsizei stride, const GLvoid *pointer]
ARB_vertex_shader:
  glBindAttribLocationARB: [void, GLhandleARB programObj, GLuint index, const GLcharARB
      *name]
  glGetActiveAttribARB: [void, GLhandleARB programObj, GLuint index, GLsizei maxLength,
    GLsizei *length, GLint *size, GLenum *type, GLcharARB *name]
  glGetAttribLocationARB: [GLint, GLhandleARB programObj, const GLcharARB *name]
ARB_vertex_type_2_10_10_10_rev:
  glColorP3ui: [void, GLenum type, GLuint color]
  glColorP3uiv: [void, GLenum type, const GLuint *color]
  glColorP4ui: [void, GLenum type, GLuint color]
  glColorP4uiv: [void, GLenum type, const GLuint *color]
  glMultiTexCoordP1ui: [void, GLenum texture, GLenum type, GLuint coords]
  glMultiTexCoordP1uiv: [void, GLenum texture, GLenum type, const GLuint *coords]
  glMultiTexCoordP2ui: [void, GLenum texture, GLenum type, GLuint coords]
  glMultiTexCoordP2uiv: [void, GLenum texture, GLenum type, const GLuint *coords]
  glMultiTexCoordP3ui: [void, GLenum texture, GLenum type, GLuint coords]
  glMultiTexCoordP3uiv: [void, GLenum texture, GLenum type, const GLuint *coords]
  glMultiTexCoordP4ui: [void, GLenum texture, GLenum type, GLuint coords]
  glMultiTexCoordP4uiv: [void, GLenum texture, GLenum type, const GLuint *coords]
  glNormalP3ui: [void, GLenum type, GLuint coords]
  glNormalP3uiv: [void, GLenum type, const GLuint *coords]
  glSecondaryColorP3ui: [void, GLenum type, GLuint color]
  glSecondaryColorP3uiv: [void, GLenum type, const GLuint *color]
  glTexCoordP1ui: [void, GLenum type, GLuint coords]
  glTexCoordP1uiv: [void, GLenum type, const GLuint *coords]
  glTexCoordP2ui: [void, GLenum type, GLuint coords]
  glTexCoordP2uiv: [void, GLenum type, const GLuint *coords]
  glTexCoordP3ui: [void, GLenum type, GLuint coords]
  glTexCoordP3uiv: [void, GLenum type, const GLuint *coords]
  glTexCoordP4ui: [void, GLenum type, GLuint coords]
  glTexCoordP4uiv: [void, GLenum type, const GLuint *coords]
  glVertexAttribP1ui: [void, GLuint index, GLenum type, GLboolean normalized, GLuint
      value]
  glVertexAttribP1uiv: [void, GLuint index, GLenum type, GLboolean normalized, const
      GLuint *value]
  glVertexAttribP2ui: [void, GLuint index, GLenum type, GLboolean normalized, GLuint
      value]
  glVertexAttribP2uiv: [void, GLuint index, GLenum type, GLboolean normalized, const
      GLuint *value]
  glVertexAttribP3ui: [void, GLuint index, GLenum type, GLboolean normalized, GLuint
      value]
  glVertexAttribP3uiv: [void, GLuint index, GLenum type, GLboolean normalized, const
      GLuint *value]
  glVertexAttribP4ui: [void, GLuint index, GLenum type, GLboolean normalized, GLuint
      value]
  glVertexAttribP4uiv: [void, GLuint index, GLenum type, GLboolean normalized, const
      GLuint *value]
  glVertexP2ui: [void, GLenum type, GLuint value]
  glVertexP2uiv: [void, GLenum type, const GLuint *value]
  glVertexP3ui: [void, GLenum type, GLuint value]
  glVertexP3uiv: [void, GLenum type, const GLuint *value]
  glVertexP4ui: [void, GLenum type, GLuint value]
  glVertexP4uiv: [void, GLenum type, const GLuint *value]
ARB_viewport_array:
  glDepthRangeArrayv: [void, GLuint first, GLsizei count, const GLdouble *v]
  glDepthRangeIndexed: [void, GLuint index, GLdouble n, GLdouble f]
  glGetDoublei_v: [void, GLenum target, GLuint index, GLdouble *data]
  glGetFloati_v: [void, GLenum target, GLuint index, GLfloat *data]
  glScissorArrayv: [void, GLuint first, GLsizei count, const GLint *v]
  glScissorIndexed: [void, GLuint index, GLint left, GLint bottom, GLsizei width,
    GLsizei height]
  glScissorIndexedv: [void, GLuint index, const GLint *v]
  glViewportArrayv: [void, GLuint first, GLsizei count, const GLfloat *v]
  glViewportIndexedf: [void, GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat
      h]
  glViewportIndexedfv: [void, GLuint index, const GLfloat *v]
ARB_window_pos:
  glWindowPos2dARB: [void, GLdouble x, GLdouble y]
  glWindowPos2dvARB: [void, const GLdouble *v]
  glWindowPos2fARB: [void, GLfloat x, GLfloat y]
  glWindowPos2fvARB: [void, const GLfloat *v]
  glWindowPos2iARB: [void, GLint x, GLint y]
  glWindowPos2ivARB: [void, const GLint *v]
  glWindowPos2sARB: [void, GLshort x, GLshort y]
  glWindowPos2svARB: [void, const GLshort *v]
  glWindowPos3dARB: [void, GLdouble x, GLdouble y, GLdouble z]
  glWindowPos3dvARB: [void, const GLdouble *v]
  glWindowPos3fARB: [void, GLfloat x, GLfloat y, GLfloat z]
  glWindowPos3fvARB: [void, const GLfloat *v]
  glWindowPos3iARB: [void, GLint x, GLint y, GLint z]
  glWindowPos3ivARB: [void, const GLint *v]
  glWindowPos3sARB: [void, GLshort x, GLshort y, GLshort z]
  glWindowPos3svARB: [void, const GLshort *v]
ATI_draw_buffers:
  glDrawBuffersATI: [void, GLsizei n, const GLenum *bufs]
ATI_element_array:
  glDrawElementArrayATI: [void, GLenum mode, GLsizei count]
  glDrawRangeElementArrayATI: [void, GLenum mode, GLuint start, GLuint end, GLsizei
      count]
  glElementPointerATI: [void, GLenum type, const GLvoid *pointer]
ATI_envmap_bumpmap:
  glGetTexBumpParameterfvATI: [void, GLenum pname, GLfloat *param]
  glGetTexBumpParameterivATI: [void, GLenum pname, GLint *param]
  glTexBumpParameterfvATI: [void, GLenum pname, const GLfloat *param]
  glTexBumpParameterivATI: [void, GLenum pname, const GLint *param]
ATI_fragment_shader:
  glAlphaFragmentOp1ATI: [void, GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
    GLuint arg1Rep, GLuint arg1Mod]
  glAlphaFragmentOp2ATI: [void, GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
    GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod]
  glAlphaFragmentOp3ATI: [void, GLenum op, GLuint dst, GLuint dstMod, GLuint arg1,
    GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint
      arg3, GLuint arg3Rep, GLuint arg3Mod]
  glBeginFragmentShaderATI: [void]
  glBindFragmentShaderATI: [void, GLuint id]
  glColorFragmentOp1ATI: [void, GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod,
    GLuint arg1, GLuint arg1Rep, GLuint arg1Mod]
  glColorFragmentOp2ATI: [void, GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod,
    GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint
      arg2Mod]
  glColorFragmentOp3ATI: [void, GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod,
    GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint
      arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod]
  glDeleteFragmentShaderATI: [void, GLuint id]
  glEndFragmentShaderATI: [void]
  glGenFragmentShadersATI: [GLuint, GLuint range]
  glPassTexCoordATI: [void, GLuint dst, GLuint coord, GLenum swizzle]
  glSampleMapATI: [void, GLuint dst, GLuint interp, GLenum swizzle]
  glSetFragmentShaderConstantATI: [void, GLuint dst, const GLfloat *value]
ATI_map_object_buffer:
  glMapObjectBufferATI: [GLvoid *, GLuint buffer]
  glUnmapObjectBufferATI: [void, GLuint buffer]
ATI_pn_triangles:
  glPNTrianglesfATI: [void, GLenum pname, GLfloat param]
  glPNTrianglesiATI: [void, GLenum pname, GLint param]
ATI_separate_stencil:
  glStencilFuncSeparateATI: [void, GLenum frontfunc, GLenum backfunc, GLint ref, GLuint
      mask]
  glStencilOpSeparateATI: [void, GLenum face, GLenum sfail, GLenum dpfail, GLenum
      dppass]
ATI_vertex_array_object:
  glArrayObjectATI: [void, GLenum array, GLint size, GLenum type, GLsizei stride,
    GLuint buffer, GLuint offset]
  glFreeObjectBufferATI: [void, GLuint buffer]
  glGetArrayObjectfvATI: [void, GLenum array, GLenum pname, GLfloat *params]
  glGetArrayObjectivATI: [void, GLenum array, GLenum pname, GLint *params]
  glGetObjectBufferfvATI: [void, GLuint buffer, GLenum pname, GLfloat *params]
  glGetObjectBufferivATI: [void, GLuint buffer, GLenum pname, GLint *params]
  glGetVariantArrayObjectfvATI: [void, GLuint id, GLenum pname, GLfloat *params]
  glGetVariantArrayObjectivATI: [void, GLuint id, GLenum pname, GLint *params]
  glIsObjectBufferATI: [GLboolean, GLuint buffer]
  glNewObjectBufferATI: [GLuint, GLsizei size, const GLvoid *pointer, GLenum usage]
  glUpdateObjectBufferATI: [void, GLuint buffer, GLuint offset, GLsizei size, const
      GLvoid *pointer, GLenum preserve]
  glVariantArrayObjectATI: [void, GLuint id, GLenum type, GLsizei stride, GLuint buffer,
    GLuint offset]
ATI_vertex_attrib_array_object:
  glGetVertexAttribArrayObjectfvATI: [void, GLuint index, GLenum pname, GLfloat *params]
  glGetVertexAttribArrayObjectivATI: [void, GLuint index, GLenum pname, GLint *params]
  glVertexAttribArrayObjectATI: [void, GLuint index, GLint size, GLenum type, GLboolean
      normalized, GLsizei stride, GLuint buffer, GLuint offset]
ATI_vertex_streams:
  glClientActiveVertexStreamATI: [void, GLenum stream]
  glNormalStream3bATI: [void, GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz]
  glNormalStream3bvATI: [void, GLenum stream, const GLbyte *coords]
  glNormalStream3dATI: [void, GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz]
  glNormalStream3dvATI: [void, GLenum stream, const GLdouble *coords]
  glNormalStream3fATI: [void, GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz]
  glNormalStream3fvATI: [void, GLenum stream, const GLfloat *coords]
  glNormalStream3iATI: [void, GLenum stream, GLint nx, GLint ny, GLint nz]
  glNormalStream3ivATI: [void, GLenum stream, const GLint *coords]
  glNormalStream3sATI: [void, GLenum stream, GLshort nx, GLshort ny, GLshort nz]
  glNormalStream3svATI: [void, GLenum stream, const GLshort *coords]
  glVertexBlendEnvfATI: [void, GLenum pname, GLfloat param]
  glVertexBlendEnviATI: [void, GLenum pname, GLint param]
  glVertexStream1dATI: [void, GLenum stream, GLdouble x]
  glVertexStream1dvATI: [void, GLenum stream, const GLdouble *coords]
  glVertexStream1fATI: [void, GLenum stream, GLfloat x]
  glVertexStream1fvATI: [void, GLenum stream, const GLfloat *coords]
  glVertexStream1iATI: [void, GLenum stream, GLint x]
  glVertexStream1ivATI: [void, GLenum stream, const GLint *coords]
  glVertexStream1sATI: [void, GLenum stream, GLshort x]
  glVertexStream1svATI: [void, GLenum stream, const GLshort *coords]
  glVertexStream2dATI: [void, GLenum stream, GLdouble x, GLdouble y]
  glVertexStream2dvATI: [void, GLenum stream, const GLdouble *coords]
  glVertexStream2fATI: [void, GLenum stream, GLfloat x, GLfloat y]
  glVertexStream2fvATI: [void, GLenum stream, const GLfloat *coords]
  glVertexStream2iATI: [void, GLenum stream, GLint x, GLint y]
  glVertexStream2ivATI: [void, GLenum stream, const GLint *coords]
  glVertexStream2sATI: [void, GLenum stream, GLshort x, GLshort y]
  glVertexStream2svATI: [void, GLenum stream, const GLshort *coords]
  glVertexStream3dATI: [void, GLenum stream, GLdouble x, GLdouble y, GLdouble z]
  glVertexStream3dvATI: [void, GLenum stream, const GLdouble *coords]
  glVertexStream3fATI: [void, GLenum stream, GLfloat x, GLfloat y, GLfloat z]
  glVertexStream3fvATI: [void, GLenum stream, const GLfloat *coords]
  glVertexStream3iATI: [void, GLenum stream, GLint x, GLint y, GLint z]
  glVertexStream3ivATI: [void, GLenum stream, const GLint *coords]
  glVertexStream3sATI: [void, GLenum stream, GLshort x, GLshort y, GLshort z]
  glVertexStream3svATI: [void, GLenum stream, const GLshort *coords]
  glVertexStream4dATI: [void, GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glVertexStream4dvATI: [void, GLenum stream, const GLdouble *coords]
  glVertexStream4fATI: [void, GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat
      w]
  glVertexStream4fvATI: [void, GLenum stream, const GLfloat *coords]
  glVertexStream4iATI: [void, GLenum stream, GLint x, GLint y, GLint z, GLint w]
  glVertexStream4ivATI: [void, GLenum stream, const GLint *coords]
  glVertexStream4sATI: [void, GLenum stream, GLshort x, GLshort y, GLshort z, GLshort
      w]
  glVertexStream4svATI: [void, GLenum stream, const GLshort *coords]
EXT_bindable_uniform:
  glGetUniformBufferSizeEXT: [GLint, GLuint program, GLint location]
  glGetUniformOffsetEXT: [GLintptr, GLuint program, GLint location]
  glUniformBufferEXT: [void, GLuint program, GLint location, GLuint buffer]
EXT_blend_color:
  glBlendColorEXT: [void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha]
EXT_blend_equation_separate:
  glBlendEquationSeparateEXT: [void, GLenum modeRGB, GLenum modeAlpha]
EXT_blend_func_separate:
  glBlendFuncSeparateEXT: [void, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha,
    GLenum dfactorAlpha]
EXT_blend_minmax:
  glBlendEquationEXT: [void, GLenum mode]
EXT_color_subtable:
  glColorSubTableEXT: [void, GLenum target, GLsizei start, GLsizei count, GLenum format,
    GLenum type, const GLvoid *data]
  glCopyColorSubTableEXT: [void, GLenum target, GLsizei start, GLint x, GLint y, GLsizei
      width]
EXT_compiled_vertex_array:
  glLockArraysEXT: [void, GLint first, GLsizei count]
  glUnlockArraysEXT: [void]
EXT_convolution:
  glConvolutionFilter1DEXT: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLenum format, GLenum type, const GLvoid *image]
  glConvolutionFilter2DEXT: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLsizei height, GLenum format, GLenum type, const GLvoid *image]
  glConvolutionParameterfEXT: [void, GLenum target, GLenum pname, GLfloat params]
  glConvolutionParameterfvEXT: [void, GLenum target, GLenum pname, const GLfloat *params]
  glConvolutionParameteriEXT: [void, GLenum target, GLenum pname, GLint params]
  glConvolutionParameterivEXT: [void, GLenum target, GLenum pname, const GLint *params]
  glCopyConvolutionFilter1DEXT: [void, GLenum target, GLenum internalformat, GLint
      x, GLint y, GLsizei width]
  glCopyConvolutionFilter2DEXT: [void, GLenum target, GLenum internalformat, GLint
      x, GLint y, GLsizei width, GLsizei height]
  glGetConvolutionFilterEXT: [void, GLenum target, GLenum format, GLenum type, GLvoid
      *image]
  glGetConvolutionParameterfvEXT: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetConvolutionParameterivEXT: [void, GLenum target, GLenum pname, GLint *params]
  glGetSeparableFilterEXT: [void, GLenum target, GLenum format, GLenum type, GLvoid
      *row, GLvoid *column, GLvoid *span]
  glSeparableFilter2DEXT: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column]
EXT_coordinate_frame:
  glBinormal3bEXT: [void, GLbyte bx, GLbyte by, GLbyte bz]
  glBinormal3bvEXT: [void, const GLbyte *v]
  glBinormal3dEXT: [void, GLdouble bx, GLdouble by, GLdouble bz]
  glBinormal3dvEXT: [void, const GLdouble *v]
  glBinormal3fEXT: [void, GLfloat bx, GLfloat by, GLfloat bz]
  glBinormal3fvEXT: [void, const GLfloat *v]
  glBinormal3iEXT: [void, GLint bx, GLint by, GLint bz]
  glBinormal3ivEXT: [void, const GLint *v]
  glBinormal3sEXT: [void, GLshort bx, GLshort by, GLshort bz]
  glBinormal3svEXT: [void, const GLshort *v]
  glBinormalPointerEXT: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
  glTangent3bEXT: [void, GLbyte tx, GLbyte ty, GLbyte tz]
  glTangent3bvEXT: [void, const GLbyte *v]
  glTangent3dEXT: [void, GLdouble tx, GLdouble ty, GLdouble tz]
  glTangent3dvEXT: [void, const GLdouble *v]
  glTangent3fEXT: [void, GLfloat tx, GLfloat ty, GLfloat tz]
  glTangent3fvEXT: [void, const GLfloat *v]
  glTangent3iEXT: [void, GLint tx, GLint ty, GLint tz]
  glTangent3ivEXT: [void, const GLint *v]
  glTangent3sEXT: [void, GLshort tx, GLshort ty, GLshort tz]
  glTangent3svEXT: [void, const GLshort *v]
  glTangentPointerEXT: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
EXT_copy_texture:
  glCopyTexImage1DEXT: [void, GLenum target, GLint level, GLenum internalformat, GLint
      x, GLint y, GLsizei width, GLint border]
  glCopyTexImage2DEXT: [void, GLenum target, GLint level, GLenum internalformat, GLint
      x, GLint y, GLsizei width, GLsizei height, GLint border]
  glCopyTexSubImage1DEXT: [void, GLenum target, GLint level, GLint xoffset, GLint
      x, GLint y, GLsizei width]
  glCopyTexSubImage2DEXT: [void, GLenum target, GLint level, GLint xoffset, GLint
      yoffset, GLint x, GLint y, GLsizei width, GLsizei height]
  glCopyTexSubImage3DEXT: [void, GLenum target, GLint level, GLint xoffset, GLint
      yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height]
EXT_cull_vertex:
  glCullParameterdvEXT: [void, GLenum pname, GLdouble *params]
  glCullParameterfvEXT: [void, GLenum pname, GLfloat *params]
EXT_depth_bounds_test:
  glDepthBoundsEXT: [void, GLclampd zmin, GLclampd zmax]
EXT_direct_state_access:
  glBindMultiTextureEXT: [void, GLenum texunit, GLenum target, GLuint texture]
  glCheckNamedFramebufferStatusEXT: [GLenum, GLuint framebuffer, GLenum target]
  glClientAttribDefaultEXT: [void, GLbitfield mask]
  glCompressedMultiTexImage1DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid
      *bits]
  glCompressedMultiTexImage2DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize,
    const GLvoid *bits]
  glCompressedMultiTexImage3DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border,
    GLsizei imageSize, const GLvoid *bits]
  glCompressedMultiTexSubImage1DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits]
  glCompressedMultiTexSubImage2DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei
      imageSize, const GLvoid *bits]
  glCompressedMultiTexSubImage3DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei
      depth, GLenum format, GLsizei imageSize, const GLvoid *bits]
  glCompressedTextureImage1DEXT: [void, GLuint texture, GLenum target, GLint level,
    GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid
      *bits]
  glCompressedTextureImage2DEXT: [void, GLuint texture, GLenum target, GLint level,
    GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize,
    const GLvoid *bits]
  glCompressedTextureImage3DEXT: [void, GLuint texture, GLenum target, GLint level,
    GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border,
    GLsizei imageSize, const GLvoid *bits]
  glCompressedTextureSubImage1DEXT: [void, GLuint texture, GLenum target, GLint level,
    GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits]
  glCompressedTextureSubImage2DEXT: [void, GLuint texture, GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei
      imageSize, const GLvoid *bits]
  glCompressedTextureSubImage3DEXT: [void, GLuint texture, GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei
      depth, GLenum format, GLsizei imageSize, const GLvoid *bits]
  glCopyMultiTexImage1DEXT: [void, GLenum texunit, GLenum target, GLint level, GLenum
      internalformat, GLint x, GLint y, GLsizei width, GLint border]
  glCopyMultiTexImage2DEXT: [void, GLenum texunit, GLenum target, GLint level, GLenum
      internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border]
  glCopyMultiTexSubImage1DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLint xoffset, GLint x, GLint y, GLsizei width]
  glCopyMultiTexSubImage2DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height]
  glCopyMultiTexSubImage3DEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width,
    GLsizei height]
  glCopyTextureImage1DEXT: [void, GLuint texture, GLenum target, GLint level, GLenum
      internalformat, GLint x, GLint y, GLsizei width, GLint border]
  glCopyTextureImage2DEXT: [void, GLuint texture, GLenum target, GLint level, GLenum
      internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border]
  glCopyTextureSubImage1DEXT: [void, GLuint texture, GLenum target, GLint level, GLint
      xoffset, GLint x, GLint y, GLsizei width]
  glCopyTextureSubImage2DEXT: [void, GLuint texture, GLenum target, GLint level, GLint
      xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height]
  glCopyTextureSubImage3DEXT: [void, GLuint texture, GLenum target, GLint level, GLint
      xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei
      height]
  glDisableClientStateIndexedEXT: [void, GLenum array, GLuint index]
  glDisableClientStateiEXT: [void, GLenum array, GLuint index]
  glDisableVertexArrayAttribEXT: [void, GLuint vaobj, GLuint index]
  glDisableVertexArrayEXT: [void, GLuint vaobj, GLenum array]
  glEnableClientStateIndexedEXT: [void, GLenum array, GLuint index]
  glEnableClientStateiEXT: [void, GLenum array, GLuint index]
  glEnableVertexArrayAttribEXT: [void, GLuint vaobj, GLuint index]
  glEnableVertexArrayEXT: [void, GLuint vaobj, GLenum array]
  glFlushMappedNamedBufferRangeEXT: [void, GLuint buffer, GLintptr offset, GLsizeiptr
      length]
  glFramebufferDrawBufferEXT: [void, GLuint framebuffer, GLenum mode]
  glFramebufferDrawBuffersEXT: [void, GLuint framebuffer, GLsizei n, const GLenum
      *bufs]
  glFramebufferReadBufferEXT: [void, GLuint framebuffer, GLenum mode]
  glGenerateMultiTexMipmapEXT: [void, GLenum texunit, GLenum target]
  glGenerateTextureMipmapEXT: [void, GLuint texture, GLenum target]
  glGetCompressedMultiTexImageEXT: [void, GLenum texunit, GLenum target, GLint lod,
    GLvoid *img]
  glGetCompressedTextureImageEXT: [void, GLuint texture, GLenum target, GLint lod,
    GLvoid *img]
  glGetDoubleIndexedvEXT: [void, GLenum target, GLuint index, GLdouble *data]
  glGetDoublei_vEXT: [void, GLenum target, GLuint index, GLdouble *data]
  glGetFloatIndexedvEXT: [void, GLenum target, GLuint index, GLfloat *data]
  glGetFloati_vEXT: [void, GLenum target, GLuint index, GLfloat *data]
  glGetFramebufferParameterivEXT: [void, GLuint framebuffer, GLenum pname, GLint *params]
  glGetMultiTexEnvfvEXT: [void, GLenum texunit, GLenum target, GLenum pname, GLfloat
      *params]
  glGetMultiTexEnvivEXT: [void, GLenum texunit, GLenum target, GLenum pname, GLint
      *params]
  glGetMultiTexGendvEXT: [void, GLenum texunit, GLenum coord, GLenum pname, GLdouble
      *params]
  glGetMultiTexGenfvEXT: [void, GLenum texunit, GLenum coord, GLenum pname, GLfloat
      *params]
  glGetMultiTexGenivEXT: [void, GLenum texunit, GLenum coord, GLenum pname, GLint
      *params]
  glGetMultiTexImageEXT: [void, GLenum texunit, GLenum target, GLint level, GLenum
      format, GLenum type, GLvoid *pixels]
  glGetMultiTexLevelParameterfvEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLenum pname, GLfloat *params]
  glGetMultiTexLevelParameterivEXT: [void, GLenum texunit, GLenum target, GLint level,
    GLenum pname, GLint *params]
  glGetMultiTexParameterIivEXT: [void, GLenum texunit, GLenum target, GLenum pname,
    GLint *params]
  glGetMultiTexParameterIuivEXT: [void, GLenum texunit, GLenum target, GLenum pname,
    GLuint *params]
  glGetMultiTexParameterfvEXT: [void, GLenum texunit, GLenum target, GLenum pname,
    GLfloat *params]
  glGetMultiTexParameterivEXT: [void, GLenum texunit, GLenum target, GLenum pname,
    GLint *params]
  glGetNamedBufferParameterivEXT: [void, GLuint buffer, GLenum pname, GLint *params]
  glGetNamedBufferPointervEXT: [void, GLuint buffer, GLenum pname, GLvoid *params]
  glGetNamedBufferSubDataEXT: [void, GLuint buffer, GLintptr offset, GLsizeiptr size,
    GLvoid *data]
  glGetNamedFramebufferAttachmentParameterivEXT: [void, GLuint framebuffer, GLenum
      attachment, GLenum pname, GLint *params]
  glGetNamedProgramLocalParameterIivEXT: [void, GLuint program, GLenum target, GLuint
      index, GLint *params]
  glGetNamedProgramLocalParameterIuivEXT: [void, GLuint program, GLenum target, GLuint
      index, GLuint *params]
  glGetNamedProgramLocalParameterdvEXT: [void, GLuint program, GLenum target, GLuint
      index, GLdouble *params]
  glGetNamedProgramLocalParameterfvEXT: [void, GLuint program, GLenum target, GLuint
      index, GLfloat *params]
  glGetNamedProgramStringEXT: [void, GLuint program, GLenum target, GLenum pname,
    GLvoid *string]
  glGetNamedProgramivEXT: [void, GLuint program, GLenum target, GLenum pname, GLint
      *params]
  glGetNamedRenderbufferParameterivEXT: [void, GLuint renderbuffer, GLenum pname,
    GLint *params]
  glGetPointerIndexedvEXT: [void, GLenum target, GLuint index, GLvoid *data]
  glGetPointeri_vEXT: [void, GLenum target, GLuint index, GLvoid *data]
  glGetTextureImageEXT: [void, GLuint texture, GLenum target, GLint level, GLenum
      format, GLenum type, GLvoid *pixels]
  glGetTextureLevelParameterfvEXT: [void, GLuint texture, GLenum target, GLint level,
    GLenum pname, GLfloat *params]
  glGetTextureLevelParameterivEXT: [void, GLuint texture, GLenum target, GLint level,
    GLenum pname, GLint *params]
  glGetTextureParameterIivEXT: [void, GLuint texture, GLenum target, GLenum pname,
    GLint *params]
  glGetTextureParameterIuivEXT: [void, GLuint texture, GLenum target, GLenum pname,
    GLuint *params]
  glGetTextureParameterfvEXT: [void, GLuint texture, GLenum target, GLenum pname,
    GLfloat *params]
  glGetTextureParameterivEXT: [void, GLuint texture, GLenum target, GLenum pname,
    GLint *params]
  glGetVertexArrayIntegeri_vEXT: [void, GLuint vaobj, GLuint index, GLenum pname,
    GLint *param]
  glGetVertexArrayIntegervEXT: [void, GLuint vaobj, GLenum pname, GLint *param]
  glGetVertexArrayPointeri_vEXT: [void, GLuint vaobj, GLuint index, GLenum pname,
    GLvoid *param]
  glGetVertexArrayPointervEXT: [void, GLuint vaobj, GLenum pname, GLvoid *param]
  glMapNamedBufferEXT: [GLvoid *, GLuint buffer, GLenum access]
  glMapNamedBufferRangeEXT: [GLvoid *, GLuint buffer, GLintptr offset, GLsizeiptr
      length, GLbitfield access]
  glMatrixFrustumEXT: [void, GLenum mode, GLdouble left, GLdouble right, GLdouble
      bottom, GLdouble top, GLdouble zNear, GLdouble zFar]
  glMatrixLoadIdentityEXT: [void, GLenum mode]
  glMatrixLoadTransposedEXT: [void, GLenum mode, const GLdouble *m]
  glMatrixLoadTransposefEXT: [void, GLenum mode, const GLfloat *m]
  glMatrixLoaddEXT: [void, GLenum mode, const GLdouble *m]
  glMatrixLoadfEXT: [void, GLenum mode, const GLfloat *m]
  glMatrixMultTransposedEXT: [void, GLenum mode, const GLdouble *m]
  glMatrixMultTransposefEXT: [void, GLenum mode, const GLfloat *m]
  glMatrixMultdEXT: [void, GLenum mode, const GLdouble *m]
  glMatrixMultfEXT: [void, GLenum mode, const GLfloat *m]
  glMatrixOrthoEXT: [void, GLenum mode, GLdouble left, GLdouble right, GLdouble bottom,
    GLdouble top, GLdouble zNear, GLdouble zFar]
  glMatrixPopEXT: [void, GLenum mode]
  glMatrixPushEXT: [void, GLenum mode]
  glMatrixRotatedEXT: [void, GLenum mode, GLdouble angle, GLdouble x, GLdouble y,
    GLdouble z]
  glMatrixRotatefEXT: [void, GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat
      z]
  glMatrixScaledEXT: [void, GLenum mode, GLdouble x, GLdouble y, GLdouble z]
  glMatrixScalefEXT: [void, GLenum mode, GLfloat x, GLfloat y, GLfloat z]
  glMatrixTranslatedEXT: [void, GLenum mode, GLdouble x, GLdouble y, GLdouble z]
  glMatrixTranslatefEXT: [void, GLenum mode, GLfloat x, GLfloat y, GLfloat z]
  glMultiTexBufferEXT: [void, GLenum texunit, GLenum target, GLenum internalformat,
    GLuint buffer]
  glMultiTexCoordPointerEXT: [void, GLenum texunit, GLint size, GLenum type, GLsizei
      stride, const GLvoid *pointer]
  glMultiTexEnvfEXT: [void, GLenum texunit, GLenum target, GLenum pname, GLfloat param]
  glMultiTexEnvfvEXT: [void, GLenum texunit, GLenum target, GLenum pname, const GLfloat
      *params]
  glMultiTexEnviEXT: [void, GLenum texunit, GLenum target, GLenum pname, GLint param]
  glMultiTexEnvivEXT: [void, GLenum texunit, GLenum target, GLenum pname, const GLint
      *params]
  glMultiTexGendEXT: [void, GLenum texunit, GLenum coord, GLenum pname, GLdouble param]
  glMultiTexGendvEXT: [void, GLenum texunit, GLenum coord, GLenum pname, const GLdouble
      *params]
  glMultiTexGenfEXT: [void, GLenum texunit, GLenum coord, GLenum pname, GLfloat param]
  glMultiTexGenfvEXT: [void, GLenum texunit, GLenum coord, GLenum pname, const GLfloat
      *params]
  glMultiTexGeniEXT: [void, GLenum texunit, GLenum coord, GLenum pname, GLint param]
  glMultiTexGenivEXT: [void, GLenum texunit, GLenum coord, GLenum pname, const GLint
      *params]
  glMultiTexImage1DEXT: [void, GLenum texunit, GLenum target, GLint level, GLenum
      internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const
      GLvoid *pixels]
  glMultiTexImage2DEXT: [void, GLenum texunit, GLenum target, GLint level, GLenum
      internalformat, GLsizei width, GLsizei height, GLint border, GLenum format,
    GLenum type, const GLvoid *pixels]
  glMultiTexImage3DEXT: [void, GLenum texunit, GLenum target, GLint level, GLenum
      internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border,
    GLenum format, GLenum type, const GLvoid *pixels]
  glMultiTexParameterIivEXT: [void, GLenum texunit, GLenum target, GLenum pname, const
      GLint *params]
  glMultiTexParameterIuivEXT: [void, GLenum texunit, GLenum target, GLenum pname,
    const GLuint *params]
  glMultiTexParameterfEXT: [void, GLenum texunit, GLenum target, GLenum pname, GLfloat
      param]
  glMultiTexParameterfvEXT: [void, GLenum texunit, GLenum target, GLenum pname, const
      GLfloat *params]
  glMultiTexParameteriEXT: [void, GLenum texunit, GLenum target, GLenum pname, GLint
      param]
  glMultiTexParameterivEXT: [void, GLenum texunit, GLenum target, GLenum pname, const
      GLint *params]
  glMultiTexRenderbufferEXT: [void, GLenum texunit, GLenum target, GLuint renderbuffer]
  glMultiTexSubImage1DEXT: [void, GLenum texunit, GLenum target, GLint level, GLint
      xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels]
  glMultiTexSubImage2DEXT: [void, GLenum texunit, GLenum target, GLint level, GLint
      xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum
      type, const GLvoid *pixels]
  glMultiTexSubImage3DEXT: [void, GLenum texunit, GLenum target, GLint level, GLint
      xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei
      depth, GLenum format, GLenum type, const GLvoid *pixels]
  glNamedBufferDataEXT: [void, GLuint buffer, GLsizeiptr size, const GLvoid *data,
    GLenum usage]
  glNamedBufferSubDataEXT: [void, GLuint buffer, GLintptr offset, GLsizeiptr size,
    const GLvoid *data]
  glNamedCopyBufferSubDataEXT: [void, GLuint readBuffer, GLuint writeBuffer, GLintptr
      readOffset, GLintptr writeOffset, GLsizeiptr size]
  glNamedFramebufferRenderbufferEXT: [void, GLuint framebuffer, GLenum attachment,
    GLenum renderbuffertarget, GLuint renderbuffer]
  glNamedFramebufferTexture1DEXT: [void, GLuint framebuffer, GLenum attachment, GLenum
      textarget, GLuint texture, GLint level]
  glNamedFramebufferTexture2DEXT: [void, GLuint framebuffer, GLenum attachment, GLenum
      textarget, GLuint texture, GLint level]
  glNamedFramebufferTexture3DEXT: [void, GLuint framebuffer, GLenum attachment, GLenum
      textarget, GLuint texture, GLint level, GLint zoffset]
  glNamedFramebufferTextureEXT: [void, GLuint framebuffer, GLenum attachment, GLuint
      texture, GLint level]
  glNamedFramebufferTextureFaceEXT: [void, GLuint framebuffer, GLenum attachment,
    GLuint texture, GLint level, GLenum face]
  glNamedFramebufferTextureLayerEXT: [void, GLuint framebuffer, GLenum attachment,
    GLuint texture, GLint level, GLint layer]
  glNamedProgramLocalParameter4dEXT: [void, GLuint program, GLenum target, GLuint
      index, GLdouble x, GLdouble y, GLdouble z, GLdouble w]
  glNamedProgramLocalParameter4dvEXT: [void, GLuint program, GLenum target, GLuint
      index, const GLdouble *params]
  glNamedProgramLocalParameter4fEXT: [void, GLuint program, GLenum target, GLuint
      index, GLfloat x, GLfloat y, GLfloat z, GLfloat w]
  glNamedProgramLocalParameter4fvEXT: [void, GLuint program, GLenum target, GLuint
      index, const GLfloat *params]
  glNamedProgramLocalParameterI4iEXT: [void, GLuint program, GLenum target, GLuint
      index, GLint x, GLint y, GLint z, GLint w]
  glNamedProgramLocalParameterI4ivEXT: [void, GLuint program, GLenum target, GLuint
      index, const GLint *params]
  glNamedProgramLocalParameterI4uiEXT: [void, GLuint program, GLenum target, GLuint
      index, GLuint x, GLuint y, GLuint z, GLuint w]
  glNamedProgramLocalParameterI4uivEXT: [void, GLuint program, GLenum target, GLuint
      index, const GLuint *params]
  glNamedProgramLocalParameters4fvEXT: [void, GLuint program, GLenum target, GLuint
      index, GLsizei count, const GLfloat *params]
  glNamedProgramLocalParametersI4ivEXT: [void, GLuint program, GLenum target, GLuint
      index, GLsizei count, const GLint *params]
  glNamedProgramLocalParametersI4uivEXT: [void, GLuint program, GLenum target, GLuint
      index, GLsizei count, const GLuint *params]
  glNamedProgramStringEXT: [void, GLuint program, GLenum target, GLenum format, GLsizei
      len, const GLvoid *string]
  glNamedRenderbufferStorageEXT: [void, GLuint renderbuffer, GLenum internalformat,
    GLsizei width, GLsizei height]
  glNamedRenderbufferStorageMultisampleCoverageEXT: [void, GLuint renderbuffer, GLsizei
      coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width,
    GLsizei height]
  glNamedRenderbufferStorageMultisampleEXT: [void, GLuint renderbuffer, GLsizei samples,
    GLenum internalformat, GLsizei width, GLsizei height]
  glProgramUniform1dEXT: [void, GLuint program, GLint location, GLdouble x]
  glProgramUniform1dvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform1fEXT: [void, GLuint program, GLint location, GLfloat v0]
  glProgramUniform1fvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform1iEXT: [void, GLuint program, GLint location, GLint v0]
  glProgramUniform1ivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform1uiEXT: [void, GLuint program, GLint location, GLuint v0]
  glProgramUniform1uivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniform2dEXT: [void, GLuint program, GLint location, GLdouble x, GLdouble
      y]
  glProgramUniform2dvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform2fEXT: [void, GLuint program, GLint location, GLfloat v0, GLfloat
      v1]
  glProgramUniform2fvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform2iEXT: [void, GLuint program, GLint location, GLint v0, GLint v1]
  glProgramUniform2ivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform2uiEXT: [void, GLuint program, GLint location, GLuint v0, GLuint
      v1]
  glProgramUniform2uivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniform3dEXT: [void, GLuint program, GLint location, GLdouble x, GLdouble
      y, GLdouble z]
  glProgramUniform3dvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform3fEXT: [void, GLuint program, GLint location, GLfloat v0, GLfloat
      v1, GLfloat v2]
  glProgramUniform3fvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform3iEXT: [void, GLuint program, GLint location, GLint v0, GLint v1,
    GLint v2]
  glProgramUniform3ivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform3uiEXT: [void, GLuint program, GLint location, GLuint v0, GLuint
      v1, GLuint v2]
  glProgramUniform3uivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniform4dEXT: [void, GLuint program, GLint location, GLdouble x, GLdouble
      y, GLdouble z, GLdouble w]
  glProgramUniform4dvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLdouble *value]
  glProgramUniform4fEXT: [void, GLuint program, GLint location, GLfloat v0, GLfloat
      v1, GLfloat v2, GLfloat v3]
  glProgramUniform4fvEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLfloat *value]
  glProgramUniform4iEXT: [void, GLuint program, GLint location, GLint v0, GLint v1,
    GLint v2, GLint v3]
  glProgramUniform4ivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLint *value]
  glProgramUniform4uiEXT: [void, GLuint program, GLint location, GLuint v0, GLuint
      v1, GLuint v2, GLuint v3]
  glProgramUniform4uivEXT: [void, GLuint program, GLint location, GLsizei count, const
      GLuint *value]
  glProgramUniformMatrix2dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix2fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix2x3dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix2x3fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix2x4dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix2x4fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix3dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix3fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix3x2dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix3x2fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix3x4dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix3x4fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix4dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix4fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix4x2dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix4x2fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glProgramUniformMatrix4x3dvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLdouble *value]
  glProgramUniformMatrix4x3fvEXT: [void, GLuint program, GLint location, GLsizei count,
    GLboolean transpose, const GLfloat *value]
  glPushClientAttribDefaultEXT: [void, GLbitfield mask]
  glTextureBufferEXT: [void, GLuint texture, GLenum target, GLenum internalformat,
    GLuint buffer]
  glTextureImage1DEXT: [void, GLuint texture, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels]
  glTextureImage2DEXT: [void, GLuint texture, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const
      GLvoid *pixels]
  glTextureImage3DEXT: [void, GLuint texture, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum
      type, const GLvoid *pixels]
  glTextureParameterIivEXT: [void, GLuint texture, GLenum target, GLenum pname, const
      GLint *params]
  glTextureParameterIuivEXT: [void, GLuint texture, GLenum target, GLenum pname, const
      GLuint *params]
  glTextureParameterfEXT: [void, GLuint texture, GLenum target, GLenum pname, GLfloat
      param]
  glTextureParameterfvEXT: [void, GLuint texture, GLenum target, GLenum pname, const
      GLfloat *params]
  glTextureParameteriEXT: [void, GLuint texture, GLenum target, GLenum pname, GLint
      param]
  glTextureParameterivEXT: [void, GLuint texture, GLenum target, GLenum pname, const
      GLint *params]
  glTextureRenderbufferEXT: [void, GLuint texture, GLenum target, GLuint renderbuffer]
  glTextureSubImage1DEXT: [void, GLuint texture, GLenum target, GLint level, GLint
      xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels]
  glTextureSubImage2DEXT: [void, GLuint texture, GLenum target, GLint level, GLint
      xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum
      type, const GLvoid *pixels]
  glTextureSubImage3DEXT: [void, GLuint texture, GLenum target, GLint level, GLint
      xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei
      depth, GLenum format, GLenum type, const GLvoid *pixels]
  glUnmapNamedBufferEXT: [GLboolean, GLuint buffer]
  glVertexArrayColorOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLint size, GLenum
      type, GLsizei stride, GLintptr offset]
  glVertexArrayEdgeFlagOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLsizei stride,
    GLintptr offset]
  glVertexArrayFogCoordOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLenum type,
    GLsizei stride, GLintptr offset]
  glVertexArrayIndexOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLenum type, GLsizei
      stride, GLintptr offset]
  glVertexArrayMultiTexCoordOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLenum
      texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset]
  glVertexArrayNormalOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLenum type, GLsizei
      stride, GLintptr offset]
  glVertexArraySecondaryColorOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLint
      size, GLenum type, GLsizei stride, GLintptr offset]
  glVertexArrayTexCoordOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLint size,
    GLenum type, GLsizei stride, GLintptr offset]
  glVertexArrayVertexAttribIOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLuint
      index, GLint size, GLenum type, GLsizei stride, GLintptr offset]
  glVertexArrayVertexAttribOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLuint index,
    GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset]
  glVertexArrayVertexOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLint size, GLenum
      type, GLsizei stride, GLintptr offset]
EXT_draw_buffers2:
  glColorMaskIndexedEXT: [void, GLuint index, GLboolean r, GLboolean g, GLboolean
      b, GLboolean a]
  glDisableIndexedEXT: [void, GLenum target, GLuint index]
  glEnableIndexedEXT: [void, GLenum target, GLuint index]
  glGetBooleanIndexedvEXT: [void, GLenum target, GLuint index, GLboolean *data]
  glGetIntegerIndexedvEXT: [void, GLenum target, GLuint index, GLint *data]
  glIsEnabledIndexedEXT: [GLboolean, GLenum target, GLuint index]
EXT_draw_instanced:
  glDrawArraysInstancedEXT: [void, GLenum mode, GLint start, GLsizei count, GLsizei
      primcount]
  glDrawElementsInstancedEXT: [void, GLenum mode, GLsizei count, GLenum type, const
      GLvoid *indices, GLsizei primcount]
EXT_draw_range_elements:
  glDrawRangeElementsEXT: [void, GLenum mode, GLuint start, GLuint end, GLsizei count,
    GLenum type, const GLvoid *indices]
EXT_fog_coord:
  glFogCoordPointerEXT: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
  glFogCoorddEXT: [void, GLdouble coord]
  glFogCoorddvEXT: [void, const GLdouble *coord]
  glFogCoordfEXT: [void, GLfloat coord]
  glFogCoordfvEXT: [void, const GLfloat *coord]
EXT_framebuffer_blit:
  glBlitFramebufferEXT: [void, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
    GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter]
EXT_framebuffer_multisample:
  glRenderbufferStorageMultisampleEXT: [void, GLenum target, GLsizei samples, GLenum
      internalformat, GLsizei width, GLsizei height]
EXT_framebuffer_object:
  glBindFramebufferEXT: [void, GLenum target, GLuint framebuffer]
  glBindRenderbufferEXT: [void, GLenum target, GLuint renderbuffer]
  glCheckFramebufferStatusEXT: [GLenum, GLenum target]
  glDeleteFramebuffersEXT: [void, GLsizei n, const GLuint *framebuffers]
  glDeleteRenderbuffersEXT: [void, GLsizei n, const GLuint *renderbuffers]
  glFramebufferRenderbufferEXT: [void, GLenum target, GLenum attachment, GLenum renderbuffertarget,
    GLuint renderbuffer]
  glFramebufferTexture1DEXT: [void, GLenum target, GLenum attachment, GLenum textarget,
    GLuint texture, GLint level]
  glFramebufferTexture2DEXT: [void, GLenum target, GLenum attachment, GLenum textarget,
    GLuint texture, GLint level]
  glFramebufferTexture3DEXT: [void, GLenum target, GLenum attachment, GLenum textarget,
    GLuint texture, GLint level, GLint zoffset]
  glGenFramebuffersEXT: [void, GLsizei n, GLuint *framebuffers]
  glGenRenderbuffersEXT: [void, GLsizei n, GLuint *renderbuffers]
  glGenerateMipmapEXT: [void, GLenum target]
  glGetFramebufferAttachmentParameterivEXT: [void, GLenum target, GLenum attachment,
    GLenum pname, GLint *params]
  glGetRenderbufferParameterivEXT: [void, GLenum target, GLenum pname, GLint *params]
  glIsFramebufferEXT: [GLboolean, GLuint framebuffer]
  glIsRenderbufferEXT: [GLboolean, GLuint renderbuffer]
  glRenderbufferStorageEXT: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLsizei height]
EXT_geometry_shader4:
  glProgramParameteriEXT: [void, GLuint program, GLenum pname, GLint value]
EXT_gpu_program_parameters:
  glProgramEnvParameters4fvEXT: [void, GLenum target, GLuint index, GLsizei count,
    const GLfloat *params]
  glProgramLocalParameters4fvEXT: [void, GLenum target, GLuint index, GLsizei count,
    const GLfloat *params]
EXT_gpu_shader4:
  glBindFragDataLocationEXT: [void, GLuint program, GLuint color, const GLchar *name]
  glGetFragDataLocationEXT: [GLint, GLuint program, const GLchar *name]
  glGetUniformuivEXT: [void, GLuint program, GLint location, GLuint *params]
  glUniform1uiEXT: [void, GLint location, GLuint v0]
  glUniform1uivEXT: [void, GLint location, GLsizei count, const GLuint *value]
  glUniform2uiEXT: [void, GLint location, GLuint v0, GLuint v1]
  glUniform2uivEXT: [void, GLint location, GLsizei count, const GLuint *value]
  glUniform3uiEXT: [void, GLint location, GLuint v0, GLuint v1, GLuint v2]
  glUniform3uivEXT: [void, GLint location, GLsizei count, const GLuint *value]
  glUniform4uiEXT: [void, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint
      v3]
  glUniform4uivEXT: [void, GLint location, GLsizei count, const GLuint *value]
EXT_histogram:
  glGetHistogramEXT: [void, GLenum target, GLboolean reset, GLenum format, GLenum
      type, GLvoid *values]
  glGetHistogramParameterfvEXT: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetHistogramParameterivEXT: [void, GLenum target, GLenum pname, GLint *params]
  glGetMinmaxEXT: [void, GLenum target, GLboolean reset, GLenum format, GLenum type,
    GLvoid *values]
  glGetMinmaxParameterfvEXT: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetMinmaxParameterivEXT: [void, GLenum target, GLenum pname, GLint *params]
  glHistogramEXT: [void, GLenum target, GLsizei width, GLenum internalformat, GLboolean
      sink]
  glMinmaxEXT: [void, GLenum target, GLenum internalformat, GLboolean sink]
  glResetHistogramEXT: [void, GLenum target]
  glResetMinmaxEXT: [void, GLenum target]
EXT_index_func:
  glIndexFuncEXT: [void, GLenum func, GLclampf ref]
EXT_index_material:
  glIndexMaterialEXT: [void, GLenum face, GLenum mode]
EXT_light_texture:
  glApplyTextureEXT: [void, GLenum mode]
  glTextureLightEXT: [void, GLenum pname]
  glTextureMaterialEXT: [void, GLenum face, GLenum mode]
EXT_multi_draw_arrays:
  glMultiDrawArraysEXT: [void, GLenum mode, const GLint *first, const GLsizei *count,
    GLsizei primcount]
  glMultiDrawElementsEXT: [void, GLenum mode, const GLsizei *count, GLenum type, const
      GLvoid *indices, GLsizei primcount]
EXT_multisample:
  glSampleMaskEXT: [void, GLclampf value, GLboolean invert]
  glSamplePatternEXT: [void, GLenum pattern]
EXT_paletted_texture:
  glColorTableEXT: [void, GLenum target, GLenum internalFormat, GLsizei width, GLenum
      format, GLenum type, const GLvoid *table]
  glGetColorTableEXT: [void, GLenum target, GLenum format, GLenum type, GLvoid *data]
  glGetColorTableParameterfvEXT: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetColorTableParameterivEXT: [void, GLenum target, GLenum pname, GLint *params]
EXT_pixel_transform:
  glGetPixelTransformParameterfvEXT: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetPixelTransformParameterivEXT: [void, GLenum target, GLenum pname, GLint *params]
  glPixelTransformParameterfEXT: [void, GLenum target, GLenum pname, GLfloat param]
  glPixelTransformParameterfvEXT: [void, GLenum target, GLenum pname, const GLfloat
      *params]
  glPixelTransformParameteriEXT: [void, GLenum target, GLenum pname, GLint param]
  glPixelTransformParameterivEXT: [void, GLenum target, GLenum pname, const GLint
      *params]
EXT_point_parameters:
  glPointParameterfEXT: [void, GLenum pname, GLfloat param]
  glPointParameterfvEXT: [void, GLenum pname, const GLfloat *params]
EXT_polygon_offset:
  glPolygonOffsetEXT: [void, GLfloat factor, GLfloat bias]
EXT_provoking_vertex:
  glProvokingVertexEXT: [void, GLenum mode]
EXT_secondary_color:
  glSecondaryColor3bEXT: [void, GLbyte red, GLbyte green, GLbyte blue]
  glSecondaryColor3bvEXT: [void, const GLbyte *v]
  glSecondaryColor3dEXT: [void, GLdouble red, GLdouble green, GLdouble blue]
  glSecondaryColor3dvEXT: [void, const GLdouble *v]
  glSecondaryColor3fEXT: [void, GLfloat red, GLfloat green, GLfloat blue]
  glSecondaryColor3fvEXT: [void, const GLfloat *v]
  glSecondaryColor3iEXT: [void, GLint red, GLint green, GLint blue]
  glSecondaryColor3ivEXT: [void, const GLint *v]
  glSecondaryColor3sEXT: [void, GLshort red, GLshort green, GLshort blue]
  glSecondaryColor3svEXT: [void, const GLshort *v]
  glSecondaryColor3ubEXT: [void, GLubyte red, GLubyte green, GLubyte blue]
  glSecondaryColor3ubvEXT: [void, const GLubyte *v]
  glSecondaryColor3uiEXT: [void, GLuint red, GLuint green, GLuint blue]
  glSecondaryColor3uivEXT: [void, const GLuint *v]
  glSecondaryColor3usEXT: [void, GLushort red, GLushort green, GLushort blue]
  glSecondaryColor3usvEXT: [void, const GLushort *v]
  glSecondaryColorPointerEXT: [void, GLint size, GLenum type, GLsizei stride, const
      GLvoid *pointer]
EXT_separate_shader_objects:
  glActiveProgramEXT: [void, GLuint program]
  glCreateShaderProgramEXT: [GLuint, GLenum type, const GLchar *string]
  glUseShaderProgramEXT: [void, GLenum type, GLuint program]
EXT_shader_image_load_store:
  glBindImageTextureEXT: [void, GLuint index, GLuint texture, GLint level, GLboolean
      layered, GLint layer, GLenum access, GLint format]
  glMemoryBarrierEXT: [void, GLbitfield barriers]
EXT_stencil_clear_tag:
  glStencilClearTagEXT: [void, GLsizei stencilTagBits, GLuint stencilClearTag]
EXT_stencil_two_side:
  glActiveStencilFaceEXT: [void, GLenum face]
EXT_subtexture:
  glTexSubImage1DEXT: [void, GLenum target, GLint level, GLint xoffset, GLsizei width,
    GLenum format, GLenum type, const GLvoid *pixels]
  glTexSubImage2DEXT: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels]
EXT_texture3D:
  glTexImage3DEXT: [void, GLenum target, GLint level, GLenum internalformat, GLsizei
      width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type,
    const GLvoid *pixels]
  glTexSubImage3DEXT: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum
      type, const GLvoid *pixels]
EXT_texture_buffer_object:
  glTexBufferEXT: [void, GLenum target, GLenum internalformat, GLuint buffer]
EXT_texture_integer:
  glClearColorIiEXT: [void, GLint red, GLint green, GLint blue, GLint alpha]
  glClearColorIuiEXT: [void, GLuint red, GLuint green, GLuint blue, GLuint alpha]
  glGetTexParameterIivEXT: [void, GLenum target, GLenum pname, GLint *params]
  glGetTexParameterIuivEXT: [void, GLenum target, GLenum pname, GLuint *params]
  glTexParameterIivEXT: [void, GLenum target, GLenum pname, const GLint *params]
  glTexParameterIuivEXT: [void, GLenum target, GLenum pname, const GLuint *params]
EXT_texture_object:
  glAreTexturesResidentEXT: [GLboolean, GLsizei n, const GLuint *textures, GLboolean
      *residences]
  glBindTextureEXT: [void, GLenum target, GLuint texture]
  glDeleteTexturesEXT: [void, GLsizei n, const GLuint *textures]
  glGenTexturesEXT: [void, GLsizei n, GLuint *textures]
  glIsTextureEXT: [GLboolean, GLuint texture]
  glPrioritizeTexturesEXT: [void, GLsizei n, const GLuint *textures, const GLclampf
      *priorities]
EXT_texture_perturb_normal:
  glTextureNormalEXT: [void, GLenum mode]
EXT_timer_query:
  glGetQueryObjecti64vEXT: [void, GLuint id, GLenum pname, GLint64EXT *params]
  glGetQueryObjectui64vEXT: [void, GLuint id, GLenum pname, GLuint64EXT *params]
EXT_transform_feedback:
  glBeginTransformFeedbackEXT: [void, GLenum primitiveMode]
  glBindBufferBaseEXT: [void, GLenum target, GLuint index, GLuint buffer]
  glBindBufferOffsetEXT: [void, GLenum target, GLuint index, GLuint buffer, GLintptr
      offset]
  glBindBufferRangeEXT: [void, GLenum target, GLuint index, GLuint buffer, GLintptr
      offset, GLsizeiptr size]
  glEndTransformFeedbackEXT: [void]
  glGetTransformFeedbackVaryingEXT: [void, GLuint program, GLuint index, GLsizei bufSize,
    GLsizei *length, GLsizei *size, GLenum *type, GLchar *name]
  glTransformFeedbackVaryingsEXT: [void, GLuint program, GLsizei count, const GLchar
      *varyings, GLenum bufferMode]
EXT_vertex_array:
  glArrayElementEXT: [void, GLint i]
  glColorPointerEXT: [void, GLint size, GLenum type, GLsizei stride, GLsizei count,
    const GLvoid *pointer]
  glDrawArraysEXT: [void, GLenum mode, GLint first, GLsizei count]
  glEdgeFlagPointerEXT: [void, GLsizei stride, GLsizei count, const GLboolean *pointer]
  glGetPointervEXT: [void, GLenum pname, GLvoid *params]
  glIndexPointerEXT: [void, GLenum type, GLsizei stride, GLsizei count, const GLvoid
      *pointer]
  glNormalPointerEXT: [void, GLenum type, GLsizei stride, GLsizei count, const GLvoid
      *pointer]
  glTexCoordPointerEXT: [void, GLint size, GLenum type, GLsizei stride, GLsizei count,
    const GLvoid *pointer]
  glVertexPointerEXT: [void, GLint size, GLenum type, GLsizei stride, GLsizei count,
    const GLvoid *pointer]
EXT_vertex_attrib_64bit:
  glGetVertexAttribLdvEXT: [void, GLuint index, GLenum pname, GLdouble *params]
  glVertexArrayVertexAttribLOffsetEXT: [void, GLuint vaobj, GLuint buffer, GLuint
      index, GLint size, GLenum type, GLsizei stride, GLintptr offset]
  glVertexAttribL1dEXT: [void, GLuint index, GLdouble x]
  glVertexAttribL1dvEXT: [void, GLuint index, const GLdouble *v]
  glVertexAttribL2dEXT: [void, GLuint index, GLdouble x, GLdouble y]
  glVertexAttribL2dvEXT: [void, GLuint index, const GLdouble *v]
  glVertexAttribL3dEXT: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z]
  glVertexAttribL3dvEXT: [void, GLuint index, const GLdouble *v]
  glVertexAttribL4dEXT: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glVertexAttribL4dvEXT: [void, GLuint index, const GLdouble *v]
  glVertexAttribLPointerEXT: [void, GLuint index, GLint size, GLenum type, GLsizei
      stride, const GLvoid *pointer]
EXT_vertex_shader:
  glBeginVertexShaderEXT: [void]
  glBindLightParameterEXT: [GLuint, GLenum light, GLenum value]
  glBindMaterialParameterEXT: [GLuint, GLenum face, GLenum value]
  glBindParameterEXT: [GLuint, GLenum value]
  glBindTexGenParameterEXT: [GLuint, GLenum unit, GLenum coord, GLenum value]
  glBindTextureUnitParameterEXT: [GLuint, GLenum unit, GLenum value]
  glBindVertexShaderEXT: [void, GLuint id]
  glDeleteVertexShaderEXT: [void, GLuint id]
  glDisableVariantClientStateEXT: [void, GLuint id]
  glEnableVariantClientStateEXT: [void, GLuint id]
  glEndVertexShaderEXT: [void]
  glExtractComponentEXT: [void, GLuint res, GLuint src, GLuint num]
  glGenSymbolsEXT: [GLuint, GLenum datatype, GLenum storagetype, GLenum range, GLuint
      components]
  glGenVertexShadersEXT: [GLuint, GLuint range]
  glGetInvariantBooleanvEXT: [void, GLuint id, GLenum value, GLboolean *data]
  glGetInvariantFloatvEXT: [void, GLuint id, GLenum value, GLfloat *data]
  glGetInvariantIntegervEXT: [void, GLuint id, GLenum value, GLint *data]
  glGetLocalConstantBooleanvEXT: [void, GLuint id, GLenum value, GLboolean *data]
  glGetLocalConstantFloatvEXT: [void, GLuint id, GLenum value, GLfloat *data]
  glGetLocalConstantIntegervEXT: [void, GLuint id, GLenum value, GLint *data]
  glGetVariantBooleanvEXT: [void, GLuint id, GLenum value, GLboolean *data]
  glGetVariantFloatvEXT: [void, GLuint id, GLenum value, GLfloat *data]
  glGetVariantIntegervEXT: [void, GLuint id, GLenum value, GLint *data]
  glGetVariantPointervEXT: [void, GLuint id, GLenum value, GLvoid *data]
  glInsertComponentEXT: [void, GLuint res, GLuint src, GLuint num]
  glIsVariantEnabledEXT: [GLboolean, GLuint id, GLenum cap]
  glSetInvariantEXT: [void, GLuint id, GLenum type, const GLvoid *addr]
  glSetLocalConstantEXT: [void, GLuint id, GLenum type, const GLvoid *addr]
  glShaderOp1EXT: [void, GLenum op, GLuint res, GLuint arg1]
  glShaderOp2EXT: [void, GLenum op, GLuint res, GLuint arg1, GLuint arg2]
  glShaderOp3EXT: [void, GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3]
  glSwizzleEXT: [void, GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ,
    GLenum outW]
  glVariantPointerEXT: [void, GLuint id, GLenum type, GLuint stride, const GLvoid
      *addr]
  glVariantbvEXT: [void, GLuint id, const GLbyte *addr]
  glVariantdvEXT: [void, GLuint id, const GLdouble *addr]
  glVariantfvEXT: [void, GLuint id, const GLfloat *addr]
  glVariantivEXT: [void, GLuint id, const GLint *addr]
  glVariantsvEXT: [void, GLuint id, const GLshort *addr]
  glVariantubvEXT: [void, GLuint id, const GLubyte *addr]
  glVariantuivEXT: [void, GLuint id, const GLuint *addr]
  glVariantusvEXT: [void, GLuint id, const GLushort *addr]
  glWriteMaskEXT: [void, GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ,
    GLenum outW]
EXT_vertex_weighting:
  glVertexWeightPointerEXT: [void, GLint size, GLenum type, GLsizei stride, const
      GLvoid *pointer]
  glVertexWeightfEXT: [void, GLfloat weight]
  glVertexWeightfvEXT: [void, const GLfloat *weight]
EXT_x11_sync_object:
  glImportSyncEXT: [GLsync, GLenum external_sync_type, GLintptr external_sync, GLbitfield
      flags]
GREMEDY_frame_terminator:
  glFrameTerminatorGREMEDY: [void]
GREMEDY_string_marker:
  glStringMarkerGREMEDY: [void, GLsizei len, const GLvoid *string]
HP_image_transform:
  glGetImageTransformParameterfvHP: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetImageTransformParameterivHP: [void, GLenum target, GLenum pname, GLint *params]
  glImageTransformParameterfHP: [void, GLenum target, GLenum pname, GLfloat param]
  glImageTransformParameterfvHP: [void, GLenum target, GLenum pname, const GLfloat
      *params]
  glImageTransformParameteriHP: [void, GLenum target, GLenum pname, GLint param]
  glImageTransformParameterivHP: [void, GLenum target, GLenum pname, const GLint *params]
IBM_multimode_draw_arrays:
  glMultiModeDrawArraysIBM: [void, const GLenum *mode, const GLint *first, const GLsizei
      *count, GLsizei primcount, GLint modestride]
  glMultiModeDrawElementsIBM: [void, const GLenum *mode, const GLsizei *count, GLenum
      type, GLvoid*const *indices, GLsizei primcount, GLint modestride]
IBM_static_data:
  glFlushStaticDataIBM: [void, GLenum target]
IBM_vertex_array_lists:
  glColorPointerListIBM: [void, GLint size, GLenum type, GLint stride, const GLvoid
      *pointer, GLint ptrstride]
  glEdgeFlagPointerListIBM: [void, GLint stride, const GLboolean *pointer, GLint ptrstride]
  glFogCoordPointerListIBM: [void, GLenum type, GLint stride, const GLvoid *pointer,
    GLint ptrstride]
  glIndexPointerListIBM: [void, GLenum type, GLint stride, const GLvoid *pointer,
    GLint ptrstride]
  glNormalPointerListIBM: [void, GLenum type, GLint stride, const GLvoid *pointer,
    GLint ptrstride]
  glSecondaryColorPointerListIBM: [void, GLint size, GLenum type, GLint stride, const
      GLvoid *pointer, GLint ptrstride]
  glTexCoordPointerListIBM: [void, GLint size, GLenum type, GLint stride, const GLvoid
      *pointer, GLint ptrstride]
  glVertexPointerListIBM: [void, GLint size, GLenum type, GLint stride, const GLvoid
      *pointer, GLint ptrstride]
INGR_blend_func_separate:
  glBlendFuncSeparateINGR: [void, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha,
    GLenum dfactorAlpha]
INTEL_map_texture:
  glMapTexture2DINTEL: [GLvoid *, GLuint texture, GLint level, GLbitfield access,
    const GLint *stride, const GLenum *layout]
  glSyncTextureINTEL: [void, GLuint texture]
  glUnmapTexture2DINTEL: [void, GLuint texture, GLint level]
INTEL_parallel_arrays:
  glColorPointervINTEL: [void, GLint size, GLenum type, const GLvoid *pointer]
  glNormalPointervINTEL: [void, GLenum type, const GLvoid *pointer]
  glTexCoordPointervINTEL: [void, GLint size, GLenum type, const GLvoid *pointer]
  glVertexPointervINTEL: [void, GLint size, GLenum type, const GLvoid *pointer]
KHR_debug:
  glDebugMessageCallback: [void, GLDEBUGPROC callback, const void *userParam]
  glDebugMessageControl: [void, GLenum source, GLenum type, GLenum severity, GLsizei
      count, const GLuint *ids, GLboolean enabled]
  glDebugMessageInsert: [void, GLenum source, GLenum type, GLuint id, GLenum severity,
    GLsizei length, const GLchar *buf]
  glGetDebugMessageLog: [GLuint, GLuint count, GLsizei bufsize, GLenum *sources, GLenum
      *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog]
  glGetObjectLabel: [void, GLenum identifier, GLuint name, GLsizei bufSize, GLsizei
      *length, GLchar *label]
  glGetObjectPtrLabel: [void, const void *ptr, GLsizei bufSize, GLsizei *length, GLchar
      *label]
  glObjectLabel: [void, GLenum identifier, GLuint name, GLsizei length, const GLchar
      *label]
  glObjectPtrLabel: [void, const void *ptr, GLsizei length, const GLchar *label]
  glPopDebugGroup: [void]
  glPushDebugGroup: [void, GLenum source, GLuint id, GLsizei length, const GLchar
      *message]
MESA_resize_buffers:
  glResizeBuffersMESA: [void]
MESA_window_pos:
  glWindowPos2dMESA: [void, GLdouble x, GLdouble y]
  glWindowPos2dvMESA: [void, const GLdouble *v]
  glWindowPos2fMESA: [void, GLfloat x, GLfloat y]
  glWindowPos2fvMESA: [void, const GLfloat *v]
  glWindowPos2iMESA: [void, GLint x, GLint y]
  glWindowPos2ivMESA: [void, const GLint *v]
  glWindowPos2sMESA: [void, GLshort x, GLshort y]
  glWindowPos2svMESA: [void, const GLshort *v]
  glWindowPos3dMESA: [void, GLdouble x, GLdouble y, GLdouble z]
  glWindowPos3dvMESA: [void, const GLdouble *v]
  glWindowPos3fMESA: [void, GLfloat x, GLfloat y, GLfloat z]
  glWindowPos3fvMESA: [void, const GLfloat *v]
  glWindowPos3iMESA: [void, GLint x, GLint y, GLint z]
  glWindowPos3ivMESA: [void, const GLint *v]
  glWindowPos3sMESA: [void, GLshort x, GLshort y, GLshort z]
  glWindowPos3svMESA: [void, const GLshort *v]
  glWindowPos4dMESA: [void, GLdouble x, GLdouble y, GLdouble z, GLdouble w]
  glWindowPos4dvMESA: [void, const GLdouble *v]
  glWindowPos4fMESA: [void, GLfloat x, GLfloat y, GLfloat z, GLfloat w]
  glWindowPos4fvMESA: [void, const GLfloat *v]
  glWindowPos4iMESA: [void, GLint x, GLint y, GLint z, GLint w]
  glWindowPos4ivMESA: [void, const GLint *v]
  glWindowPos4sMESA: [void, GLshort x, GLshort y, GLshort z, GLshort w]
  glWindowPos4svMESA: [void, const GLshort *v]
NVX_conditional_render:
  glBeginConditionalRenderNVX: [void, GLuint id]
  glEndConditionalRenderNVX: [void]
NV_bindless_texture:
  glGetImageHandleNV: [GLuint64, GLuint texture, GLint level, GLboolean layered, GLint
      layer, GLenum format]
  glGetTextureHandleNV: [GLuint64, GLuint texture]
  glGetTextureSamplerHandleNV: [GLuint64, GLuint texture, GLuint sampler]
  glIsImageHandleResidentNV: [GLboolean, GLuint64 handle]
  glIsTextureHandleResidentNV: [GLboolean, GLuint64 handle]
  glMakeImageHandleNonResidentNV: [void, GLuint64 handle]
  glMakeImageHandleResidentNV: [void, GLuint64 handle, GLenum access]
  glMakeTextureHandleNonResidentNV: [void, GLuint64 handle]
  glMakeTextureHandleResidentNV: [void, GLuint64 handle]
  glProgramUniformHandleui64NV: [void, GLuint program, GLint location, GLuint64 value]
  glProgramUniformHandleui64vNV: [void, GLuint program, GLint location, GLsizei count,
    const GLuint64 *values]
  glUniformHandleui64NV: [void, GLint location, GLuint64 value]
  glUniformHandleui64vNV: [void, GLint location, GLsizei count, const GLuint64 *value]
NV_conditional_render:
  glBeginConditionalRenderNV: [void, GLuint id, GLenum mode]
  glEndConditionalRenderNV: [void]
NV_copy_image:
  glCopyImageSubDataNV: [void, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint
      srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel,
    GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth]
NV_depth_buffer_float:
  glClearDepthdNV: [void, GLdouble depth]
  glDepthBoundsdNV: [void, GLdouble zmin, GLdouble zmax]
  glDepthRangedNV: [void, GLdouble zNear, GLdouble zFar]
NV_draw_texture:
  glDrawTextureNV: [void, GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0,
    GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat
      t1]
NV_evaluators:
  glEvalMapsNV: [void, GLenum target, GLenum mode]
  glGetMapAttribParameterfvNV: [void, GLenum target, GLuint index, GLenum pname, GLfloat
      *params]
  glGetMapAttribParameterivNV: [void, GLenum target, GLuint index, GLenum pname, GLint
      *params]
  glGetMapControlPointsNV: [void, GLenum target, GLuint index, GLenum type, GLsizei
      ustride, GLsizei vstride, GLboolean packed, GLvoid *points]
  glGetMapParameterfvNV: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetMapParameterivNV: [void, GLenum target, GLenum pname, GLint *params]
  glMapControlPointsNV: [void, GLenum target, GLuint index, GLenum type, GLsizei ustride,
    GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points]
  glMapParameterfvNV: [void, GLenum target, GLenum pname, const GLfloat *params]
  glMapParameterivNV: [void, GLenum target, GLenum pname, const GLint *params]
NV_explicit_multisample:
  glGetMultisamplefvNV: [void, GLenum pname, GLuint index, GLfloat *val]
  glSampleMaskIndexedNV: [void, GLuint index, GLbitfield mask]
  glTexRenderbufferNV: [void, GLenum target, GLuint renderbuffer]
NV_fence:
  glDeleteFencesNV: [void, GLsizei n, const GLuint *fences]
  glFinishFenceNV: [void, GLuint fence]
  glGenFencesNV: [void, GLsizei n, GLuint *fences]
  glGetFenceivNV: [void, GLuint fence, GLenum pname, GLint *params]
  glIsFenceNV: [GLboolean, GLuint fence]
  glSetFenceNV: [void, GLuint fence, GLenum condition]
  glTestFenceNV: [GLboolean, GLuint fence]
NV_fragment_program:
  glGetProgramNamedParameterdvNV: [void, GLuint id, GLsizei len, const GLubyte *name,
    GLdouble *params]
  glGetProgramNamedParameterfvNV: [void, GLuint id, GLsizei len, const GLubyte *name,
    GLfloat *params]
  glProgramNamedParameter4dNV: [void, GLuint id, GLsizei len, const GLubyte *name,
    GLdouble x, GLdouble y, GLdouble z, GLdouble w]
  glProgramNamedParameter4dvNV: [void, GLuint id, GLsizei len, const GLubyte *name,
    const GLdouble *v]
  glProgramNamedParameter4fNV: [void, GLuint id, GLsizei len, const GLubyte *name,
    GLfloat x, GLfloat y, GLfloat z, GLfloat w]
  glProgramNamedParameter4fvNV: [void, GLuint id, GLsizei len, const GLubyte *name,
    const GLfloat *v]
NV_framebuffer_multisample_coverage:
  glRenderbufferStorageMultisampleCoverageNV: [void, GLenum target, GLsizei coverageSamples,
    GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height]
NV_geometry_program4:
  glFramebufferTextureEXT: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level]
  glFramebufferTextureFaceEXT: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level, GLenum face]
  glFramebufferTextureLayerEXT: [void, GLenum target, GLenum attachment, GLuint texture,
    GLint level, GLint layer]
  glProgramVertexLimitNV: [void, GLenum target, GLint limit]
NV_gpu_program4:
  glGetProgramEnvParameterIivNV: [void, GLenum target, GLuint index, GLint *params]
  glGetProgramEnvParameterIuivNV: [void, GLenum target, GLuint index, GLuint *params]
  glGetProgramLocalParameterIivNV: [void, GLenum target, GLuint index, GLint *params]
  glGetProgramLocalParameterIuivNV: [void, GLenum target, GLuint index, GLuint *params]
  glProgramEnvParameterI4iNV: [void, GLenum target, GLuint index, GLint x, GLint y,
    GLint z, GLint w]
  glProgramEnvParameterI4ivNV: [void, GLenum target, GLuint index, const GLint *params]
  glProgramEnvParameterI4uiNV: [void, GLenum target, GLuint index, GLuint x, GLuint
      y, GLuint z, GLuint w]
  glProgramEnvParameterI4uivNV: [void, GLenum target, GLuint index, const GLuint *params]
  glProgramEnvParametersI4ivNV: [void, GLenum target, GLuint index, GLsizei count,
    const GLint *params]
  glProgramEnvParametersI4uivNV: [void, GLenum target, GLuint index, GLsizei count,
    const GLuint *params]
  glProgramLocalParameterI4iNV: [void, GLenum target, GLuint index, GLint x, GLint
      y, GLint z, GLint w]
  glProgramLocalParameterI4ivNV: [void, GLenum target, GLuint index, const GLint *params]
  glProgramLocalParameterI4uiNV: [void, GLenum target, GLuint index, GLuint x, GLuint
      y, GLuint z, GLuint w]
  glProgramLocalParameterI4uivNV: [void, GLenum target, GLuint index, const GLuint
      *params]
  glProgramLocalParametersI4ivNV: [void, GLenum target, GLuint index, GLsizei count,
    const GLint *params]
  glProgramLocalParametersI4uivNV: [void, GLenum target, GLuint index, GLsizei count,
    const GLuint *params]
NV_gpu_program5:
  glGetProgramSubroutineParameteruivNV: [void, GLenum target, GLuint index, GLuint
      *param]
  glProgramSubroutineParametersuivNV: [void, GLenum target, GLsizei count, const GLuint
      *params]
NV_gpu_shader5:
  glGetUniformi64vNV: [void, GLuint program, GLint location, GLint64EXT *params]
  glProgramUniform1i64NV: [void, GLuint program, GLint location, GLint64EXT x]
  glProgramUniform1i64vNV: [void, GLuint program, GLint location, GLsizei count, const
      GLint64EXT *value]
  glProgramUniform1ui64NV: [void, GLuint program, GLint location, GLuint64EXT x]
  glProgramUniform1ui64vNV: [void, GLuint program, GLint location, GLsizei count,
    const GLuint64EXT *value]
  glProgramUniform2i64NV: [void, GLuint program, GLint location, GLint64EXT x, GLint64EXT
      y]
  glProgramUniform2i64vNV: [void, GLuint program, GLint location, GLsizei count, const
      GLint64EXT *value]
  glProgramUniform2ui64NV: [void, GLuint program, GLint location, GLuint64EXT x, GLuint64EXT
      y]
  glProgramUniform2ui64vNV: [void, GLuint program, GLint location, GLsizei count,
    const GLuint64EXT *value]
  glProgramUniform3i64NV: [void, GLuint program, GLint location, GLint64EXT x, GLint64EXT
      y, GLint64EXT z]
  glProgramUniform3i64vNV: [void, GLuint program, GLint location, GLsizei count, const
      GLint64EXT *value]
  glProgramUniform3ui64NV: [void, GLuint program, GLint location, GLuint64EXT x, GLuint64EXT
      y, GLuint64EXT z]
  glProgramUniform3ui64vNV: [void, GLuint program, GLint location, GLsizei count,
    const GLuint64EXT *value]
  glProgramUniform4i64NV: [void, GLuint program, GLint location, GLint64EXT x, GLint64EXT
      y, GLint64EXT z, GLint64EXT w]
  glProgramUniform4i64vNV: [void, GLuint program, GLint location, GLsizei count, const
      GLint64EXT *value]
  glProgramUniform4ui64NV: [void, GLuint program, GLint location, GLuint64EXT x, GLuint64EXT
      y, GLuint64EXT z, GLuint64EXT w]
  glProgramUniform4ui64vNV: [void, GLuint program, GLint location, GLsizei count,
    const GLuint64EXT *value]
  glUniform1i64NV: [void, GLint location, GLint64EXT x]
  glUniform1i64vNV: [void, GLint location, GLsizei count, const GLint64EXT *value]
  glUniform1ui64NV: [void, GLint location, GLuint64EXT x]
  glUniform1ui64vNV: [void, GLint location, GLsizei count, const GLuint64EXT *value]
  glUniform2i64NV: [void, GLint location, GLint64EXT x, GLint64EXT y]
  glUniform2i64vNV: [void, GLint location, GLsizei count, const GLint64EXT *value]
  glUniform2ui64NV: [void, GLint location, GLuint64EXT x, GLuint64EXT y]
  glUniform2ui64vNV: [void, GLint location, GLsizei count, const GLuint64EXT *value]
  glUniform3i64NV: [void, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z]
  glUniform3i64vNV: [void, GLint location, GLsizei count, const GLint64EXT *value]
  glUniform3ui64NV: [void, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT
      z]
  glUniform3ui64vNV: [void, GLint location, GLsizei count, const GLuint64EXT *value]
  glUniform4i64NV: [void, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z,
    GLint64EXT w]
  glUniform4i64vNV: [void, GLint location, GLsizei count, const GLint64EXT *value]
  glUniform4ui64NV: [void, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT
      z, GLuint64EXT w]
  glUniform4ui64vNV: [void, GLint location, GLsizei count, const GLuint64EXT *value]
NV_half_float:
  glColor3hNV: [void, GLhalfNV red, GLhalfNV green, GLhalfNV blue]
  glColor3hvNV: [void, const GLhalfNV *v]
  glColor4hNV: [void, GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha]
  glColor4hvNV: [void, const GLhalfNV *v]
  glFogCoordhNV: [void, GLhalfNV fog]
  glFogCoordhvNV: [void, const GLhalfNV *fog]
  glMultiTexCoord1hNV: [void, GLenum target, GLhalfNV s]
  glMultiTexCoord1hvNV: [void, GLenum target, const GLhalfNV *v]
  glMultiTexCoord2hNV: [void, GLenum target, GLhalfNV s, GLhalfNV t]
  glMultiTexCoord2hvNV: [void, GLenum target, const GLhalfNV *v]
  glMultiTexCoord3hNV: [void, GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r]
  glMultiTexCoord3hvNV: [void, GLenum target, const GLhalfNV *v]
  glMultiTexCoord4hNV: [void, GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV
      q]
  glMultiTexCoord4hvNV: [void, GLenum target, const GLhalfNV *v]
  glNormal3hNV: [void, GLhalfNV nx, GLhalfNV ny, GLhalfNV nz]
  glNormal3hvNV: [void, const GLhalfNV *v]
  glSecondaryColor3hNV: [void, GLhalfNV red, GLhalfNV green, GLhalfNV blue]
  glSecondaryColor3hvNV: [void, const GLhalfNV *v]
  glTexCoord1hNV: [void, GLhalfNV s]
  glTexCoord1hvNV: [void, const GLhalfNV *v]
  glTexCoord2hNV: [void, GLhalfNV s, GLhalfNV t]
  glTexCoord2hvNV: [void, const GLhalfNV *v]
  glTexCoord3hNV: [void, GLhalfNV s, GLhalfNV t, GLhalfNV r]
  glTexCoord3hvNV: [void, const GLhalfNV *v]
  glTexCoord4hNV: [void, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q]
  glTexCoord4hvNV: [void, const GLhalfNV *v]
  glVertex2hNV: [void, GLhalfNV x, GLhalfNV y]
  glVertex2hvNV: [void, const GLhalfNV *v]
  glVertex3hNV: [void, GLhalfNV x, GLhalfNV y, GLhalfNV z]
  glVertex3hvNV: [void, const GLhalfNV *v]
  glVertex4hNV: [void, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w]
  glVertex4hvNV: [void, const GLhalfNV *v]
  glVertexAttrib1hNV: [void, GLuint index, GLhalfNV x]
  glVertexAttrib1hvNV: [void, GLuint index, const GLhalfNV *v]
  glVertexAttrib2hNV: [void, GLuint index, GLhalfNV x, GLhalfNV y]
  glVertexAttrib2hvNV: [void, GLuint index, const GLhalfNV *v]
  glVertexAttrib3hNV: [void, GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z]
  glVertexAttrib3hvNV: [void, GLuint index, const GLhalfNV *v]
  glVertexAttrib4hNV: [void, GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV
      w]
  glVertexAttrib4hvNV: [void, GLuint index, const GLhalfNV *v]
  glVertexAttribs1hvNV: [void, GLuint index, GLsizei n, const GLhalfNV *v]
  glVertexAttribs2hvNV: [void, GLuint index, GLsizei n, const GLhalfNV *v]
  glVertexAttribs3hvNV: [void, GLuint index, GLsizei n, const GLhalfNV *v]
  glVertexAttribs4hvNV: [void, GLuint index, GLsizei n, const GLhalfNV *v]
  glVertexWeighthNV: [void, GLhalfNV weight]
  glVertexWeighthvNV: [void, const GLhalfNV *weight]
NV_occlusion_query:
  glBeginOcclusionQueryNV: [void, GLuint id]
  glDeleteOcclusionQueriesNV: [void, GLsizei n, const GLuint *ids]
  glEndOcclusionQueryNV: [void]
  glGenOcclusionQueriesNV: [void, GLsizei n, GLuint *ids]
  glGetOcclusionQueryivNV: [void, GLuint id, GLenum pname, GLint *params]
  glGetOcclusionQueryuivNV: [void, GLuint id, GLenum pname, GLuint *params]
  glIsOcclusionQueryNV: [GLboolean, GLuint id]
NV_parameter_buffer_object:
  glProgramBufferParametersIivNV: [void, GLenum target, GLuint bindingIndex, GLuint
      wordIndex, GLsizei count, const GLint *params]
  glProgramBufferParametersIuivNV: [void, GLenum target, GLuint bindingIndex, GLuint
      wordIndex, GLsizei count, const GLuint *params]
  glProgramBufferParametersfvNV: [void, GLenum target, GLuint bindingIndex, GLuint
      wordIndex, GLsizei count, const GLfloat *params]
NV_path_rendering:
  glCopyPathNV: [void, GLuint resultPath, GLuint srcPath]
  glCoverFillPathInstancedNV: [void, GLsizei numPaths, GLenum pathNameType, const
      GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const
      GLfloat *transformValues]
  glCoverFillPathNV: [void, GLuint path, GLenum coverMode]
  glCoverStrokePathInstancedNV: [void, GLsizei numPaths, GLenum pathNameType, const
      GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const
      GLfloat *transformValues]
  glCoverStrokePathNV: [void, GLuint path, GLenum coverMode]
  glDeletePathsNV: [void, GLuint path, GLsizei range]
  glGenPathsNV: [GLuint, GLsizei range]
  glGetPathColorGenfvNV: [void, GLenum color, GLenum pname, GLfloat *value]
  glGetPathColorGenivNV: [void, GLenum color, GLenum pname, GLint *value]
  glGetPathCommandsNV: [void, GLuint path, GLubyte *commands]
  glGetPathCoordsNV: [void, GLuint path, GLfloat *coords]
  glGetPathDashArrayNV: [void, GLuint path, GLfloat *dashArray]
  glGetPathLengthNV: [GLfloat, GLuint path, GLsizei startSegment, GLsizei numSegments]
  glGetPathMetricRangeNV: [void, GLbitfield metricQueryMask, GLuint firstPathName,
    GLsizei numPaths, GLsizei stride, GLfloat *metrics]
  glGetPathMetricsNV: [void, GLbitfield metricQueryMask, GLsizei numPaths, GLenum
      pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat
      *metrics]
  glGetPathParameterfvNV: [void, GLuint path, GLenum pname, GLfloat *value]
  glGetPathParameterivNV: [void, GLuint path, GLenum pname, GLint *value]
  glGetPathSpacingNV: [void, GLenum pathListMode, GLsizei numPaths, GLenum pathNameType,
    const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale,
    GLenum transformType, GLfloat *returnedSpacing]
  glGetPathTexGenfvNV: [void, GLenum texCoordSet, GLenum pname, GLfloat *value]
  glGetPathTexGenivNV: [void, GLenum texCoordSet, GLenum pname, GLint *value]
  glInterpolatePathsNV: [void, GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat
      weight]
  glIsPathNV: [GLboolean, GLuint path]
  glIsPointInFillPathNV: [GLboolean, GLuint path, GLuint mask, GLfloat x, GLfloat
      y]
  glIsPointInStrokePathNV: [GLboolean, GLuint path, GLfloat x, GLfloat y]
  glPathColorGenNV: [void, GLenum color, GLenum genMode, GLenum colorFormat, const
      GLfloat *coeffs]
  glPathCommandsNV: [void, GLuint path, GLsizei numCommands, const GLubyte *commands,
    GLsizei numCoords, GLenum coordType, const GLvoid *coords]
  glPathCoordsNV: [void, GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid
      *coords]
  glPathCoverDepthFuncNV: [void, GLenum func]
  glPathDashArrayNV: [void, GLuint path, GLsizei dashCount, const GLfloat *dashArray]
  glPathFogGenNV: [void, GLenum genMode]
  glPathGlyphRangeNV: [void, GLuint firstPathName, GLenum fontTarget, const GLvoid
      *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum
      handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale]
  glPathGlyphsNV: [void, GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName,
    GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes,
    GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale]
  glPathParameterfNV: [void, GLuint path, GLenum pname, GLfloat value]
  glPathParameterfvNV: [void, GLuint path, GLenum pname, const GLfloat *value]
  glPathParameteriNV: [void, GLuint path, GLenum pname, GLint value]
  glPathParameterivNV: [void, GLuint path, GLenum pname, const GLint *value]
  glPathStencilDepthOffsetNV: [void, GLfloat factor, GLfloat units]
  glPathStencilFuncNV: [void, GLenum func, GLint ref, GLuint mask]
  glPathStringNV: [void, GLuint path, GLenum format, GLsizei length, const GLvoid
      *pathString]
  glPathSubCommandsNV: [void, GLuint path, GLsizei commandStart, GLsizei commandsToDelete,
    GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType,
    const GLvoid *coords]
  glPathSubCoordsNV: [void, GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum
      coordType, const GLvoid *coords]
  glPathTexGenNV: [void, GLenum texCoordSet, GLenum genMode, GLint components, const
      GLfloat *coeffs]
  glPointAlongPathNV: [GLboolean, GLuint path, GLsizei startSegment, GLsizei numSegments,
    GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY]
  glStencilFillPathInstancedNV: [void, GLsizei numPaths, GLenum pathNameType, const
      GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType,
    const GLfloat *transformValues]
  glStencilFillPathNV: [void, GLuint path, GLenum fillMode, GLuint mask]
  glStencilStrokePathInstancedNV: [void, GLsizei numPaths, GLenum pathNameType, const
      GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType,
    const GLfloat *transformValues]
  glStencilStrokePathNV: [void, GLuint path, GLint reference, GLuint mask]
  glTransformPathNV: [void, GLuint resultPath, GLuint srcPath, GLenum transformType,
    const GLfloat *transformValues]
  glWeightPathsNV: [void, GLuint resultPath, GLsizei numPaths, const GLuint *paths,
    const GLfloat *weights]
NV_pixel_data_range:
  glFlushPixelDataRangeNV: [void, GLenum target]
  glPixelDataRangeNV: [void, GLenum target, GLsizei length, const GLvoid *pointer]
NV_point_sprite:
  glPointParameteriNV: [void, GLenum pname, GLint param]
  glPointParameterivNV: [void, GLenum pname, const GLint *params]
NV_present_video:
  glGetVideoi64vNV: [void, GLuint video_slot, GLenum pname, GLint64EXT *params]
  glGetVideoivNV: [void, GLuint video_slot, GLenum pname, GLint *params]
  glGetVideoui64vNV: [void, GLuint video_slot, GLenum pname, GLuint64EXT *params]
  glGetVideouivNV: [void, GLuint video_slot, GLenum pname, GLuint *params]
  glPresentFrameDualFillNV: [void, GLuint video_slot, GLuint64EXT minPresentTime,
    GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0,
    GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum
      target3, GLuint fill3]
  glPresentFrameKeyedNV: [void, GLuint video_slot, GLuint64EXT minPresentTime, GLuint
      beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint
      fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1]
NV_primitive_restart:
  glPrimitiveRestartIndexNV: [void, GLuint index]
  glPrimitiveRestartNV: [void]
NV_register_combiners:
  glCombinerInputNV: [void, GLenum stage, GLenum portion, GLenum variable, GLenum
      input, GLenum mapping, GLenum componentUsage]
  glCombinerOutputNV: [void, GLenum stage, GLenum portion, GLenum abOutput, GLenum
      cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct,
    GLboolean cdDotProduct, GLboolean muxSum]
  glCombinerParameterfNV: [void, GLenum pname, GLfloat param]
  glCombinerParameterfvNV: [void, GLenum pname, const GLfloat *params]
  glCombinerParameteriNV: [void, GLenum pname, GLint param]
  glCombinerParameterivNV: [void, GLenum pname, const GLint *params]
  glFinalCombinerInputNV: [void, GLenum variable, GLenum input, GLenum mapping, GLenum
      componentUsage]
  glGetCombinerInputParameterfvNV: [void, GLenum stage, GLenum portion, GLenum variable,
    GLenum pname, GLfloat *params]
  glGetCombinerInputParameterivNV: [void, GLenum stage, GLenum portion, GLenum variable,
    GLenum pname, GLint *params]
  glGetCombinerOutputParameterfvNV: [void, GLenum stage, GLenum portion, GLenum pname,
    GLfloat *params]
  glGetCombinerOutputParameterivNV: [void, GLenum stage, GLenum portion, GLenum pname,
    GLint *params]
  glGetFinalCombinerInputParameterfvNV: [void, GLenum variable, GLenum pname, GLfloat
      *params]
  glGetFinalCombinerInputParameterivNV: [void, GLenum variable, GLenum pname, GLint
      *params]
NV_register_combiners2:
  glCombinerStageParameterfvNV: [void, GLenum stage, GLenum pname, const GLfloat *params]
  glGetCombinerStageParameterfvNV: [void, GLenum stage, GLenum pname, GLfloat *params]
NV_shader_buffer_load:
  glGetBufferParameterui64vNV: [void, GLenum target, GLenum pname, GLuint64EXT *params]
  glGetIntegerui64vNV: [void, GLenum value, GLuint64EXT *result]
  glGetNamedBufferParameterui64vNV: [void, GLuint buffer, GLenum pname, GLuint64EXT
      *params]
  glGetUniformui64vNV: [void, GLuint program, GLint location, GLuint64EXT *params]
  glIsBufferResidentNV: [GLboolean, GLenum target]
  glIsNamedBufferResidentNV: [GLboolean, GLuint buffer]
  glMakeBufferNonResidentNV: [void, GLenum target]
  glMakeBufferResidentNV: [void, GLenum target, GLenum access]
  glMakeNamedBufferNonResidentNV: [void, GLuint buffer]
  glMakeNamedBufferResidentNV: [void, GLuint buffer, GLenum access]
  glProgramUniformui64NV: [void, GLuint program, GLint location, GLuint64EXT value]
  glProgramUniformui64vNV: [void, GLuint program, GLint location, GLsizei count, const
      GLuint64EXT *value]
  glUniformui64NV: [void, GLint location, GLuint64EXT value]
  glUniformui64vNV: [void, GLint location, GLsizei count, const GLuint64EXT *value]
NV_texture_barrier:
  glTextureBarrierNV: [void]
NV_texture_multisample:
  glTexImage2DMultisampleCoverageNV: [void, GLenum target, GLsizei coverageSamples,
    GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean
      fixedSampleLocations]
  glTexImage3DMultisampleCoverageNV: [void, GLenum target, GLsizei coverageSamples,
    GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei
      depth, GLboolean fixedSampleLocations]
  glTextureImage2DMultisampleCoverageNV: [void, GLuint texture, GLenum target, GLsizei
      coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width,
    GLsizei height, GLboolean fixedSampleLocations]
  glTextureImage2DMultisampleNV: [void, GLuint texture, GLenum target, GLsizei samples,
    GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations]
  glTextureImage3DMultisampleCoverageNV: [void, GLuint texture, GLenum target, GLsizei
      coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width,
    GLsizei height, GLsizei depth, GLboolean fixedSampleLocations]
  glTextureImage3DMultisampleNV: [void, GLuint texture, GLenum target, GLsizei samples,
    GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean
      fixedSampleLocations]
NV_transform_feedback:
  glActiveVaryingNV: [void, GLuint program, const GLchar *name]
  glBeginTransformFeedbackNV: [void, GLenum primitiveMode]
  glBindBufferBaseNV: [void, GLenum target, GLuint index, GLuint buffer]
  glBindBufferOffsetNV: [void, GLenum target, GLuint index, GLuint buffer, GLintptr
      offset]
  glBindBufferRangeNV: [void, GLenum target, GLuint index, GLuint buffer, GLintptr
      offset, GLsizeiptr size]
  glEndTransformFeedbackNV: [void]
  glGetActiveVaryingNV: [void, GLuint program, GLuint index, GLsizei bufSize, GLsizei
      *length, GLsizei *size, GLenum *type, GLchar *name]
  glGetTransformFeedbackVaryingNV: [void, GLuint program, GLuint index, GLint *location]
  glGetVaryingLocationNV: [GLint, GLuint program, const GLchar *name]
  glTransformFeedbackAttribsNV: [void, GLsizei count, const GLint *attribs, GLenum
      bufferMode]
  glTransformFeedbackStreamAttribsNV: [void, GLsizei count, const GLint *attribs,
    GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode]
  glTransformFeedbackVaryingsNV: [void, GLuint program, GLsizei count, const GLint
      *locations, GLenum bufferMode]
NV_transform_feedback2:
  glBindTransformFeedbackNV: [void, GLenum target, GLuint id]
  glDeleteTransformFeedbacksNV: [void, GLsizei n, const GLuint *ids]
  glDrawTransformFeedbackNV: [void, GLenum mode, GLuint id]
  glGenTransformFeedbacksNV: [void, GLsizei n, GLuint *ids]
  glIsTransformFeedbackNV: [GLboolean, GLuint id]
  glPauseTransformFeedbackNV: [void]
  glResumeTransformFeedbackNV: [void]
NV_vdpau_interop:
  glVDPAUFiniNV: [void]
  glVDPAUGetSurfaceivNV: [void, GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize,
    GLsizei *length, GLint *values]
  glVDPAUInitNV: [void, const GLvoid *vdpDevice, const GLvoid *getProcAddress]
  glVDPAUIsSurfaceNV: [void, GLvdpauSurfaceNV surface]
  glVDPAUMapSurfacesNV: [void, GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces]
  glVDPAURegisterOutputSurfaceNV: [GLvdpauSurfaceNV, GLvoid *vdpSurface, GLenum target,
    GLsizei numTextureNames, const GLuint *textureNames]
  glVDPAURegisterVideoSurfaceNV: [GLvdpauSurfaceNV, const GLvoid *vdpSurface, GLenum
      target, GLsizei numTextureNames, const GLuint *textureNames]
  glVDPAUSurfaceAccessNV: [void, GLvdpauSurfaceNV surface, GLenum access]
  glVDPAUUnmapSurfacesNV: [void, GLsizei numSurface, const GLvdpauSurfaceNV *surfaces]
  glVDPAUUnregisterSurfaceNV: [void, GLvdpauSurfaceNV surface]
NV_vertex_array_range:
  glFlushVertexArrayRangeNV: [void]
  glVertexArrayRangeNV: [void, GLsizei length, const GLvoid *pointer]
NV_vertex_attrib_integer_64bit:
  glGetVertexAttribLi64vNV: [void, GLuint index, GLenum pname, GLint64EXT *params]
  glGetVertexAttribLui64vNV: [void, GLuint index, GLenum pname, GLuint64EXT *params]
  glVertexAttribL1i64NV: [void, GLuint index, GLint64EXT x]
  glVertexAttribL1i64vNV: [void, GLuint index, const GLint64EXT *v]
  glVertexAttribL1ui64NV: [void, GLuint index, GLuint64EXT x]
  glVertexAttribL1ui64vNV: [void, GLuint index, const GLuint64EXT *v]
  glVertexAttribL2i64NV: [void, GLuint index, GLint64EXT x, GLint64EXT y]
  glVertexAttribL2i64vNV: [void, GLuint index, const GLint64EXT *v]
  glVertexAttribL2ui64NV: [void, GLuint index, GLuint64EXT x, GLuint64EXT y]
  glVertexAttribL2ui64vNV: [void, GLuint index, const GLuint64EXT *v]
  glVertexAttribL3i64NV: [void, GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT
      z]
  glVertexAttribL3i64vNV: [void, GLuint index, const GLint64EXT *v]
  glVertexAttribL3ui64NV: [void, GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT
      z]
  glVertexAttribL3ui64vNV: [void, GLuint index, const GLuint64EXT *v]
  glVertexAttribL4i64NV: [void, GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT
      z, GLint64EXT w]
  glVertexAttribL4i64vNV: [void, GLuint index, const GLint64EXT *v]
  glVertexAttribL4ui64NV: [void, GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT
      z, GLuint64EXT w]
  glVertexAttribL4ui64vNV: [void, GLuint index, const GLuint64EXT *v]
  glVertexAttribLFormatNV: [void, GLuint index, GLint size, GLenum type, GLsizei stride]
NV_vertex_buffer_unified_memory:
  glBufferAddressRangeNV: [void, GLenum pname, GLuint index, GLuint64EXT address,
    GLsizeiptr length]
  glColorFormatNV: [void, GLint size, GLenum type, GLsizei stride]
  glEdgeFlagFormatNV: [void, GLsizei stride]
  glFogCoordFormatNV: [void, GLenum type, GLsizei stride]
  glGetIntegerui64i_vNV: [void, GLenum value, GLuint index, GLuint64EXT *result]
  glIndexFormatNV: [void, GLenum type, GLsizei stride]
  glNormalFormatNV: [void, GLenum type, GLsizei stride]
  glSecondaryColorFormatNV: [void, GLint size, GLenum type, GLsizei stride]
  glTexCoordFormatNV: [void, GLint size, GLenum type, GLsizei stride]
  glVertexAttribFormatNV: [void, GLuint index, GLint size, GLenum type, GLboolean
      normalized, GLsizei stride]
  glVertexAttribIFormatNV: [void, GLuint index, GLint size, GLenum type, GLsizei stride]
  glVertexFormatNV: [void, GLint size, GLenum type, GLsizei stride]
NV_vertex_program:
  glAreProgramsResidentNV: [GLboolean, GLsizei n, const GLuint *programs, GLboolean
      *residences]
  glBindProgramNV: [void, GLenum target, GLuint id]
  glDeleteProgramsNV: [void, GLsizei n, const GLuint *programs]
  glExecuteProgramNV: [void, GLenum target, GLuint id, const GLfloat *params]
  glGenProgramsNV: [void, GLsizei n, GLuint *programs]
  glGetProgramParameterdvNV: [void, GLenum target, GLuint index, GLenum pname, GLdouble
      *params]
  glGetProgramParameterfvNV: [void, GLenum target, GLuint index, GLenum pname, GLfloat
      *params]
  glGetProgramStringNV: [void, GLuint id, GLenum pname, GLubyte *program]
  glGetProgramivNV: [void, GLuint id, GLenum pname, GLint *params]
  glGetTrackMatrixivNV: [void, GLenum target, GLuint address, GLenum pname, GLint
      *params]
  glGetVertexAttribPointervNV: [void, GLuint index, GLenum pname, GLvoid *pointer]
  glGetVertexAttribdvNV: [void, GLuint index, GLenum pname, GLdouble *params]
  glGetVertexAttribfvNV: [void, GLuint index, GLenum pname, GLfloat *params]
  glGetVertexAttribivNV: [void, GLuint index, GLenum pname, GLint *params]
  glIsProgramNV: [GLboolean, GLuint id]
  glLoadProgramNV: [void, GLenum target, GLuint id, GLsizei len, const GLubyte *program]
  glProgramParameter4dNV: [void, GLenum target, GLuint index, GLdouble x, GLdouble
      y, GLdouble z, GLdouble w]
  glProgramParameter4dvNV: [void, GLenum target, GLuint index, const GLdouble *v]
  glProgramParameter4fNV: [void, GLenum target, GLuint index, GLfloat x, GLfloat y,
    GLfloat z, GLfloat w]
  glProgramParameter4fvNV: [void, GLenum target, GLuint index, const GLfloat *v]
  glProgramParameters4dvNV: [void, GLenum target, GLuint index, GLsizei count, const
      GLdouble *v]
  glProgramParameters4fvNV: [void, GLenum target, GLuint index, GLsizei count, const
      GLfloat *v]
  glRequestResidentProgramsNV: [void, GLsizei n, const GLuint *programs]
  glTrackMatrixNV: [void, GLenum target, GLuint address, GLenum matrix, GLenum transform]
  glVertexAttrib1dNV: [void, GLuint index, GLdouble x]
  glVertexAttrib1dvNV: [void, GLuint index, const GLdouble *v]
  glVertexAttrib1fNV: [void, GLuint index, GLfloat x]
  glVertexAttrib1fvNV: [void, GLuint index, const GLfloat *v]
  glVertexAttrib1sNV: [void, GLuint index, GLshort x]
  glVertexAttrib1svNV: [void, GLuint index, const GLshort *v]
  glVertexAttrib2dNV: [void, GLuint index, GLdouble x, GLdouble y]
  glVertexAttrib2dvNV: [void, GLuint index, const GLdouble *v]
  glVertexAttrib2fNV: [void, GLuint index, GLfloat x, GLfloat y]
  glVertexAttrib2fvNV: [void, GLuint index, const GLfloat *v]
  glVertexAttrib2sNV: [void, GLuint index, GLshort x, GLshort y]
  glVertexAttrib2svNV: [void, GLuint index, const GLshort *v]
  glVertexAttrib3dNV: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z]
  glVertexAttrib3dvNV: [void, GLuint index, const GLdouble *v]
  glVertexAttrib3fNV: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z]
  glVertexAttrib3fvNV: [void, GLuint index, const GLfloat *v]
  glVertexAttrib3sNV: [void, GLuint index, GLshort x, GLshort y, GLshort z]
  glVertexAttrib3svNV: [void, GLuint index, const GLshort *v]
  glVertexAttrib4dNV: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glVertexAttrib4dvNV: [void, GLuint index, const GLdouble *v]
  glVertexAttrib4fNV: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat
      w]
  glVertexAttrib4fvNV: [void, GLuint index, const GLfloat *v]
  glVertexAttrib4sNV: [void, GLuint index, GLshort x, GLshort y, GLshort z, GLshort
      w]
  glVertexAttrib4svNV: [void, GLuint index, const GLshort *v]
  glVertexAttrib4ubNV: [void, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte
      w]
  glVertexAttrib4ubvNV: [void, GLuint index, const GLubyte *v]
  glVertexAttribPointerNV: [void, GLuint index, GLint fsize, GLenum type, GLsizei
      stride, const GLvoid *pointer]
  glVertexAttribs1dvNV: [void, GLuint index, GLsizei count, const GLdouble *v]
  glVertexAttribs1fvNV: [void, GLuint index, GLsizei count, const GLfloat *v]
  glVertexAttribs1svNV: [void, GLuint index, GLsizei count, const GLshort *v]
  glVertexAttribs2dvNV: [void, GLuint index, GLsizei count, const GLdouble *v]
  glVertexAttribs2fvNV: [void, GLuint index, GLsizei count, const GLfloat *v]
  glVertexAttribs2svNV: [void, GLuint index, GLsizei count, const GLshort *v]
  glVertexAttribs3dvNV: [void, GLuint index, GLsizei count, const GLdouble *v]
  glVertexAttribs3fvNV: [void, GLuint index, GLsizei count, const GLfloat *v]
  glVertexAttribs3svNV: [void, GLuint index, GLsizei count, const GLshort *v]
  glVertexAttribs4dvNV: [void, GLuint index, GLsizei count, const GLdouble *v]
  glVertexAttribs4fvNV: [void, GLuint index, GLsizei count, const GLfloat *v]
  glVertexAttribs4svNV: [void, GLuint index, GLsizei count, const GLshort *v]
  glVertexAttribs4ubvNV: [void, GLuint index, GLsizei count, const GLubyte *v]
NV_vertex_program4:
  glGetVertexAttribIivEXT: [void, GLuint index, GLenum pname, GLint *params]
  glGetVertexAttribIuivEXT: [void, GLuint index, GLenum pname, GLuint *params]
  glVertexAttribI1iEXT: [void, GLuint index, GLint x]
  glVertexAttribI1ivEXT: [void, GLuint index, const GLint *v]
  glVertexAttribI1uiEXT: [void, GLuint index, GLuint x]
  glVertexAttribI1uivEXT: [void, GLuint index, const GLuint *v]
  glVertexAttribI2iEXT: [void, GLuint index, GLint x, GLint y]
  glVertexAttribI2ivEXT: [void, GLuint index, const GLint *v]
  glVertexAttribI2uiEXT: [void, GLuint index, GLuint x, GLuint y]
  glVertexAttribI2uivEXT: [void, GLuint index, const GLuint *v]
  glVertexAttribI3iEXT: [void, GLuint index, GLint x, GLint y, GLint z]
  glVertexAttribI3ivEXT: [void, GLuint index, const GLint *v]
  glVertexAttribI3uiEXT: [void, GLuint index, GLuint x, GLuint y, GLuint z]
  glVertexAttribI3uivEXT: [void, GLuint index, const GLuint *v]
  glVertexAttribI4bvEXT: [void, GLuint index, const GLbyte *v]
  glVertexAttribI4iEXT: [void, GLuint index, GLint x, GLint y, GLint z, GLint w]
  glVertexAttribI4ivEXT: [void, GLuint index, const GLint *v]
  glVertexAttribI4svEXT: [void, GLuint index, const GLshort *v]
  glVertexAttribI4ubvEXT: [void, GLuint index, const GLubyte *v]
  glVertexAttribI4uiEXT: [void, GLuint index, GLuint x, GLuint y, GLuint z, GLuint
      w]
  glVertexAttribI4uivEXT: [void, GLuint index, const GLuint *v]
  glVertexAttribI4usvEXT: [void, GLuint index, const GLushort *v]
  glVertexAttribIPointerEXT: [void, GLuint index, GLint size, GLenum type, GLsizei
      stride, const GLvoid *pointer]
NV_video_capture:
  glBeginVideoCaptureNV: [void, GLuint video_capture_slot]
  glBindVideoCaptureStreamBufferNV: [void, GLuint video_capture_slot, GLuint stream,
    GLenum frame_region, GLintptrARB offset]
  glBindVideoCaptureStreamTextureNV: [void, GLuint video_capture_slot, GLuint stream,
    GLenum frame_region, GLenum target, GLuint texture]
  glEndVideoCaptureNV: [void, GLuint video_capture_slot]
  glGetVideoCaptureStreamdvNV: [void, GLuint video_capture_slot, GLuint stream, GLenum
      pname, GLdouble *params]
  glGetVideoCaptureStreamfvNV: [void, GLuint video_capture_slot, GLuint stream, GLenum
      pname, GLfloat *params]
  glGetVideoCaptureStreamivNV: [void, GLuint video_capture_slot, GLuint stream, GLenum
      pname, GLint *params]
  glGetVideoCaptureivNV: [void, GLuint video_capture_slot, GLenum pname, GLint *params]
  glVideoCaptureNV: [GLenum, GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT
      *capture_time]
  glVideoCaptureStreamParameterdvNV: [void, GLuint video_capture_slot, GLuint stream,
    GLenum pname, const GLdouble *params]
  glVideoCaptureStreamParameterfvNV: [void, GLuint video_capture_slot, GLuint stream,
    GLenum pname, const GLfloat *params]
  glVideoCaptureStreamParameterivNV: [void, GLuint video_capture_slot, GLuint stream,
    GLenum pname, const GLint *params]
OES_byte_coordinates:
  glMultiTexCoord1bOES: [void, GLenum texture, GLbyte s]
  glMultiTexCoord1bvOES: [void, GLenum texture, const GLbyte *coords]
  glMultiTexCoord2bOES: [void, GLenum texture, GLbyte s, GLbyte t]
  glMultiTexCoord2bvOES: [void, GLenum texture, const GLbyte *coords]
  glMultiTexCoord3bOES: [void, GLenum texture, GLbyte s, GLbyte t, GLbyte r]
  glMultiTexCoord3bvOES: [void, GLenum texture, const GLbyte *coords]
  glMultiTexCoord4bOES: [void, GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte
      q]
  glMultiTexCoord4bvOES: [void, GLenum texture, const GLbyte *coords]
  glTexCoord1bOES: [void, GLbyte s]
  glTexCoord1bvOES: [void, const GLbyte *coords]
  glTexCoord2bOES: [void, GLbyte s, GLbyte t]
  glTexCoord2bvOES: [void, const GLbyte *coords]
  glTexCoord3bOES: [void, GLbyte s, GLbyte t, GLbyte r]
  glTexCoord3bvOES: [void, const GLbyte *coords]
  glTexCoord4bOES: [void, GLbyte s, GLbyte t, GLbyte r, GLbyte q]
  glTexCoord4bvOES: [void, const GLbyte *coords]
  glVertex2bOES: [void, GLbyte x]
  glVertex2bvOES: [void, const GLbyte *coords]
  glVertex3bOES: [void, GLbyte x, GLbyte y]
  glVertex3bvOES: [void, const GLbyte *coords]
  glVertex4bOES: [void, GLbyte x, GLbyte y, GLbyte z]
  glVertex4bvOES: [void, const GLbyte *coords]
OES_fixed_point:
  glAccumxOES: [void, GLenum op, GLfixed value]
  glAlphaFuncxOES: [void, GLenum func, GLfixed ref]
  glBitmapxOES: [void, GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig,
    GLfixed xmove, GLfixed ymove, const GLubyte *bitmap]
  glBlendColorxOES: [void, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha]
  glClearAccumxOES: [void, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha]
  glClearColorxOES: [void, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha]
  glClearDepthxOES: [void, GLfixed depth]
  glClipPlanexOES: [void, GLenum plane, const GLfixed *equation]
  glColor3xOES: [void, GLfixed red, GLfixed green, GLfixed blue]
  glColor3xvOES: [void, const GLfixed *components]
  glColor4xOES: [void, GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha]
  glColor4xvOES: [void, const GLfixed *components]
  glConvolutionParameterxOES: [void, GLenum target, GLenum pname, GLfixed param]
  glConvolutionParameterxvOES: [void, GLenum target, GLenum pname, const GLfixed *params]
  glDepthRangexOES: [void, GLfixed n, GLfixed f]
  glEvalCoord1xOES: [void, GLfixed u]
  glEvalCoord1xvOES: [void, const GLfixed *coords]
  glEvalCoord2xOES: [void, GLfixed u, GLfixed v]
  glEvalCoord2xvOES: [void, const GLfixed *coords]
  glFeedbackBufferxOES: [void, GLsizei n, GLenum type, const GLfixed *buffer]
  glFogxOES: [void, GLenum pname, GLfixed param]
  glFogxvOES: [void, GLenum pname, const GLfixed *param]
  glFrustumxOES: [void, GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed
      f]
  glGetClipPlanexOES: [void, GLenum plane, GLfixed *equation]
  glGetConvolutionParameterxvOES: [void, GLenum target, GLenum pname, GLfixed *params]
  glGetFixedvOES: [void, GLenum pname, GLfixed *params]
  glGetHistogramParameterxvOES: [void, GLenum target, GLenum pname, GLfixed *params]
  glGetLightxOES: [void, GLenum light, GLenum pname, GLfixed *params]
  glGetMapxvOES: [void, GLenum target, GLenum query, GLfixed *v]
  glGetMaterialxOES: [void, GLenum face, GLenum pname, GLfixed param]
  glGetPixelMapxv: [void, GLenum map, GLint size, GLfixed *values]
  glGetTexEnvxvOES: [void, GLenum target, GLenum pname, GLfixed *params]
  glGetTexGenxvOES: [void, GLenum coord, GLenum pname, GLfixed *params]
  glGetTexLevelParameterxvOES: [void, GLenum target, GLint level, GLenum pname, GLfixed
      *params]
  glGetTexParameterxvOES: [void, GLenum target, GLenum pname, GLfixed *params]
  glIndexxOES: [void, GLfixed component]
  glIndexxvOES: [void, const GLfixed *component]
  glLightModelxOES: [void, GLenum pname, GLfixed param]
  glLightModelxvOES: [void, GLenum pname, const GLfixed *param]
  glLightxOES: [void, GLenum light, GLenum pname, GLfixed param]
  glLightxvOES: [void, GLenum light, GLenum pname, const GLfixed *params]
  glLineWidthxOES: [void, GLfixed width]
  glLoadMatrixxOES: [void, const GLfixed *m]
  glLoadTransposeMatrixxOES: [void, const GLfixed *m]
  glMap1xOES: [void, GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order,
    GLfixed points]
  glMap2xOES: [void, GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder,
    GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points]
  glMapGrid1xOES: [void, GLint n, GLfixed u1, GLfixed u2]
  glMapGrid2xOES: [void, GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2]
  glMaterialxOES: [void, GLenum face, GLenum pname, GLfixed param]
  glMaterialxvOES: [void, GLenum face, GLenum pname, const GLfixed *param]
  glMultMatrixxOES: [void, const GLfixed *m]
  glMultTransposeMatrixxOES: [void, const GLfixed *m]
  glMultiTexCoord1xOES: [void, GLenum texture, GLfixed s]
  glMultiTexCoord1xvOES: [void, GLenum texture, const GLfixed *coords]
  glMultiTexCoord2xOES: [void, GLenum texture, GLfixed s, GLfixed t]
  glMultiTexCoord2xvOES: [void, GLenum texture, const GLfixed *coords]
  glMultiTexCoord3xOES: [void, GLenum texture, GLfixed s, GLfixed t, GLfixed r]
  glMultiTexCoord3xvOES: [void, GLenum texture, const GLfixed *coords]
  glMultiTexCoord4xOES: [void, GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed
      q]
  glMultiTexCoord4xvOES: [void, GLenum texture, const GLfixed *coords]
  glNormal3xOES: [void, GLfixed nx, GLfixed ny, GLfixed nz]
  glNormal3xvOES: [void, const GLfixed *coords]
  glOrthoxOES: [void, GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed
      f]
  glPassThroughxOES: [void, GLfixed token]
  glPixelMapx: [void, GLenum map, GLint size, const GLfixed *values]
  glPixelStorex: [void, GLenum pname, GLfixed param]
  glPixelTransferxOES: [void, GLenum pname, GLfixed param]
  glPixelZoomxOES: [void, GLfixed xfactor, GLfixed yfactor]
  glPointParameterxvOES: [void, GLenum pname, const GLfixed *params]
  glPointSizexOES: [void, GLfixed size]
  glPolygonOffsetxOES: [void, GLfixed factor, GLfixed units]
  glPrioritizeTexturesxOES: [void, GLsizei n, const GLuint *textures, const GLfixed
      *priorities]
  glRasterPos2xOES: [void, GLfixed x, GLfixed y]
  glRasterPos2xvOES: [void, const GLfixed *coords]
  glRasterPos3xOES: [void, GLfixed x, GLfixed y, GLfixed z]
  glRasterPos3xvOES: [void, const GLfixed *coords]
  glRasterPos4xOES: [void, GLfixed x, GLfixed y, GLfixed z, GLfixed w]
  glRasterPos4xvOES: [void, const GLfixed *coords]
  glRectxOES: [void, GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2]
  glRectxvOES: [void, const GLfixed *v1, const GLfixed *v2]
  glRotatexOES: [void, GLfixed angle, GLfixed x, GLfixed y, GLfixed z]
  glSampleCoverageOES: [void, GLfixed value, GLboolean invert]
  glScalexOES: [void, GLfixed x, GLfixed y, GLfixed z]
  glTexCoord1xOES: [void, GLfixed s]
  glTexCoord1xvOES: [void, const GLfixed *coords]
  glTexCoord2xOES: [void, GLfixed s, GLfixed t]
  glTexCoord2xvOES: [void, const GLfixed *coords]
  glTexCoord3xOES: [void, GLfixed s, GLfixed t, GLfixed r]
  glTexCoord3xvOES: [void, const GLfixed *coords]
  glTexCoord4xOES: [void, GLfixed s, GLfixed t, GLfixed r, GLfixed q]
  glTexCoord4xvOES: [void, const GLfixed *coords]
  glTexEnvxOES: [void, GLenum target, GLenum pname, GLfixed param]
  glTexEnvxvOES: [void, GLenum target, GLenum pname, const GLfixed *params]
  glTexGenxOES: [void, GLenum coord, GLenum pname, GLfixed param]
  glTexGenxvOES: [void, GLenum coord, GLenum pname, const GLfixed *params]
  glTexParameterxOES: [void, GLenum target, GLenum pname, GLfixed param]
  glTexParameterxvOES: [void, GLenum target, GLenum pname, const GLfixed *params]
  glTranslatexOES: [void, GLfixed x, GLfixed y, GLfixed z]
  glVertex2xOES: [void, GLfixed x]
  glVertex2xvOES: [void, const GLfixed *coords]
  glVertex3xOES: [void, GLfixed x, GLfixed y]
  glVertex3xvOES: [void, const GLfixed *coords]
  glVertex4xOES: [void, GLfixed x, GLfixed y, GLfixed z]
  glVertex4xvOES: [void, const GLfixed *coords]
OES_query_matrix:
  glQueryMatrixxOES: [GLbitfield, GLfixed *mantissa, GLint *exponent]
OES_single_precision:
  glClearDepthfOES: [void, GLclampf depth]
  glClipPlanefOES: [void, GLenum plane, const GLfloat *equation]
  glDepthRangefOES: [void, GLclampf n, GLclampf f]
  glFrustumfOES: [void, GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat
      f]
  glGetClipPlanefOES: [void, GLenum plane, GLfloat *equation]
  glOrthofOES: [void, GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat
      f]
PGI_misc_hints:
  glHintPGI: [void, GLenum target, GLint mode]
SGIS_detail_texture:
  glDetailTexFuncSGIS: [void, GLenum target, GLsizei n, const GLfloat *points]
  glGetDetailTexFuncSGIS: [void, GLenum target, GLfloat *points]
SGIS_fog_function:
  glFogFuncSGIS: [void, GLsizei n, const GLfloat *points]
  glGetFogFuncSGIS: [void, GLfloat *points]
SGIS_multisample:
  glSampleMaskSGIS: [void, GLclampf value, GLboolean invert]
  glSamplePatternSGIS: [void, GLenum pattern]
SGIS_pixel_texture:
  glGetPixelTexGenParameterfvSGIS: [void, GLenum pname, GLfloat *params]
  glGetPixelTexGenParameterivSGIS: [void, GLenum pname, GLint *params]
  glPixelTexGenParameterfSGIS: [void, GLenum pname, GLfloat param]
  glPixelTexGenParameterfvSGIS: [void, GLenum pname, const GLfloat *params]
  glPixelTexGenParameteriSGIS: [void, GLenum pname, GLint param]
  glPixelTexGenParameterivSGIS: [void, GLenum pname, const GLint *params]
SGIS_point_parameters:
  glPointParameterfSGIS: [void, GLenum pname, GLfloat param]
  glPointParameterfvSGIS: [void, GLenum pname, const GLfloat *params]
SGIS_sharpen_texture:
  glGetSharpenTexFuncSGIS: [void, GLenum target, GLfloat *points]
  glSharpenTexFuncSGIS: [void, GLenum target, GLsizei n, const GLfloat *points]
SGIS_texture4D:
  glTexImage4DSGIS: [void, GLenum target, GLint level, GLenum internalformat, GLsizei
      width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format,
    GLenum type, const GLvoid *pixels]
  glTexSubImage4DSGIS: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei
      size4d, GLenum format, GLenum type, const GLvoid *pixels]
SGIS_texture_color_mask:
  glTextureColorMaskSGIS: [void, GLboolean red, GLboolean green, GLboolean blue, GLboolean
      alpha]
SGIS_texture_filter4:
  glGetTexFilterFuncSGIS: [void, GLenum target, GLenum filter, GLfloat *weights]
  glTexFilterFuncSGIS: [void, GLenum target, GLenum filter, GLsizei n, const GLfloat
      *weights]
SGIX_async:
  glAsyncMarkerSGIX: [void, GLuint marker]
  glDeleteAsyncMarkersSGIX: [void, GLuint marker, GLsizei range]
  glFinishAsyncSGIX: [GLint, GLuint *markerp]
  glGenAsyncMarkersSGIX: [GLuint, GLsizei range]
  glIsAsyncMarkerSGIX: [GLboolean, GLuint marker]
  glPollAsyncSGIX: [GLint, GLuint *markerp]
SGIX_flush_raster:
  glFlushRasterSGIX: [void]
SGIX_fragment_lighting:
  glFragmentColorMaterialSGIX: [void, GLenum face, GLenum mode]
  glFragmentLightModelfSGIX: [void, GLenum pname, GLfloat param]
  glFragmentLightModelfvSGIX: [void, GLenum pname, const GLfloat *params]
  glFragmentLightModeliSGIX: [void, GLenum pname, GLint param]
  glFragmentLightModelivSGIX: [void, GLenum pname, const GLint *params]
  glFragmentLightfSGIX: [void, GLenum light, GLenum pname, GLfloat param]
  glFragmentLightfvSGIX: [void, GLenum light, GLenum pname, const GLfloat *params]
  glFragmentLightiSGIX: [void, GLenum light, GLenum pname, GLint param]
  glFragmentLightivSGIX: [void, GLenum light, GLenum pname, const GLint *params]
  glFragmentMaterialfSGIX: [void, GLenum face, GLenum pname, GLfloat param]
  glFragmentMaterialfvSGIX: [void, GLenum face, GLenum pname, const GLfloat *params]
  glFragmentMaterialiSGIX: [void, GLenum face, GLenum pname, GLint param]
  glFragmentMaterialivSGIX: [void, GLenum face, GLenum pname, const GLint *params]
  glGetFragmentLightfvSGIX: [void, GLenum light, GLenum pname, GLfloat *params]
  glGetFragmentLightivSGIX: [void, GLenum light, GLenum pname, GLint *params]
  glGetFragmentMaterialfvSGIX: [void, GLenum face, GLenum pname, GLfloat *params]
  glGetFragmentMaterialivSGIX: [void, GLenum face, GLenum pname, GLint *params]
  glLightEnviSGIX: [void, GLenum pname, GLint param]
SGIX_framezoom:
  glFrameZoomSGIX: [void, GLint factor]
SGIX_igloo_interface:
  glIglooInterfaceSGIX: [void, GLenum pname, const GLvoid *params]
SGIX_instruments:
  glGetInstrumentsSGIX: [GLint]
  glInstrumentsBufferSGIX: [void, GLsizei size, GLint *buffer]
  glPollInstrumentsSGIX: [GLint, GLint *marker_p]
  glReadInstrumentsSGIX: [void, GLint marker]
  glStartInstrumentsSGIX: [void]
  glStopInstrumentsSGIX: [void, GLint marker]
SGIX_list_priority:
  glGetListParameterfvSGIX: [void, GLuint list, GLenum pname, GLfloat *params]
  glGetListParameterivSGIX: [void, GLuint list, GLenum pname, GLint *params]
  glListParameterfSGIX: [void, GLuint list, GLenum pname, GLfloat param]
  glListParameterfvSGIX: [void, GLuint list, GLenum pname, const GLfloat *params]
  glListParameteriSGIX: [void, GLuint list, GLenum pname, GLint param]
  glListParameterivSGIX: [void, GLuint list, GLenum pname, const GLint *params]
SGIX_pixel_texture:
  glPixelTexGenSGIX: [void, GLenum mode]
SGIX_polynomial_ffd:
  glDeformSGIX: [void, GLbitfield mask]
  glDeformationMap3dSGIX: [void, GLenum target, GLdouble u1, GLdouble u2, GLint ustride,
    GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble
      w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points]
  glDeformationMap3fSGIX: [void, GLenum target, GLfloat u1, GLfloat u2, GLint ustride,
    GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1,
    GLfloat w2, GLint wstride, GLint worder, const GLfloat *points]
  glLoadIdentityDeformationMapSGIX: [void, GLbitfield mask]
SGIX_reference_plane:
  glReferencePlaneSGIX: [void, const GLdouble *equation]
SGIX_sprite:
  glSpriteParameterfSGIX: [void, GLenum pname, GLfloat param]
  glSpriteParameterfvSGIX: [void, GLenum pname, const GLfloat *params]
  glSpriteParameteriSGIX: [void, GLenum pname, GLint param]
  glSpriteParameterivSGIX: [void, GLenum pname, const GLint *params]
SGIX_tag_sample_buffer:
  glTagSampleBufferSGIX: [void]
SGI_color_table:
  glColorTableParameterfvSGI: [void, GLenum target, GLenum pname, const GLfloat *params]
  glColorTableParameterivSGI: [void, GLenum target, GLenum pname, const GLint *params]
  glColorTableSGI: [void, GLenum target, GLenum internalformat, GLsizei width, GLenum
      format, GLenum type, const GLvoid *table]
  glCopyColorTableSGI: [void, GLenum target, GLenum internalformat, GLint x, GLint
      y, GLsizei width]
  glGetColorTableParameterfvSGI: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetColorTableParameterivSGI: [void, GLenum target, GLenum pname, GLint *params]
  glGetColorTableSGI: [void, GLenum target, GLenum format, GLenum type, GLvoid *table]
SUNX_constant_data:
  glFinishTextureSUNX: [void]
SUN_global_alpha:
  glGlobalAlphaFactorbSUN: [void, GLbyte factor]
  glGlobalAlphaFactordSUN: [void, GLdouble factor]
  glGlobalAlphaFactorfSUN: [void, GLfloat factor]
  glGlobalAlphaFactoriSUN: [void, GLint factor]
  glGlobalAlphaFactorsSUN: [void, GLshort factor]
  glGlobalAlphaFactorubSUN: [void, GLubyte factor]
  glGlobalAlphaFactoruiSUN: [void, GLuint factor]
  glGlobalAlphaFactorusSUN: [void, GLushort factor]
SUN_mesh_array:
  glDrawMeshArraysSUN: [void, GLenum mode, GLint first, GLsizei count, GLsizei width]
SUN_triangle_list:
  glReplacementCodePointerSUN: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
  glReplacementCodeubSUN: [void, GLubyte code]
  glReplacementCodeubvSUN: [void, const GLubyte *code]
  glReplacementCodeuiSUN: [void, GLuint code]
  glReplacementCodeuivSUN: [void, const GLuint *code]
  glReplacementCodeusSUN: [void, GLushort code]
  glReplacementCodeusvSUN: [void, const GLushort *code]
SUN_vertex:
  glColor3fVertex3fSUN: [void, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat
      y, GLfloat z]
  glColor3fVertex3fvSUN: [void, const GLfloat *c, const GLfloat *v]
  glColor4fNormal3fVertex3fSUN: [void, GLfloat r, GLfloat g, GLfloat b, GLfloat a,
    GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z]
  glColor4fNormal3fVertex3fvSUN: [void, const GLfloat *c, const GLfloat *n, const
      GLfloat *v]
  glColor4ubVertex2fSUN: [void, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat
      x, GLfloat y]
  glColor4ubVertex2fvSUN: [void, const GLubyte *c, const GLfloat *v]
  glColor4ubVertex3fSUN: [void, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat
      x, GLfloat y, GLfloat z]
  glColor4ubVertex3fvSUN: [void, const GLubyte *c, const GLfloat *v]
  glNormal3fVertex3fSUN: [void, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat
      y, GLfloat z]
  glNormal3fVertex3fvSUN: [void, const GLfloat *n, const GLfloat *v]
  glReplacementCodeuiColor3fVertex3fSUN: [void, GLuint rc, GLfloat r, GLfloat g, GLfloat
      b, GLfloat x, GLfloat y, GLfloat z]
  glReplacementCodeuiColor3fVertex3fvSUN: [void, const GLuint *rc, const GLfloat *c,
    const GLfloat *v]
  glReplacementCodeuiColor4fNormal3fVertex3fSUN: [void, GLuint rc, GLfloat r, GLfloat
      g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat
      y, GLfloat z]
  glReplacementCodeuiColor4fNormal3fVertex3fvSUN: [void, const GLuint *rc, const GLfloat
      *c, const GLfloat *n, const GLfloat *v]
  glReplacementCodeuiColor4ubVertex3fSUN: [void, GLuint rc, GLubyte r, GLubyte g,
    GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z]
  glReplacementCodeuiColor4ubVertex3fvSUN: [void, const GLuint *rc, const GLubyte
      *c, const GLfloat *v]
  glReplacementCodeuiNormal3fVertex3fSUN: [void, GLuint rc, GLfloat nx, GLfloat ny,
    GLfloat nz, GLfloat x, GLfloat y, GLfloat z]
  glReplacementCodeuiNormal3fVertex3fvSUN: [void, const GLuint *rc, const GLfloat
      *n, const GLfloat *v]
  glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN: [void, GLuint rc, GLfloat
      s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat
      ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z]
  glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN: [void, const GLuint *rc,
    const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v]
  glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN: [void, GLuint rc, GLfloat s, GLfloat
      t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z]
  glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN: [void, const GLuint *rc, const
      GLfloat *tc, const GLfloat *n, const GLfloat *v]
  glReplacementCodeuiTexCoord2fVertex3fSUN: [void, GLuint rc, GLfloat s, GLfloat t,
    GLfloat x, GLfloat y, GLfloat z]
  glReplacementCodeuiTexCoord2fVertex3fvSUN: [void, const GLuint *rc, const GLfloat
      *tc, const GLfloat *v]
  glReplacementCodeuiVertex3fSUN: [void, GLuint rc, GLfloat x, GLfloat y, GLfloat
      z]
  glReplacementCodeuiVertex3fvSUN: [void, const GLuint *rc, const GLfloat *v]
  glTexCoord2fColor3fVertex3fSUN: [void, GLfloat s, GLfloat t, GLfloat r, GLfloat
      g, GLfloat b, GLfloat x, GLfloat y, GLfloat z]
  glTexCoord2fColor3fVertex3fvSUN: [void, const GLfloat *tc, const GLfloat *c, const
      GLfloat *v]
  glTexCoord2fColor4fNormal3fVertex3fSUN: [void, GLfloat s, GLfloat t, GLfloat r,
    GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x,
    GLfloat y, GLfloat z]
  glTexCoord2fColor4fNormal3fVertex3fvSUN: [void, const GLfloat *tc, const GLfloat
      *c, const GLfloat *n, const GLfloat *v]
  glTexCoord2fColor4ubVertex3fSUN: [void, GLfloat s, GLfloat t, GLubyte r, GLubyte
      g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z]
  glTexCoord2fColor4ubVertex3fvSUN: [void, const GLfloat *tc, const GLubyte *c, const
      GLfloat *v]
  glTexCoord2fNormal3fVertex3fSUN: [void, GLfloat s, GLfloat t, GLfloat nx, GLfloat
      ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z]
  glTexCoord2fNormal3fVertex3fvSUN: [void, const GLfloat *tc, const GLfloat *n, const
      GLfloat *v]
  glTexCoord2fVertex3fSUN: [void, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat
      z]
  glTexCoord2fVertex3fvSUN: [void, const GLfloat *tc, const GLfloat *v]
  glTexCoord4fColor4fNormal3fVertex4fSUN: [void, GLfloat s, GLfloat t, GLfloat p,
    GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny,
    GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w]
  glTexCoord4fColor4fNormal3fVertex4fvSUN: [void, const GLfloat *tc, const GLfloat
      *c, const GLfloat *n, const GLfloat *v]
  glTexCoord4fVertex4fSUN: [void, GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat
      x, GLfloat y, GLfloat z, GLfloat w]
  glTexCoord4fVertex4fvSUN: [void, const GLfloat *tc, const GLfloat *v]
VERSION_1_0:
  glAccum: [void, GLenum op, GLfloat value]
  glAlphaFunc: [void, GLenum func, GLfloat ref]
  glBegin: [void, GLenum mode]
  glBitmap: [void, GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat
      xmove, GLfloat ymove, const GLubyte *bitmap]
  glBlendFunc: [void, GLenum sfactor, GLenum dfactor]
  glCallList: [void, GLuint list]
  glCallLists: [void, GLsizei n, GLenum type, const GLvoid *lists]
  glClear: [void, GLbitfield mask]
  glClearAccum: [void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha]
  glClearColor: [void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha]
  glClearDepth: [void, GLdouble depth]
  glClearIndex: [void, GLfloat c]
  glClearStencil: [void, GLint s]
  glClipPlane: [void, GLenum plane, const GLdouble *equation]
  glColor3b: [void, GLbyte red, GLbyte green, GLbyte blue]
  glColor3bv: [void, const GLbyte *v]
  glColor3d: [void, GLdouble red, GLdouble green, GLdouble blue]
  glColor3dv: [void, const GLdouble *v]
  glColor3f: [void, GLfloat red, GLfloat green, GLfloat blue]
  glColor3fv: [void, const GLfloat *v]
  glColor3i: [void, GLint red, GLint green, GLint blue]
  glColor3iv: [void, const GLint *v]
  glColor3s: [void, GLshort red, GLshort green, GLshort blue]
  glColor3sv: [void, const GLshort *v]
  glColor3ub: [void, GLubyte red, GLubyte green, GLubyte blue]
  glColor3ubv: [void, const GLubyte *v]
  glColor3ui: [void, GLuint red, GLuint green, GLuint blue]
  glColor3uiv: [void, const GLuint *v]
  glColor3us: [void, GLushort red, GLushort green, GLushort blue]
  glColor3usv: [void, const GLushort *v]
  glColor4b: [void, GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha]
  glColor4bv: [void, const GLbyte *v]
  glColor4d: [void, GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha]
  glColor4dv: [void, const GLdouble *v]
  glColor4f: [void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha]
  glColor4fv: [void, const GLfloat *v]
  glColor4i: [void, GLint red, GLint green, GLint blue, GLint alpha]
  glColor4iv: [void, const GLint *v]
  glColor4s: [void, GLshort red, GLshort green, GLshort blue, GLshort alpha]
  glColor4sv: [void, const GLshort *v]
  glColor4ub: [void, GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha]
  glColor4ubv: [void, const GLubyte *v]
  glColor4ui: [void, GLuint red, GLuint green, GLuint blue, GLuint alpha]
  glColor4uiv: [void, const GLuint *v]
  glColor4us: [void, GLushort red, GLushort green, GLushort blue, GLushort alpha]
  glColor4usv: [void, const GLushort *v]
  glColorMask: [void, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha]
  glColorMaterial: [void, GLenum face, GLenum mode]
  glCopyPixels: [void, GLint x, GLint y, GLsizei width, GLsizei height, GLenum type]
  glCullFace: [void, GLenum mode]
  glDeleteLists: [void, GLuint list, GLsizei range]
  glDepthFunc: [void, GLenum func]
  glDepthMask: [void, GLboolean flag]
  glDepthRange: [void, GLdouble near, GLdouble far]
  glDisable: [void, GLenum cap]
  glDrawBuffer: [void, GLenum mode]
  glDrawPixels: [void, GLsizei width, GLsizei height, GLenum format, GLenum type,
    const GLvoid *pixels]
  glEdgeFlag: [void, GLboolean flag]
  glEdgeFlagv: [void, const GLboolean *flag]
  glEnable: [void, GLenum cap]
  glEnd: [void]
  glEndList: [void]
  glEvalCoord1d: [void, GLdouble u]
  glEvalCoord1dv: [void, const GLdouble *u]
  glEvalCoord1f: [void, GLfloat u]
  glEvalCoord1fv: [void, const GLfloat *u]
  glEvalCoord2d: [void, GLdouble u, GLdouble v]
  glEvalCoord2dv: [void, const GLdouble *u]
  glEvalCoord2f: [void, GLfloat u, GLfloat v]
  glEvalCoord2fv: [void, const GLfloat *u]
  glEvalMesh1: [void, GLenum mode, GLint i1, GLint i2]
  glEvalMesh2: [void, GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2]
  glEvalPoint1: [void, GLint i]
  glEvalPoint2: [void, GLint i, GLint j]
  glFeedbackBuffer: [void, GLsizei size, GLenum type, GLfloat *buffer]
  glFinish: [void]
  glFlush: [void]
  glFogf: [void, GLenum pname, GLfloat param]
  glFogfv: [void, GLenum pname, const GLfloat *params]
  glFogi: [void, GLenum pname, GLint param]
  glFogiv: [void, GLenum pname, const GLint *params]
  glFrontFace: [void, GLenum mode]
  glFrustum: [void, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,
    GLdouble zNear, GLdouble zFar]
  glGenLists: [GLuint, GLsizei range]
  glGetBooleanv: [void, GLenum pname, GLboolean *params]
  glGetClipPlane: [void, GLenum plane, GLdouble *equation]
  glGetDoublev: [void, GLenum pname, GLdouble *params]
  glGetError: [GLenum]
  glGetFloatv: [void, GLenum pname, GLfloat *params]
  glGetIntegerv: [void, GLenum pname, GLint *params]
  glGetLightfv: [void, GLenum light, GLenum pname, GLfloat *params]
  glGetLightiv: [void, GLenum light, GLenum pname, GLint *params]
  glGetMapdv: [void, GLenum target, GLenum query, GLdouble *v]
  glGetMapfv: [void, GLenum target, GLenum query, GLfloat *v]
  glGetMapiv: [void, GLenum target, GLenum query, GLint *v]
  glGetMaterialfv: [void, GLenum face, GLenum pname, GLfloat *params]
  glGetMaterialiv: [void, GLenum face, GLenum pname, GLint *params]
  glGetPixelMapfv: [void, GLenum map, GLfloat *values]
  glGetPixelMapuiv: [void, GLenum map, GLuint *values]
  glGetPixelMapusv: [void, GLenum map, GLushort *values]
  glGetPolygonStipple: [void, GLubyte *mask]
  glGetString: [const GLubyte *, GLenum name]
  glGetTexEnvfv: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetTexEnviv: [void, GLenum target, GLenum pname, GLint *params]
  glGetTexGendv: [void, GLenum coord, GLenum pname, GLdouble *params]
  glGetTexGenfv: [void, GLenum coord, GLenum pname, GLfloat *params]
  glGetTexGeniv: [void, GLenum coord, GLenum pname, GLint *params]
  glGetTexImage: [void, GLenum target, GLint level, GLenum format, GLenum type, GLvoid
      *pixels]
  glGetTexLevelParameterfv: [void, GLenum target, GLint level, GLenum pname, GLfloat
      *params]
  glGetTexLevelParameteriv: [void, GLenum target, GLint level, GLenum pname, GLint
      *params]
  glGetTexParameterfv: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetTexParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glHint: [void, GLenum target, GLenum mode]
  glIndexMask: [void, GLuint mask]
  glIndexd: [void, GLdouble c]
  glIndexdv: [void, const GLdouble *c]
  glIndexf: [void, GLfloat c]
  glIndexfv: [void, const GLfloat *c]
  glIndexi: [void, GLint c]
  glIndexiv: [void, const GLint *c]
  glIndexs: [void, GLshort c]
  glIndexsv: [void, const GLshort *c]
  glInitNames: [void]
  glIsEnabled: [GLboolean, GLenum cap]
  glIsList: [GLboolean, GLuint list]
  glLightModelf: [void, GLenum pname, GLfloat param]
  glLightModelfv: [void, GLenum pname, const GLfloat *params]
  glLightModeli: [void, GLenum pname, GLint param]
  glLightModeliv: [void, GLenum pname, const GLint *params]
  glLightf: [void, GLenum light, GLenum pname, GLfloat param]
  glLightfv: [void, GLenum light, GLenum pname, const GLfloat *params]
  glLighti: [void, GLenum light, GLenum pname, GLint param]
  glLightiv: [void, GLenum light, GLenum pname, const GLint *params]
  glLineStipple: [void, GLint factor, GLushort pattern]
  glLineWidth: [void, GLfloat width]
  glListBase: [void, GLuint base]
  glLoadIdentity: [void]
  glLoadMatrixd: [void, const GLdouble *m]
  glLoadMatrixf: [void, const GLfloat *m]
  glLoadName: [void, GLuint name]
  glLogicOp: [void, GLenum opcode]
  glMap1d: [void, GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order,
    const GLdouble *points]
  glMap1f: [void, GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order,
    const GLfloat *points]
  glMap2d: [void, GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
    GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points]
  glMap2f: [void, GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
    GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points]
  glMapGrid1d: [void, GLint un, GLdouble u1, GLdouble u2]
  glMapGrid1f: [void, GLint un, GLfloat u1, GLfloat u2]
  glMapGrid2d: [void, GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble
      v2]
  glMapGrid2f: [void, GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat
      v2]
  glMaterialf: [void, GLenum face, GLenum pname, GLfloat param]
  glMaterialfv: [void, GLenum face, GLenum pname, const GLfloat *params]
  glMateriali: [void, GLenum face, GLenum pname, GLint param]
  glMaterialiv: [void, GLenum face, GLenum pname, const GLint *params]
  glMatrixMode: [void, GLenum mode]
  glMultMatrixd: [void, const GLdouble *m]
  glMultMatrixf: [void, const GLfloat *m]
  glNewList: [void, GLuint list, GLenum mode]
  glNormal3b: [void, GLbyte nx, GLbyte ny, GLbyte nz]
  glNormal3bv: [void, const GLbyte *v]
  glNormal3d: [void, GLdouble nx, GLdouble ny, GLdouble nz]
  glNormal3dv: [void, const GLdouble *v]
  glNormal3f: [void, GLfloat nx, GLfloat ny, GLfloat nz]
  glNormal3fv: [void, const GLfloat *v]
  glNormal3i: [void, GLint nx, GLint ny, GLint nz]
  glNormal3iv: [void, const GLint *v]
  glNormal3s: [void, GLshort nx, GLshort ny, GLshort nz]
  glNormal3sv: [void, const GLshort *v]
  glOrtho: [void, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble
      zNear, GLdouble zFar]
  glPassThrough: [void, GLfloat token]
  glPixelMapfv: [void, GLenum map, GLsizei mapsize, const GLfloat *values]
  glPixelMapuiv: [void, GLenum map, GLsizei mapsize, const GLuint *values]
  glPixelMapusv: [void, GLenum map, GLsizei mapsize, const GLushort *values]
  glPixelStoref: [void, GLenum pname, GLfloat param]
  glPixelStorei: [void, GLenum pname, GLint param]
  glPixelTransferf: [void, GLenum pname, GLfloat param]
  glPixelTransferi: [void, GLenum pname, GLint param]
  glPixelZoom: [void, GLfloat xfactor, GLfloat yfactor]
  glPointSize: [void, GLfloat size]
  glPolygonMode: [void, GLenum face, GLenum mode]
  glPolygonStipple: [void, const GLubyte *mask]
  glPopAttrib: [void]
  glPopMatrix: [void]
  glPopName: [void]
  glPushAttrib: [void, GLbitfield mask]
  glPushMatrix: [void]
  glPushName: [void, GLuint name]
  glRasterPos2d: [void, GLdouble x, GLdouble y]
  glRasterPos2dv: [void, const GLdouble *v]
  glRasterPos2f: [void, GLfloat x, GLfloat y]
  glRasterPos2fv: [void, const GLfloat *v]
  glRasterPos2i: [void, GLint x, GLint y]
  glRasterPos2iv: [void, const GLint *v]
  glRasterPos2s: [void, GLshort x, GLshort y]
  glRasterPos2sv: [void, const GLshort *v]
  glRasterPos3d: [void, GLdouble x, GLdouble y, GLdouble z]
  glRasterPos3dv: [void, const GLdouble *v]
  glRasterPos3f: [void, GLfloat x, GLfloat y, GLfloat z]
  glRasterPos3fv: [void, const GLfloat *v]
  glRasterPos3i: [void, GLint x, GLint y, GLint z]
  glRasterPos3iv: [void, const GLint *v]
  glRasterPos3s: [void, GLshort x, GLshort y, GLshort z]
  glRasterPos3sv: [void, const GLshort *v]
  glRasterPos4d: [void, GLdouble x, GLdouble y, GLdouble z, GLdouble w]
  glRasterPos4dv: [void, const GLdouble *v]
  glRasterPos4f: [void, GLfloat x, GLfloat y, GLfloat z, GLfloat w]
  glRasterPos4fv: [void, const GLfloat *v]
  glRasterPos4i: [void, GLint x, GLint y, GLint z, GLint w]
  glRasterPos4iv: [void, const GLint *v]
  glRasterPos4s: [void, GLshort x, GLshort y, GLshort z, GLshort w]
  glRasterPos4sv: [void, const GLshort *v]
  glReadBuffer: [void, GLenum mode]
  glReadPixels: [void, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
    GLenum type, GLvoid *pixels]
  glRectd: [void, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2]
  glRectdv: [void, const GLdouble *v1, const GLdouble *v2]
  glRectf: [void, GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2]
  glRectfv: [void, const GLfloat *v1, const GLfloat *v2]
  glRecti: [void, GLint x1, GLint y1, GLint x2, GLint y2]
  glRectiv: [void, const GLint *v1, const GLint *v2]
  glRects: [void, GLshort x1, GLshort y1, GLshort x2, GLshort y2]
  glRectsv: [void, const GLshort *v1, const GLshort *v2]
  glRenderMode: [GLint, GLenum mode]
  glRotated: [void, GLdouble angle, GLdouble x, GLdouble y, GLdouble z]
  glRotatef: [void, GLfloat angle, GLfloat x, GLfloat y, GLfloat z]
  glScaled: [void, GLdouble x, GLdouble y, GLdouble z]
  glScalef: [void, GLfloat x, GLfloat y, GLfloat z]
  glScissor: [void, GLint x, GLint y, GLsizei width, GLsizei height]
  glSelectBuffer: [void, GLsizei size, GLuint *buffer]
  glShadeModel: [void, GLenum mode]
  glStencilFunc: [void, GLenum func, GLint ref, GLuint mask]
  glStencilMask: [void, GLuint mask]
  glStencilOp: [void, GLenum fail, GLenum zfail, GLenum zpass]
  glTexCoord1d: [void, GLdouble s]
  glTexCoord1dv: [void, const GLdouble *v]
  glTexCoord1f: [void, GLfloat s]
  glTexCoord1fv: [void, const GLfloat *v]
  glTexCoord1i: [void, GLint s]
  glTexCoord1iv: [void, const GLint *v]
  glTexCoord1s: [void, GLshort s]
  glTexCoord1sv: [void, const GLshort *v]
  glTexCoord2d: [void, GLdouble s, GLdouble t]
  glTexCoord2dv: [void, const GLdouble *v]
  glTexCoord2f: [void, GLfloat s, GLfloat t]
  glTexCoord2fv: [void, const GLfloat *v]
  glTexCoord2i: [void, GLint s, GLint t]
  glTexCoord2iv: [void, const GLint *v]
  glTexCoord2s: [void, GLshort s, GLshort t]
  glTexCoord2sv: [void, const GLshort *v]
  glTexCoord3d: [void, GLdouble s, GLdouble t, GLdouble r]
  glTexCoord3dv: [void, const GLdouble *v]
  glTexCoord3f: [void, GLfloat s, GLfloat t, GLfloat r]
  glTexCoord3fv: [void, const GLfloat *v]
  glTexCoord3i: [void, GLint s, GLint t, GLint r]
  glTexCoord3iv: [void, const GLint *v]
  glTexCoord3s: [void, GLshort s, GLshort t, GLshort r]
  glTexCoord3sv: [void, const GLshort *v]
  glTexCoord4d: [void, GLdouble s, GLdouble t, GLdouble r, GLdouble q]
  glTexCoord4dv: [void, const GLdouble *v]
  glTexCoord4f: [void, GLfloat s, GLfloat t, GLfloat r, GLfloat q]
  glTexCoord4fv: [void, const GLfloat *v]
  glTexCoord4i: [void, GLint s, GLint t, GLint r, GLint q]
  glTexCoord4iv: [void, const GLint *v]
  glTexCoord4s: [void, GLshort s, GLshort t, GLshort r, GLshort q]
  glTexCoord4sv: [void, const GLshort *v]
  glTexEnvf: [void, GLenum target, GLenum pname, GLfloat param]
  glTexEnvfv: [void, GLenum target, GLenum pname, const GLfloat *params]
  glTexEnvi: [void, GLenum target, GLenum pname, GLint param]
  glTexEnviv: [void, GLenum target, GLenum pname, const GLint *params]
  glTexGend: [void, GLenum coord, GLenum pname, GLdouble param]
  glTexGendv: [void, GLenum coord, GLenum pname, const GLdouble *params]
  glTexGenf: [void, GLenum coord, GLenum pname, GLfloat param]
  glTexGenfv: [void, GLenum coord, GLenum pname, const GLfloat *params]
  glTexGeni: [void, GLenum coord, GLenum pname, GLint param]
  glTexGeniv: [void, GLenum coord, GLenum pname, const GLint *params]
  glTexImage1D: [void, GLenum target, GLint level, GLint internalformat, GLsizei width,
    GLint border, GLenum format, GLenum type, const GLvoid *pixels]
  glTexImage2D: [void, GLenum target, GLint level, GLint internalformat, GLsizei width,
    GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels]
  glTexParameterf: [void, GLenum target, GLenum pname, GLfloat param]
  glTexParameterfv: [void, GLenum target, GLenum pname, const GLfloat *params]
  glTexParameteri: [void, GLenum target, GLenum pname, GLint param]
  glTexParameteriv: [void, GLenum target, GLenum pname, const GLint *params]
  glTranslated: [void, GLdouble x, GLdouble y, GLdouble z]
  glTranslatef: [void, GLfloat x, GLfloat y, GLfloat z]
  glVertex2d: [void, GLdouble x, GLdouble y]
  glVertex2dv: [void, const GLdouble *v]
  glVertex2f: [void, GLfloat x, GLfloat y]
  glVertex2fv: [void, const GLfloat *v]
  glVertex2i: [void, GLint x, GLint y]
  glVertex2iv: [void, const GLint *v]
  glVertex2s: [void, GLshort x, GLshort y]
  glVertex2sv: [void, const GLshort *v]
  glVertex3d: [void, GLdouble x, GLdouble y, GLdouble z]
  glVertex3dv: [void, const GLdouble *v]
  glVertex3f: [void, GLfloat x, GLfloat y, GLfloat z]
  glVertex3fv: [void, const GLfloat *v]
  glVertex3i: [void, GLint x, GLint y, GLint z]
  glVertex3iv: [void, const GLint *v]
  glVertex3s: [void, GLshort x, GLshort y, GLshort z]
  glVertex3sv: [void, const GLshort *v]
  glVertex4d: [void, GLdouble x, GLdouble y, GLdouble z, GLdouble w]
  glVertex4dv: [void, const GLdouble *v]
  glVertex4f: [void, GLfloat x, GLfloat y, GLfloat z, GLfloat w]
  glVertex4fv: [void, const GLfloat *v]
  glVertex4i: [void, GLint x, GLint y, GLint z, GLint w]
  glVertex4iv: [void, const GLint *v]
  glVertex4s: [void, GLshort x, GLshort y, GLshort z, GLshort w]
  glVertex4sv: [void, const GLshort *v]
  glViewport: [void, GLint x, GLint y, GLsizei width, GLsizei height]
VERSION_1_1:
  glAreTexturesResident: [GLboolean, GLsizei n, const GLuint *textures, GLboolean
      *residences]
  glArrayElement: [void, GLint i]
  glBindTexture: [void, GLenum target, GLuint texture]
  glColorPointer: [void, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer]
  glCopyTexImage1D: [void, GLenum target, GLint level, GLenum internalformat, GLint
      x, GLint y, GLsizei width, GLint border]
  glCopyTexImage2D: [void, GLenum target, GLint level, GLenum internalformat, GLint
      x, GLint y, GLsizei width, GLsizei height, GLint border]
  glCopyTexSubImage1D: [void, GLenum target, GLint level, GLint xoffset, GLint x,
    GLint y, GLsizei width]
  glCopyTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLint x, GLint y, GLsizei width, GLsizei height]
  glDeleteTextures: [void, GLsizei n, const GLuint *textures]
  glDisableClientState: [void, GLenum array]
  glDrawArrays: [void, GLenum mode, GLint first, GLsizei count]
  glDrawElements: [void, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices]
  glEdgeFlagPointer: [void, GLsizei stride, const GLvoid *pointer]
  glEnableClientState: [void, GLenum array]
  glGenTextures: [void, GLsizei n, GLuint *textures]
  glGetPointerv: [void, GLenum pname, GLvoid **params]
  glIndexPointer: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
  glIndexub: [void, GLubyte c]
  glIndexubv: [void, const GLubyte *c]
  glInterleavedArrays: [void, GLenum format, GLsizei stride, const GLvoid *pointer]
  glIsTexture: [GLboolean, GLuint texture]
  glNormalPointer: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
  glPolygonOffset: [void, GLfloat factor, GLfloat units]
  glPopClientAttrib: [void]
  glPrioritizeTextures: [void, GLsizei n, const GLuint *textures, const GLfloat *priorities]
  glPushClientAttrib: [void, GLbitfield mask]
  glTexCoordPointer: [void, GLint size, GLenum type, GLsizei stride, const GLvoid
      *pointer]
  glTexSubImage1D: [void, GLenum target, GLint level, GLint xoffset, GLsizei width,
    GLenum format, GLenum type, const GLvoid *pixels]
  glTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels]
  glVertexPointer: [void, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer]
VERSION_1_2:
  glBlendColor: [void, GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha]
  glBlendEquation: [void, GLenum mode]
  glColorSubTable: [void, GLenum target, GLsizei start, GLsizei count, GLenum format,
    GLenum type, const GLvoid *data]
  glColorTable: [void, GLenum target, GLenum internalformat, GLsizei width, GLenum
      format, GLenum type, const GLvoid *table]
  glColorTableParameterfv: [void, GLenum target, GLenum pname, const GLfloat *params]
  glColorTableParameteriv: [void, GLenum target, GLenum pname, const GLint *params]
  glConvolutionFilter1D: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLenum format, GLenum type, const GLvoid *image]
  glConvolutionFilter2D: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLsizei height, GLenum format, GLenum type, const GLvoid *image]
  glConvolutionParameterf: [void, GLenum target, GLenum pname, GLfloat params]
  glConvolutionParameterfv: [void, GLenum target, GLenum pname, const GLfloat *params]
  glConvolutionParameteri: [void, GLenum target, GLenum pname, GLint params]
  glConvolutionParameteriv: [void, GLenum target, GLenum pname, const GLint *params]
  glCopyColorSubTable: [void, GLenum target, GLsizei start, GLint x, GLint y, GLsizei
      width]
  glCopyColorTable: [void, GLenum target, GLenum internalformat, GLint x, GLint y,
    GLsizei width]
  glCopyConvolutionFilter1D: [void, GLenum target, GLenum internalformat, GLint x,
    GLint y, GLsizei width]
  glCopyConvolutionFilter2D: [void, GLenum target, GLenum internalformat, GLint x,
    GLint y, GLsizei width, GLsizei height]
  glCopyTexSubImage3D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height]
  glDrawRangeElements: [void, GLenum mode, GLuint start, GLuint end, GLsizei count,
    GLenum type, const GLvoid *indices]
  glGetColorTable: [void, GLenum target, GLenum format, GLenum type, GLvoid *table]
  glGetColorTableParameterfv: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetColorTableParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glGetConvolutionFilter: [void, GLenum target, GLenum format, GLenum type, GLvoid
      *image]
  glGetConvolutionParameterfv: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetConvolutionParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glGetHistogram: [void, GLenum target, GLboolean reset, GLenum format, GLenum type,
    GLvoid *values]
  glGetHistogramParameterfv: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetHistogramParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glGetMinmax: [void, GLenum target, GLboolean reset, GLenum format, GLenum type,
    GLvoid *values]
  glGetMinmaxParameterfv: [void, GLenum target, GLenum pname, GLfloat *params]
  glGetMinmaxParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glGetSeparableFilter: [void, GLenum target, GLenum format, GLenum type, GLvoid *row,
    GLvoid *column, GLvoid *span]
  glHistogram: [void, GLenum target, GLsizei width, GLenum internalformat, GLboolean
      sink]
  glMinmax: [void, GLenum target, GLenum internalformat, GLboolean sink]
  glResetHistogram: [void, GLenum target]
  glResetMinmax: [void, GLenum target]
  glSeparableFilter2D: [void, GLenum target, GLenum internalformat, GLsizei width,
    GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column]
  glTexImage3D: [void, GLenum target, GLint level, GLint internalformat, GLsizei width,
    GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const
      GLvoid *pixels]
  glTexSubImage3D: [void, GLenum target, GLint level, GLint xoffset, GLint yoffset,
    GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum
      type, const GLvoid *pixels]
VERSION_1_3:
  glActiveTexture: [void, GLenum texture]
  glClientActiveTexture: [void, GLenum texture]
  glCompressedTexImage1D: [void, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data]
  glCompressedTexImage2D: [void, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data]
  glCompressedTexImage3D: [void, GLenum target, GLint level, GLenum internalformat,
    GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize,
    const GLvoid *data]
  glCompressedTexSubImage1D: [void, GLenum target, GLint level, GLint xoffset, GLsizei
      width, GLenum format, GLsizei imageSize, const GLvoid *data]
  glCompressedTexSubImage2D: [void, GLenum target, GLint level, GLint xoffset, GLint
      yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const
      GLvoid *data]
  glCompressedTexSubImage3D: [void, GLenum target, GLint level, GLint xoffset, GLint
      yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum
      format, GLsizei imageSize, const GLvoid *data]
  glGetCompressedTexImage: [void, GLenum target, GLint level, GLvoid *img]
  glLoadTransposeMatrixd: [void, const GLdouble *m]
  glLoadTransposeMatrixf: [void, const GLfloat *m]
  glMultTransposeMatrixd: [void, const GLdouble *m]
  glMultTransposeMatrixf: [void, const GLfloat *m]
  glMultiTexCoord1d: [void, GLenum target, GLdouble s]
  glMultiTexCoord1dv: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord1f: [void, GLenum target, GLfloat s]
  glMultiTexCoord1fv: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord1i: [void, GLenum target, GLint s]
  glMultiTexCoord1iv: [void, GLenum target, const GLint *v]
  glMultiTexCoord1s: [void, GLenum target, GLshort s]
  glMultiTexCoord1sv: [void, GLenum target, const GLshort *v]
  glMultiTexCoord2d: [void, GLenum target, GLdouble s, GLdouble t]
  glMultiTexCoord2dv: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord2f: [void, GLenum target, GLfloat s, GLfloat t]
  glMultiTexCoord2fv: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord2i: [void, GLenum target, GLint s, GLint t]
  glMultiTexCoord2iv: [void, GLenum target, const GLint *v]
  glMultiTexCoord2s: [void, GLenum target, GLshort s, GLshort t]
  glMultiTexCoord2sv: [void, GLenum target, const GLshort *v]
  glMultiTexCoord3d: [void, GLenum target, GLdouble s, GLdouble t, GLdouble r]
  glMultiTexCoord3dv: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord3f: [void, GLenum target, GLfloat s, GLfloat t, GLfloat r]
  glMultiTexCoord3fv: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord3i: [void, GLenum target, GLint s, GLint t, GLint r]
  glMultiTexCoord3iv: [void, GLenum target, const GLint *v]
  glMultiTexCoord3s: [void, GLenum target, GLshort s, GLshort t, GLshort r]
  glMultiTexCoord3sv: [void, GLenum target, const GLshort *v]
  glMultiTexCoord4d: [void, GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble
      q]
  glMultiTexCoord4dv: [void, GLenum target, const GLdouble *v]
  glMultiTexCoord4f: [void, GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat
      q]
  glMultiTexCoord4fv: [void, GLenum target, const GLfloat *v]
  glMultiTexCoord4i: [void, GLenum target, GLint s, GLint t, GLint r, GLint q]
  glMultiTexCoord4iv: [void, GLenum target, const GLint *v]
  glMultiTexCoord4s: [void, GLenum target, GLshort s, GLshort t, GLshort r, GLshort
      q]
  glMultiTexCoord4sv: [void, GLenum target, const GLshort *v]
  glSampleCoverage: [void, GLfloat value, GLboolean invert]
VERSION_1_4:
  glBlendFuncSeparate: [void, GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha,
    GLenum dfactorAlpha]
  glFogCoordPointer: [void, GLenum type, GLsizei stride, const GLvoid *pointer]
  glFogCoordd: [void, GLdouble coord]
  glFogCoorddv: [void, const GLdouble *coord]
  glFogCoordf: [void, GLfloat coord]
  glFogCoordfv: [void, const GLfloat *coord]
  glMultiDrawArrays: [void, GLenum mode, const GLint *first, const GLsizei *count,
    GLsizei drawcount]
  glMultiDrawElements: [void, GLenum mode, const GLsizei *count, GLenum type, GLvoid*const
      *indices, GLsizei drawcount]
  glPointParameterf: [void, GLenum pname, GLfloat param]
  glPointParameterfv: [void, GLenum pname, const GLfloat *params]
  glPointParameteri: [void, GLenum pname, GLint param]
  glPointParameteriv: [void, GLenum pname, const GLint *params]
  glSecondaryColor3b: [void, GLbyte red, GLbyte green, GLbyte blue]
  glSecondaryColor3bv: [void, const GLbyte *v]
  glSecondaryColor3d: [void, GLdouble red, GLdouble green, GLdouble blue]
  glSecondaryColor3dv: [void, const GLdouble *v]
  glSecondaryColor3f: [void, GLfloat red, GLfloat green, GLfloat blue]
  glSecondaryColor3fv: [void, const GLfloat *v]
  glSecondaryColor3i: [void, GLint red, GLint green, GLint blue]
  glSecondaryColor3iv: [void, const GLint *v]
  glSecondaryColor3s: [void, GLshort red, GLshort green, GLshort blue]
  glSecondaryColor3sv: [void, const GLshort *v]
  glSecondaryColor3ub: [void, GLubyte red, GLubyte green, GLubyte blue]
  glSecondaryColor3ubv: [void, const GLubyte *v]
  glSecondaryColor3ui: [void, GLuint red, GLuint green, GLuint blue]
  glSecondaryColor3uiv: [void, const GLuint *v]
  glSecondaryColor3us: [void, GLushort red, GLushort green, GLushort blue]
  glSecondaryColor3usv: [void, const GLushort *v]
  glSecondaryColorPointer: [void, GLint size, GLenum type, GLsizei stride, const GLvoid
      *pointer]
  glWindowPos2d: [void, GLdouble x, GLdouble y]
  glWindowPos2dv: [void, const GLdouble *v]
  glWindowPos2f: [void, GLfloat x, GLfloat y]
  glWindowPos2fv: [void, const GLfloat *v]
  glWindowPos2i: [void, GLint x, GLint y]
  glWindowPos2iv: [void, const GLint *v]
  glWindowPos2s: [void, GLshort x, GLshort y]
  glWindowPos2sv: [void, const GLshort *v]
  glWindowPos3d: [void, GLdouble x, GLdouble y, GLdouble z]
  glWindowPos3dv: [void, const GLdouble *v]
  glWindowPos3f: [void, GLfloat x, GLfloat y, GLfloat z]
  glWindowPos3fv: [void, const GLfloat *v]
  glWindowPos3i: [void, GLint x, GLint y, GLint z]
  glWindowPos3iv: [void, const GLint *v]
  glWindowPos3s: [void, GLshort x, GLshort y, GLshort z]
  glWindowPos3sv: [void, const GLshort *v]
VERSION_1_5:
  glBeginQuery: [void, GLenum target, GLuint id]
  glBindBuffer: [void, GLenum target, GLuint buffer]
  glBufferData: [void, GLenum target, GLsizeiptr size, const GLvoid *data, GLenum
      usage]
  glBufferSubData: [void, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid
      *data]
  glDeleteBuffers: [void, GLsizei n, const GLuint *buffers]
  glDeleteQueries: [void, GLsizei n, const GLuint *ids]
  glEndQuery: [void, GLenum target]
  glGenBuffers: [void, GLsizei n, GLuint *buffers]
  glGenQueries: [void, GLsizei n, GLuint *ids]
  glGetBufferParameteriv: [void, GLenum target, GLenum pname, GLint *params]
  glGetBufferPointerv: [void, GLenum target, GLenum pname, GLvoid *params]
  glGetBufferSubData: [void, GLenum target, GLintptr offset, GLsizeiptr size, GLvoid
      *data]
  glGetQueryObjectiv: [void, GLuint id, GLenum pname, GLint *params]
  glGetQueryObjectuiv: [void, GLuint id, GLenum pname, GLuint *params]
  glGetQueryiv: [void, GLenum target, GLenum pname, GLint *params]
  glIsBuffer: [GLboolean, GLuint buffer]
  glIsQuery: [GLboolean, GLuint id]
  glMapBuffer: [GLvoid *, GLenum target, GLenum access]
  glUnmapBuffer: [GLboolean, GLenum target]
VERSION_2_0:
  glAttachShader: [void, GLuint program, GLuint shader]
  glBindAttribLocation: [void, GLuint program, GLuint index, const GLchar *name]
  glBlendEquationSeparate: [void, GLenum modeRGB, GLenum modeAlpha]
  glCompileShader: [void, GLuint shader]
  glCreateProgram: [GLuint]
  glCreateShader: [GLuint, GLenum type]
  glDeleteProgram: [void, GLuint program]
  glDeleteShader: [void, GLuint shader]
  glDetachShader: [void, GLuint program, GLuint shader]
  glDisableVertexAttribArray: [void, GLuint index]
  glDrawBuffers: [void, GLsizei n, const GLenum *bufs]
  glEnableVertexAttribArray: [void, GLuint index]
  glGetActiveAttrib: [void, GLuint program, GLuint index, GLsizei bufSize, GLsizei
      *length, GLint *size, GLenum *type, GLchar *name]
  glGetActiveUniform: [void, GLuint program, GLuint index, GLsizei bufSize, GLsizei
      *length, GLint *size, GLenum *type, GLchar *name]
  glGetAttachedShaders: [void, GLuint program, GLsizei maxCount, GLsizei *count, GLuint
      *obj]
  glGetAttribLocation: [GLint, GLuint program, const GLchar *name]
  glGetProgramInfoLog: [void, GLuint program, GLsizei bufSize, GLsizei *length, GLchar
      *infoLog]
  glGetProgramiv: [void, GLuint program, GLenum pname, GLint *params]
  glGetShaderInfoLog: [void, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar
      *infoLog]
  glGetShaderSource: [void, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar
      *source]
  glGetShaderiv: [void, GLuint shader, GLenum pname, GLint *params]
  glGetUniformLocation: [GLint, GLuint program, const GLchar *name]
  glGetUniformfv: [void, GLuint program, GLint location, GLfloat *params]
  glGetUniformiv: [void, GLuint program, GLint location, GLint *params]
  glGetVertexAttribPointerv: [void, GLuint index, GLenum pname, GLvoid *pointer]
  glGetVertexAttribdv: [void, GLuint index, GLenum pname, GLdouble *params]
  glGetVertexAttribfv: [void, GLuint index, GLenum pname, GLfloat *params]
  glGetVertexAttribiv: [void, GLuint index, GLenum pname, GLint *params]
  glIsProgram: [GLboolean, GLuint program]
  glIsShader: [GLboolean, GLuint shader]
  glLinkProgram: [void, GLuint program]
  glShaderSource: [void, GLuint shader, GLsizei count, GLchar*const *string, const
      GLint *length]
  glStencilFuncSeparate: [void, GLenum face, GLenum func, GLint ref, GLuint mask]
  glStencilMaskSeparate: [void, GLenum face, GLuint mask]
  glStencilOpSeparate: [void, GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass]
  glUniform1f: [void, GLint location, GLfloat v0]
  glUniform1fv: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform1i: [void, GLint location, GLint v0]
  glUniform1iv: [void, GLint location, GLsizei count, const GLint *value]
  glUniform2f: [void, GLint location, GLfloat v0, GLfloat v1]
  glUniform2fv: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform2i: [void, GLint location, GLint v0, GLint v1]
  glUniform2iv: [void, GLint location, GLsizei count, const GLint *value]
  glUniform3f: [void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2]
  glUniform3fv: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform3i: [void, GLint location, GLint v0, GLint v1, GLint v2]
  glUniform3iv: [void, GLint location, GLsizei count, const GLint *value]
  glUniform4f: [void, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat
      v3]
  glUniform4fv: [void, GLint location, GLsizei count, const GLfloat *value]
  glUniform4i: [void, GLint location, GLint v0, GLint v1, GLint v2, GLint v3]
  glUniform4iv: [void, GLint location, GLsizei count, const GLint *value]
  glUniformMatrix2fv: [void, GLint location, GLsizei count, GLboolean transpose, const
      GLfloat *value]
  glUniformMatrix3fv: [void, GLint location, GLsizei count, GLboolean transpose, const
      GLfloat *value]
  glUniformMatrix4fv: [void, GLint location, GLsizei count, GLboolean transpose, const
      GLfloat *value]
  glUseProgram: [void, GLuint program]
  glValidateProgram: [void, GLuint program]
  glVertexAttrib1d: [void, GLuint index, GLdouble x]
  glVertexAttrib1dv: [void, GLuint index, const GLdouble *v]
  glVertexAttrib1f: [void, GLuint index, GLfloat x]
  glVertexAttrib1fv: [void, GLuint index, const GLfloat *v]
  glVertexAttrib1s: [void, GLuint index, GLshort x]
  glVertexAttrib1sv: [void, GLuint index, const GLshort *v]
  glVertexAttrib2d: [void, GLuint index, GLdouble x, GLdouble y]
  glVertexAttrib2dv: [void, GLuint index, const GLdouble *v]
  glVertexAttrib2f: [void, GLuint index, GLfloat x, GLfloat y]
  glVertexAttrib2fv: [void, GLuint index, const GLfloat *v]
  glVertexAttrib2s: [void, GLuint index, GLshort x, GLshort y]
  glVertexAttrib2sv: [void, GLuint index, const GLshort *v]
  glVertexAttrib3d: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z]
  glVertexAttrib3dv: [void, GLuint index, const GLdouble *v]
  glVertexAttrib3f: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z]
  glVertexAttrib3fv: [void, GLuint index, const GLfloat *v]
  glVertexAttrib3s: [void, GLuint index, GLshort x, GLshort y, GLshort z]
  glVertexAttrib3sv: [void, GLuint index, const GLshort *v]
  glVertexAttrib4Nbv: [void, GLuint index, const GLbyte *v]
  glVertexAttrib4Niv: [void, GLuint index, const GLint *v]
  glVertexAttrib4Nsv: [void, GLuint index, const GLshort *v]
  glVertexAttrib4Nub: [void, GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte
      w]
  glVertexAttrib4Nubv: [void, GLuint index, const GLubyte *v]
  glVertexAttrib4Nuiv: [void, GLuint index, const GLuint *v]
  glVertexAttrib4Nusv: [void, GLuint index, const GLushort *v]
  glVertexAttrib4bv: [void, GLuint index, const GLbyte *v]
  glVertexAttrib4d: [void, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble
      w]
  glVertexAttrib4dv: [void, GLuint index, const GLdouble *v]
  glVertexAttrib4f: [void, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat
      w]
  glVertexAttrib4fv: [void, GLuint index, const GLfloat *v]
  glVertexAttrib4iv: [void, GLuint index, const GLint *v]
  glVertexAttrib4s: [void, GLuint index, GLshort x, GLshort y, GLshort z, GLshort
      w]
  glVertexAttrib4sv: [void, GLuint index, const GLshort *v]
  glVertexAttrib4ubv: [void, GLuint index, const GLubyte *v]
  glVertexAttrib4uiv: [void, GLuint index, const GLuint *v]
  glVertexAttrib4usv: [void, GLuint index, const GLushort *v]
  glVertexAttribPointer: [void, GLuint index, GLint size, GLenum type, GLboolean normalized,
    GLsizei stride, const GLvoid *pointer]
VERSION_2_1:
  glUniformMatrix2x3fv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix2x4fv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix3x2fv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix3x4fv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix4x2fv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
  glUniformMatrix4x3fv: [void, GLint location, GLsizei count, GLboolean transpose,
    const GLfloat *value]
VERSION_3_0:
  glBeginConditionalRender: [void, GLuint id, GLenum mode]
  glBeginTransformFeedback: [void, GLenum primitiveMode]
  glBindBufferBase: [void, GLenum target, GLuint index, GLuint buffer]
  glBindBufferRange: [void, GLenum target, GLuint index, GLuint buffer, GLintptr offset,
    GLsizeiptr size]
  glBindFragDataLocation: [void, GLuint program, GLuint color, const GLchar *name]
  glClampColor: [void, GLenum target, GLenum clamp]
  glClearBufferfi: [void, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil]
  glClearBufferfv: [void, GLenum buffer, GLint drawbuffer, const GLfloat *value]
  glClearBufferiv: [void, GLenum buffer, GLint drawbuffer, const GLint *value]
  glClearBufferuiv: [void, GLenum buffer, GLint drawbuffer, const GLuint *value]
  glColorMaski: [void, GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean
      a]
  glDisablei: [void, GLenum target, GLuint index]
  glEnablei: [void, GLenum target, GLuint index]
  glEndConditionalRender: [void]
  glEndTransformFeedback: [void]
  glGetBooleani_v: [void, GLenum target, GLuint index, GLboolean *data]
  glGetFragDataLocation: [GLint, GLuint program, const GLchar *name]
  glGetIntegeri_v: [void, GLenum target, GLuint index, GLint *data]
  glGetStringi: [const GLubyte *, GLenum name, GLuint index]
  glGetTexParameterIiv: [void, GLenum target, GLenum pname, GLint *params]
  glGetTexParameterIuiv: [void, GLenum target, GLenum pname, GLuint *params]
  glGetTransformFeedbackVarying: [void, GLuint program, GLuint index, GLsizei bufSize,
    GLsizei *length, GLsizei *size, GLenum *type, GLchar *name]
  glGetUniformuiv: [void, GLuint program, GLint location, GLuint *params]
  glGetVertexAttribIiv: [void, GLuint index, GLenum pname, GLint *params]
  glGetVertexAttribIuiv: [void, GLuint index, GLenum pname, GLuint *params]
  glIsEnabledi: [GLboolean, GLenum target, GLuint index]
  glTexParameterIiv: [void, GLenum target, GLenum pname, const GLint *params]
  glTexParameterIuiv: [void, GLenum target, GLenum pname, const GLuint *params]
  glTransformFeedbackVaryings: [void, GLuint program, GLsizei count, GLchar*const
      *varyings, GLenum bufferMode]
  glUniform1ui: [void, GLint location, GLuint v0]
  glUniform1uiv: [void, GLint location, GLsizei count, const GLuint *value]
  glUniform2ui: [void, GLint location, GLuint v0, GLuint v1]
  glUniform2uiv: [void, GLint location, GLsizei count, const GLuint *value]
  glUniform3ui: [void, GLint location, GLuint v0, GLuint v1, GLuint v2]
  glUniform3uiv: [void, GLint location, GLsizei count, const GLuint *value]
  glUniform4ui: [void, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3]
  glUniform4uiv: [void, GLint location, GLsizei count, const GLuint *value]
  glVertexAttribI1i: [void, GLuint index, GLint x]
  glVertexAttribI1iv: [void, GLuint index, const GLint *v]
  glVertexAttribI1ui: [void, GLuint index, GLuint x]
  glVertexAttribI1uiv: [void, GLuint index, const GLuint *v]
  glVertexAttribI2i: [void, GLuint index, GLint x, GLint y]
  glVertexAttribI2iv: [void, GLuint index, const GLint *v]
  glVertexAttribI2ui: [void, GLuint index, GLuint x, GLuint y]
  glVertexAttribI2uiv: [void, GLuint index, const GLuint *v]
  glVertexAttribI3i: [void, GLuint index, GLint x, GLint y, GLint z]
  glVertexAttribI3iv: [void, GLuint index, const GLint *v]
  glVertexAttribI3ui: [void, GLuint index, GLuint x, GLuint y, GLuint z]
  glVertexAttribI3uiv: [void, GLuint index, const GLuint *v]
  glVertexAttribI4bv: [void, GLuint index, const GLbyte *v]
  glVertexAttribI4i: [void, GLuint index, GLint x, GLint y, GLint z, GLint w]
  glVertexAttribI4iv: [void, GLuint index, const GLint *v]
  glVertexAttribI4sv: [void, GLuint index, const GLshort *v]
  glVertexAttribI4ubv: [void, GLuint index, const GLubyte *v]
  glVertexAttribI4ui: [void, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w]
  glVertexAttribI4uiv: [void, GLuint index, const GLuint *v]
  glVertexAttribI4usv: [void, GLuint index, const GLushort *v]
  glVertexAttribIPointer: [void, GLuint index, GLint size, GLenum type, GLsizei stride,
    const GLvoid *pointer]
VERSION_3_1:
  glDrawArraysInstanced: [void, GLenum mode, GLint first, GLsizei count, GLsizei instancecount]
  glDrawElementsInstanced: [void, GLenum mode, GLsizei count, GLenum type, const GLvoid
      *indices, GLsizei instancecount]
  glPrimitiveRestartIndex: [void, GLuint index]
  glTexBuffer: [void, GLenum target, GLenum internalformat, GLuint buffer]
VERSION_3_2:
  glFramebufferTexture: [void, GLenum target, GLenum attachment, GLuint texture, GLint
      level]
  glGetBufferParameteri64v: [void, GLenum target, GLenum pname, GLint64 *params]
  glGetInteger64i_v: [void, GLenum target, GLuint index, GLint64 *data]
VERSION_3_3:
  glVertexAttribDivisor: [void, GLuint index, GLuint divisor]
VERSION_4_0:
  glBlendEquationSeparatei: [void, GLuint buf, GLenum modeRGB, GLenum modeAlpha]
  glBlendEquationi: [void, GLuint buf, GLenum mode]
  glBlendFuncSeparatei: [void, GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha,
    GLenum dstAlpha]
  glBlendFunci: [void, GLuint buf, GLenum src, GLenum dst]
  glMinSampleShading: [void, GLfloat value]
Added jni/glshim/src/CMakeLists.txt.














































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
include_directories(util)

file(GLOB_RECURSE GL_SOURCES gl/*.c gl/*.cpp)
file(GLOB UTIL_SOURCES util/*.c util/math/*.c)
set(GL_SOURCES ${GL_SOURCES} ${UTIL_SOURCES})

add_library(GL SHARED ${GL_SOURCES})
set_target_properties(GL PROPERTIES VERSION 1 SOVERSION 1.2.0)
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    target_link_libraries(GL)
endif()

add_library(GL_static STATIC EXCLUDE_FROM_ALL ${GL_SOURCES})
set_target_properties(GL_static PROPERTIES OUTPUT_NAME GL)

add_library(GL2 SHARED EXCLUDE_FROM_ALL ${GL_SOURCES})
set_target_properties(GL2 PROPERTIES COMPILE_FLAGS -DUSE_ES2)

INSTALL(TARGETS GL
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
)
Added jni/glshim/src/config.h.










>
>
>
>
>
1
2
3
4
5
#define SYS_proxy 351
#define MAX_EVAL_ORDER 30

#define MAX_TEX 4
#define GL_TEXTURE_MAX (GL_TEXTURE0 + MAX_TEX)
Added jni/glshim/src/gl/array.c.


























































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include "array.h"
#include "eval.h"
#include "gl_str.h"

GLvoid *gl_copy_array(const GLvoid *src,
                      GLenum from, GLsizei width, GLsizei stride,
                      GLenum to, GLsizei to_width, GLsizei skip, GLsizei count,
                      GLboolean normalize) {
    if (! src || !count)
        return NULL;

    if (! stride)
        stride = width * gl_sizeof(from);

    const char *unknown_str = "libGL: gl_copy_array -> unsupported type %s\n";
    GLvoid *dst = malloc(count * to_width * gl_sizeof(to));
    GLsizei from_size = gl_sizeof(from) * width;
    GLsizei to_size = gl_sizeof(to) * to_width;

    if (to_width < width) {
        printf("Warning: gl_copy_array: %i < %i\n", to_width, width);
        return NULL;
    }

    // if stride is weird, we need to be able to arbitrarily shift src
    // so we leave it in a uintptr_t and cast after incrementing
    uintptr_t in = (uintptr_t)src;
    in += stride * skip;
    if (from == to && to_width >= width) {
        GL_TYPE_SWITCH(out, dst, to,
            for (int i = skip; i < (skip + count); i++) {
                memcpy(out, (GLvoid *)in, from_size);
                for (int j = width; j < to_width; j++) {
                    out[j] = 0;
                }
                out += to_width;
                in += stride;
            },
            default:
                printf(unknown_str, gl_str(from));
                return NULL;
        )
    } else {
        GL_TYPE_SWITCH(out, dst, to,
            for (int i = skip; i < (skip + count); i++) {
                GL_TYPE_SWITCH(input, in, from,
                    for (int j = 0; j < width; j++) {
                        if (from != to && normalize) {
                            out[j] = input[j] * gl_max_value(to);
                            out[j] /= gl_max_value(from);
                        } else {
                            out[j] = input[j];
                        }
                    }
                    for (int j = width; j < to_width; j++) {
                        if (j == 3) out[j] = 1;
                        else out[j] = 0;
                    }
                    out += to_width;
                    in += stride;
                ,
                    default:
                        printf(unknown_str, gl_str(from));
                        return NULL;
                )
            },
            default:
                printf(unknown_str, gl_str(to));
                return NULL;
        )
    }

    return dst;
}

GLvoid *gl_copy_pointer(pointer_state_t *ptr, GLsizei width, GLsizei skip, GLsizei count, GLboolean normalize) {
    return gl_copy_array(ptr->pointer, ptr->type, ptr->size, ptr->stride, GL_FLOAT, width, skip, count, normalize);
}

GLfloat *gl_pointer_index(pointer_state_t *p, GLint index, GLfloat buf[4]) {
    GLsizei size = gl_sizeof(p->type);
    GLsizei stride = p->stride ? p->stride : size * p->size;
    uintptr_t ptr = (uintptr_t)p->pointer + (stride * index);

    GL_TYPE_SWITCH(src, ptr, p->type,
        for (int i = 0; i < p->size; i++) {
            buf[i] = src[i];
        }
        // zero anything not set by the pointer
        for (int i = p->size; i < 4; i++) {
            buf[i] = 0;
        },
        default:
            printf("libGL: unsupported pointer type: %s\n", gl_str(p->type));
    )
    return buf;
}


GLfloat *copy_eval_double(GLenum target, GLint ustride, GLint uorder,
                          GLint vstride, GLint vorder,
                          const GLdouble *src) {

    GLsizei width = get_map_width(target);
    GLsizei dwidth = (uorder == 2 && vorder == 2) ? 0 : uorder * vorder;
    GLsizei hwidth = (uorder > vorder ? uorder : vorder) * width;
    GLsizei elements;
    GLsizei uinc = ustride - vorder * vstride;

    if (hwidth > dwidth) {
        elements = (uorder * vorder * width + hwidth);
    } else {
        elements = (uorder * vorder * width + dwidth);
    }
    GLfloat *points = malloc(elements * sizeof(GLfloat));
    GLfloat *dst = points;

    for (int i = 0; i < uorder; i++, src += uinc) {
        for (int j = 0; j < vorder; j++, src += vstride) {
            for (int k = 0; k < width; k++) {
                *dst++ = src[k];
            }
        }
    }
    return points;
}

void normalize_indices(GLushort *indices, GLsizei *max, GLsizei *min, GLsizei count) {
    *max = 0;
    *min = -1;
    for (int i = 0; i < count; i++) {
        GLsizei n = indices[i];
        if (*min == -1)
            *min = n;
        *min = (n < *min) ? n : *min;
        *max = (n > *max) ? n : *max;
    }
    for (int i = 0; i < count; i++) {
        indices[i] -= *min;
    }
}
Added jni/glshim/src/gl/array.h.


































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "gl.h"

#ifndef GL_ARRAY_H
#define GL_ARRAY_H

#include "types.h"

GLvoid *gl_copy_array(const GLvoid *src,
                      GLenum from, GLsizei width, GLsizei stride,
                      GLenum to, GLsizei to_width, GLsizei skip, GLsizei count,
                      GLboolean normalize);

GLvoid *gl_copy_pointer(pointer_state_t *ptr, GLsizei width, GLsizei skip, GLsizei count, GLboolean);
GLfloat *gl_pointer_index(pointer_state_t *ptr, GLint index, GLfloat buf[4]);
GLfloat *copy_eval_double(GLenum target, GLint ustride, GLint uorder, GLint vstride, GLint vorder, const GLdouble *points);
void normalize_indices(GLushort *indices, GLsizei *max, GLsizei *min, GLsizei count);
#endif
Added jni/glshim/src/gl/blend.c.


































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "loader.h"

#ifndef USE_ES2
void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
    PUSH_IF_COMPILING(glBlendColor);
    PROXY_OES(glBlendColorOES);
}

void glBlendEquation(GLenum mode) {
    PUSH_IF_COMPILING(glBlendEquation);
    PROXY_OES(glBlendEquationOES);
}

void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
    PUSH_IF_COMPILING(glBlendEquationSeparate);
    PROXY_OES(glBlendEquationSeparateOES);
}

void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {
    PUSH_IF_COMPILING(glBlendFuncSeparate);
    PROXY_OES(glBlendFuncSeparateOES);
}

void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
    printf("warning: neutered glBlendFuncSeparatei()\n");
    glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}

void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha) {
    printf("warning: neutered glBlendEquationSeparatei()\n");
    glBlendEquationSeparate(modeRGB, modeAlpha);
}
#endif
Added jni/glshim/src/gl/block.c.
































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
#include "block.h"
#include "gl_helpers.h"
#include "line.h"
#include "loader.h"
#include "matrix.h"
#include "render.h"
#include "texgen.h"
#include "texture.h"

#define alloc_sublist(n, type, cap) \
    (GLfloat *)malloc(n * gl_sizeof(type) * cap)

#define realloc_sublist(ref, n, type, cap) \
    if (ref)                         \
        ref = (GLfloat *)realloc(ref, n * gl_sizeof(type) * cap)

static void q2t_calc(int len) {
    if (len <= state.q2t.len)
        return;

    if (state.q2t.cache)
        free(state.q2t.cache);
    state.q2t.cache = malloc((len * 1.5 + 6) * sizeof(GLushort));
    state.q2t.len = len;

    int a = 0, b = 1, c = 2, d = 3;
    int winding[6] = {
        a, b, d,
        b, c, d,
    };

    GLushort *indices = state.q2t.cache;
    for (int i = 0; i < len; i += 4) {
        for (int j = 0; j < 6; j++) {
            indices[j] = i + winding[j];
        }
        indices += 6;
    }
}

block_t *bl_new(GLenum mode) {
    block_t *block = calloc(1, sizeof(block_t));
    block->cap = DEFAULT_BLOCK_CAPACITY;
    block->open = true;
    block->mode = mode;

    block->incomplete.color = -1;
    block->incomplete.normal = -1;
    for (int i = 0; i < MAX_TEX; i++) {
        block->incomplete.tex[i] = -1;
    }

    return block;
}

void bl_free(block_t *block) {
    free(block->vert);
    free(block->normal);
    free(block->color);
    for (int i = 0; i < MAX_TEX; i++) {
        free(block->tex[i]);
    }
    free(block->indices);
    free(block);
}

static inline void bl_grow(block_t *block) {
    if (! block->vert) {
        block->vert = alloc_sublist(3, GL_FLOAT, block->cap);
    }
    if (block->len >= block->cap) {
        block->cap += DEFAULT_BLOCK_CAPACITY;
        // TODO: store list types on block and use block->types.vert, etc directly?
        realloc_sublist(block->vert, 3, GL_FLOAT, block->cap);
        realloc_sublist(block->normal, 3, GL_FLOAT, block->cap);
        realloc_sublist(block->color, 4, GL_FLOAT, block->cap);
        for (int i = 0; i < MAX_TEX; i++) {
            realloc_sublist(block->tex[i], 2, GL_FLOAT, block->cap);
        }
    }
}

void bl_q2t(block_t *block) {
    if (!block->len || !block->vert || block->q2t) return;
    // TODO: split to multiple blocks if block->len > 65535

    q2t_calc(block->len);
    if (block->indices) {
        GLushort *indices = malloc(block->len);
        for (int i = 0; i < block->len; i++) {
            indices[i] = block->indices[state.q2t.cache[i]];
        }
        free(block->indices);
        block->indices = indices;
    }
    block->q2t = true;
    block->count = block->len * 1.5;
    return;
}

// affects global state based on the ending state of a block
// (used when a display list executes or a global block ends)
void bl_pollute(block_t *block) {
    // artificial (non-glBegin) blocks don't pollute global state
    // and empty blocks would cause undefined memcpy (negative index)
    if (!block || block->len <= 0 || block->artificial) {
        return;
    }
    int last = (block->len - 1);
    for (int i = 0; i < MAX_TEX; i++) {
        if (block->tex[i]) {
            glMultiTexCoord2fv(GL_TEXTURE0 + i, block->tex[i] + (2 * last));
        }
    }
    if (block->color) {
        glColor4fv(block->color + (4 * last));
    }
    if (block->normal) {
        glNormal3fv(block->normal + (3 * last));
    }
}

void bl_end(block_t *block) {
    if (! block->open)
        return;

    // only call this here if we're not compiling
    if (! state.list.active) {
        bl_pollute(block);
    }

    block->open = false;
    for (int i = 0; i < MAX_TEX; i++) {
        gltexture_t *bound = state.texture.bound[i];
        if (block->tex[i] && bound) {
            if (bound->width != bound->nwidth || bound->height != bound->nheight) {
                tex_coord_npot(block->tex[i], block->len, bound->width, bound->height, bound->nwidth, bound->nheight);
            }
            // GL_ARB_texture_rectangle
            if (state.texture.rect_arb[i]) {
                tex_coord_rect_arb(block->tex[i], block->len, bound->width, bound->height);
            }
        }
    }
    switch (block->mode) {
        case GL_QUADS:
            block->mode = GL_TRIANGLES;
            bl_q2t(block);
            break;
        case GL_POLYGON:
            block->mode = GL_TRIANGLE_FAN;
            break;
        case GL_QUAD_STRIP:
            block->mode = GL_TRIANGLE_STRIP;
            break;
    }
}

void bl_draw(block_t *block) {
    if (! block || block->len == 0) {
        return;
    }

    int pos;
    // texture is never incomplete, because we check enabled state on start?
    // TODO: the texture array could exist but be incomplete :(
    for (int i = 0; i < MAX_TEX; i++) {
        if ((pos = block->incomplete.tex[i]) >= 0) {
            for (int j = 0; j < block->len; j++) {
                memcpy(block->tex[i] + (2 * j), CURRENT->tex[i], 2 * sizeof(GLfloat));
            }
        }
    }
    if ((pos = block->incomplete.color) >= 0) {
        for (int i = 0; i < pos; i++) {
            memcpy(block->color + (4 * i), CURRENT->color, 4 * sizeof(GLfloat));
        }
    }
    if ((pos = block->incomplete.normal) >= 0) {
        for (int i = 0; i < pos; i++) {
            memcpy(block->normal + (3 * i), CURRENT->normal, 3 * sizeof(GLfloat));
        }
    }
    if (state.render.mode == GL_SELECT) {
        return gl_select_block(block);
    } else if (state.render.mode == GL_FEEDBACK) {
        return gl_feedback_block(block);
    }

    // glTexGen
    for (int i = 0; i < MAX_TEX; i++) {
        if (state.enable.texgen_s[i] || state.enable.texgen_t[i]) {
            gen_tex_coords(block, i);
        }
    }

    // copy vertex data for local matrix calculations
    GLfloat *vert, *tex[MAX_TEX] = {0};
#ifdef LOCAL_MATRIX
    vert = malloc(block->len * 3 * sizeof(GLfloat));
    for (int i = 0; i < block->len; i++) {
        gl_transform_vertex(&vert[i * 3], &block->vert[i * 3]);
    }
    for (int t = 0; t < MAX_TEX; t++) {
        if (block->tex[t]) {
            tex[t] = malloc(block->len * 2 * sizeof(GLfloat));
            for (int i = 0; i < block->len; i++) {
                gl_transform_texture(GL_TEXTURE0 + t, &tex[t][i * 2], &block->tex[t][i * 2]);
            }
        }
    }
#else
    vert = block->vert;
    for (int i = 0; i < MAX_TEX; i++) {
        tex[i] = block->tex[i];
    }
#endif

    LOAD_GLES(glDrawArrays);
    LOAD_GLES(glDrawElements);

    glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
#ifdef USE_ES2
    if (block->vert) {
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, block->vert);
    }
    gles_glDrawArrays(block->mode, 0, block->len);
#else
    if (vert) {
        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3, GL_FLOAT, 0, vert);
    } else {
        glDisableClientState(GL_VERTEX_ARRAY);
    }

    if (block->normal) {
        glEnableClientState(GL_NORMAL_ARRAY);
        glNormalPointer(GL_FLOAT, 0, block->normal);
    } else {
        glDisableClientState(GL_NORMAL_ARRAY);
    }

    if (block->color) {
        glEnableClientState(GL_COLOR_ARRAY);
        glColorPointer(4, GL_FLOAT, 0, block->color);
    } else {
        glDisableClientState(GL_COLOR_ARRAY);
    }

    bool stipple = false;
    // TODO: how do I stipple with texture?
    // TODO: what about multitexturing?
    if (! tex[0]) {
        // TODO: do we need to support GL_LINE_STRIP?
        if (block->mode == GL_LINES && state.enable.line_stipple) {
            stipple = true;
            glPushAttrib(GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT | GL_TEXTURE_BIT);
            glEnable(GL_BLEND);
            glEnable(GL_TEXTURE_2D);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE);
            tex[0] = gen_stipple_tex_coords(vert, block->len);
            bind_stipple_tex();
        }
    }
    for (int i = 0; i < MAX_TEX; i++) {
        GLuint old = state.texture.client + GL_TEXTURE0;
        if (tex[i]) {
            glClientActiveTexture(GL_TEXTURE0 + i);
            glEnableClientState(GL_TEXTURE_COORD_ARRAY);
            glTexCoordPointer(2, GL_FLOAT, 0, tex[i]);
            glClientActiveTexture(old);
        } else if (state.enable.tex_coord_array[i]) {
            glClientActiveTexture(GL_TEXTURE0 + i);
            glDisableClientState(GL_TEXTURE_COORD_ARRAY);
            glClientActiveTexture(old);
        }
    }

    GLushort *indices = block->indices;
    // if glDrawElements or glArrayElement was used, we should have already updated block->indices with q2t
    if (block->q2t && !indices)
        indices = state.q2t.cache;

    if (indices) {
        gles_glDrawElements(block->mode, block->count, GL_UNSIGNED_SHORT, indices);
    } else {
        gles_glDrawArrays(block->mode, 0, block->len);
    }
    if (stipple) {
        glPopAttrib();
        free(tex[0]);
    }
#endif
    glPopClientAttrib();
#ifdef LOCAL_MATRIX
    free(vert);
    for (int i = 0; i < MAX_TEX; i++) {
        free(tex[i]);
    }
#endif
}

void bl_vertex3f(block_t *block, GLfloat x, GLfloat y, GLfloat z) {
    bl_grow(block);

    if (block->normal) {
        GLfloat *normal = block->normal + (block->len * 3);
        memcpy(normal, CURRENT->normal, sizeof(GLfloat) * 3);
    }

    if (block->color) {
        GLfloat *color = block->color + (block->len * 4);
        memcpy(color, CURRENT->color, sizeof(GLfloat) * 4);
    }

    for (int i = 0; i < MAX_TEX; i++) {
        if (block->tex[i]) {
            GLfloat *tex = block->tex[i] + (block->len * 2);
            memcpy(tex, CURRENT->tex[i], sizeof(GLfloat) * 2);
        }
    }

    GLfloat *vert = block->vert + (block->len++ * 3);
    vert[0] = x;
    vert[1] = y;
    vert[2] = z;
}

void bl_track_color(block_t *block) {
    if (! block->color) {
        block->color = alloc_sublist(4, GL_FLOAT, block->cap);
        if (state.list.active) {
            block->incomplete.color = block->len - 1;
        } else {
            for (int i = 0; i < block->len; i++) {
                memcpy(block->color + (4 * i), CURRENT->color, 4 * sizeof(GLfloat));
            }
        }
    }
}

void bl_track_normal(block_t *block) {
    if (! block->normal) {
        block->normal = alloc_sublist(3, GL_FLOAT, block->cap);
        if (state.list.active) {
            block->incomplete.normal = block->len - 1;
        } else {
            for (int i = 0; i < block->len; i++) {
                memcpy(block->normal + (3 * i), CURRENT->normal, 3 * sizeof(GLfloat));
            }
        }
    }
}

void bl_track_tex(block_t *block, GLenum target) {
    target -= GL_TEXTURE0;
    if (! block->tex[target]) {
        block->tex[target] = alloc_sublist(2, GL_FLOAT, block->cap);
        if (state.list.active) {
            block->incomplete.tex[target] = block->len - 1;
        } else {
            for (int j = 0; j < block->len; j++) {
                memcpy(block->tex[target] + (2 * j), CURRENT->tex[target], 2 * sizeof(GLfloat));
            }
        }
    }
}
Added jni/glshim/src/gl/block.h.














































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef BLOCK_H
#define BLOCK_H

#include "types.h"

#define DEFAULT_BLOCK_CAPACITY 16
#define RENDER_BLOCK_FORMAT -1

extern block_t *bl_new(GLenum mode);
extern void bl_free(block_t *block);
extern void bl_draw(block_t *block);
extern void bl_q2t(block_t *block);
extern void bl_end(block_t *block);

extern void bl_vertex3f(block_t *block, GLfloat x, GLfloat y, GLfloat z);
extern void bl_track_color(block_t *block);
extern void bl_track_normal(block_t *block);
extern void bl_track_tex(block_t *block, GLenum target);
extern void bl_pollute(block_t *block);

extern void bl_push_call(block_t *block, packed_call_t *data);

#endif
Added jni/glshim/src/gl/clear.c.




















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "error.h"
#include "loader.h"

void glClear(GLbitfield mask) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glClear);
    PROXY_GLES(glClear);
}

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glClearColor);
    PROXY_GLES(glClearColor);
}

void glClearDepthf(GLclampf depth) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glClearDepthf);
    PROXY_GLES(glClearDepthf);
}

void glClearStencil(GLint s) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glClearStencil);
    PROXY_GLES(glClearStencil);
}
Added jni/glshim/src/gl/const.h.








































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef CONST_H
#define CONST_H

#ifdef __linux__
#include <linux/limits.h>
#endif

#ifndef PATH_MAX
#define PATH_MAX 254
#endif

#ifndef MIN
#define MIN(a, b) (((a) < (b) ? (a) : (b)))
#endif

#ifndef MAX
#define MAX(a, b) (((a) > (b) ? (a) : (b)))
#endif

#endif
Added jni/glshim/src/gl/defines.h.


















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <GL/gl.h>

#ifndef MIN
#define MIN(a, b) (((a) < (b) ? (a) : (b)))
#endif

#ifndef MAX
#define MAX(a, b) (((a) > (b) ? (a) : (b)))
#endif

// newly-defined GL functions
GLboolean glIsList(GLuint list);
GLuint glGenLists(GLsizei range);
void glActiveTextureARB(GLenum texture);
void glArrayElement(GLint i);
void glBegin(GLenum mode);
void glCallList(GLuint list);
void glCallLists(GLsizei n, GLenum type, const GLvoid *lists);
void glClearDepth(GLdouble depth);
void glDeleteList(GLuint list);
void glDeleteLists(GLuint list, GLsizei range);
void glDrawArrays(GLenum mode, GLint first, GLsizei count);
void glEnd();
void glEndList();
void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
void glGetDoublev(GLenum pname, GLdouble *params);
void glIndexf(GLfloat i);
void glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer);
void glListBase(GLuint base);
void glLockArraysEXT(GLint first, GLsizei count);
void glNewList(GLuint list, GLenum mode);
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
void glSecondaryColor3f(GLfloat r, GLfloat g, GLfloat b);
void glTexCoord2f(GLfloat s, GLfloat t);
void glUnlockArraysEXT();
void glVertex2f(GLfloat x, GLfloat y);
void glVertex2i(GLint x, GLint y);
void glVertex3f(GLfloat x, GLfloat y, GLfloat z);

// custom functions
void glPushCall(void *call);
Added jni/glshim/src/gl/depth.c.








































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "error.h"
#include "loader.h"

void glDepthFunc(GLenum func) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glDepthFunc);
    PROXY_GLES(glDepthFunc);
}

void glDepthMask(GLboolean flag) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glDepthMask);
    PROXY_GLES(glDepthMask);
}

void glDepthRangef(GLclampf near, GLclampf far) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glDepthRangef);
    PROXY_GLES(glDepthRangef);
}
Added jni/glshim/src/gl/error.h.








>
>
>
>
1
2
3
4
#include "get.h"

#define ERROR(pname) do { gl_set_error(pname); return; } while (0)
#define ERROR_IN_BLOCK() if (state.block.active) { ERROR(GL_INVALID_OPERATION); }
Added jni/glshim/src/gl/eval.c.








































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
// TODO: glIsEnabled(), glGetMap()
// TODO: GL_AUTO_NORMAL

#include "array.h"
#include "eval.h"
#include "gl_str.h"
#include "math/eval.h"

static inline map_state_t **get_map_pointer(GLenum target) {
    switch (target) {
        case GL_MAP1_COLOR_4:         return &state.map1.color4;
        case GL_MAP1_INDEX:           return &state.map1.index;
        case GL_MAP1_TEXTURE_COORD_1: return &state.map1.texture1;
        case GL_MAP1_TEXTURE_COORD_2: return &state.map1.texture2;
        case GL_MAP1_TEXTURE_COORD_3: return &state.map1.texture3;
        case GL_MAP1_TEXTURE_COORD_4: return &state.map1.texture4;
        case GL_MAP1_VERTEX_3:        return &state.map1.vertex3;
        case GL_MAP1_VERTEX_4:        return &state.map1.vertex4;
        case GL_MAP2_COLOR_4:         return &state.map2.color4;
        case GL_MAP2_INDEX:           return &state.map2.index;
        case GL_MAP2_TEXTURE_COORD_1: return &state.map2.texture1;
        case GL_MAP2_TEXTURE_COORD_2: return &state.map2.texture2;
        case GL_MAP2_TEXTURE_COORD_3: return &state.map2.texture3;
        case GL_MAP2_TEXTURE_COORD_4: return &state.map2.texture4;
        case GL_MAP2_VERTEX_3:        return &state.map2.vertex3;
        case GL_MAP2_VERTEX_4:        return &state.map2.vertex4;
        default:
            printf("libGL: unsupported glMap target %s\n", gl_str(target));
    }
    return NULL;
}

#define set_map_coords(n)         \
    map->n._1 = n##1;             \
    map->n._2 = n##2;             \
    map->n.d = 1.0/(n##2 - n##1); \
    map->n.stride = n##stride;    \
    map->n.order = n##order;

#define case_state(dims, magic, name)                           \
    case magic: {                                               \
        map->width = get_map_width(magic);                      \
        map_statef_t *m = (map_statef_t *)state.map##dims.name; \
        if (m) {                                                \
            if (m->free)                                        \
                free((void *)m->points);                        \
            free(m);                                            \
        }                                                       \
        state.map##dims.name = (map_state_t *)map;              \
        break;                                                  \
    }

#define map_switch(dims)                                                \
    switch (target) {                                                   \
        case_state(dims, GL_MAP##dims##_COLOR_4, color4);               \
        case_state(dims, GL_MAP##dims##_INDEX, index);                  \
        case_state(dims, GL_MAP##dims##_NORMAL, normal);                \
        case_state(dims, GL_MAP##dims##_TEXTURE_COORD_1, texture1);     \
        case_state(dims, GL_MAP##dims##_TEXTURE_COORD_2, texture2);     \
        case_state(dims, GL_MAP##dims##_TEXTURE_COORD_3, texture3);     \
        case_state(dims, GL_MAP##dims##_TEXTURE_COORD_4, texture4);     \
        case_state(dims, GL_MAP##dims##_VERTEX_3, vertex3);             \
        case_state(dims, GL_MAP##dims##_VERTEX_4, vertex4);             \
    }

void glMap1d(GLenum target, GLdouble u1, GLdouble u2,
             GLint ustride, GLint uorder, const GLdouble *points) {
    map_statef_t *map = malloc(sizeof(map_statef_t));
    map->type = GL_FLOAT; map->dims = 1; map->free = true;
    set_map_coords(u);
    map_switch(1);
    map->points = copy_eval_double(target, ustride, uorder, 0, 1, points);
}

void glMap1f(GLenum target, GLfloat u1, GLfloat u2,
             GLint ustride, GLint uorder, const GLfloat *points) {
    map_statef_t *map = malloc(sizeof(map_statef_t));
    map->type = GL_FLOAT; map->dims = 1; map->free = false;
    set_map_coords(u);
    map_switch(1);
    map->points = points;
}

void glMap2d(GLenum target, GLdouble u1, GLdouble u2,
             GLint ustride, GLint uorder, GLdouble v1, GLdouble v2,
             GLint vstride, GLint vorder, const GLdouble *points) {
    map_statef_t *map = malloc(sizeof(map_statef_t));
    map->type = GL_FLOAT; map->dims = 2; map->free = true;
    set_map_coords(u);
    set_map_coords(v);
    map_switch(2);
    map->points = copy_eval_double(target, ustride, uorder, vstride, vorder, points);
}

void glMap2f(GLenum target, GLfloat u1, GLfloat u2,
             GLint ustride, GLint uorder, GLfloat v1, GLfloat v2,
             GLint vstride, GLint vorder, const GLfloat *points) {
    map_statef_t *map = malloc(sizeof(map_statef_t));
    map->type = GL_FLOAT; map->dims = 2; map->free = false;
    set_map_coords(u);
    set_map_coords(v);
    map_switch(2);
    map->points = points;
}

#undef set_map_coords
#undef case_state
#undef map_switch

#define p_map(d, name, func, code) {                  \
    map_state_t *_map = state.map##d.name;            \
    if (_map) {                                       \
        if (_map->type == GL_DOUBLE) {                \
            map_stated_t *map = (map_stated_t *)_map; \
            printf("double: not implemented\n");      \
        } else if (_map->type == GL_FLOAT) {          \
            map_statef_t *map = (map_statef_t *)_map; \
            GLfloat out[4];                           \
            code                                      \
            func##v(out);                             \
        }                                             \
    }}

#define iter_maps(d, code)                  \
    p_map(d, color4, glColor4f, code);      \
    p_map(d, index, glIndexf, code);        \
    p_map(d, normal, glNormal3f, code);     \
    p_map(d, texture1, glTexCoord1f, code); \
    p_map(d, texture2, glTexCoord2f, code); \
    p_map(d, texture3, glTexCoord3f, code); \
    p_map(d, texture4, glTexCoord4f, code); \
    p_map(d, vertex3, glVertex3f, code);    \
    p_map(d, vertex4, glVertex4f, code);

void glEvalCoord1f(GLfloat u) {
    iter_maps(1,
        GLfloat uu = (u - map->u._1) * map->u.d;
        _math_horner_bezier_curve(map->points, out, uu, map->width, map->u.order);
    )
}

void glEvalCoord2f(GLfloat u, GLfloat v) {
    iter_maps(2,
        GLfloat uu = (u - map->u._1) * map->u.d;
        GLfloat vv = (v - map->v._1) * map->v.d;
        // TODO: GL_AUTONORMAL

        _math_horner_bezier_surf((GLfloat *)map->points, out, uu, vv,
                                 map->width, map->u.order, map->v.order);
    )
}

#undef p_map
#undef iter_maps

void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2) {
    // TODO: double support?
    map_statef_t *map;
    if (! state.map_grid)
        state.map_grid = malloc(sizeof(map_statef_t));

    map = (map_statef_t *)state.map_grid;
    map->dims = 1;
    map->u.n = un;
    map->u._1 = u1;
    map->u._2 = u2;
}

void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2,
                 GLint vn, GLfloat v1, GLfloat v2) {
    // TODO: double support?
    map_statef_t *map;
    if (! state.map_grid)
        state.map_grid = malloc(sizeof(map_statef_t));

    map = (map_statef_t *)state.map_grid;
    map->dims = 2;
    map->u.n = un;
    map->u._1 = u1;
    map->u._2 = u2;
    map->v.n = vn;
    map->v._1 = v1;
    map->v._2 = v2;
}

static inline GLenum eval_mesh_prep(map_statef_t **map, GLenum mode) {
    if (state.map2.vertex4) {
        *map = (map_statef_t *)state.map2.vertex4;
    } else if (state.map2.vertex3) {
        *map = (map_statef_t *)state.map2.vertex3;
    } else {
        return 0;
    }

    if ((*map)->type == GL_DOUBLE) {
        printf("libGL: GL_DOUBLE map not implemented\n");
        return 0;
    }

    switch (mode) {
        case GL_POINT: return GL_POINTS;
        case GL_LINE: return GL_LINE_STRIP;
        case GL_FILL: return GL_TRIANGLE_STRIP;
        case 0: return 1;
        default:
            printf("Unsupported glEvalMesh mode: %s\n", gl_str_primitive(mode));
            return 0;
    }
}

void glEvalMesh1(GLenum mode, GLint i1, GLint i2) {
    map_statef_t *map;
    GLenum renderMode = eval_mesh_prep(&map, mode);
    if (! renderMode)
        return;

    GLfloat u, du, u1;
    du = map->u.d;
    GLint i;
    glBegin(renderMode);
    for (u = u1, i = i1; i <= i2; i++, u += du) {
        glEvalCoord1f(u);
    }
    glEnd();
}

void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2) {
    map_statef_t *map;
    GLenum renderMode = eval_mesh_prep(&map, mode);
    if (! renderMode)
        return;

    GLfloat u, du, u1, v, dv, v1;
    du = map->u.d;
    dv = map->v.d;
    GLint i, j;
    glBegin(renderMode);
    for (v = v1, j = j1; j <= j2; j++, v += dv) {
        for (u = u1, i = i1; i <= i2; i++, u += du) {
            glEvalCoord2f(u, v);
            if (mode == GL_FILL)
                glEvalCoord2f(u, v + dv);
        }
    }
    glEnd();
    if (mode == GL_LINE) {
        glBegin(renderMode);
        for (u = u1, i = i1; i <= i2; i++, u += du) {
            for (v = v1, j = j1; j <= j2; j++, v += dv) {
                glEvalCoord2f(u, v);
            }
        }
        glEnd();
    }
}

void glEvalPoint1(GLint i) {
    map_statef_t *map;
    if (eval_mesh_prep(&map, 0))
        glEvalCoord1f(i + map->u.d);
}

void glEvalPoint2(GLint i, GLint j) {
    map_statef_t *map;
    if (eval_mesh_prep(&map, 0))
        glEvalCoord2f(i + map->u.d, j + map->v.d);
}

#define GL_GET_MAP(t, type)                                        \
void glGetMap##t##v(GLenum target, GLenum query, type *v) {        \
    map_statef_t *map = *(map_statef_t **)get_map_pointer(target); \
    if (map) {                                                     \
        switch (query) {                                           \
            case GL_COEFF: {                                       \
                const GLfloat *points = map->points;               \
                for (int i = 0; i < map->u.order; i++) {           \
                    if (map->dims == 2) {                          \
                        for (int j = 0; j < map->v.order; j++) {   \
                            *v++ = *points++;                      \
                        }                                          \
                    } else {                                       \
                        *v++ = *points++;                          \
                    }                                              \
                }                                                  \
                return;                                            \
            }                                                      \
            case GL_ORDER:                                         \
                *v++ = map->u.order;                               \
                if (map->dims == 2)                                \
                    *v++ = map->v.order;                           \
                return;                                            \
            case GL_DOMAIN:                                        \
                *v++ = map->u._1;                                  \
                *v++ = map->u._2;                                  \
                if (map->dims == 2) {                              \
                    *v++ = map->u._1;                              \
                    *v++ = map->u._2;                              \
                }                                                  \
                return;                                            \
        }                                                          \
    }                                                              \
}

GL_GET_MAP(i, GLint)
GL_GET_MAP(f, GLfloat)
GL_GET_MAP(d, GLdouble)

#undef GL_GET_MAP
Added jni/glshim/src/gl/eval.h.








































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef GL_MAP_H
#define GL_MAP_H

#include <GL/gl.h>

void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);
void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);
void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);

void glEvalCoord1d(GLdouble u);
void glEvalCoord1f(GLfloat u);
void glEvalCoord2d(GLdouble u, GLdouble v);
void glEvalCoord2f(GLfloat u, GLfloat v);

void glEvalMesh1(GLenum mode, GLint i1, GLint i2);
void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
void glEvalPoint1(GLint i);
void glEvalPoint2(GLint i, GLint j);
void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2);
void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2);
void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
void glGetMapdv(GLenum target, GLenum query, GLdouble *v);
void glGetMapfv(GLenum target, GLenum query, GLfloat *v);
void glGetMapiv(GLenum target, GLenum query, GLint *v);

static const GLsizei get_map_width(GLenum target) {
    switch (target) {
        case GL_MAP1_COLOR_4:         return 4;
        case GL_MAP1_INDEX:           return 3;
        case GL_MAP1_NORMAL:          return 3;
        case GL_MAP1_TEXTURE_COORD_1: return 1;
        case GL_MAP1_TEXTURE_COORD_2: return 2;
        case GL_MAP1_TEXTURE_COORD_3: return 3;
        case GL_MAP1_TEXTURE_COORD_4: return 4;
        case GL_MAP1_VERTEX_3:        return 3;
        case GL_MAP1_VERTEX_4:        return 4;
        case GL_MAP2_COLOR_4:         return 4;
        case GL_MAP2_INDEX:           return 3;
        case GL_MAP2_NORMAL:          return 3;
        case GL_MAP2_TEXTURE_COORD_1: return 1;
        case GL_MAP2_TEXTURE_COORD_2: return 2;
        case GL_MAP2_TEXTURE_COORD_3: return 3;
        case GL_MAP2_TEXTURE_COORD_4: return 4;
        case GL_MAP2_VERTEX_3:        return 3;
        case GL_MAP2_VERTEX_4:        return 4;
    }
    return 0;
}

#endif
Added jni/glshim/src/gl/get.c.








































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
#include <GL/gl.h>

#include "error.h"
#include "gl_helpers.h"
#include "gl_str.h"
#include "loader.h"
#include "matrix.h"

void gl_set_error(GLenum error) {
    LOAD_GLES(glGetError);
    // call upstream glGetError to clear the driver's error flag
    gles_glGetError();
    state.error = error;
}

// calls upstream glGetError and saves the flag for the next caller
GLenum gl_get_error() {
    LOAD_GLES(glGetError);
    state.error = gles_glGetError();
    return state.error;
}

GLenum glGetError() {
    LOAD_GLES(glGetError);
    if (state.block.active) {
        return GL_INVALID_OPERATION;
    }
    GLenum error = gles_glGetError();
    if (error == GL_NO_ERROR) {
        error = state.error;
    }
    state.error = GL_NO_ERROR;
    return error;
}

// config functions
const GLubyte *glGetString(GLenum name) {
    LOAD_GLES(glGetString);
    if (state.block.active) {
        gl_set_error(GL_INVALID_OPERATION);
        return NULL;
    }
    switch (name) {
        case GL_VERSION:
#ifdef USE_ES2
            return (GLubyte *)"4.3 glshim wrapper";
#else
            return (GLubyte *)"1.4 glshim wrapper";
#endif
        case GL_EXTENSIONS:
            return (const GLubyte *)(char *){
#ifndef USE_ES2
                // "GL_ARB_vertex_buffer_object "
                "GL_ARB_multitexture "
                "GL_ARB_texture_cube_map "
                "GL_EXT_secondary_color "
                "GL_EXT_texture_env_combine "
                "GL_EXT_texture_env_dot3 "

                // blending extensions
                "GL_EXT_blend_color "
                "GL_EXT_blend_equation_separate "
                "GL_EXT_blend_func_separate "
                "GL_EXT_blend_logic_op "
                "GL_EXT_blend_subtract "
#else
                "GL_ARB_vertex_shader "
                "GL_ARB_fragment_shader "
                "GL_ARB_vertex_buffer_object "
                "GL_EXT_framebuffer_object "
#endif
            };
        default:
            return gles_glGetString(name);
    }
}

static void gl_get(GLenum pname, GLenum type, GLvoid *params) {
    LOAD_GLES(glGetBooleanv);
    LOAD_GLES(glGetFloatv);
    LOAD_GLES(glGetIntegerv);
    ERROR_IN_BLOCK();

    int width = 1;
    switch (pname) {
        // GL_BOOL
        case GL_CURRENT_RASTER_POSITION_VALID:
        case GL_TEXTURE_GEN_Q:
        case GL_TEXTURE_GEN_R:
        case GL_TEXTURE_GEN_S:
        case GL_TEXTURE_GEN_T:
        {
            enable_state_t *enable = &state.enable;
            GLboolean tmp[4];
            GLboolean *out = tmp;
            if (type == GL_BOOL) {
                out = params;
            }
            switch (pname) {
                case GL_CURRENT_RASTER_POSITION_VALID:
                    *out = state.raster.valid;
                    break;
                case GL_TEXTURE_GEN_Q:
                    *out = enable->texgen_q[state.texture.active];
                    break;
                case GL_TEXTURE_GEN_R:
                    *out = enable->texgen_r[state.texture.active];
                    break;
                case GL_TEXTURE_GEN_S:
                    *out = enable->texgen_s[state.texture.active];
                    break;
                case GL_TEXTURE_GEN_T:
                    *out = enable->texgen_t[state.texture.active];
                    break;
            }
            if (type != GL_BOOL) {
                for (int i = 0; i < width; i++) {
                    if (type == GL_INT) {
                        GLint *ret = params;
                        ret[i] = out[i];
                    } else if (type == GL_FLOAT) {
                        GLfloat *ret = params;
                        ret[i] = out[i];
                    }
                }
            }
            break;
        }
        // GL_FLOAT
        case GL_CURRENT_COLOR:
        case GL_CURRENT_NORMAL:
        case GL_CURRENT_RASTER_COLOR:
        case GL_CURRENT_RASTER_POSITION:
        case GL_CURRENT_TEXTURE_COORDS:
        case GL_MODELVIEW_MATRIX:
        case GL_PROJECTION_MATRIX:
        case GL_TEXTURE_MATRIX:
        {
            bool scale = false;
            GLfloat tmp[4];
            GLfloat *out = tmp;
            if (type == GL_FLOAT) {
                out = params;
            }
            switch (pname) {
                case GL_CURRENT_COLOR:
                    width = 4;
                    memcpy(out, &CURRENT->color, sizeof(GLfloat) * 4);
                    break;
                case GL_CURRENT_NORMAL:
                    width = 3;
                    memcpy(out, &CURRENT->normal, sizeof(GLfloat) * 3);
                    break;
                case GL_CURRENT_RASTER_COLOR:
                    width = 4;
                    memcpy(out, &state.raster.color, sizeof(GLfloat) * 4);
                    break;
                case GL_CURRENT_RASTER_POSITION:
                    width = 4;
                    memcpy(out, &state.raster.pos, sizeof(GLfloat) * 4);
                    break;
                case GL_CURRENT_TEXTURE_COORDS:
                    width = 4;
                    memcpy(out, &CURRENT->tex, sizeof(GLfloat) * 2);
                    // TODO: need to update this when I track 4d texture coordinates
                    out[3] = 0;
                    out[4] = 0;
                    break;
                case GL_MODELVIEW_MATRIX:
                    width = 4;
                    gl_get_matrix(GL_MODELVIEW, out);
                    break;
                case GL_PROJECTION_MATRIX:
                    width = 4;
                    gl_get_matrix(GL_PROJECTION, out);
                    break;
                case GL_TEXTURE_MATRIX:
                    width = 4;
                    gl_get_matrix(GL_TEXTURE, out);
                    break;
            }
            if (type != GL_FLOAT) {
                for (int i = 0; i < width; i++) {
                    if (type == GL_INT) {
                        GLint *ret = params;
                        if (scale) {
                            ret[i] = out[i] * gl_max_value(type);
                        } else {
                            ret[i] = out[i];
                        }
                    } else if (type == GL_BOOL) {
                        GLboolean *ret = params;
                        ret[i] = !! out[i];
                    }
                }
            }
            break;
        }
        // GL_INT
        case GL_ATTRIB_STACK_DEPTH:
        case GL_AUX_BUFFERS:
        case GL_CLIENT_ATTRIB_STACK_DEPTH:
        case GL_MAX_ATTRIB_STACK_DEPTH:
        case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
        case GL_MAX_ELEMENTS_INDICES:
        case GL_MAX_MODELVIEW_STACK_DEPTH:
        case GL_MAX_NAME_STACK_DEPTH:
        case GL_MAX_PROJECTION_STACK_DEPTH:
        case GL_MAX_TEXTURE_STACK_DEPTH:
        case GL_MODELVIEW_STACK_DEPTH:
        case GL_NAME_STACK_DEPTH:
        case GL_PROJECTION_STACK_DEPTH:
        case GL_TEXTURE_STACK_DEPTH:
        {
            GLint tmp[4];
            GLint *out = tmp;
            if (type == GL_INT) {
                out = params;
            }
            switch (pname) {
                case GL_ATTRIB_STACK_DEPTH:
                    *out = tack_len(&state.stack.attrib);
                    break;
                case GL_AUX_BUFFERS:
                    *out = 0;
                    break;
                case GL_CLIENT_ATTRIB_STACK_DEPTH:
                    *out = tack_len(&state.stack.client);
                    break;
                case GL_MAX_ATTRIB_STACK_DEPTH:
                case GL_MAX_CLIENT_ATTRIB_STACK_DEPTH:
                case GL_MAX_ELEMENTS_INDICES:
                case GL_MAX_LIST_NESTING:
                case GL_MAX_MODELVIEW_STACK_DEPTH:
                case GL_MAX_NAME_STACK_DEPTH:
                case GL_MAX_PROJECTION_STACK_DEPTH:
                case GL_MAX_TEXTURE_STACK_DEPTH:
                    // NOTE: GL_MAX_ELEMENTS_INDICES is *actually* 65535, the others in this group are arbitrary
                    *out = 65535;
                    break;
                case GL_MODELVIEW_STACK_DEPTH:
                    *out = tack_len(&state.matrix.model.stack);
                    break;
                case GL_NAME_STACK_DEPTH:
                    *out = tack_len(&state.select.names);
                    break;
                case GL_PROJECTION_STACK_DEPTH:
                    *out = tack_len(&state.matrix.projection.stack);
                    break;
                case GL_TEXTURE_STACK_DEPTH:
                    *out = tack_len(&state.matrix.texture[state.texture.active].stack);
                    break;
            }
            if (type != GL_INT) {
                for (int i = 0; i < width; i++) {
                    if (type == GL_FLOAT) {
                        GLfloat *ret = params;
                        ret[i] = out[i];
                    } else if (type == GL_BOOL) {
                        GLboolean *ret = params;
                        ret[i] = !! out[i];
                    }
                }
            }
            break;
        }
        default:
        {
            GLenum saved = glGetError();
            switch (type) {
                case GL_BOOL:
                    gles_glGetBooleanv(pname, params);
                    break;
                case GL_FLOAT:
                    gles_glGetFloatv(pname, params);
                    break;
                case GL_INT:
                    gles_glGetIntegerv(pname, params);
                    break;
            }
            GLenum error = gl_get_error();
            if (error == GL_INVALID_ENUM) {
                fprintf(stderr, "libGL: GL_INVALID_ENUM when calling glGet<%s>(%s)\n", gl_str(type), gl_str(pname));
            } else if (! error) {
                gl_set_error(saved);
            }
            break;
         }
    }
}

void glGetBooleanv(GLenum pname, GLboolean *params) {
    gl_get(pname, GL_BOOL, params);
}

void glGetFloatv(GLenum pname, GLfloat *params) {
    gl_get(pname, GL_FLOAT, params);
}

void glGetIntegerv(GLenum pname, GLint *params) {
    gl_get(pname, GL_INT, params);
}

/*
void glGetFixedv(GLenum pname, GLfloat *params) {
    // meh
}
*/
Added jni/glshim/src/gl/get.h.








>
>
>
>
1
2
3
4
#include <GL/gl.h>

GLenum gl_get_error();
void gl_set_error(GLenum error);
Added jni/glshim/src/gl/gl.c.












































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
#include "array.h"
#include "block.h"
#include "error.h"
#include "list.h"
#include "loader.h"
#include "texture.h"
#include "types.h"

#ifdef _THREAD_SAFE
static pthread_once_t glonce = PTHREAD_ONCE_INIT;
static pthread_key_t glkey;
static const glstate_t state_template =
#else
glstate_t state =
#endif
{
    0,
    .current = {
        .color = {1.0f, 1.0f, 1.0f, 1.0f},
        .normal = {0.0f, 0.0f, 1.0f},
        .tex = {[0 ... MAX_TEX - 1] = {0.0f, 0.0f}},
    },
    .matrix = {
        .mode = GL_MODELVIEW,
    },
    .render = {
        .mode = GL_RENDER,
    },
    .raster = {
        .buf = NULL,
        .pos = {0.0f, 0.0f, 0.0f, 1.0f},
        .color = {1.0f, 1.0f, 1.0f, 1.0f},
        .pixel = 0xFFFFFFFF,
        .valid = 1,
    },
    .stack = {0},
    .texgen = {[0 ... MAX_TEX - 1] = {
        .R = GL_EYE_LINEAR,
        .Q = GL_EYE_LINEAR,
        .S = GL_EYE_LINEAR,
        .T = GL_EYE_LINEAR,
        .Rv = {0, 0, 0, 0},
        .Qv = {0, 0, 0, 0},
        .Sv = {1, 0, 0, 0},
        .Tv = {0, 1, 0, 0},
    }},
    .mvp_dirty = true,
    .stippleFactor = 1,
    .stipplePattern = 0xFFFF,
    .stippleData = NULL,
    .stippleTexture = 0,
    .q2t = { NULL, 0 },
};

#ifdef _THREAD_SAFE
static void tsd_done(void *stptr) {
    if (stptr != NULL) {
        free(stptr);
    }
}

static void once_init(void) {
    pthread_key_create(&glkey, tsd_done);
}

glstate_t *_gl_get_state(void) {
    glstate_t *stptr;
    if (glonce == PTHREAD_ONCE_INIT) {
        pthread_once(&glonce, once_init);
    }
    stptr = (glstate_t *)pthread_getspecific(glkey);
    if (stptr == NULL) {
        stptr = malloc(sizeof (glstate_t));
        *stptr = state_template;
        pthread_setspecific(glkey, stptr);
    }
    return stptr;
}
#endif

static void proxy_glEnable(GLenum cap, bool enable, void (*next)(GLenum)) {
    #define proxy_enable(constant, name) \
        case constant: \
            if (state.enable.name != enable) { \
                state.enable.name = enable; \
                next(cap); \
            } \
            break
    #define enable(constant, name) \
        case constant: state.enable.name = enable; break;

    // TODO: maybe could be weird behavior if someone tried to:
    // 1. enable GL_TEXTURE_1D
    // 2. enable GL_TEXTURE_2D
    // 3. disable GL_TEXTURE_1D
    // 4. render. GL_TEXTURE_2D would be disabled.
    cap = map_tex_target(cap);

    switch (cap) {
        proxy_enable(GL_BLEND, blend);
        proxy_enable(GL_TEXTURE_2D, texture_2d[state.texture.active]);
        enable(GL_TEXTURE_GEN_R, texgen_r[state.texture.active]);
        enable(GL_TEXTURE_GEN_Q, texgen_q[state.texture.active]);
        enable(GL_TEXTURE_GEN_S, texgen_s[state.texture.active]);
        enable(GL_TEXTURE_GEN_T, texgen_t[state.texture.active]);
        enable(GL_LINE_STIPPLE, line_stipple);

        // for glDrawArrays
        proxy_enable(GL_VERTEX_ARRAY, vertex_array);
        proxy_enable(GL_NORMAL_ARRAY, normal_array);
        proxy_enable(GL_COLOR_ARRAY, color_array);
        proxy_enable(GL_TEXTURE_COORD_ARRAY, tex_coord_array[state.texture.client]);
        default: next(cap); break;
    }
    #undef proxy_enable
    #undef enable
}

void glEnable(GLenum cap) {
    PUSH_IF_COMPILING(glEnable);
    LOAD_GLES(glEnable);
    ERROR_IN_BLOCK();
    proxy_glEnable(cap, true, gles_glEnable);
}

void glDisable(GLenum cap) {
    PUSH_IF_COMPILING(glDisable);
    ERROR_IN_BLOCK();
    LOAD_GLES(glDisable);
    proxy_glEnable(cap, false, gles_glDisable);
}

#ifndef USE_ES2
void glEnableClientState(GLenum cap) {
    LOAD_GLES(glEnableClientState);
    ERROR_IN_BLOCK();
    proxy_glEnable(cap, true, gles_glEnableClientState);
}

void glDisableClientState(GLenum cap) {
    LOAD_GLES(glDisableClientState);
    ERROR_IN_BLOCK();
    proxy_glEnable(cap, false, gles_glDisableClientState);
}
#endif

GLboolean glIsEnabled(GLenum cap) {
    LOAD_GLES(glIsEnabled);
    if (state.block.active) {
        gl_set_error(GL_INVALID_OPERATION);
        return 0;
    }
    switch (cap) {
        case GL_LINE_STIPPLE:
            return state.enable.line_stipple;
        case GL_TEXTURE_GEN_S:
            return state.enable.texgen_s[state.texture.active];
        case GL_TEXTURE_GEN_T:
            return state.enable.texgen_t[state.texture.active];
        case GL_TEXTURE_COORD_ARRAY:
            return state.enable.tex_coord_array[state.texture.client];
        default:
            return gles_glIsEnabled(cap);
    }
}

static block_t *block_from_arrays(GLenum mode, GLsizei skip, GLsizei count) {
    block_t *block = bl_new(mode);
    block->artificial = true;

    block->len = block->cap = count;
    if (state.enable.vertex_array) {
        block->vert = gl_copy_pointer(&state.pointers.vertex, 3, skip, count, false);
    }
    if (state.enable.color_array) {
        block->color = gl_copy_pointer(&state.pointers.color, 4, skip, count, true);
    }
    if (state.enable.normal_array) {
        block->normal = gl_copy_pointer(&state.pointers.normal, 3, skip, count, false);
    }
    for (int i = 0; i < MAX_TEX; i++) {
        if (state.enable.tex_coord_array[i]) {
            block->tex[i] = gl_copy_pointer(&state.pointers.tex_coord[i], 2, skip, count, false);
        }
    }
    return block;
}

static inline bool should_intercept_render(GLenum mode) {
#ifdef LOCAL_MATRIX
    // gotta force this for matrix stack
    return true;
#endif

    bool texgen_enabled = false;
    for (int i = 0; i < MAX_TEX; i++) {
        texgen_enabled |= state.enable.texgen_s[i] || state.enable.texgen_t[i];
    }
    return (
        (state.enable.vertex_array && ! gl_valid_vertex_type(state.pointers.vertex.type)) ||
        (texgen_enabled) ||
        (mode == GL_LINES && state.enable.line_stipple) ||
        (mode == GL_QUADS) ||
        (state.render.mode == GL_FEEDBACK || state.render.mode == GL_SELECT)
    );
}

void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *uindices) {
    // TODO: split for count > 65535?
    GLushort *indices = gl_copy_array(uindices, type, 1, 0, GL_UNSIGNED_SHORT, 1, 0, count, false);
    // TODO: do this in a more direct fashion.
    if (should_intercept_render(mode)) {
        glBegin(mode);
        state.block.active->artificial = true;
        for (int i = 0; i < count; i++) {
            glArrayElement(indices[i]);
        }
        glEnd();
        free(indices);
        return;
    }

    displaylist_t *list = state.list.active;
    if (list) {
        GLsizei min, max;

        normalize_indices(indices, &max, &min, count);
        block_t *block = block_from_arrays(mode, min, max + 1);
        block->indices = indices;
        block->count = count;

        bl_end(block);
        if (list) {
            dl_append_block(list, block);
        } else {
            bl_draw(block);
            bl_free(block);
        }
    } else {
        LOAD_GLES(glDrawElements);
        gles_glDrawElements(mode, count, type, indices);
        free(indices);
    }
}

void glDrawArrays(GLenum mode, GLint first, GLsizei count) {
    if (mode == GL_QUAD_STRIP)
        mode = GL_TRIANGLE_STRIP;

    displaylist_t *active = state.list.active;
    if (active) {
        block_t *block = block_from_arrays(mode, first, count);
        bl_end(block);
        dl_append_block(active, block);
        return;
    }

    if (should_intercept_render(mode)) {
        block_t *block = block_from_arrays(mode, first, count);
        bl_end(block);
        bl_draw(block);
        bl_free(block);
    } else {
        LOAD_GLES(glDrawArrays);
        gles_glDrawArrays(mode, first, count);
    }
}

#ifndef USE_ES2
#define clone_gl_pointer(t, s)\
    t.size = s; t.type = type; t.stride = stride; t.pointer = pointer;
void glVertexPointer(GLint size, GLenum type,
                     GLsizei stride, const GLvoid *pointer) {
    LOAD_GLES(glVertexPointer);
    clone_gl_pointer(state.pointers.vertex, size);
    gles_glVertexPointer(size, type, stride, pointer);
}
void glColorPointer(GLint size, GLenum type,
                     GLsizei stride, const GLvoid *pointer) {
    LOAD_GLES(glColorPointer);
    clone_gl_pointer(state.pointers.color, size);
    gles_glColorPointer(size, type, stride, pointer);
}
void glNormalPointer(GLenum type, GLsizei stride, const GLvoid *pointer) {
    LOAD_GLES(glNormalPointer);
    clone_gl_pointer(state.pointers.normal, 3);
    gles_glNormalPointer(type, stride, pointer);
}
void glTexCoordPointer(GLint size, GLenum type,
                     GLsizei stride, const GLvoid *pointer) {
    LOAD_GLES(glTexCoordPointer);
    clone_gl_pointer(state.pointers.tex_coord[state.texture.client], size);
    gles_glTexCoordPointer(size, type, stride, pointer);
}
#undef clone_gl_pointer
#endif

void glInterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer) {
    if (stride < 0) {
        ERROR(GL_INVALID_VALUE);
    }
    uintptr_t ptr = (uintptr_t)pointer;
    // element lengths
    GLsizei tex = 0, color = 0, normal = 0, vert = 0;
    // element formats
    GLenum tf, cf, nf, vf;
    tf = cf = nf = vf = GL_FLOAT;

    switch (format) {
        case GL_V2F: vert = 2; break;
        case GL_V3F: vert = 3; break;
        case GL_C4UB_V2F:
            color = 4; cf = GL_UNSIGNED_BYTE;
            vert = 2;
            break;
        case GL_C4UB_V3F:
            color = 4; cf = GL_UNSIGNED_BYTE;
            vert = 3;
            break;
        case GL_C3F_V3F:
            color = 3;
            vert = 4;
            break;
        case GL_N3F_V3F:
            normal = 3;
            vert = 3;
            break;
        case GL_C4F_N3F_V3F:
            color = 4;
            normal = 3;
            vert = 3;
            break;
        case GL_T2F_V3F:
            tex = 2;
            vert = 3;
            break;
        case GL_T4F_V4F:
            tex = 4;
            vert = 4;
            break;
        case GL_T2F_C4UB_V3F:
            tex = 2;
            color = 4; cf = GL_UNSIGNED_BYTE;
            vert = 3;
            break;
        case GL_T2F_C3F_V3F:
            tex = 2;
            color = 3;
            vert = 3;
            break;
        case GL_T2F_N3F_V3F:
            tex = 2;
            normal = 3;
            vert = 3;
            break;
        case GL_T2F_C4F_N3F_V3F:
            tex = 2;
            color = 4;
            normal = 3;
            vert = 3;
            break;
        case GL_T4F_C4F_N3F_V4F:
            tex = 4;
            color = 4;
            normal = 3;
            vert = 4;
            break;
        default:
            ERROR(GL_INVALID_ENUM);
    }
    if (! stride)
        stride = tex * gl_sizeof(tf) +
                 color * gl_sizeof(cf) +
                 normal * gl_sizeof(nf) +
                 vert * gl_sizeof(vf);
    if (tex) {
        glTexCoordPointer(tex, tf, stride, (GLvoid *)ptr);
        ptr += tex * gl_sizeof(tf);
    }
    if (color) {
        glColorPointer(color, cf, stride, (GLvoid *)ptr);
        ptr += color * gl_sizeof(cf);
    }
    if (normal) {
        glNormalPointer(nf, stride, (GLvoid *)ptr);
        ptr += normal * gl_sizeof(nf);
    }
    if (vert)
        glVertexPointer(vert, vf, stride, (GLvoid *)ptr);
}

// immediate mode functions

void glBegin(GLenum mode) {
    if (! gl_valid_mode(mode)) {
        ERROR(GL_INVALID_ENUM);
    }
    ERROR_IN_BLOCK();
    block_t *block = state.block.active = bl_new(mode);
    displaylist_t *list = state.list.active;
    if (list) {
        dl_append_block(list, block);
    }
}

void glEnd() {
    block_t *block = state.block.active;
    if (! block) {
        ERROR(GL_INVALID_OPERATION);
    }

    state.block.active = NULL;
    bl_end(block);
    // render if we're not in a display list
    if (! state.list.active) {
        bl_draw(block);
        bl_free(block);
    }
}

void glVertex3f(GLfloat x, GLfloat y, GLfloat z) {
    block_t *block = state.block.active;
    if (block) {
        bl_vertex3f(block, x, y, z);
    }
}

void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) {
    block_t *block = state.block.active;
    if (block) {
        bl_track_normal(block);
    }

    GLfloat *normal = CURRENT->normal;
    normal[0] = nx;
    normal[1] = ny;
    normal[2] = nz;

    if (! block) {
        PUSH_IF_COMPILING(glNormal3f);
        LOAD_GLES(glNormal3f);
        gles_glNormal3f(nx, ny, nz);
    }
}

void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
    block_t *block = state.block.active;
    if (block) {
        bl_track_color(block);
    }

    GLfloat *color = CURRENT->color;
    color[0] = red;
    color[1] = green;
    color[2] = blue;
    color[3] = alpha;

#ifndef USE_ES2
    if (! block) {
        PUSH_IF_COMPILING(glColor4f);
        LOAD_GLES(glColor4f);
        gles_glColor4f(red, green, blue, alpha);
    }
#endif
}

void glTexCoord2f(GLfloat s, GLfloat t) {
    glMultiTexCoord2f(GL_TEXTURE0, s, t);
}

void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t) {
    block_t *block = state.block.active;
    if (block) {
        bl_track_tex(block, target);
    }

    GLfloat *tex = CURRENT->tex[target - GL_TEXTURE0];
    tex[0] = s;
    tex[1] = t;

    if (! block) {
        PUSH_IF_COMPILING(glMultiTexCoord2f);
    }
}

void glArrayElement(GLint i) {
    if (i < 0) {
        ERROR(GL_INVALID_VALUE);
    }
    GLfloat *v, buf[4];
    pointer_state_t *p;
    p = &state.pointers.color;
    if (state.enable.color_array && p->pointer) {
        v = gl_pointer_index(p, i, buf);
        GLuint scale = gl_max_value(p->type);
        // color[3] defaults to 1.0f
        if (p->size < 4)
            v[3] = 1.0f;

        // scale color coordinates to a 0 - 1.0 range
        for (int i = 0; i < p->size; i++) {
            v[i] /= scale;
        }
        glColor4fv(v);
    }
    p = &state.pointers.normal;
    if (state.enable.normal_array && p->pointer) {
        v = gl_pointer_index(p, i, buf);
        glNormal3fv(v);
    }
    for (int i = 0; i < MAX_TEX; i++) {
        p = &state.pointers.tex_coord[i];
        if (state.enable.tex_coord_array[i] && p->pointer) {
            v = gl_pointer_index(p, i, buf);
            glMultiTexCoord2fv(GL_TEXTURE0 + i, v);
        }
    }
    p = &state.pointers.vertex;
    if (state.enable.vertex_array && p->pointer) {
        v = gl_pointer_index(p, i, buf);
        if (p->size == 4) {
            glVertex4fv(v);
        } else {
            glVertex3fv(v);
        }
    }
}

// TODO: between a lock and unlock, I can assume the array pointers are unchanged
// so I can build a block_t on the first call and hold onto it
// maybe I need a way to call a block_t with (first, count)
void glLockArraysEXT(GLint first, GLsizei count) {
    state.block.locked = true;
}

void glUnlockArraysEXT() {
    state.block.locked = false;
}

// display lists

static displaylist_t *get_list(GLuint list) {
    return tack_get(&state.lists, list - 1);
}

GLuint glGenLists(GLsizei range) {
    if (range < 0) {
        gl_set_error(GL_INVALID_VALUE);
        return 0;
    }
    if (state.block.active) {
        gl_set_error(GL_INVALID_OPERATION);
        return 0;
    }
    int start = tack_len(&state.lists);
    for (int i = 0; i < range; i++) {
        tack_set(&state.lists, start + i, NULL);
    }
    return start + 1;
}

void glNewList(GLuint list, GLenum mode) {
    // TODO: make sure this doesn't break anything
    if (list == 0) {
        ERROR(GL_INVALID_VALUE);
    }
    if (mode != GL_COMPILE && mode != GL_COMPILE_AND_EXECUTE) {
        ERROR(GL_INVALID_ENUM);
    }
    if (state.block.active || state.list.active) {
        ERROR(GL_INVALID_OPERATION);
    }
    displaylist_t *dl = dl_alloc();
    if (dl == NULL) {
        ERROR(GL_OUT_OF_MEMORY);
    }
    state.list.name = list;
    state.list.mode = mode;
    state.list.active = dl;
}

void glEndList() {
    GLuint list = state.list.name;
    displaylist_t *dl = state.list.active;
    if (!dl || state.block.active) {
        ERROR(GL_INVALID_OPERATION);
    }

    displaylist_t *old = get_list(list);
    if (old) {
        dl_free(old);
    }

    tack_set(&state.lists, list - 1, dl);
    state.list.active = NULL;
    if (state.list.mode == GL_COMPILE_AND_EXECUTE) {
        glCallList(list);
    }
}

void glCallList(GLuint list) {
    displaylist_t *l = get_list(list);
    displaylist_t *active = state.list.active;
    if (l) {
        if (active) {
            dl_extend(active, l);
        } else {
            dl_call(l);
        }
    }
}

void glPushCall(void *call) {
    displaylist_t *active = state.list.active;
    if (active) {
        dl_append(active, call);
    }
}

void glCallLists(GLsizei n, GLenum type, const GLvoid *lists) {
    #define call(name, type) \
        case name: glCallList(((type *)lists)[i] + state.list.base); break

    // seriously wtf
    #define call_bytes(name, stride)                             \
        case name:                                               \
            l = (GLubyte *)lists;                                \
            list = 0;                                            \
            for (j = 0; j < stride; j++) {                       \
                list += *(l + (i * stride + j)) << (stride - j); \
            }                                                    \
            glCallList(list + state.list.base);                  \
            break

    if (n < 0) {
        ERROR(GL_INVALID_VALUE);
    }
    unsigned int i, j;
    GLuint list;
    GLubyte *l;
    for (i = 0; i < n; i++) {
        switch (type) {
            call(GL_BYTE, GLbyte);
            call(GL_UNSIGNED_BYTE, GLubyte);
            call(GL_SHORT, GLshort);
            call(GL_UNSIGNED_SHORT, GLushort);
            call(GL_INT, GLint);
            call(GL_UNSIGNED_INT, GLuint);
            call(GL_FLOAT, GLfloat);
            call_bytes(GL_2_BYTES, 2);
            call_bytes(GL_3_BYTES, 3);
            call_bytes(GL_4_BYTES, 4);
            default:
                ERROR(GL_INVALID_ENUM);
        }
    }
    #undef call
    #undef call_bytes
}

void glDeleteList(GLuint list) {
    displaylist_t *l = get_list(list);
    if (l) {
        if (state.list.active == l) {
            state.list.active = NULL;
        }
        dl_free(l);
        tack_set(&state.lists, list - 1, NULL);
    }

    // lists just grow upwards, maybe use a better storage mechanism?
}

void glDeleteLists(GLuint list, GLsizei range) {
    if (range < 0) {
        ERROR(GL_INVALID_VALUE);
    }
    ERROR_IN_BLOCK();
    for (int i = 0; i < range; i++) {
        glDeleteList(list + i);
    }
}

void glListBase(GLuint base) {
    state.list.base = base;
}

GLboolean glIsList(GLuint list) {
    if (state.block.active) {
        gl_set_error(GL_INVALID_OPERATION);
        return 0;
    }
    return get_list(list) ? true : false;
}
Added jni/glshim/src/gl/gl.h.




































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <dlfcn.h>
#include <inttypes.h>
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "types.h"

#ifdef __linux__
#include <linux/limits.h>
#endif

#ifndef PATH_MAX
#define PATH_MAX 254
#endif

#ifdef __ARM_NEON__
#include <arm_neon.h>
#endif

#ifndef GL_H
#define GL_H

#include "../config.h"
#include "wrap/es.h"

#define CURRENT (state.list.active ? &state.list.current : &state.current)

#include "gl_helpers.h"
#include "defines.h"

#endif
Added jni/glshim/src/gl/light.c.




















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "error.h"
#include "gl_str.h"
#include "light.h"
#include "loader.h"
#include "matrix.h"

#ifndef USE_ES2
void glLightModelf(GLenum pname, GLfloat param) {
    LOAD_GLES(glLightModelf);
    ERROR_IN_BLOCK();
    switch (pname) {
        case GL_LIGHT_MODEL_AMBIENT:
        case GL_LIGHT_MODEL_TWO_SIDE:
            gles_glLightModelf(pname, param);
        default:
            printf("stubbed glLightModelf(%s, %.2f)\n", gl_str(pname), param);
            break;
    }
}

void glMaterialfv(GLenum face, GLenum pname, const GLfloat *params) {
    PUSH_IF_COMPILING(glMaterialfv);
    LOAD_GLES(glMaterialfv);
    gles_glMaterialfv(GL_FRONT_AND_BACK, pname, params);
}

#ifdef LOCAL_MATRIX
void glLightfv(GLenum light, GLenum pname, const GLfloat *params) {
    LOAD_GLES(glLightfv);
    ERROR_IN_BLOCK();
    GLfloat tmp[4];
    switch (pname) {
        case GL_POSITION:
            gl_transform_light(tmp, params);
            params = tmp;
        default:
            gles_glLightfv(light, pname, params);
            break;
    }
}
#endif
#endif
Added jni/glshim/src/gl/light.h.






>
>
>
1
2
3
#include "gl.h"

void glLightModelf(GLenum pname, GLfloat param);
Added jni/glshim/src/gl/line.c.
















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "line.h"

void glLineStipple(GLint factor, GLushort pattern) {
    state.stippleFactor = factor;
    state.stipplePattern = pattern;
    if (state.stippleData != NULL) {
        free(state.stippleData);
    }
    state.stippleData = (GLubyte *)malloc(sizeof(GLubyte) * 16);
    for (int i = 0; i < 16; i++) {
        state.stippleData[i] = (state.stipplePattern >> i) & 1 ? 255 : 0;
    }

    glPushAttrib(GL_TEXTURE_BIT);
    if (! state.stippleTexture)
        glGenTextures(1, &state.stippleTexture);

    glBindTexture(GL_TEXTURE_2D, state.stippleTexture);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA,
        16, 1, 0, GL_ALPHA, GL_UNSIGNED_BYTE, state.stippleData);
    glPopAttrib();
}

void bind_stipple_tex() {
    glBindTexture(GL_TEXTURE_2D, state.stippleTexture);
}

GLfloat *gen_stipple_tex_coords(GLfloat *vert, int length) {
    // generate our texture coords
    GLfloat *tex = (GLfloat *)malloc(length * 2 * sizeof(GLfloat));
    GLfloat *texPos = tex;
    GLfloat *vertPos = vert;

    GLfloat x1, x2, y1, y2;
    GLfloat len;
    for (int i = 0; i < length / 2; i++) {
        x1 = *vertPos++;
        y1 = *vertPos++;
        vertPos++; // z
        x2 = *vertPos++;
        y2 = *vertPos++;
        vertPos++;

        len = sqrt(pow(x2-x1, 2) + pow(y2-y1, 2)) / state.stippleFactor * 16;

        *texPos++ = 0;
        *texPos++ = 0;
        *texPos++ = len;
        *texPos++ = 0;
    }
    return tex;
}
Added jni/glshim/src/gl/line.h.








>
>
>
>
1
2
3
4
#include "gl.h"

extern GLfloat *gen_stipple_tex_coords(GLfloat *vert, int length);
extern void bind_stipple_tex();
Added jni/glshim/src/gl/list.c.








































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdio.h>

#include "block.h"
#include "gl.h"
#include "list.h"

displaylist_t *dl_alloc() {
    displaylist_t *dl = calloc(1, sizeof(displaylist_t));
    if (dl != NULL) {
        dl->open = true;
    }
    return dl;
}

void dl_free(displaylist_t *dl) {
    int len = tack_len(&dl->calls);
    for (int i = 0; i < len; i++) {
        dl_decref(tack_get(&dl->calls, i));
    }
    free(dl);
    tack_clear(&dl->calls);
}

void dl_incref(packed_call_t *call) {
    call->refs++;
}

void dl_decref(packed_call_t *call) {
    // TODO: thread safety?
    if (--call->refs == 0) {
        if (call->format == RENDER_BLOCK_FORMAT) {
            block_call_t *bcall = (block_call_t *)call;
            bl_free(bcall->block);
        }
        free(call);
    }
}

void dl_append(displaylist_t *dl, packed_call_t *call) {
    if (! dl->open) {
        printf("libGL: warning: trying to append to closed display list\n");
        return;
    }
    tack_push(&dl->calls, call);
    dl_incref(call);
}

void dl_append_block(displaylist_t *dl, block_t *block) {
    block_call_t *call = malloc(sizeof(block_call_t));
    call->format = RENDER_BLOCK_FORMAT;
    call->refs = 0;
    call->block = block;
    dl_append(dl, (packed_call_t *)call);
}

void dl_extend(displaylist_t *dl, displaylist_t *append) {
    int len = tack_len(&append->calls);
    for (int i = 0; i < len; i++) {
        // TODO: reference count
        dl_append(dl, tack_get(&append->calls, i));
    }
}

void dl_close(displaylist_t *dl) {
    dl->open = false;
}

void dl_call(displaylist_t *dl) {
    int len = tack_len(&dl->calls);
    for (int i = 0; i < len; i++) {
        packed_call_t *call = tack_get(&dl->calls, i);
        switch (call->format) {
            case RENDER_BLOCK_FORMAT: {
                block_t *block = ((block_call_t *)call)->block;
                bl_draw(block);
                bl_pollute(block);
                break;
            }
            default:
                glPackedCall(call);
                break;
        }
    }
}
Added jni/glshim/src/gl/list.h.






































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef DISPLAYLIST_H
#define DISPLAYLIST_H

#include <GL/gl.h>
#include <stdbool.h>
#include <stdint.h>
#include "types.h"

extern displaylist_t *dl_alloc();
extern void dl_append(displaylist_t *dl, packed_call_t *call);
extern void dl_append_block(displaylist_t *dl, block_t *block);
extern void dl_call(displaylist_t *dl);
extern void dl_close(displaylist_t *dl);
extern void dl_decref(packed_call_t *call);
extern void dl_extend(displaylist_t *dl, displaylist_t *append);
extern void dl_free(displaylist_t *dl);
extern void dl_incref(packed_call_t *call);

#endif
Added jni/glshim/src/gl/loader.c.
























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "loader.h"

void *gles = NULL;

static const char *lib_ext[] = {
    "so",
    "so.1",
    "so.2",
    "dylib",
    "dll",
    NULL,
};

static const char *gles_lib[] = {
#ifdef USE_ES2
    "libGLESv2_CM",
    "libGLESv2",
#else
    "libGLESv1_CM",
    "libGLES_CM",
#endif // USE_ES2
    NULL
};

void *open_lib(const char **names, const char *override) {
    void *lib = NULL;

    char path_name[PATH_MAX + 1];
    int flags = RTLD_LOCAL | RTLD_NOW;
#ifdef RTLD_DEEPBIND
    flags |= RTLD_DEEPBIND;
#endif
    if (override) {
        if ((lib = dlopen(override, flags))) {
            strncpy(path_name, override, PATH_MAX);
            printf("loaded library: %s\n", path_name);
            return lib;
        }
    }
    for (int i = 0; names[i]; i++) {
        for (int e = 0; lib_ext[e]; e++) {
            snprintf(path_name, PATH_MAX, "%s.%s", names[i], lib_ext[e]);
            if ((lib = dlopen(path_name, flags))) {
                printf("loaded library: %s\n", path_name);
                return lib;
            }
        }
    }
    return lib;
}

void load_gles_lib() {
    if (gles) {
        return;
    }
    char *override = getenv("LIBGL_GLES");
    gles = open_lib(gles_lib, override);
    WARN_NULL(gles);
}

Added jni/glshim/src/gl/loader.h.








































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#ifndef LOADER_H
#define LOADER_H

#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef ANDROID
#include <android/log.h>
#endif

#include "const.h"
#ifdef USE_ES2
#include "wrap/gles2.h"
#else
#include "wrap/gles.h"
#endif

// will become references to dlopen'd gles
extern void *gles;

extern void *open_lib(const char **names, const char *override);
extern void load_gles_lib();

#ifndef WARN_NULL
#ifdef ANDROID
#define WARN_NULL(name) if (name == NULL) __android_log_print(ANDROID_LOG_ERROR, "libGL", "'%s' is NULL", #name);
#else
#define WARN_NULL(name) if (name == NULL) printf("libGL: warning, " #name " is NULL\n");
#endif
#endif

#ifndef LOAD_RAW
#define LOAD_RAW(lib, name, ...) \
    static name##_PTR lib##_##name; \
    { \
        static bool first = true; \
        if (first) { \
            first = false; \
            if (lib == NULL) { \
                load_##lib##_lib(); \
            } \
            if (lib != NULL) { \
                lib##_##name = (name##_PTR)__VA_ARGS__; \
            } \
        } \
    }
#endif

#define LOAD_LIB(lib, name) LOAD_RAW(lib, name, dlsym(lib, #name))

#define LOAD_GLES(name) \
    LOAD_GLES_SILENT(name); \
    WARN_NULL(gles_##name);
#define LOAD_OES(name) \
    LOAD_GLES_SILENT(name); \
    WARN_NULL(gles_##name);

#define LOAD_GLES_SILENT(name) LOAD_LIB(gles, name)

#ifndef PUSH_IF_COMPILING_EXT
#define PUSH_IF_COMPILING_EXT(name, ...)             \
    if (state.list.active) {                         \
        push_##name(__VA_ARGS__);                    \
        return (name##_RETURN)0;                     \
    }
#endif

#ifndef PUSH_IF_COMPILING
#define PUSH_IF_COMPILING(name) PUSH_IF_COMPILING_EXT(name, name##_ARG_NAMES)
#endif

#ifndef PROXY
#define PROXY(load_name, lib, name) \
    LOAD_##load_name(name); \
    if (lib##_##name != NULL) { \
        return lib##_##name(name##_ARG_NAMES); \
    }
#endif

#define PROXY_GLES(name) PROXY(GLES_SILENT, gles, name)
#define PROXY_OES(name) PROXY(OES, gles, name)

#endif
Added jni/glshim/src/gl/matrix.c.


































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
#include "error.h"
#include "loader.h"
#include "matrix.h"
#include "types.h"
#include "vectorial/simd4f.h"
#include "vectorial/simd4x4f.h"

#ifdef LOCAL_MATRIX
#define PROXY_MATRIX(name)
#else
#define PROXY_MATRIX(name) PROXY_GLES(name)
#endif

// helper functions
static matrix_state_t *get_matrix_state(GLenum mode) {
    matrix_state_t *m;
    switch (mode) {
        case GL_MODELVIEW:
            m = &state.matrix.model;
            break;
        case GL_PROJECTION:
            m = &state.matrix.projection;
            break;
        case GL_TEXTURE:
            m = &state.matrix.texture[state.texture.client];
            break;
    /* defined in ARB_imaging extension
        case GL_COLOR:
            m = &state.matrix.color;
            break;
    */
    }

    if (! m->init) {
        simd4x4f_identity(&m->matrix);
        m->init = true;
    }
    return m;
}

static void transpose(GLfloat *out, const GLfloat *m) {
    simd4x4f tmp;
    simd4x4f_uload(&tmp, m);
    simd4x4f_transpose_inplace(&tmp);
    simd4x4f_ustore(&tmp, out);
}

static simd4x4f *get_matrix(GLenum mode) {
    return &get_matrix_state(mode)->matrix;
}

static simd4x4f *get_current_matrix() {
    return get_matrix(state.matrix.mode);
}

static matrix_state_t *get_current_state() {
    return get_matrix_state(state.matrix.mode);
}

static void update_mvp() {
    simd4x4f *model = get_matrix(GL_MODELVIEW);
    simd4x4f *projection = get_matrix(GL_PROJECTION);
    simd4x4f_matrix_mul(projection, model, &state.mvp);
    state.mvp_dirty = false;
}

static void upload_matrix() {
    LOAD_GLES(glLoadMatrixf);
    GLfloat tmp[16];
    simd4x4f_ustore(get_current_matrix(), tmp);
    gles_glLoadMatrixf(tmp);
}

// GL matrix functions
void glLoadIdentity() {
    PUSH_IF_COMPILING(glLoadIdentity);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    simd4x4f_identity(get_current_matrix());
    PROXY_MATRIX(glLoadIdentity);
}

void glLoadMatrixf(const GLfloat *m) {
    PUSH_IF_COMPILING(glLoadMatrixf);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    simd4x4f_uload(get_current_matrix(), m);
    PROXY_MATRIX(glLoadMatrixf);
}

void glLoadTransposeMatrixf(const GLfloat *m) {
    PUSH_IF_COMPILING(glLoadTransposeMatrixf);
    ERROR_IN_BLOCK();
    GLfloat tmp[16];
    transpose(tmp, m);
    glLoadMatrixf(tmp);
}

void glMatrixMode(GLenum mode) {
    PUSH_IF_COMPILING(glMatrixMode);
    ERROR_IN_BLOCK();
    switch (mode) {
        case GL_MODELVIEW:
        case GL_PROJECTION:
        case GL_TEXTURE:
        case GL_COLOR:
            break;
        default:
            ERROR(GL_INVALID_ENUM);
    }
    state.matrix.mode = mode;
    PROXY_MATRIX(glMatrixMode);
}

void glMultMatrixf(const GLfloat *m) {
    PUSH_IF_COMPILING(glMultMatrixf);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    simd4x4f out, load, *cur = get_current_matrix();
    simd4x4f_uload(&load, m);
    simd4x4f_matrix_mul(cur, &load, &out);
    *cur = out;
    upload_matrix();
}

void glMultTransposeMatrixf(const GLfloat *m) {
    PUSH_IF_COMPILING(glMultTransposeMatrixf);
    ERROR_IN_BLOCK();
    GLfloat tmp[16];
    transpose(tmp, m);
    glMultMatrixf(tmp);
}

void glPopMatrix() {
    PUSH_IF_COMPILING(glPopMatrix);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    matrix_state_t *m = get_current_state();
    simd4x4f *top = tack_pop(&m->stack);
    if (top == NULL) {
       ERROR(GL_STACK_UNDERFLOW);
    }
    m->matrix = *top;
    free(top);
    upload_matrix();
}

void glPushMatrix() {
    PUSH_IF_COMPILING(glPushMatrix);
    ERROR_IN_BLOCK();
    matrix_state_t *m = get_current_state();
    simd4x4f *push = malloc(sizeof(simd4x4f));
    *push = m->matrix;
    tack_push(&m->stack, push);
}

// GL transform functions
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {
    PUSH_IF_COMPILING(glRotatef);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    float radians = angle * VECTORIAL_PI / 180;
    simd4x4f *m = get_current_matrix(), rotate, out;
    simd4x4f_axis_rotation(&rotate, radians, simd4f_create(x, y, z, 1.0f));
    simd4x4f_matrix_mul(m, &rotate, &out);
    *m = out;
    upload_matrix();
}

void glScalef(GLfloat x, GLfloat y, GLfloat z) {
    PUSH_IF_COMPILING(glScalef);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    simd4x4f *m = get_current_matrix(), scale, out;
    simd4x4f_scaling(&scale, x, y, z);
    simd4x4f_matrix_mul(m, &scale, &out);
    *m = out;
    upload_matrix();
}

void glTranslatef(GLfloat x, GLfloat y, GLfloat z) {
    PUSH_IF_COMPILING(glTranslatef);
    ERROR_IN_BLOCK();
    state.mvp_dirty = true;
    simd4x4f *m = get_current_matrix(), translate, out;
    simd4x4f_translation(&translate, x, y, z);
    simd4x4f_matrix_mul(m, &translate, &out);
    *m = out;
    upload_matrix();
}

void glOrthof(GLfloat left, GLfloat right,
              GLfloat bottom, GLfloat top,
              GLfloat near, GLfloat far) {
    PUSH_IF_COMPILING(glOrthof);
    ERROR_IN_BLOCK();
    if (left == right || bottom == top || near == far) {
        ERROR(GL_INVALID_VALUE);
    }
    state.mvp_dirty = true;
    simd4x4f *m = get_current_matrix(), ortho, out;
    simd4x4f_ortho(&ortho, left, right, bottom, top, near, far);
    simd4x4f_matrix_mul(m, &ortho, &out);
    *m = out;
    upload_matrix();
}

void glFrustumf(GLfloat left, GLfloat right,
                GLfloat bottom, GLfloat top,
                GLfloat near, GLfloat far) {
    PUSH_IF_COMPILING(glFrustumf);
    ERROR_IN_BLOCK();
    if (near < 0 || far < 0 || left == right || bottom == top || near == far) {
        ERROR(GL_INVALID_VALUE);
    }
    state.mvp_dirty = true;
    simd4x4f *m = get_current_matrix(), frustum, out;
    simd4x4f_frustum(&frustum, left, right, bottom, top, near, far);
    simd4x4f_matrix_mul(m, &frustum, &out);
    *m = out;
    upload_matrix();
}

void gl_get_matrix(GLenum mode, GLfloat *out) {
    simd4x4f_ustore(get_matrix(mode), out);
}

void gl_transform_light(GLfloat out[4], const GLfloat in[4]) {
    simd4x4f *model = get_matrix(GL_MODELVIEW);
    simd4f coord = simd4f_create(in[0], in[1], in[2], in[3]);
    simd4f tmp;
    simd4x4f_matrix_vector_mul(model, &coord, &tmp);
    simd4f_ustore4(coord, out);
}

void gl_transform_texture(GLenum texture, GLfloat out[2], const GLfloat in[2]) {
    matrix_state_t *unit = &state.matrix.texture[texture - GL_TEXTURE0];
    if (! unit->init) {
        out[0] = in[0];
        out[1] = in[1];
    } else {
        simd4f coord = simd4f_create(in[0], in[1], 0.0f, 1.0f);
        simd4f tmp;
        simd4x4f_matrix_vector_mul(&unit->matrix, &coord, &tmp);
        simd4f_ustore2(coord, out);
    }
}

void gl_transform_vertex(GLfloat out[3], GLfloat in[3]) {
    if (state.mvp_dirty) {
        update_mvp();
    }
    simd4f tmp, vert = simd4f_create(in[0], in[1], in[2], 1);
    simd4x4f_matrix_vector_mul(&state.mvp, &vert, &tmp);
    tmp = simd4f_div(tmp, simd4f_splat_w(tmp));
    simd4f_ustore3(tmp, out);
}
Added jni/glshim/src/gl/matrix.h.


































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef GL_MATRIX_H
#define GL_MATRIX_H

#include <GL/gl.h>

void glLoadIdentity();
void glLoadMatrixf(const GLfloat *m);
void glMatrixMode(GLenum mode);
void glMultMatrixf(const GLfloat *m);
void glPopMatrix();
void glPushMatrix();
void gl_get_matrix(GLenum mode, GLfloat *out);
void gl_transform_light(GLfloat out[3], const GLfloat in[3]);
void gl_transform_texture(GLenum texture, GLfloat out[2], const GLfloat in[2]);
void gl_transform_vertex(GLfloat out[3], GLfloat in[3]);

#endif
Added jni/glshim/src/gl/pixel.c.






































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "pixel.h"
#include "gl_helpers.h"
#include "gl_str.h"

static const colorlayout_t *get_color_map(GLenum format) {
    #define map(fmt, ...)                               \
        case fmt: {                                     \
        static colorlayout_t layout = {fmt, __VA_ARGS__}; \
        return &layout; }
    switch (format) {
        map(GL_ALPHA, -1, -1, -1, 0);
        map(GL_BGR, 2, 1, 0, -1);
        map(GL_BGRA, 2, 1, 0, 3);
        map(GL_LUMINANCE, 0, 0, 0, -1);
        map(GL_LUMINANCE_ALPHA, 0, 0, 0, 1);
        map(GL_RED, 0, -1, -1, -1);
        map(GL_RG, 0, 1, -1, -1);
        map(GL_RGB, 0, 1, 2, -1);
        map(GL_RGBA, 0, 1, 2, 3);
        default:
            fprintf(stderr, "get_color_map(): Unsupported pixel format %s\n", gl_str(format));
            break;
    }
    static colorlayout_t null = {0};
    return &null;
    #undef map
}

static inline
bool remap_pixel(const GLvoid *src, GLvoid *dst,
                 const colorlayout_t *src_color, GLenum src_type,
                 const colorlayout_t *dst_color, GLenum dst_type) {

    #define type_case(constant, type, ...)        \
        case constant: {                          \
            const type *s = (const type *)src;    \
            type *d = (type *)dst;                \
            type v = *s;                          \
            __VA_ARGS__                           \
            break;                                \
        }

    #define default(arr, amod, vmod, key, def) \
        key >= 0 ? arr[amod key] vmod : def

    #define carefully(arr, amod, key, value) \
        if (key >= 0) d[amod key] = value;

    #define read_each(amod, vmod)                                 \
        pixel.r = default(s, amod, vmod, src_color->red, 0);      \
        pixel.g = default(s, amod, vmod, src_color->green, 0);    \
        pixel.b = default(s, amod, vmod, src_color->blue, 0);     \
        pixel.a = default(s, amod, vmod, src_color->alpha, 1.0f);

    #define write_each(amod, vmod)                         \
        carefully(d, amod, dst_color->red, pixel.r vmod)   \
        carefully(d, amod, dst_color->green, pixel.g vmod) \
        carefully(d, amod, dst_color->blue, pixel.b vmod)  \
        carefully(d, amod, dst_color->alpha, pixel.a vmod)

    // this pixel stores our intermediate color
    // it will be RGBA and normalized to between (0.0 - 1.0f)
    pixel_t pixel;
    switch (src_type) {
        type_case(GL_DOUBLE, GLdouble, read_each(,))
        type_case(GL_FLOAT, GLfloat, read_each(,))
        case GL_UNSIGNED_INT_8_8_8_8_REV:
        type_case(GL_UNSIGNED_BYTE, GLubyte, read_each(, / 255.0f))
        type_case(GL_UNSIGNED_INT_8_8_8_8, GLubyte, read_each(3 - , / 255.0f))
        type_case(GL_UNSIGNED_SHORT_1_5_5_5_REV, GLushort,
            s = (GLushort[]){
                v & 31,
                ((v & 0x03e0) >> 5),
                ((v & 0x7c00) >> 10),
                ((v & 0x8000) >> 15)* 31,
            };
            read_each(, / 31.0f);
        )
        default:
            // TODO: add glSetError?
            fprintf(stderr, "remap_pixel(): Unsupported source data type: %s\n", gl_str(src_type));
            return false;
            break;
    }

    switch (dst_type) {
        type_case(GL_FLOAT, GLfloat, write_each(,))
        type_case(GL_UNSIGNED_BYTE, GLubyte, write_each(, * 255.0))
        // TODO: force 565 to RGB? then we can change [4] -> 3
        type_case(GL_UNSIGNED_SHORT_5_6_5, GLushort,
            GLfloat color[3];
            color[dst_color->red] = pixel.r;
            color[dst_color->green] = pixel.g;
            color[dst_color->blue] = pixel.b;
            *d = (((GLuint)(color[0] * 31) & 0x1f) << 11) |
                 (((GLuint)(color[1] * 63) & 0x3f) << 5) |
                 (((GLuint)(color[2] * 31) & 0x1f));
        )
        type_case(GL_UNSIGNED_SHORT_5_5_5_1, GLushort,
            GLfloat color[4];
            color[dst_color->red] = pixel.r;
            color[dst_color->green] = pixel.g;
            color[dst_color->blue] = pixel.b;
            color[dst_color->alpha] = pixel.a;
            // TODO: can I macro this or something? it follows a pretty strict form.
            *d = (((GLuint)(color[0] * 31) & 0x1f) << 0) |
                 (((GLuint)(color[1] * 31) & 0x1f) << 5) |
                 (((GLuint)(color[2] * 31) & 0x1f) << 10)  |
                 (((GLuint)(color[3] * 1)  & 0x01) << 15);
        )
       type_case(GL_UNSIGNED_SHORT_4_4_4_4, GLushort,
            GLfloat color[4];
            color[dst_color->red] = pixel.r;
            color[dst_color->green] = pixel.g;
            color[dst_color->blue] = pixel.b;
            color[dst_color->alpha] = pixel.a;
            *d = (((GLushort)(color[0] * 15) & 0x0f) << 12) |
                 (((GLushort)(color[1] * 15) & 0x0f) << 8) |
                 (((GLushort)(color[2] * 15) & 0x0f) << 4) |
                 (((GLushort)(color[3] * 15) & 0x0f));
        )
        default:
            fprintf(stderr, "remap_pixel(): Unsupported target data type: %s\n", gl_str(dst_type));
            return false;
            break;
    }
    return true;

    #undef type_case
    #undef default
    #undef carefully
    #undef read_each
    #undef write_each
}

bool pixel_convert_direct(const GLvoid *src, GLvoid *dst, GLuint width,
                          GLenum src_format, GLenum src_type, GLsizei src_stride,
                          GLenum dst_format, GLenum dst_type, GLsizei dst_stride) {
    const colorlayout_t *src_color, *dst_color;
    src_color = get_color_map(src_format);
    dst_color = get_color_map(dst_format);

    uintptr_t src_pos = (uintptr_t)src;
    uintptr_t dst_pos = (uintptr_t)dst;
    for (int i = 0; i < width; i++) {
        if (! remap_pixel((const GLvoid *)src_pos, (GLvoid *)dst_pos,
                          src_color, src_type, dst_color, dst_type)) {
            // checking a boolean for each pixel like this might be a slowdown?
            // probably depends on how well branch prediction performs
            return false;
        }
        src_pos += src_stride;
        dst_pos += dst_stride;
    }
    return true;
}

bool pixel_convert(const GLvoid *src, GLvoid **dst,
                   GLuint width, GLuint height,
                   GLenum src_format, GLenum src_type,
                   GLenum dst_format, GLenum dst_type) {
    const colorlayout_t *src_color, *dst_color;
    GLuint pixels = width * height;
    GLuint dst_size = pixels * gl_pixel_sizeof(dst_format, dst_type);

    src_color = get_color_map(src_format);
    dst_color = get_color_map(dst_format);
    if (!dst_size || !gl_pixel_sizeof(src_format, src_type)
        || !src_color->type || !dst_color->type)
        return false;

    if (src_type == dst_type && src_color->type == dst_color->type) {
        if (*dst != src) {
            *dst = malloc(dst_size);
            memcpy(*dst, src, dst_size);
            return true;
        }
    } else {
        GLsizei src_stride = gl_pixel_sizeof(src_format, src_type);
        GLsizei dst_stride = gl_pixel_sizeof(dst_format, dst_type);
        *dst = malloc(dst_size);
        return pixel_convert_direct(
            src, *dst, pixels,
            src_format, src_type, src_stride,
            dst_format, dst_type, dst_stride);
    }
    return false;
}

bool pixel_scale(const GLvoid *old, GLvoid **new,
                 GLuint width, GLuint height,
                 GLfloat ratio,
                 GLenum format, GLenum type) {
    GLuint pixel_size, new_width, new_height;
    new_width = width * ratio;
    new_height = height * ratio;
    fprintf(stderr, "scaling %ux%u -> %ux%u\n", width, height, new_width, new_height);
    GLvoid *dst;
    uintptr_t src, pos, pixel;

    pixel_size = gl_pixel_sizeof(format, type);
    dst = malloc(pixel_size * new_width * new_height);
    src = (uintptr_t)old;
    pos = (uintptr_t)dst;
    for (int x = 0; x < new_width; x++) {
        for (int y = 0; y < new_height; y++) {
            pixel = src + (x / ratio) +
                          (y / ratio) * width;
            memcpy((GLvoid *)pos, (GLvoid *)pixel, pixel_size);
            pos += pixel_size;
        }
    }
    *new = dst;
    return true;
}

bool pixel_to_ppm(const GLvoid *pixels, GLuint width, GLuint height,
                  GLenum format, GLenum type, GLuint name) {
    if (! pixels)
        return false;

    const GLvoid *src;
    char filename[64];
    int size = 4 * 3 * width * height;
    if (format == GL_RGB && type == GL_UNSIGNED_BYTE) {
        src = pixels;
    } else {
        if (! pixel_convert(pixels, (GLvoid **)&src, width, height, format, type, GL_RGB, GL_UNSIGNED_BYTE)) {
            return false;
        }
    }

    snprintf(filename, 64, "/tmp/tex.%d.ppm", name);
    FILE *fd = fopen(filename, "w");
    fprintf(fd, "P6 %d %d %d\n", width, height, 255);
    fwrite(src, 1, size, fd);
    fclose(fd);
    return true;
}
Added jni/glshim/src/gl/pixel.h.




































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef PIXEL_H
#define PIXEL_H

#include <GL/gl.h>
#include <stdbool.h>

typedef struct {
    GLenum type;
    GLint red, green, blue, alpha;
} colorlayout_t;

typedef struct {
    GLfloat r, g, b, a;
} pixel_t;

bool pixel_convert(const GLvoid *src, GLvoid **dst,
                   GLuint width, GLuint height,
                   GLenum src_format, GLenum src_type,
                   GLenum dst_format, GLenum dst_type);

bool pixel_convert_direct(const GLvoid *src, GLvoid *dst, GLuint pixels,
                          GLenum src_format, GLenum src_type, GLsizei src_stride,
                          GLenum dst_format, GLenum dst_type, GLsizei dst_stride);

bool pixel_scale(const GLvoid *src, GLvoid **dst,
                  GLuint width, GLuint height,
                  GLfloat ratio,
                  GLenum format, GLenum type);

bool pixel_to_ppm(const GLvoid *pixels,
                  GLuint width, GLuint height,
                  GLenum format, GLenum type, GLuint name);

#endif
Added jni/glshim/src/gl/raster.c.


























































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#include "error.h"
#include "loader.h"
#include "pixel.h"
#include "raster.h"
#include "texture.h"

/* raster engine:
    we render pixels to memory somewhere
    until someone else wants to use the framebuffer
    then we throw 'em quickly into a texture, render to the whole screen
    then let the other function do their thing
*/


// TODO: glWindowPos

void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z) {
    if (state.block.active) {
        ERROR(GL_INVALID_OPERATION);
    }
    PROXY_GLES(glRasterPos3f);
    raster_state_t *raster = &state.raster;
    // TODO: glRasterPos4f?
    // TODO: actually project, and clear the valid bit if we end up outside the viewport
    raster->pos.x = x;
    raster->pos.y = y;
    raster->pos.z = z;
    raster->valid = 1;

    GLuint *dst = NULL;
    GLfloat *color = raster->color;
    if (pixel_convert(CURRENT->color, (GLvoid **)&dst, 1, 1, GL_RGBA, GL_FLOAT, GL_RGBA, GL_UNSIGNED_BYTE)) {
        memcpy(color, CURRENT->color, sizeof(GLfloat) * 4);
        raster->pixel = *dst;
        free(dst);
    } else {
        for (int i = 0; i < 4; i++) {
            color[i] = 1.0f;
        }
        raster->pixel = 0xFFFFFFFF;
    }
}

void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
    PUSH_IF_COMPILING(glViewport);
    PROXY_GLES(glViewport);
    if (state.raster.buf) {
        render_raster();
    }
    gles_glViewport(x, y, width, height);
    viewport_state_t *viewport = &state.viewport;
    viewport->x = x;
    viewport->y = y;
    viewport->width = width;
    viewport->height = height;
    viewport->nwidth = npot(width);
    viewport->nheight = npot(height);
}

void init_raster() {
    if (!state.viewport.width || !state.viewport.height) {
        glGetIntegerv(GL_VIEWPORT, (GLint *)&state.viewport);
        state.viewport.nwidth = npot(state.viewport.width);
        state.viewport.nheight = npot(state.viewport.height);
    }
    if (! state.raster.buf) {
        state.raster.buf = (GLubyte *)malloc(4 * state.viewport.nwidth * state.viewport.nheight * sizeof(GLubyte));
    }
}

void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig,
              GLfloat xmove, GLfloat ymove, const GLubyte *bitmap) {
    PROXY_GLES(glBitmap);
    raster_state_t *raster = &state.raster;
    if (! raster->valid) {
        return;
    }
    // TODO: negative width/height mirrors bitmap?
    if (!width && !height) {
        raster->pos.x += xmove;
        raster->pos.y -= ymove;
        return;
    }
    init_raster();

    const GLubyte *from;
    GLuint *to;
    int x, y;

    // copy to pixel data
    // TODO: strip blank lines and mirror vertically?
    for (y = 0; y < height; y++) {
        to = (GLuint *)raster->buf + (GLuint)(raster->pos.x + ((raster->pos.y - y) * state.viewport.nwidth));
        from = bitmap + (y * 2);
        for (x = 0; x < width; x += 8) {
            if (raster->pos.x + x > state.viewport.width || raster->pos.y - y > state.viewport.height)
                continue;

            GLubyte b = *from++;
            for (int j = 8; j--; ) {
                *to++ = (b & (1 << j)) ? raster->pixel : 0;
            }
        }
    }

    raster->pos.x += xmove;
    raster->pos.y += ymove;
}

void glDrawPixels(GLsizei width, GLsizei height, GLenum format,
                  GLenum type, const GLvoid *data) {
    raster_state_t *raster = &state.raster;
    if (! raster->valid) {
        return;
    }
    const GLubyte *from, *pixels = data;
    GLubyte *to;
    GLvoid *dst = NULL;

    PROXY_GLES(glDrawPixels);

    init_raster();
    if (! pixel_convert(data, &dst, width, height,
                        format, type, GL_RGBA, GL_UNSIGNED_BYTE)) {
        return;
    }
    pixels = (GLubyte *)dst;

    // shrink our pixel ranges to stay inside the viewport
    int ystart = MAX(0, -raster->pos.y);
    height = MIN(raster->pos.y, height);

    int xstart = MAX(0, -raster->pos.x);
    int screen_width = MIN(state.viewport.width - raster->pos.x, width);

    for (int y = ystart; y < height; y++) {
        to = raster->buf + 4 * (GLuint)(raster->pos.x + ((raster->pos.y - y) * state.viewport.nwidth));
        from = pixels + 4 * (xstart + y * width);
        memcpy(to, from, 4 * screen_width);
    }
    if (pixels != data)
        free((void *)pixels);
}

void render_raster() {
    if (!state.viewport.width || !state.viewport.height || !state.raster.buf)
        return;

// FIXME
#ifndef USE_ES2
    glPushAttrib(GL_TEXTURE_BIT | GL_ENABLE_BIT);
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    GLfloat vert[] = {
        -1, -1, 0,
        1, -1, 0,
        1, 1, 0,
        -1, 1, 0,
    };

    float sw = state.viewport.width / (GLfloat)state.viewport.nwidth;
    float sh = state.viewport.height / (GLfloat)state.viewport.nheight;

    GLfloat tex[] = {
        0, sh,
        sw, sh,
        sw, 0,
        0, 0,
    };

    glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT | GL_CLIENT_PIXEL_STORE_BIT);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, vert);
    glTexCoordPointer(2, GL_FLOAT, 0, tex);

    glEnable(GL_BLEND);
    glEnable(GL_TEXTURE_2D);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);

    GLuint texture;
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);

    glPixelStorei(GL_PACK_ALIGNMENT, 1);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
    glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
    glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, state.viewport.nwidth, state.viewport.nheight,
                 0, GL_RGBA, GL_UNSIGNED_BYTE, state.raster.buf);

    LOAD_GLES(glDrawArrays);
    gles_glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
    glDeleteTextures(1, &texture);

    glDisable(GL_BLEND);
    glDisable(GL_TEXTURE_2D);
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glPopClientAttrib();

    glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glPopAttrib();
#endif
    free(state.raster.buf);
    state.raster.buf = NULL;
}
Added jni/glshim/src/gl/raster.h.




























>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "gl.h"

#ifndef RASTER_H
#define RASTER_H

extern void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig,
                     GLfloat xmove, GLfloat ymove, const GLubyte *bitmap);
extern void glDrawPixels(GLsizei width, GLsizei height, GLenum format,
                         GLenum type, const GLvoid *data);
extern void glRasterPos3f(GLfloat x, GLfloat y, GLfloat z);
extern void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
extern void render_raster();

#endif
Added jni/glshim/src/gl/render.c.










































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
#include <stdio.h>

#include "defines.h"
#include "error.h"
#include "gl_str.h"
#include "matrix.h"
#include "types.h"

GLint glRenderMode(GLenum mode) {
    // If the feedback data required more room than was available in buffer, glRenderMode returns a negative value
    int ret = 0;
    if (mode != GL_SELECT && mode != GL_FEEDBACK && mode != GL_RENDER) {
        gl_set_error(GL_INVALID_ENUM);
        return 0;
    }
    if (state.block.active) {
        gl_set_error(GL_INVALID_OPERATION);
        return 0;
    }
    if (state.render.mode == GL_SELECT) {
        ret = state.select.overflow ? -1 : state.select.count / 4;
    } else if (state.render.mode == GL_FEEDBACK) {
        ret = state.feedback.overflow ? -1 : state.feedback.values;
    }
    if (mode == GL_SELECT) {
        if (state.select.buffer == NULL) {
            gl_set_error(GL_INVALID_OPERATION);
            return 0;
        }
        state.select.count = 0;
    } else if (mode == GL_FEEDBACK) {
        if (state.feedback.buffer == NULL) {
            gl_set_error(GL_INVALID_OPERATION);
            return 0;
        }
        state.feedback.count = 0;
    }
    state.render.mode = mode;
    return ret;
}

void glInitNames() {
    ERROR_IN_BLOCK();
    tack_clear(&state.select.names);
}

void glPopName() {
    ERROR_IN_BLOCK();
    if (state.render.mode != GL_SELECT) {
        return;
    }
    if (tack_pop(&state.select.names) == NULL) {
        ERROR(GL_STACK_UNDERFLOW);
    }
}

void glPushName(GLuint name) {
    ERROR_IN_BLOCK();
    if (state.render.mode != GL_SELECT) {
        return;
    }
    tack_push(&state.select.names, (void *) name);
}

void glLoadName(GLuint name) {
    if (state.render.mode != GL_SELECT) {
        return;
    }
    ERROR_IN_BLOCK();
    int len = tack_len(&state.select.names);
    if (len > 0) {
        tack_set(&state.select.names, len - 1, (void *) name);
    } else {
        ERROR(GL_INVALID_OPERATION);
    }
}

void glSelectBuffer(GLsizei size, GLuint *buffer) {
    if (size < 0) {
        ERROR(GL_INVALID_VALUE);
    }
    if (state.block.active || state.render.mode == GL_SELECT) {
        ERROR(GL_INVALID_OPERATION);
    }
    state.feedback.overflow = false;
    state.select.buffer = buffer;
    state.select.size = size;
}

static bool test_point(GLfloat v[3]) {
    // test if a point is inside the viewport
    return (v[0] >= -1.0f && v[0] <= 1.0f && v[1] >= -1.0f && v[1] <= 1.0f);
}

static bool test_line(GLfloat a[3], GLfloat b[3]) {
    // test if a line intersects the viewport
    GLfloat vx, vy;
    vx = b[0] - a[0];
    vy = b[1] - a[1];
    GLfloat p[4] = {-vx, vx, -vy, vy};
    GLfloat q[4] = {a[0] + 1.0f, -1.0f - a[0], a[1] + 1.0f, -1.0f - a[1]};
    GLfloat u1 = -1e10;
    GLfloat u2 = 1e10;

    for (int i = 0; i < 4; i++) {
        if (p[i] == 0.0f) {
            if (q[i] < 0) {
                return false;
            }
        } else {
            GLfloat t = q[i] / p[i];
            if ((p[i] < 0.0f) && (u1 < t)) {
                u1 = t;
            } else if ((p[i] > 0.0f) && (u2 > t)) {
                u2 = t;
            }
        }
    }

    if ((u1 > u2) || (u1 > 1) || (u1 < 0)) {
        return false;
    }
    return true;
}

static bool test_tri(GLfloat a[3], GLfloat b[3], GLfloat c[3]) {
#define sign(p1, p2, p3) (p1[0]-p3[0])*(p2[1]-p3[1])-(p2[0]-p3[0])*(p1[1]-p3[1])
    // test if the viewport is inside a triangle
    for (int i = 0; i < 4; i++) {
        bool b1, b2, b3;
        GLfloat pt[2] = {
            (i % 2) ? -1.0f : 1.0f,
            (i > 2) ? -1.0f : 1.0f,
        };
        b1 = (sign(pt, a, b)) < 0.0f;
        b2 = (sign(pt, b, c)) < 0.0f;
        b3 = (sign(pt, c, a)) < 0.0f;
        if ((b1 == b2) && (b2 == b3)) {
            return true;
        }
    }
    return false;
#undef sign
}

static inline int _index(block_t *block, int i) {
    if (block->indices) {
        i = block->indices[i];
    }
    return i;
}

static inline GLfloat *_vert(block_t *block, int i) {
    return &block->vert[_index(block, i) * 3];
}

static void select_match(block_t *block, GLfloat zmin, GLfloat zmax, int i) {
#define push(val) state.select.buffer[state.select.count++] = val;
    GLfloat cur[3];
    int len;
    for (; i < block->len; i++) {
        gl_transform_vertex(cur, _vert(block, i));
        zmin = MIN(zmin, cur[2]);
        zmax = MAX(zmax, cur[2]);
    }
    if (zmin < 0.0f) {
        zmin = 0.0f;
    }
    if (zmax > 1.0f) {
        zmax = 1.0f;
    }
    len = tack_len(&state.select.names);
    if (state.select.count + 3 + len < state.select.size) {
        push(len);
        push(zmin * INT_MAX);
        push(zmax * INT_MAX);
        for (i = 0; i < len; i++) {
             push((GLuint) tack_peek_n(&state.select.names, i));
        }
    }
#undef push
}

void gl_select_block(block_t *block) {
    if (block->len == 0) {
        return;
    }
    GLfloat zmax = 0.0f, zmin = 1.0f;
#define test(func, ...) if (test_##func(__VA_ARGS__)) { select_match(block, zmin, zmax, i); return; }
#define test_point(a) test(point, a)
#define test_line(a, b) test(line, a, b)
#define test_tri(a, b, c) test(tri, a, b, c)
    GLfloat data[3][3], first[3], *tmp;
    GLfloat *a = data[0], *b = data[1], *c = data[2];
    gl_transform_vertex(first, _vert(block, 0));
    for (int i = 0; i < block->len; i++) {
        tmp = c;
        c = b;
        b = a;
        a = tmp;
        gl_transform_vertex(a, _vert(block, i));
        zmin = MIN(zmin, a[2]);
        zmax = MAX(zmax, a[2]);
        switch (block->mode) {
            case GL_LINES:
                if (i % 2 == 1) {
                    test_point(a);
                    test_point(b);
                    test_line(a, b);
                }
                break;
            case GL_LINE_LOOP:
                // catch the loop segment
                if (i == block->len - 1) {
                    test_line(a, first);
                }
            case GL_LINE_STRIP:
                if (i > 0) {
                    if (i == 1) {
                        test_point(b);
                    }
                    test_point(a);
                    test_line(a, b);
                }
                break;
            case GL_TRIANGLES:
                if (i % 3 == 2) {
                    test_point(a);
                    test_point(b);
                    test_point(c);
                    test_line(a, b);
                    test_line(b, c);
                    test_line(c, a);
                    test_tri(a, b, c);
                }
            case GL_TRIANGLE_FAN:
                // this isn't *quite* right
                // as the point won't be drawn if we run out of verts
                test_point(a);
                if (i > 1) {
                    test_line(a, b);
                    test_line(a, first);
                    test_tri(first, a, b);
                }
                break;
            case GL_TRIANGLE_STRIP:
                test_point(a);
                if (i == 1) {
                    test_line(a, b);
                } else if (i > 1) {
                    test_line(a, b);
                    test_tri(a, b, c);
                }
                break;
            case GL_POINTS:
                test_point(a);
                break;
            default:
                printf("warning: unsupported GL_SELECT mode: %s\n", gl_str(block->mode));
                return;
        }
    }
#undef test_point
#undef test_line
#undef test_tri
}

void glFeedbackBuffer(GLsizei size, GLenum type, GLfloat *buffer) {
    if (size < 0) {
        ERROR(GL_INVALID_VALUE);
    }
    if (state.block.active || state.render.mode == GL_FEEDBACK) {
        ERROR(GL_INVALID_OPERATION);
    }
    state.feedback.buffer = buffer;
    state.feedback.overflow = false;
    state.feedback.size = size;
    state.feedback.type = type;
    state.feedback.values = 0;
    switch (type) {
        case GL_2D:
        case GL_3D:
            break;
        case GL_3D_COLOR:
        case GL_3D_COLOR_TEXTURE:
        case GL_4D_COLOR_TEXTURE:
            printf("warning: GL_FEEDBACK does not transform color]n");
            break;
        default:
            ERROR(GL_INVALID_ENUM);
            break;
    }
}

static bool feedback_overflow(int n) {
    if (state.feedback.count + n > state.feedback.size) {
        state.feedback.overflow = true;
        return true;
    }
    return false;
}

static void feedback_push(GLfloat value) {
    if (state.render.mode != GL_FEEDBACK || !state.feedback.buffer || feedback_overflow(1)) {
        return;
    }
    state.feedback.values += 1;
    state.feedback.buffer[state.feedback.count++] = value;
}

static void feedback_push_n(GLfloat *values, int length) {
    for (int i = 0; i < length; i++) {
        feedback_push(values[i]);
    }
}

static void feedback_polygon(int n) {
    feedback_push(GL_POLYGON_TOKEN);
    feedback_push(n);
}

static int feedback_sizeof(GLenum type) {
    switch (type) {
        case GL_2D: return 2;
        case GL_3D: return 3;
        case GL_3D_COLOR: return 7;
        case GL_3D_COLOR_TEXTURE: return 11;
        case GL_4D_COLOR_TEXTURE: return 12;
        default:
            printf("warning: unknown feedback_sizeof(%s)\n", gl_str(type));
            return 0;
    }
}

static void feedback_vertex(block_t *block, int i) {
    static GLfloat color[] = {0, 0, 0, 1};
    static GLfloat tex[] = {0, 0, 0, 0};
    GLfloat v[4], *c, *t;
    c = block->color ?: color;
    // glFeedbackBuffer returns only the texture coordinate of texture unit GL_TEXTURE0.
    t = block->tex[0] ?: tex;

    // TODO: this will be called extra times on stuff like triangle strips
    gl_transform_vertex(v, &block->vert[i * 3]);
    switch (state.feedback.type) {
        case GL_2D:
            feedback_push_n(v, 2);
            break;
        case GL_3D:
            feedback_push_n(v, 3);
            break;
        case GL_3D_COLOR:
            feedback_push_n(v, 3);
            feedback_push_n(c, 4);
            break;
        case GL_3D_COLOR_TEXTURE:
            feedback_push_n(v, 3);
            feedback_push_n(c, 4);
            feedback_push_n(t, 2);
            // we only store 2d texture coordinates for now
            feedback_push(0.0f);
            feedback_push(0.0f);
            break;
        case GL_4D_COLOR_TEXTURE:
            feedback_push_n(v, 3);
            // our vertices are already normalized, so W is redundant here
            feedback_push(1.0f);
            feedback_push_n(c, 4);
            feedback_push_n(t, 4);
            break;
    }
}

void gl_feedback_block(block_t *block) {
    if (block->len == 0) {
        return;
    }
    int size = feedback_sizeof(state.feedback.type);

    GLfloat *v, *c, *t;
    int v1, v2, v3;
    int first = _index(block, 0);
    for (int j = 0; j < block->len; j++) {
        int i = _index(block, j);
        v2 = v1;
        v3 = v2;
        v1 = i;

        // TODO: overflow'd feedback returns -1 in glRenderMode
#define polygon(n) { if (feedback_overflow(size * n)) return; feedback_polygon(n); state.feedback.values -= 1; }
        switch (block->mode) {
            case GL_LINES:
                if (i % 2 == 1) {
                    polygon(2);
                    feedback_vertex(block, v2);
                    feedback_vertex(block, v1);
                }
                break;
            case GL_LINE_LOOP:
                // catch the loop segment
                if (i == block->len - 1) {
                    polygon(2);
                    feedback_vertex(block, v1);
                    feedback_vertex(block, first);
                }
            case GL_LINE_STRIP:
                if (i > 0) {
                    polygon(2);
                    feedback_vertex(block, v2);
                    feedback_vertex(block, v1);
                }
                break;
            case GL_TRIANGLES:
                if (i % 3 == 2) {
                    polygon(3);
                    feedback_vertex(block, v3);
                    feedback_vertex(block, v2);
                    feedback_vertex(block, v1);
                }
            case GL_TRIANGLE_FAN:
                if (i > 1) {
                    polygon(3);
                    feedback_vertex(block, v2);
                    feedback_vertex(block, v1);
                    feedback_vertex(block, first);
                }
                break;
            case GL_TRIANGLE_STRIP:
                if (i > 1) {
                    polygon(3);
                    feedback_vertex(block, v3);
                    feedback_vertex(block, v2);
                    feedback_vertex(block, v1);
                }
                break;
            case GL_POINTS:
                polygon(1);
                feedback_vertex(block, v1);
                break;
            default:
                printf("warning: unsupported GL_SELECT mode: %s\n", gl_str(block->mode));
                return;
        }
    }
}

void glPassThrough(GLfloat token) {
    ERROR_IN_BLOCK();
    if (feedback_overflow(2)) return;
    feedback_push(GL_PASS_THROUGH_TOKEN);
    feedback_push(token);
    state.feedback.values -= 1;
}
Added jni/glshim/src/gl/render.h.








>
>
>
>
1
2
3
4
#include "block.h"

void gl_feedback_block(block_t *block);
void gl_select_block(block_t *block);
Added jni/glshim/src/gl/skip.h.


































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// don't auto-wrap these functions
#define skip_glColor4ub

// clear.c
#define skip_glClear
#define skip_glClearColor
#define skip_glClearDepthf
#define skip_glClearStencil

// depth.c
#define skip_glDepthFunc
#define skip_glDepthMask
#define skip_glDepthRangef

// gl.c
#define skip_glColor4f
#define skip_glDisable
#define skip_glEnable
#define skip_glIsEnabled
#define skip_glNormal3f

// get.c
#define skip_glGetBooleanv
#define skip_glGetError
#define skip_glGetFloatv
#define skip_glGetIntegerv
#define skip_glGetString

// matrix.cpp
#define skip_glFrustumf
#define skip_glLoadIdentity
#define skip_glLoadMatrixf
#define skip_glMatrixMode
#define skip_glMultMatrixf
#define skip_glOrthof
#define skip_glPopMatrix
#define skip_glPushMatrix
#define skip_glRotatef
#define skip_glScalef
#define skip_glTranslatef

// light.c
#define skip_glLightModelf
#ifdef LOCAL_MATRIX
#define skip_glLightfv
#endif
#define skip_glMaterialfv

// raster.c
#define skip_glViewport

// texture.c
#define skip_glActiveTexture
#define skip_glBindTexture
#define skip_glClientActiveTexture
#define skip_glDeleteTextures
#define skip_glMultiTexCoord4f
#define skip_glPixelStorei
#define skip_glTexEnvf
#define skip_glTexImage2D
#define skip_glTexParameteri
#define skip_glTexSubImage2D

// glDrawArrays
#define skip_glDrawArrays
#define skip_glDrawElements
#define skip_glVertexPointer
#define skip_glColorPointer
#define skip_glNormalPointer
#define skip_glTexCoordPointer
#define skip_glDisableClientState
#define skip_glEnableClientState


// don't compile these into display lists
#define direct_glColorPointer
#define direct_glDeleteLists
#define direct_glDisableClientState
#define direct_glEdgeFlagPointer
#define direct_glEnableClientState
#define direct_glFeedbackBuffer
#define direct_glFinish
#define direct_glFlush
#define direct_glGenLists
#define direct_glIndexPointer
#define direct_glInterleavedArrays
#define direct_glIsEnabled
#define direct_glIsList
#define direct_glNormalPointer
#define direct_glPopClientAttrib
#define direct_glPixelStore
#define direct_glPushClientAttrib
#define direct_glReadPixels
#define direct_glRenderMode
#define direct_glSelectBuffer
#define direct_glTexCoordPointer
#define direct_glVertexPointer
Added jni/glshim/src/gl/stack.c.


























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
#include "error.h"
#include "stack.h"

void glPushAttrib(GLbitfield mask) {
    ERROR_IN_BLOCK();
    glstack_t *cur = malloc(sizeof(glstack_t));

    cur->mask = mask;
    cur->clip_planes_enabled = NULL;
    cur->clip_planes = NULL;
    cur->lights_enabled = NULL;
    cur->lights = NULL;

    // TODO: GL_ACCUM_BUFFER_BIT

    // TODO: will tracking these myself be much faster than glGet?
    if (mask & GL_COLOR_BUFFER_BIT) {
        cur->alpha_test = glIsEnabled(GL_ALPHA_TEST);
        glGetIntegerv(GL_ALPHA_TEST_FUNC, &cur->alpha_test_func);
        glGetFloatv(GL_ALPHA_TEST_REF, &cur->alpha_test_ref);

        cur->blend = glIsEnabled(GL_BLEND);
        glGetIntegerv(GL_BLEND_SRC, &cur->blend_src_func);
        glGetIntegerv(GL_BLEND_DST, &cur->blend_dst_func);

        cur->dither = glIsEnabled(GL_DITHER);
        cur->color_logic_op = glIsEnabled(GL_COLOR_LOGIC_OP);
        glGetIntegerv(GL_LOGIC_OP_MODE, &cur->logic_op);

        glGetFloatv(GL_COLOR_CLEAR_VALUE, cur->clear_color);
        glGetFloatv(GL_COLOR_WRITEMASK, cur->color_mask);
    }

    if (mask & GL_CURRENT_BIT) {
        glGetFloatv(GL_CURRENT_COLOR, cur->color);
        glGetFloatv(GL_CURRENT_NORMAL, cur->normal);
        for (int i = 0; i < MAX_TEX; i++) {
            memcpy(cur->tex[i], state.current.tex[i], 2 * sizeof(GLfloat));
        }
    }

    if (mask & GL_DEPTH_BUFFER_BIT) {
        cur->depth_test = glIsEnabled(GL_DEPTH_TEST);
        glGetIntegerv(GL_DEPTH_FUNC, &cur->depth_func);
        glGetFloatv(GL_DEPTH_CLEAR_VALUE, &cur->clear_depth);
        glGetIntegerv(GL_DEPTH_WRITEMASK, &cur->depth_mask);
    }

    if (mask & GL_ENABLE_BIT) {
        int i;
        GLint max_clip_planes;
        glGetIntegerv(GL_MAX_CLIP_PLANES, &max_clip_planes);
        cur->clip_planes_enabled = (GLboolean *)malloc(max_clip_planes * sizeof(GLboolean));
        for (i = 0; i < max_clip_planes; i++) {
            *(cur->clip_planes_enabled + i) = glIsEnabled(GL_CLIP_PLANE0 + i);
        }

        GLint max_lights;
        glGetIntegerv(GL_MAX_LIGHTS, &max_lights);
        cur->lights_enabled = (GLboolean *)malloc(max_lights * sizeof(GLboolean));
        for (i = 0; i < max_lights; i++) {
            *(cur->lights_enabled + i) = glIsEnabled(GL_LIGHT0 + i);
        }

        cur->alpha_test = glIsEnabled(GL_ALPHA_TEST);
        cur->blend = glIsEnabled(GL_BLEND);

        cur->cull_face = glIsEnabled(GL_CULL_FACE);
        cur->depth_test = glIsEnabled(GL_DEPTH_TEST);
        cur->dither = glIsEnabled(GL_DITHER);
        cur->fog = glIsEnabled(GL_FOG);
        cur->lighting = glIsEnabled(GL_LIGHTING);
        cur->line_smooth = glIsEnabled(GL_LINE_SMOOTH);
        cur->line_stipple = glIsEnabled(GL_LINE_STIPPLE);
        cur->color_logic_op = glIsEnabled(GL_COLOR_LOGIC_OP);
        cur->multisample = glIsEnabled(GL_MULTISAMPLE);
        cur->normalize = glIsEnabled(GL_NORMALIZE);
        cur->point_smooth = glIsEnabled(GL_POINT_SMOOTH);
        cur->polygon_offset_fill = glIsEnabled(GL_POLYGON_OFFSET_FILL);
        cur->sample_alpha_to_coverage = glIsEnabled(GL_SAMPLE_ALPHA_TO_COVERAGE);
        cur->sample_alpha_to_one = glIsEnabled(GL_SAMPLE_ALPHA_TO_ONE);
        cur->sample_coverage = glIsEnabled(GL_SAMPLE_COVERAGE);
        cur->scissor_test = glIsEnabled(GL_SCISSOR_TEST);
        cur->stencil_test = glIsEnabled(GL_STENCIL_TEST);
        cur->texture_2d = glIsEnabled(GL_TEXTURE_2D);
    }

    // TODO: GL_EVAL_BIT

    if (mask & GL_FOG_BIT) {
        cur->fog = glIsEnabled(GL_FOG);
        glGetFloatv(GL_FOG_COLOR, cur->fog_color);
        glGetFloatv(GL_FOG_DENSITY, &cur->fog_density);
        glGetFloatv(GL_FOG_START, &cur->fog_start);
        glGetFloatv(GL_FOG_END, &cur->fog_end);
        glGetIntegerv(GL_FOG_MODE, &cur->fog_mode);
    }

    if (mask & GL_HINT_BIT) {
        glGetIntegerv(GL_PERSPECTIVE_CORRECTION_HINT, &cur->perspective_hint);
        glGetIntegerv(GL_POINT_SMOOTH_HINT, &cur->point_smooth_hint);
        glGetIntegerv(GL_LINE_SMOOTH_HINT, &cur->line_smooth_hint);
        glGetIntegerv(GL_FOG_HINT, &cur->fog_hint);
        glGetIntegerv(GL_GENERATE_MIPMAP_HINT, &cur->mipmap_hint);
    }

    if (mask & GL_LIGHTING_BIT) {
        cur->lighting = glIsEnabled(GL_LIGHTING);
        glGetIntegerv(GL_LIGHT_MODEL_AMBIENT, cur->light_model_ambient);
        glGetIntegerv(GL_LIGHT_MODEL_TWO_SIDE, &cur->light_model_two_side);

        int i;
        GLint max_lights;
        glGetIntegerv(GL_MAX_LIGHTS, &max_lights);
        cur->lights_enabled = (GLboolean *)malloc(max_lights * sizeof(GLboolean));
        cur->lights = (GLfloat *)malloc(max_lights * sizeof(GLfloat));
        for (i = 0; i < max_lights; i++) {
            *(cur->lights_enabled + i) = glIsEnabled(GL_LIGHT0 + i);
            /* TODO: record all data about the lights
            glGetFloatv(GL_LIGHT0 + i, cur->lights + i);
            */
        }
        glGetIntegerv(GL_SHADE_MODEL, &cur->shade_model);
    }

    if (mask & GL_LINE_BIT) {
        cur->line_smooth = glIsEnabled(GL_LINE_SMOOTH);
        // TODO: stipple stuff here
        glGetFloatv(GL_LINE_WIDTH, &cur->line_width);
    }

    if (mask & GL_LIST_BIT) {
        // TODO: local storage of glListBase
    }

    if (mask & GL_MULTISAMPLE_BIT) {
        cur->multisample = glIsEnabled(GL_MULTISAMPLE);
        cur->sample_alpha_to_coverage = glIsEnabled(GL_SAMPLE_ALPHA_TO_COVERAGE);
        cur->sample_alpha_to_one = glIsEnabled(GL_SAMPLE_ALPHA_TO_ONE);
        cur->sample_coverage = glIsEnabled(GL_SAMPLE_COVERAGE);
    }

    // TODO: GL_PIXEL_MODE_BIT

    if (mask & GL_POINT_BIT) {
        cur->point_smooth = glIsEnabled(GL_POINT_SMOOTH);
        glGetFloatv(GL_POINT_SIZE, &cur->point_size);
    }

    // TODO: GL_POLYGON_BIT
    // TODO: GL_POLYGON_STIPPLE_BIT

    if (mask & GL_SCISSOR_BIT) {
        cur->scissor_test = glIsEnabled(GL_SCISSOR_TEST);
        glGetFloatv(GL_SCISSOR_BOX, cur->scissor_box);
    }

    // TODO: GL_STENCIL_BUFFER_BIT

    // TODO: incomplete
    if (mask & GL_TEXTURE_BIT) {
        glGetIntegerv(GL_TEXTURE_BINDING_2D, &cur->texture);
    }

    // TODO: GL_TRANSFORM_BIT
    // TODO: GL_VIEWPORT_BIT

    tack_push(&state.stack.attrib, cur);
}

void glPushClientAttrib(GLbitfield mask) {
    glclientstack_t *cur = malloc(sizeof(glclientstack_t));
    cur->mask = mask;

    if (mask & GL_CLIENT_PIXEL_STORE_BIT) {
        glGetIntegerv(GL_PACK_ALIGNMENT, &cur->pack_align);
        glGetIntegerv(GL_UNPACK_ALIGNMENT, &cur->unpack_align);
        cur->unpack_row_length = state.texture.unpack_row_length;
        cur->unpack_skip_pixels = state.texture.unpack_skip_pixels;
        cur->unpack_skip_rows = state.texture.unpack_skip_rows;
    }

    if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) {
        cur->vert_enable = state.enable.vertex_array;
        cur->color_enable = state.enable.color_array;
        cur->normal_enable = state.enable.normal_array;
        memcpy(&cur->tex_enable, &state.enable.tex_coord_array, sizeof(GLboolean) * MAX_TEX);

        memcpy(&cur->verts, &state.pointers.vertex, sizeof(pointer_state_t));
        memcpy(&cur->color, &state.pointers.color, sizeof(pointer_state_t));
        memcpy(&cur->normal, &state.pointers.normal, sizeof(pointer_state_t));
        memcpy(&cur->tex, &state.pointers.tex_coord, sizeof(pointer_state_t) * MAX_TEX);
    }
    tack_push(&state.stack.client, cur);
}

#define enable_disable(pname, enabled) \
    if (enabled) glEnable(pname);      \
    else glDisable(pname)

#define v2(c) c[0], c[1]
#define v3(c) v2(c), c[2]
#define v4(c) v3(c), c[3]

void glPopAttrib() {
    ERROR_IN_BLOCK();
    glstack_t *cur = tack_pop(&state.stack.attrib);
    if (cur == NULL) {
        ERROR(GL_STACK_UNDERFLOW);
    }

    if (cur->mask & GL_COLOR_BUFFER_BIT) {
#ifndef USE_ES2
        enable_disable(GL_ALPHA_TEST, cur->alpha_test);
        glAlphaFunc(cur->alpha_test_func, cur->alpha_test_ref);
#endif

        enable_disable(GL_BLEND, cur->blend);
        glBlendFunc(cur->blend_src_func, cur->blend_dst_func);

        enable_disable(GL_DITHER, cur->dither);
#ifndef USE_ES2
        enable_disable(GL_COLOR_LOGIC_OP, cur->color_logic_op);
        glLogicOp(cur->logic_op);
#endif

        GLfloat *c;
        glClearColor(v4(cur->clear_color));
        glColorMask(v4(cur->color_mask));
    }

    if (cur->mask & GL_CURRENT_BIT) {
        glColor4f(v4(cur->color));
#ifndef USE_ES2
        glNormal3f(v3(cur->normal));
#endif
        for (int i = 0; i < MAX_TEX; i++) {
            glMultiTexCoord2f(GL_TEXTURE0 + i, v2(cur->tex[i]));
        }
    }

    if (cur->mask & GL_DEPTH_BUFFER_BIT) {
        enable_disable(GL_DEPTH_TEST, cur->depth_test);
        glDepthFunc(cur->depth_func);
        glClearDepth(cur->clear_depth);
        glDepthMask(cur->depth_mask);
    }

    if (cur->mask & GL_ENABLE_BIT) {
        int i;
        GLint max_clip_planes;
        glGetIntegerv(GL_MAX_CLIP_PLANES, &max_clip_planes);
        for (i = 0; i < max_clip_planes; i++) {
            enable_disable(GL_CLIP_PLANE0 + i, *(cur->clip_planes_enabled + i));
        }

        GLint max_lights;
        glGetIntegerv(GL_MAX_LIGHTS, &max_lights);
        for (i = 0; i < max_lights; i++) {
            enable_disable(GL_LIGHT0 + i, *(cur->lights_enabled + i));
        }

        enable_disable(GL_ALPHA_TEST, cur->alpha_test);
        enable_disable(GL_BLEND, cur->blend);
        enable_disable(GL_CULL_FACE, cur->cull_face);
        enable_disable(GL_DEPTH_TEST, cur->depth_test);
        enable_disable(GL_DITHER, cur->dither);
        enable_disable(GL_FOG, cur->fog);
        enable_disable(GL_LIGHTING, cur->lighting);
        enable_disable(GL_LINE_SMOOTH, cur->line_smooth);
        enable_disable(GL_LINE_STIPPLE, cur->line_stipple);
        enable_disable(GL_COLOR_LOGIC_OP, cur->color_logic_op);
        enable_disable(GL_MULTISAMPLE, cur->multisample);
        enable_disable(GL_NORMALIZE, cur->normalize);
        enable_disable(GL_POINT_SMOOTH, cur->point_smooth);
        enable_disable(GL_POLYGON_OFFSET_FILL, cur->polygon_offset_fill);
        enable_disable(GL_SAMPLE_ALPHA_TO_COVERAGE, cur->sample_alpha_to_coverage);
        enable_disable(GL_SAMPLE_ALPHA_TO_ONE, cur->sample_alpha_to_one);
        enable_disable(GL_SAMPLE_COVERAGE, cur->sample_coverage);
        enable_disable(GL_SCISSOR_TEST, cur->scissor_test);
        enable_disable(GL_STENCIL_TEST, cur->stencil_test);
        enable_disable(GL_TEXTURE_2D, cur->texture_2d);
    }

#ifndef USE_ES2
    if (cur->mask & GL_FOG_BIT) {
        enable_disable(GL_FOG, cur->fog);
        glFogfv(GL_FOG_COLOR, cur->fog_color);
        glFogf(GL_FOG_DENSITY, cur->fog_density);
        glFogf(GL_FOG_START, cur->fog_start);
        glFogf(GL_FOG_END, cur->fog_end);
        glFogf(GL_FOG_MODE, cur->fog_mode);
    }
#endif

    if (cur->mask & GL_HINT_BIT) {
        enable_disable(GL_PERSPECTIVE_CORRECTION_HINT, cur->perspective_hint);
        enable_disable(GL_POINT_SMOOTH_HINT, cur->point_smooth_hint);
        enable_disable(GL_LINE_SMOOTH_HINT, cur->line_smooth_hint);
        enable_disable(GL_FOG_HINT, cur->fog_hint);
        enable_disable(GL_GENERATE_MIPMAP_HINT, cur->mipmap_hint);
    }

    if (cur->mask & GL_LINE_BIT) {
        enable_disable(GL_LINE_SMOOTH, cur->line_smooth);
        // TODO: stipple stuff here
        glLineWidth(cur->line_width);
    }

    if (cur->mask & GL_MULTISAMPLE_BIT) {
        enable_disable(GL_MULTISAMPLE, cur->multisample);
        enable_disable(GL_SAMPLE_ALPHA_TO_COVERAGE, cur->sample_alpha_to_coverage);
        enable_disable(GL_SAMPLE_ALPHA_TO_ONE, cur->sample_alpha_to_one);
        enable_disable(GL_SAMPLE_COVERAGE, cur->sample_coverage);
    }

#ifndef USE_ES2
    if (cur->mask & GL_POINT_BIT) {
        enable_disable(GL_POINT_SMOOTH, cur->point_smooth);
        glPointSize(cur->point_size);
    }
#endif

    if (cur->mask & GL_SCISSOR_BIT) {
        enable_disable(GL_SCISSOR_TEST, cur->scissor_test);
        glScissor(v4(cur->scissor_box));
    }

    if (cur->mask & GL_TEXTURE_BIT) {
        glBindTexture(GL_TEXTURE_2D, cur->texture);
    }

    free(cur->clip_planes_enabled);
    free(cur->clip_planes);
    free(cur->lights_enabled);
    free(cur->lights);
    free(cur);
}

#undef enable_disable
#define enable_disable(pname, enabled)             \
    if (enabled) glEnableClientState(pname);       \
    else glDisableClientState(pname)

void glPopClientAttrib() {
    glclientstack_t *cur = tack_pop(&state.stack.client);
    if (cur == NULL) {
        ERROR(GL_STACK_UNDERFLOW);
    }

    if (cur->mask & GL_CLIENT_PIXEL_STORE_BIT) {
        glPixelStorei(GL_PACK_ALIGNMENT, cur->pack_align);
        glPixelStorei(GL_UNPACK_ALIGNMENT, cur->unpack_align);
        glPixelStorei(GL_UNPACK_ROW_LENGTH, cur->unpack_row_length);
        glPixelStorei(GL_UNPACK_SKIP_PIXELS, cur->unpack_skip_pixels);
        glPixelStorei(GL_UNPACK_SKIP_ROWS, cur->unpack_skip_rows);
    }

    if (cur->mask & GL_CLIENT_VERTEX_ARRAY_BIT) {
        enable_disable(GL_VERTEX_ARRAY, cur->vert_enable);
        enable_disable(GL_NORMAL_ARRAY, cur->normal_enable);
        enable_disable(GL_COLOR_ARRAY, cur->color_enable);
        for (int i = 0; i < MAX_TEX; i++) {
            GLboolean bit = cur->tex_enable[i];
            if (bit != state.enable.tex_coord_array[i]) {
                enable_disable(GL_TEXTURE_COORD_ARRAY, bit);
            }
        }

        memcpy(&state.pointers.vertex, &cur->verts, sizeof(pointer_state_t));
        memcpy(&state.pointers.color, &cur->color, sizeof(pointer_state_t));
        memcpy(&state.pointers.normal, &cur->normal, sizeof(pointer_state_t));
        memcpy(&state.pointers.tex_coord, &cur->tex, sizeof(pointer_state_t) * MAX_TEX);
    }
    free(cur);
}

#undef enable_disable
#undef v2
#undef v3
#undef v4
Added jni/glshim/src/gl/stack.h.














































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef GL_STACK_H
#define GL_STACK_H

#include "types.h"

typedef struct {
    GLbitfield mask;

    // GL_COLOR_BUFFER_BIT
    GLboolean alpha_test;
    GLint alpha_test_func;
    GLclampf alpha_test_ref;

    GLboolean blend;
    GLint blend_src_func;
    GLint blend_dst_func;

    GLboolean dither;

    GLboolean color_logic_op;
    GLint logic_op;

    GLfloat clear_color[4];
    GLfloat color_mask[4];

    // GL_CURRENT_BIT
    GLfloat color[4];
    GLfloat normal[4];
    GLfloat tex[MAX_TEX][4];

    // TODO: can only fill this via raster.c
    GLfloat raster_pos[3];
    GLboolean raster_valid;

    // GL_DEPTH_BUFFER_BIT
    GLboolean depth_test;
    GLint depth_func;
    GLfloat clear_depth;
    GLint depth_mask;

    // GL_ENABLE_BIT
    GLboolean cull_face;
    GLboolean normalize;
    GLboolean polygon_offset_fill;
    GLboolean stencil_test;
    GLboolean texture_2d;

    // GL_FOG_BIT
    GLboolean fog;
    GLfloat fog_color[4];
    GLfloat fog_density;
    GLfloat fog_start;
    GLfloat fog_end;
    GLint fog_mode;

    // GL_HINT_BIT
    GLint perspective_hint;
    GLint point_smooth_hint;
    GLint line_smooth_hint;
    GLint fog_hint;
    GLint mipmap_hint;

    // GL_LIGHTING_BIT
    GLboolean lighting;
    GLboolean *lights_enabled;
    GLfloat *lights;
    GLint light_model_ambient[4];
    GLint light_model_two_side;
    GLint shade_model;

    // GL_LINE_BIT
    GLboolean line_smooth;
    GLboolean line_stipple; // TODO: needs to be hooked locally?
    GLfloat line_width;

    // GL_LIST_BIT
    GLint list_base;

    // GL_MULTISAMPLE_BIT
    GLboolean multisample;
    GLboolean sample_alpha_to_coverage;
    GLboolean sample_alpha_to_one;
    GLboolean sample_coverage;

    // GL_POINT_BIT
    GLboolean point_smooth;
    GLfloat point_size;

    // TODO: GL_POLYGON_BIT
    // TODO: GL_POLYGON_STIPPLE_BIT

    // GL_SCISSOR_BIT
    GLboolean scissor_test;
    GLfloat scissor_box[4];

    // TODO: GL_STENCIL_BUFFER_BIT

    // GL_TEXTURE_BIT
    GLint texture;

    // TODO: GL_TRANSFORM_BIT
    // TODO: GL_VIEWPORT_BIT

    // dynamically-sized shenanigans
    GLboolean *clip_planes_enabled;
    GLfloat *clip_planes;
} glstack_t;

typedef struct {
    GLbitfield mask;

    // GL_CLIENT_PIXEL_STORE_BIT
    GLint pack_align;
    GLint unpack_align;
    GLuint unpack_row_length;
    GLuint unpack_skip_pixels;
    GLuint unpack_skip_rows;

    // GL_CLIENT_VERTEX_ARRAY_BIT
    GLboolean vert_enable;
    GLboolean color_enable;
    GLboolean tex_enable[MAX_TEX];
    GLboolean normal_enable;
    pointer_state_t verts;
    pointer_state_t color;
    pointer_state_t normal;
    pointer_state_t tex[MAX_TEX];
} glclientstack_t;

void glPushClientAttrib(GLbitfield mask);
void glPopClientAttrib();
void glPushAttrib(GLbitfield mask);
void glPopAttrib();

#endif
Added jni/glshim/src/gl/texgen.c.
























































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <stdio.h>

#include "block.h"
#include "error.h"
#include "texgen.h"
#include "vectorial/simd4f.h"
#include "vectorial/simd4x4f.h"

void glTexGeni(GLenum coord, GLenum pname, GLint param) {
    GLfloat fp = param;
    glTexGenfv(coord, pname, &fp);
}

void glTexGenfv(GLenum coord, GLenum pname, const GLfloat *param) {
    // pname is in: GL_TEXTURE_GEN_MODE, GL_OBJECT_PLANE, GL_EYE_PLANE
    ERROR_IN_BLOCK();

    texgen_state_t *texgen = &state.texgen[state.texture.active];
    if (pname == GL_TEXTURE_GEN_MODE) {
        switch ((GLenum)*param) {
            case GL_SPHERE_MAP:
                if (coord == GL_R || coord == GL_Q) {
                    ERROR(GL_INVALID_ENUM);
                }
            case GL_OBJECT_LINEAR:
            case GL_EYE_LINEAR:
            // TODO: missing GL_NORMAL_MAP implementation
            case GL_NORMAL_MAP:
            case GL_REFLECTION_MAP:
                break;
            default:
                ERROR(GL_INVALID_ENUM);
        }
        switch (coord) {
            case GL_R: texgen->R = *param; break;
            case GL_Q: texgen->Q = *param; break;
            case GL_S: texgen->S = *param; break;
            case GL_T: texgen->T = *param; break;
        }
    } else {
        GLfloat *target = NULL;
        switch (coord) {
            case GL_R:
                target = texgen->Rv;
                break;
            case GL_Q:
                target = texgen->Qv;
                break;
            case GL_S:
                target = texgen->Sv;
                break;
            case GL_T:
                target = texgen->Tv;
                break;
            default:
                ERROR(GL_INVALID_ENUM);
                return;
        }
        memcpy(target, param, 4 * sizeof(GLfloat));
    }
}

static inline void tex_coord_loop(block_t *block, GLfloat *out, GLenum type, GLfloat *Sp, GLfloat *Tp) {
    GLfloat *vert = block->vert;
    GLfloat *normal = block->normal;
    // if we get sphere map and no normal, just barf and return?

    simd4x4f matrix;
    if (type != GL_OBJECT_LINEAR) {
        // TODO: make sure this loads it properly
        glGetFloatv(GL_MODELVIEW_MATRIX, (float *)&matrix);
    }
    simd4f s_plane, t_plane;
    s_plane = simd4f_uload4(Sp);
    if (Tp != NULL) {
        t_plane = simd4f_uload4(Tp);
    }
    for (int i = 0; i < block->len; i++) {
        if (! block->normal) {
            normal = CURRENT->normal;
        }
        GLfloat tmp[2];
        simd4f v = simd4f_create(vert[0], vert[1], vert[2], 1);
        switch (type) {
            case GL_OBJECT_LINEAR:
                simd4f_ustore2(simd4f_dot4(v, s_plane), tmp);
                out[0] = tmp[0];
                if (Tp) {
                    simd4f_ustore2(simd4f_dot4(v, t_plane), tmp);
                    out[1] = tmp[0];
                }
                break;
            case GL_EYE_LINEAR: {
                simd4f eye;
                simd4x4f_matrix_vector_mul(&matrix, &v, &eye);
                simd4f_ustore2(simd4f_dot4(eye, s_plane), tmp);
                out[0] = tmp[0];
                if (Tp) {
                    simd4f_ustore2(simd4f_dot4(eye, t_plane), tmp);
                    out[1] = tmp[0];
                }
                break;
            }
            case GL_SPHERE_MAP: {
                simd4f norm = simd4f_create(normal[0], normal[1], normal[2], 1.0f);
                simd4f eye;
                simd4x4f_matrix_vector_mul(&matrix, &v, &eye);
                eye = simd4f_normalize3(eye);
                simd4f eye_normal;

                simd4x4f inverse;
                simd4x4f_inverse(&matrix, &inverse);
                // TODO: better to use new registers to prevent stall?
                simd4x4f_transpose_inplace(&inverse);
                // TODO: is normal multiplied wrong here?
                simd4x4f_matrix_vector_mul(&inverse, &norm, &eye_normal);
                simd4f result = simd4f_mul(simd4f_dot4(eye, eye_normal), simd4f_create(2.0f, 2.0f, 2.0f, 2.0f));
                simd4f reflection = simd4f_sub(eye, simd4f_mul(eye_normal, result));
                reflection = simd4f_add(reflection, simd4f_create(0.0f, 0.0f, 1.0f, 0.0f));
                float ref[4], dot[2];
                simd4f_ustore2(reflection, ref);
                simd4f_ustore2(simd4f_dot4(reflection, reflection), dot);
                float m = 1.0 / (2.0 * sqrt(dot[0]));
                out[0] = ref[0] * m + 0.5;
                out[1] = ref[1] * m + 0.5;

                normal += 3;
                break;
            }
            case GL_REFLECTION_MAP: {
                float eye_[2], eye_normal_[2], dot[2];
                simd4f norm = simd4f_create(normal[0], normal[1], normal[2], 1.0f);
                simd4f eye;
                simd4x4f_matrix_vector_mul(&matrix, &v, &eye);
                eye = simd4f_normalize3(eye);
                simd4f_ustore2(eye, eye_);

                simd4f eye_normal;
                simd4x4f inverse;
                simd4x4f_inverse(&matrix, &inverse);
                simd4x4f_transpose_inplace(&inverse);
                simd4x4f_matrix_vector_mul(&inverse, &norm, &eye_normal);
                simd4f_ustore2(eye_normal, eye_);

                simd4f_ustore2(simd4f_dot4(eye, eye_normal), dot);
                out[0] = eye_[0] - eye_normal_[0] * dot[0] * 2.0f;
                out[1] = eye_[1] - eye_normal_[1] * dot[0] * 2.0f;
                // out[2] = eye.x - eye_normal.z * dot;
                break;
            }
        }
        out += 2;
        vert += 3;
    }
}

void gen_tex_coords(block_t *block, GLuint texture) {
    // TODO: do less work when called from glDrawElements?

    block->tex[texture] = (GLfloat *)malloc(block->len * 2 * sizeof(GLfloat));
    texgen_state_t *texgen = &state.texgen[texture];
    if (state.enable.texgen_s[texture]) {
        if (texgen->S == texgen->T) {
            tex_coord_loop(block, block->tex[texture], texgen->S, texgen->Sv, texgen->Tv);
        } else {
            tex_coord_loop(block, block->tex[texture], texgen->S, texgen->Sv, NULL);
        }
    }
    if (state.enable.texgen_t[texture]) {
        tex_coord_loop(block, block->tex[texture] + 1, texgen->T, texgen->Tv, NULL);
    }
}
Added jni/glshim/src/gl/texgen.h.








>
>
>
>
1
2
3
4
#include <GL/gl.h>
#include "block.h"

extern void gen_tex_coords(block_t *block, GLuint texture);
Added jni/glshim/src/gl/text.c.


































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <GL/gl.h>
#include <stdio.h>

static const GLushort font[][13] = {
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18},
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36},
    {0x00, 0x00, 0x00, 0x66, 0x66, 0xff, 0x66, 0x66, 0xff, 0x66, 0x66, 0x00, 0x00},
    {0x00, 0x00, 0x18, 0x7e, 0xff, 0x1b, 0x1f, 0x7e, 0xf8, 0xd8, 0xff, 0x7e, 0x18},
    {0x00, 0x00, 0x0e, 0x1b, 0xdb, 0x6e, 0x30, 0x18, 0x0c, 0x76, 0xdb, 0xd8, 0x70},
    {0x00, 0x00, 0x7f, 0xc6, 0xcf, 0xd8, 0x70, 0x70, 0xd8, 0xcc, 0xcc, 0x6c, 0x38},
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x0c, 0x0e},
    {0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c},
    {0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30},
    {0x00, 0x00, 0x00, 0x00, 0x99, 0x5a, 0x3c, 0xff, 0x3c, 0x5a, 0x99, 0x00, 0x00},
    {0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00},
    {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x03, 0x03},
    {0x00, 0x00, 0x3c, 0x66, 0xc3, 0xe3, 0xf3, 0xdb, 0xcf, 0xc7, 0xc3, 0x66, 0x3c},
    {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18},
    {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0xe7, 0x7e},
    {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0x07, 0x03, 0x03, 0xe7, 0x7e},
    {0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xff, 0xcc, 0x6c, 0x3c, 0x1c, 0x0c},
    {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xff},
    {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e},
    {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03, 0xff},
    {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e},
    {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x03, 0x7f, 0xe7, 0xc3, 0xc3, 0xe7, 0x7e},
    {0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x30, 0x18, 0x1c, 0x1c, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06},
    {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60},
    {0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x18, 0x0c, 0x06, 0x03, 0xc3, 0xc3, 0x7e},
    {0x00, 0x00, 0x3f, 0x60, 0xcf, 0xdb, 0xd3, 0xdd, 0xc3, 0x7e, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18},
    {0x00, 0x00, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe},
    {0x00, 0x00, 0x7e, 0xe7, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e},
    {0x00, 0x00, 0xfc, 0xce, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc7, 0xce, 0xfc},
    {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xff},
    {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc0, 0xc0, 0xc0, 0xff},
    {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0xe7, 0x7e},
    {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
    {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e},
    {0x00, 0x00, 0x7c, 0xee, 0xc6, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06},
    {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xe0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc3},
    {0x00, 0x00, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0},
    {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xff, 0xff, 0xe7, 0xc3},
    {0x00, 0x00, 0xc7, 0xc7, 0xcf, 0xcf, 0xdf, 0xdb, 0xfb, 0xf3, 0xf3, 0xe3, 0xe3},
    {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0x7e},
    {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe},
    {0x00, 0x00, 0x3f, 0x6e, 0xdf, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c},
    {0x00, 0x00, 0xc3, 0xc6, 0xcc, 0xd8, 0xf0, 0xfe, 0xc7, 0xc3, 0xc3, 0xc7, 0xfe},
    {0x00, 0x00, 0x7e, 0xe7, 0x03, 0x03, 0x07, 0x7e, 0xe0, 0xc0, 0xc0, 0xe7, 0x7e},
    {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff},
    {0x00, 0x00, 0x7e, 0xe7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
    {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
    {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3},
    {0x00, 0x00, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3},
    {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3},
    {0x00, 0x00, 0xff, 0xc0, 0xc0, 0x60, 0x30, 0x7e, 0x0c, 0x06, 0x03, 0x03, 0xff},
    {0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c},
    {0x00, 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60},
    {0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c},
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18},
    {0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x70},
    {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0x7f, 0x03, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0},
    {0x00, 0x00, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x03, 0x03, 0x03, 0x03, 0x03},
    {0x00, 0x00, 0x7f, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x33, 0x1e},
    {0x7e, 0xc3, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0x7e, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0},
    {0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00},
    {0x38, 0x6c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x00},
    {0x00, 0x00, 0xc6, 0xcc, 0xf8, 0xf0, 0xd8, 0xcc, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0},
    {0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78},
    {0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xfe, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00},
    {0xc0, 0xc0, 0xc0, 0xfe, 0xc3, 0xc3, 0xc3, 0xc3, 0xfe, 0x00, 0x00, 0x00, 0x00},
    {0x03, 0x03, 0x03, 0x7f, 0xc3, 0xc3, 0xc3, 0xc3, 0x7f, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xfe, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xfe, 0x03, 0x03, 0x7e, 0xc0, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x1c, 0x36, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x00},
    {0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xc3, 0xe7, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00},
    {0xc0, 0x60, 0x60, 0x30, 0x18, 0x3c, 0x66, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0xff, 0x60, 0x30, 0x18, 0x0c, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00},
    {0x00, 0x00, 0x0f, 0x18, 0x18, 0x18, 0x38, 0xf0, 0x38, 0x18, 0x18, 0x18, 0x0f},
    {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18},
    {0x00, 0x00, 0xf0, 0x18, 0x18, 0x18, 0x1c, 0x0f, 0x1c, 0x18, 0x18, 0x18, 0xf0},
    {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8f, 0xf1, 0x60, 0x00, 0x00, 0x00}
};

void text_draw(int x, int y, char *text) {
    glPushAttrib(GL_CURRENT_BIT);
    glRasterPos2i(x, y);
    char c;
    while ((c = *text++)) {
        if (c >= ' ' && c <= '~') {
            GLubyte *glyph = (GLubyte *)&(font[c - ' '][0]);
            glBitmap(8, 13, 0, 0, 9, 0, glyph);
        }
    }
    glPopAttrib();
}
Added jni/glshim/src/gl/text.h.


>
1
void text_draw(int x, int y, char *text);
Added jni/glshim/src/gl/texture.c.






























































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
#include <stdio.h>
#include <stdbool.h>

#include "error.h"
#include "gl_helpers.h"
#include "gl_str.h"
#include "loader.h"
#include "pixel.h"
#include "texture.h"
#include "types.h"

// expand non-power-of-two sizes
// TODO: what does this do to repeating textures?
int npot(int n) {
    if (n == 0) return 0;

    int i = 1;
    while (i < n) i <<= 1;
    return i;
}

// conversions for GL_ARB_texture_rectangle
void tex_coord_rect_arb(GLfloat *tex, GLsizei len,
                        GLsizei width, GLsizei height) {
    if (!tex || !width || !height)
        return;

    for (int i = 0; i < len; i++) {
        tex[0] /= width;
        tex[1] /= height;
        tex += 2;
    }
}

void tex_coord_npot(GLfloat *tex, GLsizei len,
                    GLsizei width, GLsizei height,
                    GLsizei nwidth, GLsizei nheight) {
    if (!tex || !width || !height)
        return;

    GLfloat wratio = (width / (GLfloat)nwidth);
    GLfloat hratio = (height / (GLfloat)nheight);
    for (int i = 0; i < len; i++) {
        tex[0] *= wratio;
        tex[1] *= hratio;
        tex += 2;
    }
}

static void *swizzle_texture(GLsizei width, GLsizei height,
                             GLenum *format, GLenum *type,
                             const GLvoid *data) {
    bool convert = false;
    switch (*format) {
        case GL_ALPHA:
        case GL_RGB:
        case GL_RGBA:
        case GL_LUMINANCE:
        case GL_LUMINANCE_ALPHA:
            break;
        default:
            convert = true;
            break;
    }
    switch (*type) {
        case GL_UNSIGNED_BYTE:
        case GL_UNSIGNED_SHORT_5_6_5:
        case GL_UNSIGNED_SHORT_4_4_4_4:
        case GL_UNSIGNED_SHORT_5_5_5_1:
            break;
        case GL_UNSIGNED_INT_8_8_8_8_REV:
            *type = GL_UNSIGNED_BYTE;
            break;
        default:
            convert = true;
            break;
    }

    if (convert) {
        GLvoid *pixels = (GLvoid *)data;
        if (data) {
            if (! pixel_convert(data, &pixels, width, height, *format, *type, GL_RGBA, GL_UNSIGNED_BYTE)) {
                printf("libGL swizzle error: (%s, %s -> RGBA, UNSIGNED_BYTE)\n", gl_str(*format), gl_str(*type));
                return NULL;
            }
        }
        *type = GL_UNSIGNED_BYTE;
        *format = GL_RGBA;
        return pixels;
    }
    return (void *)data;
}

void glTexImage2D(GLenum target, GLint level, GLint internalFormat,
                  GLsizei width, GLsizei height, GLint border,
                  GLenum format, GLenum type, const GLvoid *data) {

    ERROR_IN_BLOCK();
    gltexture_t *bound = state.texture.bound[state.texture.active];
    GLvoid *pixels = (GLvoid *)data;
    if (data) {
        // implements GL_UNPACK_ROW_LENGTH
        if (state.texture.unpack_row_length && state.texture.unpack_row_length != width) {
            int imgWidth, pixelSize;
            pixelSize = gl_pixel_sizeof(format, type);
            imgWidth = state.texture.unpack_row_length * pixelSize;
            GLubyte *dst = (GLubyte *)malloc(width * height * pixelSize);
            pixels = (GLvoid *)dst;
            const GLubyte *src = (GLubyte *)data;
            src += state.texture.unpack_skip_pixels + state.texture.unpack_skip_rows * imgWidth;
            for (int y = 0; y < height; y += 1) {
                memcpy(dst, src, width * pixelSize);
                src += imgWidth;
                dst += width;
            }
        }

        GLvoid *old = pixels;
        pixels = (GLvoid *)swizzle_texture(width, height, &format, &type, data);
        if (old != pixels && old != data)
            free(old);

        char *env_shrink = getenv("LIBGL_SHRINK");
        if (env_shrink && strcmp(env_shrink, "1") == 0) {
            if (width > 1 && height > 1) {
                GLvoid *out;
                GLfloat ratio = 0.5;
                pixel_scale(pixels, &out, width, height, ratio, format, type);
                if (out != pixels)
                    free(out);
                pixels = out;
                width *= ratio;
                height *= ratio;
            }
        }

        char *env_dump = getenv("LIBGL_TEXDUMP");
        if (env_dump && strcmp(env_dump, "1") == 0) {
            if (bound) {
                pixel_to_ppm(pixels, width, height, format, type, bound->texture);
            }
        }
    } else {
        // convert format even if data is NULL
        swizzle_texture(width, height, &format, &type, NULL);
    }

    /* TODO:
    GL_INVALID_VALUE is generated if border is not 0.
    GL_INVALID_OPERATION is generated if type is
    GL_UNSIGNED_SHORT_5_6_5 and format is not GL_RGB.
    
    GL_INVALID_OPERATION is generated if type is one of
    GL_UNSIGNED_SHORT_4_4_4_4, or GL_UNSIGNED_SHORT_5_5_5_1
    and format is not GL_RGBA.
    */

    LOAD_GLES(glTexImage2D);
    switch (target) {
        case GL_PROXY_TEXTURE_2D:
            break;
        default: {
            GLsizei nheight = npot(height), nwidth = npot(width);
            if (bound && level == 0) {
                bound->width = width;
                bound->height = height;
                bound->nwidth = nwidth;
                bound->nheight = nheight;
            }
            if (false && (height != nheight || width != nwidth)) {
                LOAD_GLES(glTexSubImage2D);
                gles_glTexImage2D(target, level, format, nwidth, nheight, border,
                                  format, type, NULL);
                gles_glTexSubImage2D(target, level, 0, 0, width, height,
                                     format, type, pixels);
            } else {
                gles_glTexImage2D(target, level, format, width, height, border,
                                  format, type, pixels);
            }
        }
    }
    if (pixels != data) {
        free(pixels);
    }
}

void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
                     GLsizei width, GLsizei height, GLenum format, GLenum type,
                     const GLvoid *data) {
    LOAD_GLES(glTexSubImage2D);
    ERROR_IN_BLOCK();
    target = map_tex_target(target);
    const GLvoid *pixels = swizzle_texture(width, height, &format, &type, data);
    gles_glTexSubImage2D(target, level, xoffset, yoffset,
                         width, height, format, type, pixels);
    if (pixels != data)
        free((GLvoid *)pixels);
}

// 1d stubs
void glTexImage1D(GLenum target, GLint level, GLint internalFormat,
                  GLsizei width, GLint border,
                  GLenum format, GLenum type, const GLvoid *data) {

    // TODO: maybe too naive to force GL_TEXTURE_2D here?
    glTexImage2D(GL_TEXTURE_2D, level, internalFormat, width, 1,
                 border, format, type, data);
}
void glTexSubImage1D(GLenum target, GLint level, GLint xoffset,
                     GLsizei width, GLenum format, GLenum type,
                     const GLvoid *data) {

    glTexSubImage2D(target, level, xoffset, 0, width, 1, format, type, data);
}

// 3d stubs
void glTexImage3D(GLenum target, GLint level, GLint internalFormat,
                  GLsizei width, GLsizei height, GLsizei depth, GLint border,
                  GLenum format, GLenum type, const GLvoid *data) {

    // TODO: maybe too naive to force GL_TEXTURE_2D here?
    glTexImage2D(GL_TEXTURE_2D, level, internalFormat, width, height, border, format, type, data);
}
void glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
                     GLsizei width, GLsizei height, GLsizei depth, GLenum format,
                     GLenum type, const GLvoid *data) {

    glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, data);
}

void glPixelStorei(GLenum pname, GLint param) {
    // TODO: add to glGetIntegerv?
    LOAD_GLES(glPixelStorei);
    switch (pname) {
        case GL_UNPACK_ROW_LENGTH:
            state.texture.unpack_row_length = param;
            break;
        case GL_UNPACK_SKIP_PIXELS:
            state.texture.unpack_skip_pixels = param;
            break;
        case GL_UNPACK_SKIP_ROWS:
            state.texture.unpack_skip_rows = param;
            break;
        case GL_UNPACK_LSB_FIRST:
            state.texture.unpack_lsb_first = param;
            break;
        default:
            gles_glPixelStorei(pname, param);
            break;
    }
}

void glBindTexture(GLenum target, GLuint texture) {
    PUSH_IF_COMPILING(glBindTexture);
    ERROR_IN_BLOCK();
    GLuint active = state.texture.active;
    if (texture) {
        int ret;
        khint_t k;
        khash_t(tex) *list = state.texture.list;
        if (! list) {
            list = state.texture.list = kh_init(tex);
            // segfaults if we don't do a single put
            kh_put(tex, list, 1, &ret);
            kh_del(tex, list, 1);
        }

        k = kh_get(tex, list, texture);
        gltexture_t *tex = NULL;;
        if (k == kh_end(list)){
            k = kh_put(tex, list, texture, &ret);
            tex = kh_value(list, k) = malloc(sizeof(gltexture_t));
            tex->texture = texture;
            tex->target = target;
            tex->width = 0;
            tex->height = 0;
            tex->uploaded = false;
        } else {
            tex = kh_value(list, k);
        }
        state.texture.bound[active] = tex;
    } else {
        state.texture.bound[active] = NULL;
    }

    state.texture.rect_arb[active] = (target == GL_TEXTURE_RECTANGLE_ARB);
    target = map_tex_target(target);

    LOAD_GLES(glBindTexture);
    gles_glBindTexture(target, texture);
}

void glActiveTexture(GLenum texture) {
    PUSH_IF_COMPILING(glActiveTexture);
    if ((texture < GL_TEXTURE0) || (texture > GL_TEXTURE_MAX)) {
        // TODO: set the GL error flag?
        fprintf(stderr, "glActiveTexture: texture > GL_TEXTURE_MAX\n");
        return;
    }

    state.texture.active = texture - GL_TEXTURE0;
    LOAD_GLES(glActiveTexture);
    gles_glActiveTexture(texture);
}

void glClientActiveTexture(GLenum texture) {
    PUSH_IF_COMPILING(glClientActiveTexture);
    GLuint new = texture - GL_TEXTURE0;
    if (state.texture.client == new) {
        return;
    }
    if ((texture < GL_TEXTURE0) || (texture > GL_TEXTURE_MAX)) {
        // TODO: set the GL error flag?
        fprintf(stderr, "glClientActiveTexture: texture > GL_TEXTURE_MAX\n");
        return;
    }
    state.texture.client = new;
    LOAD_GLES(glClientActiveTexture);
    gles_glClientActiveTexture(texture);
}

void glTexEnvf(GLenum target, GLenum pname, GLfloat param) {
    ERROR_IN_BLOCK();
    PUSH_IF_COMPILING(glTexEnvf);
    PROXY_GLES(glTexEnvf);
}

// TODO: also glTexParameterf(v)?
void glTexParameteri(GLenum target, GLenum pname, GLint param) {
    PUSH_IF_COMPILING(glTexParameteri);
    LOAD_GLES(glTexParameteri);
    ERROR_IN_BLOCK();
    target = map_tex_target(target);
    switch (param) {
        case GL_CLAMP:
            param = GL_CLAMP_TO_EDGE;
            break;
    }
    gles_glTexParameteri(target, pname, param);
}

void glDeleteTextures(GLsizei n, const GLuint *textures) {
    PUSH_IF_COMPILING(glDeleteTextures);
    khash_t(tex) *list = state.texture.list;
    if (list) {
        khint_t k;
        gltexture_t *tex;
        for (int i = 0; i < n; i++) {
            GLuint t = textures[i];
            k = kh_get(tex, list, t);
            if (k != kh_end(list)) {
                tex = kh_value(list, k);
                for (int j = 0; j < MAX_TEX; j++) {
                    if (tex == state.texture.bound[j])
                        state.texture.bound[j] = NULL;
                }
                free(tex);
                kh_del(tex, list, k);
            }
        }
    }
    LOAD_GLES(glDeleteTextures);
    gles_glDeleteTextures(n, textures);
}

GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences) {
    if (state.block.active) {
        gl_set_error(GL_INVALID_OPERATION);
        return 0;
    }
    if (n < 0) {
        gl_set_error(GL_INVALID_VALUE);
        return 0;
    }
    return true;
}

void glPrioritizeTextures(GLsizei n, const GLuint *textures, const GLclampf *priorities) {
    ERROR_IN_BLOCK();
    if (n < 0) {
        ERROR(GL_INVALID_VALUE);
    }
}
Added jni/glshim/src/gl/texture.h.


























































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef GL_TEXTURE_H
#define GL_TEXTURE_H

#include <GL/gl.h>

void glTexImage2D(GLenum target, GLint level, GLint internalFormat,
                  GLsizei width, GLsizei height, GLint border,
                  GLenum format, GLenum type, const GLvoid *data);

void glTexImage1D(GLenum target, GLint level, GLint internalFormat,
                  GLsizei width, GLint border,
                  GLenum format, GLenum type, const GLvoid *data);

void glTexImage3D(GLenum target, GLint level, GLint internalFormat,
                  GLsizei width, GLsizei height, GLsizei depth,
                  GLint border, GLenum format, GLenum type, const GLvoid *data);

void glBindTexture(GLenum target, GLuint texture);
void glDeleteTextures(GLsizei n, const GLuint * textures);
void glTexParameteri(GLenum target, GLenum pname, GLint param);
GLboolean glAreTexturesResident(GLsizei n, const GLuint *textures, GLboolean *residences);

void tex_coord_rect_arb(GLfloat *tex, GLsizei len,
                        GLsizei width, GLsizei height);
void tex_coord_npot(GLfloat *tex, GLsizei len,
                    GLsizei width, GLsizei height,
                    GLsizei nwidth, GLsizei nheight);
int npot(int n);

static inline GLenum map_tex_target(GLenum target) {
    switch (target) {
        case GL_TEXTURE_1D:
        case GL_TEXTURE_3D:
        case GL_TEXTURE_RECTANGLE_ARB:
            target = GL_TEXTURE_2D;
            break;
        case GL_PROXY_TEXTURE_1D:
        case GL_PROXY_TEXTURE_3D:
            target = GL_PROXY_TEXTURE_2D;
            break;
    }
    return target;
}

#endif
Added jni/glshim/src/gl/types.h.






































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
#ifndef GL_TYPES_H
#define GL_TYPES_H

#include <GL/gl.h>
#include <stdbool.h>
#include <stdint.h>
#ifdef _THREAD_SAFE
#include <pthread.h>
#endif

#include "../config.h"
#include "extypes.h"
#include "khash.h"
#include "tack.h"
#include "vectorial/simd4x4f.h"
#include "wrap/types.h"

// block.h
typedef struct {
    uint32_t len, count, cap;
    GLenum mode;
    struct {
        GLfloat tex[MAX_TEX][2];
    } last;

    // TODO: dynamic type support?
    /*
    struct {
        GLenum vert, normal, color, tex;
    } type;
    */

    GLfloat *vert;
    GLfloat *normal;
    GLfloat *color;
    GLfloat *tex[MAX_TEX];
    GLushort *indices;
    GLboolean q2t;

    struct {
        int tex[MAX_TEX], color, normal;
    } incomplete;

    GLboolean open;
    GLboolean artificial;
} block_t;

typedef struct {
    int format;
    block_t *block;
    int refs;
} block_call_t;

// eval.h
typedef struct {
    GLenum type;
} map_state_t;

typedef struct {
    GLdouble _1, _2, n, d;
    GLint stride, order;
} mapcoordd_t;

typedef struct {
    GLdouble _1, _2, n, d;
    GLint stride, order;
} mapcoordf_t;

typedef struct {
    GLenum type;
    GLint dims, width;
    mapcoordd_t u, v;
    GLboolean free;
    const GLdouble *points;
} map_stated_t;

typedef struct {
    GLenum type;
    GLint dims, width;
    mapcoordf_t u, v;
    GLboolean free;
    const GLfloat *points;
} map_statef_t;

// list.h
typedef struct {
    bool open;
    tack_t calls;
} displaylist_t;

// texture.h
typedef struct {
    GLuint texture;
    GLenum target;
    GLsizei width;
    GLsizei height;
    GLsizei nwidth;
    GLsizei nheight;
    GLboolean uploaded;
} gltexture_t;

KHASH_MAP_INIT_INT(tex, gltexture_t *)

// state.h
typedef struct {
    GLboolean line_stipple,
              blend,
              color_array,
              normal_array,
              tex_coord_array[MAX_TEX],
              texgen_q[MAX_TEX],
              texgen_r[MAX_TEX],
              texgen_s[MAX_TEX],
              texgen_t[MAX_TEX],
              texture_2d[MAX_TEX],
              vertex_array;
} enable_state_t;

typedef struct {
    GLenum R, Q, S, T;
    GLfloat Rv[4], Qv[4], Sv[4], Tv[4];
} texgen_state_t;

typedef struct {
    GLuint unpack_row_length,
           unpack_skip_pixels,
           unpack_skip_rows;
    GLboolean unpack_lsb_first;
    // TODO: do we only need to worry about GL_TEXTURE_2D?
    GLboolean rect_arb[MAX_TEX];
    gltexture_t *bound[MAX_TEX];
    khash_t(tex) *list;
    // active textures
    GLuint active;
    GLuint client;
} texture_state_t;

typedef struct {
    GLint size;
    GLenum type;
    GLsizei stride;
    const GLvoid *pointer;
} pointer_state_t;

typedef struct {
    pointer_state_t vertex, color, normal, tex_coord[MAX_TEX];
} pointer_states_t;

typedef struct {
    GLfloat color[4];
    GLfloat normal[3];
    GLfloat tex[MAX_TEX][2];
} current_state_t;

typedef struct {
    displaylist_t *active;
    current_state_t current;

    GLuint base;
    GLuint name;
    GLenum mode;
} displaylist_state_t;

typedef struct {
    block_t *active;
    GLboolean locked;
} block_state_t;

typedef struct {
    map_state_t *vertex3,
                *vertex4,
                *index,
                *color4,
                *normal,
                *texture1,
                *texture2,
                *texture3,
                *texture4;
} map_states_t;

// matrix structs
typedef struct {
    simd4x4f matrix;
    tack_t stack;
    bool init;
} matrix_state_t;

typedef struct {
    GLenum mode;
    matrix_state_t model, projection, texture[MAX_TEX], color;
} matrix_states_t;

typedef struct {
    GLboolean overflow;
    GLint count;
    GLsizei size;
    GLuint *buffer;
    tack_t names;
} select_state_t;

typedef struct {
    GLboolean overflow;
    GLenum type;
    GLfloat *buffer;
    GLint count, values;
    GLsizei size;
} feedback_state_t;

typedef struct {
    GLenum mode;
} render_state_t;

typedef struct {
    GLubyte *buf;
    struct {
        GLfloat x, y, z, w;
    } pos;
    GLfloat color[4];
    GLuint pixel;
    GLboolean valid;
} raster_state_t;

typedef struct {
    GLfloat x, y, width, height, nwidth, nheight;
} viewport_state_t;

typedef struct {
    tack_t attrib, client;
} stack_state_t;

// global state struct
typedef struct {
    displaylist_state_t list;
    tack_t lists;

    GLenum error;
    block_state_t block;
    current_state_t current;
    enable_state_t enable;
    feedback_state_t feedback;
    map_state_t *map_grid;
    map_states_t map1, map2;
    matrix_states_t matrix;
    pointer_states_t pointers;
    raster_state_t raster;
    render_state_t render;
    select_state_t select;
    stack_state_t stack;
    texgen_state_t texgen[MAX_TEX];
    texture_state_t texture;
    viewport_state_t viewport;

    bool mvp_dirty;
    simd4x4f mvp;

    GLint stippleFactor;
    GLushort stipplePattern;
    GLubyte *stippleData;
    GLuint stippleTexture;

    struct {
        GLushort *cache;
        uint32_t len;
    } q2t;
} glstate_t;

#ifdef _THREAD_SAFE
extern glstate_t *_gl_get_state(void);
#define state (*_gl_get_state())
#else
extern glstate_t state;
#endif
#define CURRENT (state.list.active ? &state.list.current : &state.current)

#endif
Added jni/glshim/src/gl/wrap/es.h.










>
>
>
>
>
1
2
3
4
5
#ifdef USE_ES2
#include "gles2.h"
#else
#include "gles.h"
#endif
Added jni/glshim/src/gl/wrap/extra.h.






























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "../gl.h"
#include <GLES/glext.h>

#ifndef GL_WRAP_H
#define GL_WRAP_H

#ifdef USE_ES2
void glCompileShaderARB(GLuint shader);
GLuint glCreateShaderObjectARB(GLenum shaderType);
void glGetObjectParameterivARB(GLuint shader, GLenum pname, GLint *params);
void glShaderSourceARB(GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
#endif

#define THUNK(suffix, type)                                \
void glColor3##suffix##v(const type *v);                   \
void glColor3##suffix(type r, type g, type b);             \
void glColor4##suffix##v(const type *v);                   \
void glColor4##suffix(type r, type g, type b, type a);     \
void glSecondaryColor3##suffix##v(const type *v);          \
void glSecondaryColor3##suffix(type r, type g, type b);    \
void glIndex##suffix##v(const type *c);                    \
void glIndex##suffix(type c);                              \
void glNormal3##suffix##v(const type *v);                  \
void glNormal3##suffix(type x, type y, type z);            \
void glRasterPos2##suffix##v(const type *v);               \
void glRasterPos2##suffix(type x, type y);                 \
void glRasterPos3##suffix##v(const type *v);               \
void glRasterPos3##suffix(type x, type y, type z);         \
void glRasterPos4##suffix##v(const type *v);               \
void glRasterPos4##suffix(type x, type y, type z, type w); \
void glVertex2##suffix##v(const type *v);                  \
void glVertex2##suffix(type x, type y);                    \
void glVertex3##suffix##v(const type *v);                  \
void glVertex3##suffix(type x, type y, type z);            \
void glVertex4##suffix(type x, type y, type z, type w);    \
void glVertex4##suffix##v(const type *v);                  \
void glTexCoord1##suffix(type s);                          \
void glTexCoord1##suffix##v(const type *t);                \
void glTexCoord2##suffix(type s, type t);                  \
void glTexCoord2##suffix##v(const type *t);                \
void glTexCoord3##suffix(type s, type t, type r);          \
void glTexCoord3##suffix##v(const type *t);                \
void glTexCoord4##suffix(type s, type t, type r, type q);  \
void glTexCoord4##suffix##v(const type *t);                \
void glMultiTexCoord1##suffix(GLenum target, type s);                         \
void glMultiTexCoord1##suffix##v(GLenum target, const type *v);               \
void glMultiTexCoord2##suffix(GLenum target, type s, type t);                 \
void glMultiTexCoord2##suffix##v(GLenum target, const type *v);               \
void glMultiTexCoord3##suffix(GLenum target, type s, type t, type r);         \
void glMultiTexCoord3##suffix##v(GLenum target, const type *v);               \
void glMultiTexCoord4##suffix(GLenum target, type s, type t, type r, type q); \
void glMultiTexCoord4##suffix##v(GLenum target, const type *v);

THUNK(b, GLbyte)
THUNK(d, GLdouble)
THUNK(i, GLint)
THUNK(s, GLshort)
THUNK(ub, GLubyte)
THUNK(ui, GLuint)
THUNK(us, GLushort)
#undef THUNK

#endif
Added jni/glshim/src/gl/wrap/gl.c.






















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
#include <limits.h>
#include "../error.h"
#include "extra.h"

#define constArrayToFloat(a, size) \
    GLfloat s[size];                \
    int i;                          \
    for (i = 0; i < size; i++) {    \
        s[i] = a[i];                \
    }

// naive wrappers

#ifdef USE_ES2
void glCompileShaderARB(GLuint shader) {
    glCompileShader(shader);
    GLint status;
    glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
    if (status == GL_FALSE) {
        GLint log_length;
        glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &log_length);
        GLchar *log = malloc(sizeof(GLchar) * log_length);
        glGetShaderInfoLog(shader, log_length, NULL, log);
        printf("Shader compile failed: %s\n", log);
        free(log);
    }
}
GLuint glCreateShaderObjectARB(GLenum shaderType) {
    return glCreateShader(shaderType);
}
void glShaderSourceARB(GLuint shader, GLsizei count, const GLchar **string, const GLint *length) {
    glShaderSource(shader, count, string, length);
}
void glGetObjectParameterivARB(GLuint shader, GLenum pname, GLint *params) {
    glGetShaderiv(shader, pname, params);
}
#endif

void glActiveTextureARB(GLenum texture) {
    glActiveTexture(texture);
}
void glClearDepth(GLdouble depth) {
    glClearDepthf(depth);
}
void glClientActiveTextureARB(GLenum texture) {
#ifndef USE_ES2
    glClientActiveTexture(texture);
#endif
}
void glClipPlane(GLenum plane, const GLdouble *equation) {
    constArrayToFloat(equation, 4);
    glClipPlanef(plane, s);
}
void glDepthRange(GLdouble nearVal, GLdouble farVal) {
    glDepthRangef(nearVal, farVal);
}
void glFogi(GLenum pname, GLint param) {
    glFogf(pname, param);
}
void glFogiv(GLenum pname, const GLint *iparams) {
    switch (pname) {
        case GL_FOG_DENSITY:
        case GL_FOG_START:
        case GL_FOG_END:
        case GL_FOG_INDEX: {
            glFogf(pname, *iparams);
            break;
        }
        case GL_FOG_MODE:
        case GL_FOG_COLOR: {
            GLfloat params[4];
            for (int i = 0; i < 4; i++) {
                params[i] = iparams[i];
            }
            glFogfv(pname, params);
            break;
        }
    }
}
void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) {
    glFrustumf(left, right, bottom, top, near, far);
}
void glLighti(GLenum light, GLenum pname, GLint param) {
    glLightf(light, pname, param);
}
void glLightiv(GLenum light, GLenum pname, const GLint *iparams) {
    switch (pname) {
        case GL_AMBIENT:
        case GL_DIFFUSE:
        case GL_SPECULAR:
        case GL_POSITION: {
            GLfloat params[4];
            for (int i = 0; i < 4; i++) {
                params[i] = iparams[i];
            }
            glLightfv(light, pname, params);
            break;
        }
        case GL_SPOT_DIRECTION: {
            GLfloat params[4];
            for (int i = 0; i < 4; i++) {
                params[i] = iparams[i];
            }
            glLightfv(light, pname, params);
            break;
        }
        case GL_SPOT_EXPONENT:
        case GL_SPOT_CUTOFF:
        case GL_CONSTANT_ATTENUATION:
        case GL_LINEAR_ATTENUATION:
        case GL_QUADRATIC_ATTENUATION: {
            glLightf(light, pname, *iparams);
            break;
        }
    }
}
#ifndef USE_ES2
void glLightModeli(GLenum pname, GLint param) {
    glLightModelf(pname, param);
}
void glLightModeliv(GLenum pname, const GLint *iparams) {
    switch (pname) {
        case GL_LIGHT_MODEL_AMBIENT: {
            GLfloat params[4];
            for (int i = 0; i < 4; i++) {
                params[i] = iparams[i];
            }
            glLightModelfv(pname, params);
            break;
        }
        case GL_LIGHT_MODEL_LOCAL_VIEWER:
        case GL_LIGHT_MODEL_TWO_SIDE: {
            glLightModelf(pname, *iparams);
            break;
        }
    }
}
#endif
void glMateriali(GLenum face, GLenum pname, GLint param) {
    glMaterialf(face, pname, param);
}
void glMaterialiv(GLenum face, GLenum pname, const GLint *param) {
    GLfloat f[4];
    switch (pname) {
        case GL_AMBIENT_AND_DIFFUSE:
        case GL_AMBIENT:
        case GL_DIFFUSE:
        case GL_SPECULAR:
        case GL_EMISSION:
            f[3] = param[3];
        case GL_COLOR_INDEXES:
            f[2] = param[2];
            f[1] = param[1];
        case GL_SHININESS:
            f[0] = param[0];
            break;
    }
    glMaterialfv(face, pname, f);
}
void glGetMaterialiv(GLenum face, GLenum pname, GLint *param) {
    GLfloat f[4];
    glGetMaterialfv(face, pname, f);
    switch (pname) {
        case GL_AMBIENT_AND_DIFFUSE:
        case GL_AMBIENT:
        case GL_DIFFUSE:
        case GL_SPECULAR:
        case GL_EMISSION:
            param[3] = f[3];
        case GL_COLOR_INDEXES:
            param[2] = f[2];
            param[1] = f[1];
        case GL_SHININESS:
            param[0] = f[0];
            break;
    }
}
void glMultiTexCoord1f(GLenum target, GLfloat s) {
    glMultiTexCoord2f(target, s, 0);
}
void glMultiTexCoord1fv(GLenum target, const GLfloat *t) {
    glMultiTexCoord2f(target, t[0], 0);
}
void glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t) {
    glMultiTexCoord2f(target, s, t);
}
void glMultiTexCoord2fv(GLenum target, const GLfloat *t) {
    glMultiTexCoord2f(target, t[0], t[1]);
}
void glMultiTexCoord2fvARB(GLenum target, const GLfloat *t) {
    glMultiTexCoord2f(target, t[0], t[1]);
}
void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r) {
    glMultiTexCoord2f(target, s, t);
}
void glMultiTexCoord3fv(GLenum target, const GLfloat *t) {
    glMultiTexCoord2f(target, t[0], t[1]);
}
void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
    glMultiTexCoord2f(target, s, t);
}
void glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
    glMultiTexCoord2f(target, s, t);
}
void glMultiTexCoord4fv(GLenum target, const GLfloat *t) {
    glMultiTexCoord2f(target, t[0], t[1]);
}
void glMultiTexCoord4fvARB(GLenum target, const GLfloat *t) {
    glMultiTexCoord2f(target, t[0], t[1]);
}

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) {
    glOrthof(left, right, bottom, top, near, far);
}

// OES wrappers

void glClearDepthfOES(GLfloat depth) {
    glClearDepthf(depth);
}
void glClipPlanefOES(GLenum plane, const GLfloat *equation) {
    glClipPlanef(plane, equation);
}
void glDepthRangefOES(GLclampf near, GLclampf far) {
    glDepthRangef(near, far);
}
void glFrustumfOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) {
    glFrustumf(left, right, bottom, top, near, far);
}
void glGetClipPlanefOES(GLenum pname, GLfloat equation[4]) {
    glGetClipPlanef(pname, equation);
}
void glOrthofOES(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) {
    glOrthof(left, right, bottom, top, near, far);
}

// glRect

#define GL_RECT(suffix, type)                                 \
    void glRect##suffix(type x1, type y1, type x2, type y2) { \
        ERROR_IN_BLOCK();                                     \
        glBegin(GL_POLYGON);                                  \
        glVertex2##suffix(x1, y1);                            \
        glVertex2##suffix(x2, y1);                            \
        glVertex2##suffix(x2, y2);                            \
        glVertex2##suffix(x1, y2);                            \
        glEnd();                                              \
    }                                                         \
    void glRect##suffix##v(const type *v1, const type *v2) {  \
        glRect##suffix(v1[0], v1[1], v2[0], v2[1]);           \
    }

GL_RECT(d, GLdouble)
GL_RECT(f, GLfloat)
GL_RECT(i, GLint)
GL_RECT(s, GLshort)
#undef GL_RECT

// basic thunking

#define THUNK(suffix, type, max)                            \
/* colors */                                                \
void glColor3##suffix(type r, type g, type b) {             \
    glColor4f(r/max, g/max, b/max, 1.0f);                   \
}                                                           \
void glColor4##suffix(type r, type g, type b, type a) {     \
    glColor4f(r/max, g/max, b/max, a/max);                  \
}                                                           \
void glColor3##suffix##v(const type *v) {                   \
    glColor4f(v[0]/max, v[1]/max, v[2]/max, 1.0f);          \
}                                                           \
void glColor4##suffix##v(const type *v) {                   \
    glColor4f(v[0]/max, v[1]/max, v[2]/max, v[3]/max);      \
}                                                           \
void glSecondaryColor3##suffix(type r, type g, type b) {    \
    glSecondaryColor3f(r/max, g/max, b/max);                \
}                                                           \
void glSecondaryColor3##suffix##v(const type *v) {          \
    glSecondaryColor3f(v[0]/max, v[1]/max, v[2]/max);       \
}                                                           \
/* index */                                                 \
void glIndex##suffix(type c) {                              \
    glIndexf(c);                                            \
}                                                           \
void glIndex##suffix##v(const type *c) {                    \
    glIndexf(c[0]);                                         \
}                                                           \
/* normal */                                                \
void glNormal3##suffix(type x, type y, type z) {            \
    glNormal3f(x, y, z);                                    \
}                                                           \
void glNormal3##suffix##v(const type *v) {                  \
    glNormal3f(v[0], v[1], v[2]);                           \
}                                                           \
/* raster */                                                \
void glRasterPos2##suffix(type x, type y) {                 \
    glRasterPos3f(x, y, 0);                                 \
}                                                           \
void glRasterPos2##suffix##v(const type *v) {               \
    glRasterPos3f(v[0], v[1], 0);                           \
}                                                           \
void glRasterPos3##suffix(type x, type y, type z) {         \
    glRasterPos3f(x, y, z);                                 \
}                                                           \
void glRasterPos3##suffix##v(const type *v) {               \
    glRasterPos3f(v[0], v[1], v[2]);                        \
}                                                           \
void glRasterPos4##suffix(type x, type y, type z, type w) { \
    glRasterPos4f(x, y, z, w);                              \
}                                                           \
void glRasterPos4##suffix##v(const type *v) {               \
    glRasterPos4f(v[0], v[1], v[2], v[3]);                  \
}                                                           \
/* vertex */                                                \
void glVertex2##suffix(type x, type y) {                    \
    glVertex2f(x, y);                                       \
}                                                           \
void glVertex2##suffix##v(const type *v) {                  \
    glVertex2f(v[0], v[1]);                                 \
}                                                           \
void glVertex3##suffix(type x, type y, type z) {            \
    glVertex3f(x, y, z);                                    \
}                                                           \
void glVertex3##suffix##v(const type *v) {                  \
    glVertex3f(v[0], v[1], v[2]);                           \
}                                                           \
void glVertex4##suffix(type r, type g, type b, type w) {    \
    glVertex4f(r, g, b, w);                                 \
}                                                           \
void glVertex4##suffix##v(const type *v) {                  \
    glVertex4f(v[0], v[1], v[2], v[3]);                     \
}                                                           \
/* texture */                                               \
void glTexCoord1##suffix(type s) {                          \
    glTexCoord2f(s, 0);                                     \
}                                                           \
void glTexCoord1##suffix##v(const type *t) {                \
    glTexCoord2f(t[0], 0);                                  \
}                                                           \
void glTexCoord2##suffix(type s, type t) {                  \
    glTexCoord2f(s, t);                                     \
}                                                           \
void glTexCoord2##suffix##v(const type *t) {                \
    glTexCoord2f(t[0], t[1]);                               \
}                                                           \
void glTexCoord3##suffix(type s, type t, type r) {          \
    glTexCoord2f(s, t);                                     \
}                                                           \
void glTexCoord3##suffix##v(const type *t) {                \
    glTexCoord2f(t[0], t[1]);                               \
}                                                           \
void glTexCoord4##suffix(type s, type t, type r, type q) {  \
    glTexCoord2f(s, t);                                     \
}                                                           \
void glTexCoord4##suffix##v(const type *t) {                \
    glTexCoord2f(t[0], t[1]);                               \
}                                                           \
void glMultiTexCoord1##suffix(GLenum target, type s) {      \
    glMultiTexCoord2f(target, s, 0);                        \
}                                                                              \
void glMultiTexCoord1##suffix##v(GLenum target, const type *v) {               \
    glMultiTexCoord2f(target, v[0], 0);                                        \
}                                                                              \
void glMultiTexCoord2##suffix(GLenum target, type s, type t) {                 \
    glMultiTexCoord2f(target, s, t);                                           \
}                                                                              \
void glMultiTexCoord2##suffix##v(GLenum target, const type *v) {               \
    glMultiTexCoord2f(target, v[0], v[1]);                                     \
}                                                                              \
void glMultiTexCoord3##suffix(GLenum target, type s, type t, type r) {         \
    glMultiTexCoord2f(target, s, t);                                           \
}                                                                              \
void glMultiTexCoord3##suffix##v(GLenum target, const type *v) {               \
    glMultiTexCoord2f(target, v[0], v[1]);                                     \
}                                                                              \
void glMultiTexCoord4##suffix(GLenum target, type s, type t, type r, type q) { \
    glMultiTexCoord2f(target, s, t);                                           \
}                                                                              \
void glMultiTexCoord4##suffix##v(GLenum target, const type *v) {               \
    glMultiTexCoord2f(target, v[0], v[1]);                                     \
}

THUNK(b, GLbyte, (float)CHAR_MAX)
THUNK(d, GLdouble, 1.0f)
THUNK(i, GLint, (float)INT_MAX)
THUNK(s, GLshort, (float)SHRT_MAX)
THUNK(ub, GLubyte, (float)UCHAR_MAX)
THUNK(ui, GLuint, (float)UINT_MAX)
THUNK(us, GLushort, (float)USHRT_MAX)

#undef THUNK

// glGet

#define THUNK(suffix, type)                              \
void glGet##suffix##v(GLenum pname, type *params) {      \
    int i, n = 1;                                        \
    switch (pname) {                                     \
        /* two values */                                 \
        case GL_ALIASED_POINT_SIZE_RANGE:                \
        case GL_ALIASED_LINE_WIDTH_RANGE:                \
        case GL_MAX_VIEWPORT_DIMS:                       \
            n = 2;                                       \
            break;                                       \
        /* three values */                               \
        case GL_CURRENT_NORMAL:                          \
        case GL_POINT_DISTANCE_ATTENUATION:              \
            n = 3;                                       \
            break;                                       \
        /* four values */                                \
        case GL_COLOR_CLEAR_VALUE:                       \
        case GL_COLOR_WRITEMASK:                         \
        case GL_CURRENT_COLOR:                           \
        case GL_CURRENT_TEXTURE_COORDS:                  \
        case GL_DEPTH_RANGE:                             \
        case GL_FOG_COLOR:                               \
        case GL_LIGHT_MODEL_AMBIENT:                     \
        case GL_SCISSOR_BOX:                             \
        case GL_SMOOTH_LINE_WIDTH_RANGE:                 \
        case GL_SMOOTH_POINT_SIZE_RANGE:                 \
        case GL_VIEWPORT:                                \
            n = 4;                                       \
            break;                                       \
        /* GL_NUM_COMPRESSED_TEXTURE_FORMATS values */   \
        case GL_COMPRESSED_TEXTURE_FORMATS:              \
            n = GL_NUM_COMPRESSED_TEXTURE_FORMATS;       \
            break;                                       \
        /* sixteen values */                             \
        case GL_MODELVIEW_MATRIX:                        \
        case GL_PROJECTION_MATRIX:                       \
        case GL_TEXTURE_MATRIX:                          \
            n = 16;                                      \
            break;                                       \
    }                                                    \
    GLfloat *p = (GLfloat *)malloc(sizeof(GLfloat) * n); \
    glGetFloatv(pname, p);                               \
    for (i = 0; i < n; i++) {                            \
        params[i] = (type)p[i];                          \
    }                                                    \
    free(p);                                             \
}

THUNK(Double, GLdouble)
// THUNK(Integer, GLint)

#undef THUNK

// manually defined float wrappers, because we don't autowrap float functions

// color
void glColor3f(GLfloat r, GLfloat g, GLfloat b) {
    glColor4f(r, g, b, 1.0f);
}
void glColor3fv(const GLfloat *c) {
    glColor4f(c[0], c[1], c[2], 1.0f);
}
void glColor4fv(const GLfloat *c) {
    glColor4f(c[0], c[1], c[2], c[3]);
}
void glIndexfv(const GLfloat *c) {
    glIndexf(*c);
}
void glSecondaryColor3fv(const GLfloat *v) {
    glSecondaryColor3f(v[0], v[1], v[2]);
}

// raster
void glRasterPos2f(GLfloat x, GLfloat y) {
    glRasterPos3f(x, y, 0);
}
void glRasterPos2fv(const GLfloat *v) {
    glRasterPos2i(v[0], v[1]);
}
void glRasterPos3fv(const GLfloat *v) {
    glRasterPos3f(v[0], v[1], v[2]);
}
void glRasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
    glRasterPos3f(x/w, y/w, z/w);
}
void glRasterPos4fv(const GLfloat *v) {
    glRasterPos4f(v[0], v[1], v[2], v[3]);
}

// eval
void glEvalCoord1d(GLdouble u) {
    glEvalCoord1f(u);
}

void glEvalCoord2d(GLdouble u, GLdouble v) {
    glEvalCoord2f(u, v);
}

void glEvalCoord1fv(const GLfloat *v) {
    glEvalCoord1f(v[0]);
}

void glEvalCoord1dv(const GLdouble *v) {
    glEvalCoord1d(v[0]);
}

void glEvalCoord2fv(const GLfloat *v) {
    glEvalCoord2f(v[0], v[1]);
}

void glEvalCoord2dv(const GLdouble *v) {
    glEvalCoord2d(v[0], v[1]);
}

void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2) {
    glMapGrid1f(un, u1, u2);
}

void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2,
                 GLint vn, GLdouble v1, GLdouble v2) {
    glMapGrid2f(un, u1, u2, vn, v1, v2);
}

// matrix
void glLoadMatrixd(const GLdouble *m) {
    constArrayToFloat(m, 16);
    glLoadMatrixf(s);
}
void glMultMatrixd(const GLdouble *m) {
    constArrayToFloat(m, 16);
    glMultMatrixf(s);
}
void glLoadTransposeMatrixd(const GLdouble *m) {
    constArrayToFloat(m, 16);
    glLoadTransposeMatrixf(s);
}
void glMultTransposeMatrixd(const GLdouble *m) {
    constArrayToFloat(m, 16);
    glMultTransposeMatrixf(s);
}

// normal
void glNormal3fv(const GLfloat *v) {
    glNormal3f(v[0], v[1], v[2]);
}

// textures
void glTexCoord1f(GLfloat s) {
    glTexCoord2f(s, 0);
}
void glTexCoord1fv(const GLfloat *t) {
    glTexCoord2f(t[0], 0);
}
void glTexCoord2fv(const GLfloat *t) {
    glTexCoord2f(t[0], t[1]);
}
void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r) {
    glTexCoord2f(s, t);
}
void glTexCoord3fv(const GLfloat *t) {
    glTexCoord2f(t[0], t[1]);
}
void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
    glTexCoord2f(s, t);
}
void glTexCoord4fv(const GLfloat *t) {
    glTexCoord2f(t[0], t[1]);
}

// texgen
void glTexGend(GLenum coord, GLenum pname, GLdouble param) {
    glTexGeni(coord, pname, param);
}
void glTexGenf(GLenum coord, GLenum pname, GLfloat param) {
    // TODO: this is gross/lossy.
    glTexGeni(coord, pname, param);
}
void glTexGendv(GLenum coord, GLenum pname, const GLdouble *params) {
    if (pname == GL_TEXTURE_GEN_MODE) {
        GLfloat tmp = *params;
        glTexGenfv(coord, pname, &tmp);
    } else {
        constArrayToFloat(params, 4);
        glTexGenfv(coord, pname, s);
    }
}
void glTexGeniv(GLenum coord, GLenum pname, const GLint *params) {
    if (pname == GL_TEXTURE_GEN_MODE) {
        GLfloat tmp = *params;
        glTexGenfv(coord, pname, &tmp);
    } else {
        constArrayToFloat(params, 4);
        glTexGenfv(coord, pname, s);
    }
}

// transforms
void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) {
    glRotatef(angle, x, y, z);
}
void glScaled(GLdouble x, GLdouble y, GLdouble z) {
    glScalef(x, y, z);
}
void glTranslated(GLdouble x, GLdouble y, GLdouble z) {
    glTranslatef(x, y, z);
}

// vertex
void glVertex2f(GLfloat x, GLfloat y) {
    glVertex3f(x, y, 0);
}
void glVertex2fv(const GLfloat *v) {
    glVertex3f(v[0], v[1], 0);
}
void glVertex3fv(const GLfloat *v) {
    glVertex3f(v[0], v[1], v[2]);
}
void glVertex4f(GLfloat r, GLfloat g, GLfloat b, GLfloat w) {
    glVertex3f(r/w, g/w, b/w);
}
void glVertex4fv(const GLfloat *v) {
    glVertex3f(v[0]/v[3], v[1]/v[3], v[2]/v[3]);
}

#undef constArrayToFloat
Added jni/glshim/src/gl/wrap/gles.c.


























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
#ifndef USE_ES2
#include "gles.h"
#include "../loader.h"
#include "../skip.h"

void glPackedCall(const packed_call_t *packed) {
    switch (packed->format) {
                case FORMAT_void_GLenum: {
            PACKED_void_GLenum *unpacked = (PACKED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLclampf: {
            PACKED_void_GLenum_GLclampf *unpacked = (PACKED_void_GLenum_GLclampf *)packed;
                        ARGS_void_GLenum_GLclampf args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLclampx: {
            PACKED_void_GLenum_GLclampx *unpacked = (PACKED_void_GLenum_GLclampx *)packed;
                        ARGS_void_GLenum_GLclampx args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLuint: {
            PACKED_void_GLenum_GLuint *unpacked = (PACKED_void_GLenum_GLuint *)packed;
                        ARGS_void_GLenum_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLenum: {
            PACKED_void_GLenum_GLenum *unpacked = (PACKED_void_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum: {
            PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum *unpacked = (PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum *)packed;
                        ARGS_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLbitfield: {
            PACKED_void_GLbitfield *unpacked = (PACKED_void_GLbitfield *)packed;
                        ARGS_void_GLbitfield args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf: {
            PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf *unpacked = (PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLclampx_GLclampx_GLclampx_GLclampx: {
            PACKED_void_GLclampx_GLclampx_GLclampx_GLclampx *unpacked = (PACKED_void_GLclampx_GLclampx_GLclampx_GLclampx *)packed;
                        ARGS_void_GLclampx_GLclampx_GLclampx_GLclampx args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLclampf: {
            PACKED_void_GLclampf *unpacked = (PACKED_void_GLclampf *)packed;
                        ARGS_void_GLclampf args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLclampx: {
            PACKED_void_GLclampx *unpacked = (PACKED_void_GLclampx *)packed;
                        ARGS_void_GLclampx args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLint: {
            PACKED_void_GLint *unpacked = (PACKED_void_GLint *)packed;
                        ARGS_void_GLint args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_const_GLfloat___GENPT__: {
            PACKED_void_GLenum_const_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_const_GLfixed___GENPT__: {
            PACKED_void_GLenum_const_GLfixed___GENPT__ *unpacked = (PACKED_void_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLfloat_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLubyte_GLubyte_GLubyte_GLubyte: {
            PACKED_void_GLubyte_GLubyte_GLubyte_GLubyte *unpacked = (PACKED_void_GLubyte_GLubyte_GLubyte_GLubyte *)packed;
                        ARGS_void_GLubyte_GLubyte_GLubyte_GLubyte args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLfixed_GLfixed_GLfixed_GLfixed: {
            PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLboolean_GLboolean_GLboolean_GLboolean: {
            PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean *unpacked = (PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean *)packed;
                        ARGS_void_GLboolean_GLboolean_GLboolean_GLboolean args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8,             args.a9            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint: {
            PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint *unpacked = (PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint *)packed;
                        ARGS_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei: {
            PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei *unpacked = (PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8            );
            break;
        }
                case FORMAT_void_GLsizei_const_GLuint___GENPT__: {
            PACKED_void_GLsizei_const_GLuint___GENPT__ *unpacked = (PACKED_void_GLsizei_const_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_const_GLuint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLboolean: {
            PACKED_void_GLboolean *unpacked = (PACKED_void_GLboolean *)packed;
                        ARGS_void_GLboolean args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLclampf_GLclampf: {
            PACKED_void_GLclampf_GLclampf *unpacked = (PACKED_void_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLclampx_GLclampx: {
            PACKED_void_GLclampx_GLclampx *unpacked = (PACKED_void_GLclampx_GLclampx *)packed;
                        ARGS_void_GLclampx_GLclampx args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLsizei: {
            PACKED_void_GLenum_GLint_GLsizei *unpacked = (PACKED_void_GLenum_GLint_GLsizei *)packed;
                        ARGS_void_GLenum_GLint_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void: {
            PACKED_void *unpacked = (PACKED_void *)packed;
                        unpacked->func();
            break;
        }
                case FORMAT_void_GLenum_GLfloat: {
            PACKED_void_GLenum_GLfloat *unpacked = (PACKED_void_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLfixed: {
            PACKED_void_GLenum_GLfixed *unpacked = (PACKED_void_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6            );
            break;
        }
                case FORMAT_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed: {
            PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6            );
            break;
        }
                case FORMAT_void_GLsizei_GLuint___GENPT__: {
            PACKED_void_GLsizei_GLuint___GENPT__ *unpacked = (PACKED_void_GLsizei_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_GLuint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLboolean___GENPT__: {
            PACKED_void_GLenum_GLboolean___GENPT__ *unpacked = (PACKED_void_GLenum_GLboolean___GENPT__ *)packed;
                        ARGS_void_GLenum_GLboolean___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLint___GENPT__: {
            PACKED_void_GLenum_GLenum_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLfloat___GENPT__: {
            PACKED_void_GLenum_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLfixed___GENPT__: {
            PACKED_void_GLenum_GLfixed___GENPT__ *unpacked = (PACKED_void_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_GLenum: {
            PACKED_GLenum *unpacked = (PACKED_GLenum *)packed;
                        unpacked->func();
            break;
        }
                case FORMAT_void_GLenum_GLint___GENPT__: {
            PACKED_void_GLenum_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLfloat___GENPT__: {
            PACKED_void_GLenum_GLenum_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLfixed___GENPT__: {
            PACKED_void_GLenum_GLenum_GLfixed___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLvoid___GENPT____GENPT__: {
            PACKED_void_GLenum_GLvoid___GENPT____GENPT__ *unpacked = (PACKED_void_GLenum_GLvoid___GENPT____GENPT__ *)packed;
                        ARGS_void_GLenum_GLvoid___GENPT____GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_const_GLubyte___GENPT___GLenum: {
            PACKED_const_GLubyte___GENPT___GLenum *unpacked = (PACKED_const_GLubyte___GENPT___GLenum *)packed;
                        ARGS_const_GLubyte___GENPT___GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_GLboolean_GLuint: {
            PACKED_GLboolean_GLuint *unpacked = (PACKED_GLboolean_GLuint *)packed;
                        ARGS_GLboolean_GLuint args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_GLboolean_GLenum: {
            PACKED_GLboolean_GLenum *unpacked = (PACKED_GLboolean_GLenum *)packed;
                        ARGS_GLboolean_GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLfloat: {
            PACKED_void_GLenum_GLenum_GLfloat *unpacked = (PACKED_void_GLenum_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__: {
            PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLfixed: {
            PACKED_void_GLenum_GLenum_GLfixed *unpacked = (PACKED_void_GLenum_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_const_GLfixed___GENPT__: {
            PACKED_void_GLenum_GLenum_const_GLfixed___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLfloat: {
            PACKED_void_GLfloat *unpacked = (PACKED_void_GLfloat *)packed;
                        ARGS_void_GLfloat args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLfixed: {
            PACKED_void_GLfixed *unpacked = (PACKED_void_GLfixed *)packed;
                        ARGS_void_GLfixed args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_const_GLfloat___GENPT__: {
            PACKED_void_const_GLfloat___GENPT__ *unpacked = (PACKED_void_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_const_GLfixed___GENPT__: {
            PACKED_void_const_GLfixed___GENPT__ *unpacked = (PACKED_void_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_const_GLfixed___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed: {
            PACKED_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (PACKED_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLfixed_GLfixed_GLfixed: {
            PACKED_void_GLfixed_GLfixed_GLfixed *unpacked = (PACKED_void_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLint: {
            PACKED_void_GLenum_GLint *unpacked = (PACKED_void_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLfloat_GLfloat: {
            PACKED_void_GLfloat_GLfloat *unpacked = (PACKED_void_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLfixed_GLfixed: {
            PACKED_void_GLfixed_GLfixed *unpacked = (PACKED_void_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__: {
            PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ *unpacked = (PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7            );
            break;
        }
                case FORMAT_void_GLclampf_GLboolean: {
            PACKED_void_GLclampf_GLboolean *unpacked = (PACKED_void_GLclampf_GLboolean *)packed;
                        ARGS_void_GLclampf_GLboolean args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLclampx_GLboolean: {
            PACKED_void_GLclampx_GLboolean *unpacked = (PACKED_void_GLclampx_GLboolean *)packed;
                        ARGS_void_GLclampx_GLboolean args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLsizei_GLsizei: {
            PACKED_void_GLint_GLint_GLsizei_GLsizei *unpacked = (PACKED_void_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLuint: {
            PACKED_void_GLenum_GLint_GLuint *unpacked = (PACKED_void_GLenum_GLint_GLuint *)packed;
                        ARGS_void_GLenum_GLint_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLuint: {
            PACKED_void_GLuint *unpacked = (PACKED_void_GLuint *)packed;
                        ARGS_void_GLuint args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum: {
            PACKED_void_GLenum_GLenum_GLenum *unpacked = (PACKED_void_GLenum_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLint: {
            PACKED_void_GLenum_GLenum_GLint *unpacked = (PACKED_void_GLenum_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLenum_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_const_GLint___GENPT__: {
            PACKED_void_GLenum_GLenum_const_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_const_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8,             args.a9            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8,             args.a9            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum_GLenum: {
            PACKED_void_GLenum_GLenum_GLenum_GLenum *unpacked = (PACKED_void_GLenum_GLenum_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
            }
}
#ifndef skip_glActiveTexture
void glActiveTexture(GLenum texture) {
        LOAD_GLES(glActiveTexture);
    #ifndef direct_glActiveTexture
    PUSH_IF_COMPILING(glActiveTexture);
#endif
        gles_glActiveTexture(texture);
}
#endif
#ifndef skip_glAlphaFunc
void glAlphaFunc(GLenum func, GLclampf ref) {
        LOAD_GLES(glAlphaFunc);
    #ifndef direct_glAlphaFunc
    PUSH_IF_COMPILING(glAlphaFunc);
#endif
        gles_glAlphaFunc(func, ref);
}
#endif
#ifndef skip_glAlphaFuncx
void glAlphaFuncx(GLenum func, GLclampx ref) {
        LOAD_GLES(glAlphaFuncx);
    #ifndef direct_glAlphaFuncx
    PUSH_IF_COMPILING(glAlphaFuncx);
#endif
        gles_glAlphaFuncx(func, ref);
}
#endif
#ifndef skip_glBindBuffer
void glBindBuffer(GLenum target, GLuint buffer) {
        LOAD_GLES(glBindBuffer);
    #ifndef direct_glBindBuffer
    PUSH_IF_COMPILING(glBindBuffer);
#endif
        gles_glBindBuffer(target, buffer);
}
#endif
#ifndef skip_glBindTexture
void glBindTexture(GLenum target, GLuint texture) {
        LOAD_GLES(glBindTexture);
    #ifndef direct_glBindTexture
    PUSH_IF_COMPILING(glBindTexture);
#endif
        gles_glBindTexture(target, texture);
}
#endif
#ifndef skip_glBlendColorOES
void glBlendColorOES(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
        LOAD_GLES(glBlendColorOES);
    #ifndef direct_glBlendColorOES
    PUSH_IF_COMPILING(glBlendColorOES);
#endif
        gles_glBlendColorOES(red, green, blue, alpha);
}
#endif
#ifndef skip_glBlendEquationOES
void glBlendEquationOES(GLenum mode) {
        LOAD_GLES(glBlendEquationOES);
    #ifndef direct_glBlendEquationOES
    PUSH_IF_COMPILING(glBlendEquationOES);
#endif
        gles_glBlendEquationOES(mode);
}
#endif
#ifndef skip_glBlendEquationSeparateOES
void glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha) {
        LOAD_GLES(glBlendEquationSeparateOES);
    #ifndef direct_glBlendEquationSeparateOES
    PUSH_IF_COMPILING(glBlendEquationSeparateOES);
#endif
        gles_glBlendEquationSeparateOES(modeRGB, modeAlpha);
}
#endif
#ifndef skip_glBlendFunc
void glBlendFunc(GLenum sfactor, GLenum dfactor) {
        LOAD_GLES(glBlendFunc);
    #ifndef direct_glBlendFunc
    PUSH_IF_COMPILING(glBlendFunc);
#endif
        gles_glBlendFunc(sfactor, dfactor);
}
#endif
#ifndef skip_glBlendFuncSeparateOES
void glBlendFuncSeparateOES(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {
        LOAD_GLES(glBlendFuncSeparateOES);
    #ifndef direct_glBlendFuncSeparateOES
    PUSH_IF_COMPILING(glBlendFuncSeparateOES);
#endif
        gles_glBlendFuncSeparateOES(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
}
#endif
#ifndef skip_glBufferData
void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) {
        LOAD_GLES(glBufferData);
    #ifndef direct_glBufferData
    PUSH_IF_COMPILING(glBufferData);
#endif
        gles_glBufferData(target, size, data, usage);
}
#endif
#ifndef skip_glBufferSubData
void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) {
        LOAD_GLES(glBufferSubData);
    #ifndef direct_glBufferSubData
    PUSH_IF_COMPILING(glBufferSubData);
#endif
        gles_glBufferSubData(target, offset, size, data);
}
#endif
#ifndef skip_glClear
void glClear(GLbitfield mask) {
        LOAD_GLES(glClear);
    #ifndef direct_glClear
    PUSH_IF_COMPILING(glClear);
#endif
        gles_glClear(mask);
}
#endif
#ifndef skip_glClearColor
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
        LOAD_GLES(glClearColor);
    #ifndef direct_glClearColor
    PUSH_IF_COMPILING(glClearColor);
#endif
        gles_glClearColor(red, green, blue, alpha);
}
#endif
#ifndef skip_glClearColorx
void glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) {
        LOAD_GLES(glClearColorx);
    #ifndef direct_glClearColorx
    PUSH_IF_COMPILING(glClearColorx);
#endif
        gles_glClearColorx(red, green, blue, alpha);
}
#endif
#ifndef skip_glClearDepthf
void glClearDepthf(GLclampf depth) {
        LOAD_GLES(glClearDepthf);
    #ifndef direct_glClearDepthf
    PUSH_IF_COMPILING(glClearDepthf);
#endif
        gles_glClearDepthf(depth);
}
#endif
#ifndef skip_glClearDepthx
void glClearDepthx(GLclampx depth) {
        LOAD_GLES(glClearDepthx);
    #ifndef direct_glClearDepthx
    PUSH_IF_COMPILING(glClearDepthx);
#endif
        gles_glClearDepthx(depth);
}
#endif
#ifndef skip_glClearStencil
void glClearStencil(GLint s) {
        LOAD_GLES(glClearStencil);
    #ifndef direct_glClearStencil
    PUSH_IF_COMPILING(glClearStencil);
#endif
        gles_glClearStencil(s);
}
#endif
#ifndef skip_glClientActiveTexture
void glClientActiveTexture(GLenum texture) {
        LOAD_GLES(glClientActiveTexture);
    #ifndef direct_glClientActiveTexture
    PUSH_IF_COMPILING(glClientActiveTexture);
#endif
        gles_glClientActiveTexture(texture);
}
#endif
#ifndef skip_glClipPlanef
void glClipPlanef(GLenum plane, const GLfloat * equation) {
        LOAD_GLES(glClipPlanef);
    #ifndef direct_glClipPlanef
    PUSH_IF_COMPILING(glClipPlanef);
#endif
        gles_glClipPlanef(plane, equation);
}
#endif
#ifndef skip_glClipPlanex
void glClipPlanex(GLenum plane, const GLfixed * equation) {
        LOAD_GLES(glClipPlanex);
    #ifndef direct_glClipPlanex
    PUSH_IF_COMPILING(glClipPlanex);
#endif
        gles_glClipPlanex(plane, equation);
}
#endif
#ifndef skip_glColor4f
void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
        LOAD_GLES(glColor4f);
    #ifndef direct_glColor4f
    PUSH_IF_COMPILING(glColor4f);
#endif
        gles_glColor4f(red, green, blue, alpha);
}
#endif
#ifndef skip_glColor4ub
void glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) {
        LOAD_GLES(glColor4ub);
    #ifndef direct_glColor4ub
    PUSH_IF_COMPILING(glColor4ub);
#endif
        gles_glColor4ub(red, green, blue, alpha);
}
#endif
#ifndef skip_glColor4x
void glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
        LOAD_GLES(glColor4x);
    #ifndef direct_glColor4x
    PUSH_IF_COMPILING(glColor4x);
#endif
        gles_glColor4x(red, green, blue, alpha);
}
#endif
#ifndef skip_glColorMask
void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
        LOAD_GLES(glColorMask);
    #ifndef direct_glColorMask
    PUSH_IF_COMPILING(glColorMask);
#endif
        gles_glColorMask(red, green, blue, alpha);
}
#endif
#ifndef skip_glColorPointer
void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {
        LOAD_GLES(glColorPointer);
    #ifndef direct_glColorPointer
    PUSH_IF_COMPILING(glColorPointer);
#endif
        gles_glColorPointer(size, type, stride, pointer);
}
#endif
#ifndef skip_glCompressedTexImage2D
void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {
        LOAD_GLES(glCompressedTexImage2D);
    #ifndef direct_glCompressedTexImage2D
    PUSH_IF_COMPILING(glCompressedTexImage2D);
#endif
        gles_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}
#endif
#ifndef skip_glCompressedTexSubImage2D
void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {
        LOAD_GLES(glCompressedTexSubImage2D);
    #ifndef direct_glCompressedTexSubImage2D
    PUSH_IF_COMPILING(glCompressedTexSubImage2D);
#endif
        gles_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
#endif
#ifndef skip_glCopyTexImage2D
void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
        LOAD_GLES(glCopyTexImage2D);
    #ifndef direct_glCopyTexImage2D
    PUSH_IF_COMPILING(glCopyTexImage2D);
#endif
        gles_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
#endif
#ifndef skip_glCopyTexSubImage2D
void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
        LOAD_GLES(glCopyTexSubImage2D);
    #ifndef direct_glCopyTexSubImage2D
    PUSH_IF_COMPILING(glCopyTexSubImage2D);
#endif
        gles_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}
#endif
#ifndef skip_glCullFace
void glCullFace(GLenum mode) {
        LOAD_GLES(glCullFace);
    #ifndef direct_glCullFace
    PUSH_IF_COMPILING(glCullFace);
#endif
        gles_glCullFace(mode);
}
#endif
#ifndef skip_glDeleteBuffers
void glDeleteBuffers(GLsizei n, const GLuint * buffers) {
        LOAD_GLES(glDeleteBuffers);
    #ifndef direct_glDeleteBuffers
    PUSH_IF_COMPILING(glDeleteBuffers);
#endif
        gles_glDeleteBuffers(n, buffers);
}
#endif
#ifndef skip_glDeleteTextures
void glDeleteTextures(GLsizei n, const GLuint * textures) {
        LOAD_GLES(glDeleteTextures);
    #ifndef direct_glDeleteTextures
    PUSH_IF_COMPILING(glDeleteTextures);
#endif
        gles_glDeleteTextures(n, textures);
}
#endif
#ifndef skip_glDepthFunc
void glDepthFunc(GLenum func) {
        LOAD_GLES(glDepthFunc);
    #ifndef direct_glDepthFunc
    PUSH_IF_COMPILING(glDepthFunc);
#endif
        gles_glDepthFunc(func);
}
#endif
#ifndef skip_glDepthMask
void glDepthMask(GLboolean flag) {
        LOAD_GLES(glDepthMask);
    #ifndef direct_glDepthMask
    PUSH_IF_COMPILING(glDepthMask);
#endif
        gles_glDepthMask(flag);
}
#endif
#ifndef skip_glDepthRangef
void glDepthRangef(GLclampf near, GLclampf far) {
        LOAD_GLES(glDepthRangef);
    #ifndef direct_glDepthRangef
    PUSH_IF_COMPILING(glDepthRangef);
#endif
        gles_glDepthRangef(near, far);
}
#endif
#ifndef skip_glDepthRangex
void glDepthRangex(GLclampx near, GLclampx far) {
        LOAD_GLES(glDepthRangex);
    #ifndef direct_glDepthRangex
    PUSH_IF_COMPILING(glDepthRangex);
#endif
        gles_glDepthRangex(near, far);
}
#endif
#ifndef skip_glDisable
void glDisable(GLenum cap) {
        LOAD_GLES(glDisable);
    #ifndef direct_glDisable
    PUSH_IF_COMPILING(glDisable);
#endif
        gles_glDisable(cap);
}
#endif
#ifndef skip_glDisableClientState
void glDisableClientState(GLenum array) {
        LOAD_GLES(glDisableClientState);
    #ifndef direct_glDisableClientState
    PUSH_IF_COMPILING(glDisableClientState);
#endif
        gles_glDisableClientState(array);
}
#endif
#ifndef skip_glDrawArrays
void glDrawArrays(GLenum mode, GLint first, GLsizei count) {
        LOAD_GLES(glDrawArrays);
    #ifndef direct_glDrawArrays
    PUSH_IF_COMPILING(glDrawArrays);
#endif
        gles_glDrawArrays(mode, first, count);
}
#endif
#ifndef skip_glDrawElements
void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices) {
        LOAD_GLES(glDrawElements);
    #ifndef direct_glDrawElements
    PUSH_IF_COMPILING(glDrawElements);
#endif
        gles_glDrawElements(mode, count, type, indices);
}
#endif
#ifndef skip_glEnable
void glEnable(GLenum cap) {
        LOAD_GLES(glEnable);
    #ifndef direct_glEnable
    PUSH_IF_COMPILING(glEnable);
#endif
        gles_glEnable(cap);
}
#endif
#ifndef skip_glEnableClientState
void glEnableClientState(GLenum array) {
        LOAD_GLES(glEnableClientState);
    #ifndef direct_glEnableClientState
    PUSH_IF_COMPILING(glEnableClientState);
#endif
        gles_glEnableClientState(array);
}
#endif
#ifndef skip_glFinish
void glFinish() {
        LOAD_GLES(glFinish);
    #ifndef direct_glFinish
    PUSH_IF_COMPILING(glFinish);
#endif
        gles_glFinish();
}
#endif
#ifndef skip_glFlush
void glFlush() {
        LOAD_GLES(glFlush);
    #ifndef direct_glFlush
    PUSH_IF_COMPILING(glFlush);
#endif
        gles_glFlush();
}
#endif
#ifndef skip_glFogf
void glFogf(GLenum pname, GLfloat param) {
        LOAD_GLES(glFogf);
    #ifndef direct_glFogf
    PUSH_IF_COMPILING(glFogf);
#endif
        gles_glFogf(pname, param);
}
#endif
#ifndef skip_glFogfv
void glFogfv(GLenum pname, const GLfloat * params) {
        LOAD_GLES(glFogfv);
    #ifndef direct_glFogfv
    PUSH_IF_COMPILING(glFogfv);
#endif
        gles_glFogfv(pname, params);
}
#endif
#ifndef skip_glFogx
void glFogx(GLenum pname, GLfixed param) {
        LOAD_GLES(glFogx);
    #ifndef direct_glFogx
    PUSH_IF_COMPILING(glFogx);
#endif
        gles_glFogx(pname, param);
}
#endif
#ifndef skip_glFogxv
void glFogxv(GLenum pname, const GLfixed * params) {
        LOAD_GLES(glFogxv);
    #ifndef direct_glFogxv
    PUSH_IF_COMPILING(glFogxv);
#endif
        gles_glFogxv(pname, params);
}
#endif
#ifndef skip_glFrontFace
void glFrontFace(GLenum mode) {
        LOAD_GLES(glFrontFace);
    #ifndef direct_glFrontFace
    PUSH_IF_COMPILING(glFrontFace);
#endif
        gles_glFrontFace(mode);
}
#endif
#ifndef skip_glFrustumf
void glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) {
        LOAD_GLES(glFrustumf);
    #ifndef direct_glFrustumf
    PUSH_IF_COMPILING(glFrustumf);
#endif
        gles_glFrustumf(left, right, bottom, top, near, far);
}
#endif
#ifndef skip_glFrustumx
void glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far) {
        LOAD_GLES(glFrustumx);
    #ifndef direct_glFrustumx
    PUSH_IF_COMPILING(glFrustumx);
#endif
        gles_glFrustumx(left, right, bottom, top, near, far);
}
#endif
#ifndef skip_glGenBuffers
void glGenBuffers(GLsizei n, GLuint * buffers) {
        LOAD_GLES(glGenBuffers);
    #ifndef direct_glGenBuffers
    PUSH_IF_COMPILING(glGenBuffers);
#endif
        gles_glGenBuffers(n, buffers);
}
#endif
#ifndef skip_glGenTextures
void glGenTextures(GLsizei n, GLuint * textures) {
        LOAD_GLES(glGenTextures);
    #ifndef direct_glGenTextures
    PUSH_IF_COMPILING(glGenTextures);
#endif
        gles_glGenTextures(n, textures);
}
#endif
#ifndef skip_glGetBooleanv
void glGetBooleanv(GLenum pname, GLboolean * params) {
        LOAD_GLES(glGetBooleanv);
    #ifndef direct_glGetBooleanv
    PUSH_IF_COMPILING(glGetBooleanv);
#endif
        gles_glGetBooleanv(pname, params);
}
#endif
#ifndef skip_glGetBufferParameteriv
void glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) {
        LOAD_GLES(glGetBufferParameteriv);
    #ifndef direct_glGetBufferParameteriv
    PUSH_IF_COMPILING(glGetBufferParameteriv);
#endif
        gles_glGetBufferParameteriv(target, pname, params);
}
#endif
#ifndef skip_glGetClipPlanef
void glGetClipPlanef(GLenum plane, GLfloat * equation) {
        LOAD_GLES(glGetClipPlanef);
    #ifndef direct_glGetClipPlanef
    PUSH_IF_COMPILING(glGetClipPlanef);
#endif
        gles_glGetClipPlanef(plane, equation);
}
#endif
#ifndef skip_glGetClipPlanex
void glGetClipPlanex(GLenum plane, GLfixed * equation) {
        LOAD_GLES(glGetClipPlanex);
    #ifndef direct_glGetClipPlanex
    PUSH_IF_COMPILING(glGetClipPlanex);
#endif
        gles_glGetClipPlanex(plane, equation);
}
#endif
#ifndef skip_glGetError
GLenum glGetError() {
        LOAD_GLES(glGetError);
    #ifndef direct_glGetError
    PUSH_IF_COMPILING(glGetError);
#endif
        return gles_glGetError();
}
#endif
#ifndef skip_glGetFixedv
void glGetFixedv(GLenum pname, GLfixed * params) {
        LOAD_GLES(glGetFixedv);
    #ifndef direct_glGetFixedv
    PUSH_IF_COMPILING(glGetFixedv);
#endif
        gles_glGetFixedv(pname, params);
}
#endif
#ifndef skip_glGetFloatv
void glGetFloatv(GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetFloatv);
    #ifndef direct_glGetFloatv
    PUSH_IF_COMPILING(glGetFloatv);
#endif
        gles_glGetFloatv(pname, params);
}
#endif
#ifndef skip_glGetIntegerv
void glGetIntegerv(GLenum pname, GLint * params) {
        LOAD_GLES(glGetIntegerv);
    #ifndef direct_glGetIntegerv
    PUSH_IF_COMPILING(glGetIntegerv);
#endif
        gles_glGetIntegerv(pname, params);
}
#endif
#ifndef skip_glGetLightfv
void glGetLightfv(GLenum light, GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetLightfv);
    #ifndef direct_glGetLightfv
    PUSH_IF_COMPILING(glGetLightfv);
#endif
        gles_glGetLightfv(light, pname, params);
}
#endif
#ifndef skip_glGetLightxv
void glGetLightxv(GLenum light, GLenum pname, GLfixed * params) {
        LOAD_GLES(glGetLightxv);
    #ifndef direct_glGetLightxv
    PUSH_IF_COMPILING(glGetLightxv);
#endif
        gles_glGetLightxv(light, pname, params);
}
#endif
#ifndef skip_glGetMaterialfv
void glGetMaterialfv(GLenum face, GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetMaterialfv);
    #ifndef direct_glGetMaterialfv
    PUSH_IF_COMPILING(glGetMaterialfv);
#endif
        gles_glGetMaterialfv(face, pname, params);
}
#endif
#ifndef skip_glGetMaterialxv
void glGetMaterialxv(GLenum face, GLenum pname, GLfixed * params) {
        LOAD_GLES(glGetMaterialxv);
    #ifndef direct_glGetMaterialxv
    PUSH_IF_COMPILING(glGetMaterialxv);
#endif
        gles_glGetMaterialxv(face, pname, params);
}
#endif
#ifndef skip_glGetPointerv
void glGetPointerv(GLenum pname, GLvoid ** params) {
        LOAD_GLES(glGetPointerv);
    #ifndef direct_glGetPointerv
    PUSH_IF_COMPILING(glGetPointerv);
#endif
        gles_glGetPointerv(pname, params);
}
#endif
#ifndef skip_glGetString
const GLubyte * glGetString(GLenum name) {
        LOAD_GLES(glGetString);
    #ifndef direct_glGetString
    PUSH_IF_COMPILING(glGetString);
#endif
        return gles_glGetString(name);
}
#endif
#ifndef skip_glGetTexEnvfv
void glGetTexEnvfv(GLenum target, GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetTexEnvfv);
    #ifndef direct_glGetTexEnvfv
    PUSH_IF_COMPILING(glGetTexEnvfv);
#endif
        gles_glGetTexEnvfv(target, pname, params);
}
#endif
#ifndef skip_glGetTexEnviv
void glGetTexEnviv(GLenum target, GLenum pname, GLint * params) {
        LOAD_GLES(glGetTexEnviv);
    #ifndef direct_glGetTexEnviv
    PUSH_IF_COMPILING(glGetTexEnviv);
#endif
        gles_glGetTexEnviv(target, pname, params);
}
#endif
#ifndef skip_glGetTexEnvxv
void glGetTexEnvxv(GLenum target, GLenum pname, GLfixed * params) {
        LOAD_GLES(glGetTexEnvxv);
    #ifndef direct_glGetTexEnvxv
    PUSH_IF_COMPILING(glGetTexEnvxv);
#endif
        gles_glGetTexEnvxv(target, pname, params);
}
#endif
#ifndef skip_glGetTexParameterfv
void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetTexParameterfv);
    #ifndef direct_glGetTexParameterfv
    PUSH_IF_COMPILING(glGetTexParameterfv);
#endif
        gles_glGetTexParameterfv(target, pname, params);
}
#endif
#ifndef skip_glGetTexParameteriv
void glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) {
        LOAD_GLES(glGetTexParameteriv);
    #ifndef direct_glGetTexParameteriv
    PUSH_IF_COMPILING(glGetTexParameteriv);
#endif
        gles_glGetTexParameteriv(target, pname, params);
}
#endif
#ifndef skip_glGetTexParameterxv
void glGetTexParameterxv(GLenum target, GLenum pname, GLfixed * params) {
        LOAD_GLES(glGetTexParameterxv);
    #ifndef direct_glGetTexParameterxv
    PUSH_IF_COMPILING(glGetTexParameterxv);
#endif
        gles_glGetTexParameterxv(target, pname, params);
}
#endif
#ifndef skip_glHint
void glHint(GLenum target, GLenum mode) {
        LOAD_GLES(glHint);
    #ifndef direct_glHint
    PUSH_IF_COMPILING(glHint);
#endif
        gles_glHint(target, mode);
}
#endif
#ifndef skip_glIsBuffer
GLboolean glIsBuffer(GLuint buffer) {
        LOAD_GLES(glIsBuffer);
    #ifndef direct_glIsBuffer
    PUSH_IF_COMPILING(glIsBuffer);
#endif
        return gles_glIsBuffer(buffer);
}
#endif
#ifndef skip_glIsEnabled
GLboolean glIsEnabled(GLenum cap) {
        LOAD_GLES(glIsEnabled);
    #ifndef direct_glIsEnabled
    PUSH_IF_COMPILING(glIsEnabled);
#endif
        return gles_glIsEnabled(cap);
}
#endif
#ifndef skip_glIsTexture
GLboolean glIsTexture(GLuint texture) {
        LOAD_GLES(glIsTexture);
    #ifndef direct_glIsTexture
    PUSH_IF_COMPILING(glIsTexture);
#endif
        return gles_glIsTexture(texture);
}
#endif
#ifndef skip_glLightModelf
void glLightModelf(GLenum pname, GLfloat param) {
        LOAD_GLES(glLightModelf);
    #ifndef direct_glLightModelf
    PUSH_IF_COMPILING(glLightModelf);
#endif
        gles_glLightModelf(pname, param);
}
#endif
#ifndef skip_glLightModelfv
void glLightModelfv(GLenum pname, const GLfloat * params) {
        LOAD_GLES(glLightModelfv);
    #ifndef direct_glLightModelfv
    PUSH_IF_COMPILING(glLightModelfv);
#endif
        gles_glLightModelfv(pname, params);
}
#endif
#ifndef skip_glLightModelx
void glLightModelx(GLenum pname, GLfixed param) {
        LOAD_GLES(glLightModelx);
    #ifndef direct_glLightModelx
    PUSH_IF_COMPILING(glLightModelx);
#endif
        gles_glLightModelx(pname, param);
}
#endif
#ifndef skip_glLightModelxv
void glLightModelxv(GLenum pname, const GLfixed * params) {
        LOAD_GLES(glLightModelxv);
    #ifndef direct_glLightModelxv
    PUSH_IF_COMPILING(glLightModelxv);
#endif
        gles_glLightModelxv(pname, params);
}
#endif
#ifndef skip_glLightf
void glLightf(GLenum light, GLenum pname, GLfloat param) {
        LOAD_GLES(glLightf);
    #ifndef direct_glLightf
    PUSH_IF_COMPILING(glLightf);
#endif
        gles_glLightf(light, pname, param);
}
#endif
#ifndef skip_glLightfv
void glLightfv(GLenum light, GLenum pname, const GLfloat * params) {
        LOAD_GLES(glLightfv);
    #ifndef direct_glLightfv
    PUSH_IF_COMPILING(glLightfv);
#endif
        gles_glLightfv(light, pname, params);
}
#endif
#ifndef skip_glLightx
void glLightx(GLenum light, GLenum pname, GLfixed param) {
        LOAD_GLES(glLightx);
    #ifndef direct_glLightx
    PUSH_IF_COMPILING(glLightx);
#endif
        gles_glLightx(light, pname, param);
}
#endif
#ifndef skip_glLightxv
void glLightxv(GLenum light, GLenum pname, const GLfixed * params) {
        LOAD_GLES(glLightxv);
    #ifndef direct_glLightxv
    PUSH_IF_COMPILING(glLightxv);
#endif
        gles_glLightxv(light, pname, params);
}
#endif
#ifndef skip_glLineWidth
void glLineWidth(GLfloat width) {
        LOAD_GLES(glLineWidth);
    #ifndef direct_glLineWidth
    PUSH_IF_COMPILING(glLineWidth);
#endif
        gles_glLineWidth(width);
}
#endif
#ifndef skip_glLineWidthx
void glLineWidthx(GLfixed width) {
        LOAD_GLES(glLineWidthx);
    #ifndef direct_glLineWidthx
    PUSH_IF_COMPILING(glLineWidthx);
#endif
        gles_glLineWidthx(width);
}
#endif
#ifndef skip_glLoadIdentity
void glLoadIdentity() {
        LOAD_GLES(glLoadIdentity);
    #ifndef direct_glLoadIdentity
    PUSH_IF_COMPILING(glLoadIdentity);
#endif
        gles_glLoadIdentity();
}
#endif
#ifndef skip_glLoadMatrixf
void glLoadMatrixf(const GLfloat * m) {
        LOAD_GLES(glLoadMatrixf);
    #ifndef direct_glLoadMatrixf
    PUSH_IF_COMPILING(glLoadMatrixf);
#endif
        gles_glLoadMatrixf(m);
}
#endif
#ifndef skip_glLoadMatrixx
void glLoadMatrixx(const GLfixed * m) {
        LOAD_GLES(glLoadMatrixx);
    #ifndef direct_glLoadMatrixx
    PUSH_IF_COMPILING(glLoadMatrixx);
#endif
        gles_glLoadMatrixx(m);
}
#endif
#ifndef skip_glLogicOp
void glLogicOp(GLenum opcode) {
        LOAD_GLES(glLogicOp);
    #ifndef direct_glLogicOp
    PUSH_IF_COMPILING(glLogicOp);
#endif
        gles_glLogicOp(opcode);
}
#endif
#ifndef skip_glMaterialf
void glMaterialf(GLenum face, GLenum pname, GLfloat param) {
        LOAD_GLES(glMaterialf);
    #ifndef direct_glMaterialf
    PUSH_IF_COMPILING(glMaterialf);
#endif
        gles_glMaterialf(face, pname, param);
}
#endif
#ifndef skip_glMaterialfv
void glMaterialfv(GLenum face, GLenum pname, const GLfloat * params) {
        LOAD_GLES(glMaterialfv);
    #ifndef direct_glMaterialfv
    PUSH_IF_COMPILING(glMaterialfv);
#endif
        gles_glMaterialfv(face, pname, params);
}
#endif
#ifndef skip_glMaterialx
void glMaterialx(GLenum face, GLenum pname, GLfixed param) {
        LOAD_GLES(glMaterialx);
    #ifndef direct_glMaterialx
    PUSH_IF_COMPILING(glMaterialx);
#endif
        gles_glMaterialx(face, pname, param);
}
#endif
#ifndef skip_glMaterialxv
void glMaterialxv(GLenum face, GLenum pname, const GLfixed * params) {
        LOAD_GLES(glMaterialxv);
    #ifndef direct_glMaterialxv
    PUSH_IF_COMPILING(glMaterialxv);
#endif
        gles_glMaterialxv(face, pname, params);
}
#endif
#ifndef skip_glMatrixMode
void glMatrixMode(GLenum mode) {
        LOAD_GLES(glMatrixMode);
    #ifndef direct_glMatrixMode
    PUSH_IF_COMPILING(glMatrixMode);
#endif
        gles_glMatrixMode(mode);
}
#endif
#ifndef skip_glMultMatrixf
void glMultMatrixf(const GLfloat * m) {
        LOAD_GLES(glMultMatrixf);
    #ifndef direct_glMultMatrixf
    PUSH_IF_COMPILING(glMultMatrixf);
#endif
        gles_glMultMatrixf(m);
}
#endif
#ifndef skip_glMultMatrixx
void glMultMatrixx(const GLfixed * m) {
        LOAD_GLES(glMultMatrixx);
    #ifndef direct_glMultMatrixx
    PUSH_IF_COMPILING(glMultMatrixx);
#endif
        gles_glMultMatrixx(m);
}
#endif
#ifndef skip_glMultiTexCoord4f
void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
        LOAD_GLES(glMultiTexCoord4f);
    #ifndef direct_glMultiTexCoord4f
    PUSH_IF_COMPILING(glMultiTexCoord4f);
#endif
        gles_glMultiTexCoord4f(target, s, t, r, q);
}
#endif
#ifndef skip_glMultiTexCoord4x
void glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) {
        LOAD_GLES(glMultiTexCoord4x);
    #ifndef direct_glMultiTexCoord4x
    PUSH_IF_COMPILING(glMultiTexCoord4x);
#endif
        gles_glMultiTexCoord4x(target, s, t, r, q);
}
#endif
#ifndef skip_glNormal3f
void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) {
        LOAD_GLES(glNormal3f);
    #ifndef direct_glNormal3f
    PUSH_IF_COMPILING(glNormal3f);
#endif
        gles_glNormal3f(nx, ny, nz);
}
#endif
#ifndef skip_glNormal3x
void glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz) {
        LOAD_GLES(glNormal3x);
    #ifndef direct_glNormal3x
    PUSH_IF_COMPILING(glNormal3x);
#endif
        gles_glNormal3x(nx, ny, nz);
}
#endif
#ifndef skip_glNormalPointer
void glNormalPointer(GLenum type, GLsizei stride, const GLvoid * pointer) {
        LOAD_GLES(glNormalPointer);
    #ifndef direct_glNormalPointer
    PUSH_IF_COMPILING(glNormalPointer);
#endif
        gles_glNormalPointer(type, stride, pointer);
}
#endif
#ifndef skip_glOrthof
void glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) {
        LOAD_GLES(glOrthof);
    #ifndef direct_glOrthof
    PUSH_IF_COMPILING(glOrthof);
#endif
        gles_glOrthof(left, right, bottom, top, near, far);
}
#endif
#ifndef skip_glOrthox
void glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far) {
        LOAD_GLES(glOrthox);
    #ifndef direct_glOrthox
    PUSH_IF_COMPILING(glOrthox);
#endif
        gles_glOrthox(left, right, bottom, top, near, far);
}
#endif
#ifndef skip_glPixelStorei
void glPixelStorei(GLenum pname, GLint param) {
        LOAD_GLES(glPixelStorei);
    #ifndef direct_glPixelStorei
    PUSH_IF_COMPILING(glPixelStorei);
#endif
        gles_glPixelStorei(pname, param);
}
#endif
#ifndef skip_glPointParameterf
void glPointParameterf(GLenum pname, GLfloat param) {
        LOAD_GLES(glPointParameterf);
    #ifndef direct_glPointParameterf
    PUSH_IF_COMPILING(glPointParameterf);
#endif
        gles_glPointParameterf(pname, param);
}
#endif
#ifndef skip_glPointParameterfv
void glPointParameterfv(GLenum pname, const GLfloat * params) {
        LOAD_GLES(glPointParameterfv);
    #ifndef direct_glPointParameterfv
    PUSH_IF_COMPILING(glPointParameterfv);
#endif
        gles_glPointParameterfv(pname, params);
}
#endif
#ifndef skip_glPointParameterx
void glPointParameterx(GLenum pname, GLfixed param) {
        LOAD_GLES(glPointParameterx);
    #ifndef direct_glPointParameterx
    PUSH_IF_COMPILING(glPointParameterx);
#endif
        gles_glPointParameterx(pname, param);
}
#endif
#ifndef skip_glPointParameterxv
void glPointParameterxv(GLenum pname, const GLfixed * params) {
        LOAD_GLES(glPointParameterxv);
    #ifndef direct_glPointParameterxv
    PUSH_IF_COMPILING(glPointParameterxv);
#endif
        gles_glPointParameterxv(pname, params);
}
#endif
#ifndef skip_glPointSize
void glPointSize(GLfloat size) {
        LOAD_GLES(glPointSize);
    #ifndef direct_glPointSize
    PUSH_IF_COMPILING(glPointSize);
#endif
        gles_glPointSize(size);
}
#endif
#ifndef skip_glPointSizePointerOES
void glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid * pointer) {
        LOAD_GLES(glPointSizePointerOES);
    #ifndef direct_glPointSizePointerOES
    PUSH_IF_COMPILING(glPointSizePointerOES);
#endif
        gles_glPointSizePointerOES(type, stride, pointer);
}
#endif
#ifndef skip_glPointSizex
void glPointSizex(GLfixed size) {
        LOAD_GLES(glPointSizex);
    #ifndef direct_glPointSizex
    PUSH_IF_COMPILING(glPointSizex);
#endif
        gles_glPointSizex(size);
}
#endif
#ifndef skip_glPolygonOffset
void glPolygonOffset(GLfloat factor, GLfloat units) {
        LOAD_GLES(glPolygonOffset);
    #ifndef direct_glPolygonOffset
    PUSH_IF_COMPILING(glPolygonOffset);
#endif
        gles_glPolygonOffset(factor, units);
}
#endif
#ifndef skip_glPolygonOffsetx
void glPolygonOffsetx(GLfixed factor, GLfixed units) {
        LOAD_GLES(glPolygonOffsetx);
    #ifndef direct_glPolygonOffsetx
    PUSH_IF_COMPILING(glPolygonOffsetx);
#endif
        gles_glPolygonOffsetx(factor, units);
}
#endif
#ifndef skip_glPopMatrix
void glPopMatrix() {
        LOAD_GLES(glPopMatrix);
    #ifndef direct_glPopMatrix
    PUSH_IF_COMPILING(glPopMatrix);
#endif
        gles_glPopMatrix();
}
#endif
#ifndef skip_glPushMatrix
void glPushMatrix() {
        LOAD_GLES(glPushMatrix);
    #ifndef direct_glPushMatrix
    PUSH_IF_COMPILING(glPushMatrix);
#endif
        gles_glPushMatrix();
}
#endif
#ifndef skip_glReadPixels
void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels) {
        LOAD_GLES(glReadPixels);
    #ifndef direct_glReadPixels
    PUSH_IF_COMPILING(glReadPixels);
#endif
        gles_glReadPixels(x, y, width, height, format, type, pixels);
}
#endif
#ifndef skip_glRotatef
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {
        LOAD_GLES(glRotatef);
    #ifndef direct_glRotatef
    PUSH_IF_COMPILING(glRotatef);
#endif
        gles_glRotatef(angle, x, y, z);
}
#endif
#ifndef skip_glRotatex
void glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
        LOAD_GLES(glRotatex);
    #ifndef direct_glRotatex
    PUSH_IF_COMPILING(glRotatex);
#endif
        gles_glRotatex(angle, x, y, z);
}
#endif
#ifndef skip_glSampleCoverage
void glSampleCoverage(GLclampf value, GLboolean invert) {
        LOAD_GLES(glSampleCoverage);
    #ifndef direct_glSampleCoverage
    PUSH_IF_COMPILING(glSampleCoverage);
#endif
        gles_glSampleCoverage(value, invert);
}
#endif
#ifndef skip_glSampleCoveragex
void glSampleCoveragex(GLclampx value, GLboolean invert) {
        LOAD_GLES(glSampleCoveragex);
    #ifndef direct_glSampleCoveragex
    PUSH_IF_COMPILING(glSampleCoveragex);
#endif
        gles_glSampleCoveragex(value, invert);
}
#endif
#ifndef skip_glScalef
void glScalef(GLfloat x, GLfloat y, GLfloat z) {
        LOAD_GLES(glScalef);
    #ifndef direct_glScalef
    PUSH_IF_COMPILING(glScalef);
#endif
        gles_glScalef(x, y, z);
}
#endif
#ifndef skip_glScalex
void glScalex(GLfixed x, GLfixed y, GLfixed z) {
        LOAD_GLES(glScalex);
    #ifndef direct_glScalex
    PUSH_IF_COMPILING(glScalex);
#endif
        gles_glScalex(x, y, z);
}
#endif
#ifndef skip_glScissor
void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
        LOAD_GLES(glScissor);
    #ifndef direct_glScissor
    PUSH_IF_COMPILING(glScissor);
#endif
        gles_glScissor(x, y, width, height);
}
#endif
#ifndef skip_glShadeModel
void glShadeModel(GLenum mode) {
        LOAD_GLES(glShadeModel);
    #ifndef direct_glShadeModel
    PUSH_IF_COMPILING(glShadeModel);
#endif
        gles_glShadeModel(mode);
}
#endif
#ifndef skip_glStencilFunc
void glStencilFunc(GLenum func, GLint ref, GLuint mask) {
        LOAD_GLES(glStencilFunc);
    #ifndef direct_glStencilFunc
    PUSH_IF_COMPILING(glStencilFunc);
#endif
        gles_glStencilFunc(func, ref, mask);
}
#endif
#ifndef skip_glStencilMask
void glStencilMask(GLuint mask) {
        LOAD_GLES(glStencilMask);
    #ifndef direct_glStencilMask
    PUSH_IF_COMPILING(glStencilMask);
#endif
        gles_glStencilMask(mask);
}
#endif
#ifndef skip_glStencilOp
void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
        LOAD_GLES(glStencilOp);
    #ifndef direct_glStencilOp
    PUSH_IF_COMPILING(glStencilOp);
#endif
        gles_glStencilOp(fail, zfail, zpass);
}
#endif
#ifndef skip_glTexCoordPointer
void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {
        LOAD_GLES(glTexCoordPointer);
    #ifndef direct_glTexCoordPointer
    PUSH_IF_COMPILING(glTexCoordPointer);
#endif
        gles_glTexCoordPointer(size, type, stride, pointer);
}
#endif
#ifndef skip_glTexEnvf
void glTexEnvf(GLenum target, GLenum pname, GLfloat param) {
        LOAD_GLES(glTexEnvf);
    #ifndef direct_glTexEnvf
    PUSH_IF_COMPILING(glTexEnvf);
#endif
        gles_glTexEnvf(target, pname, param);
}
#endif
#ifndef skip_glTexEnvfv
void glTexEnvfv(GLenum target, GLenum pname, const GLfloat * params) {
        LOAD_GLES(glTexEnvfv);
    #ifndef direct_glTexEnvfv
    PUSH_IF_COMPILING(glTexEnvfv);
#endif
        gles_glTexEnvfv(target, pname, params);
}
#endif
#ifndef skip_glTexEnvi
void glTexEnvi(GLenum target, GLenum pname, GLint param) {
        LOAD_GLES(glTexEnvi);
    #ifndef direct_glTexEnvi
    PUSH_IF_COMPILING(glTexEnvi);
#endif
        gles_glTexEnvi(target, pname, param);
}
#endif
#ifndef skip_glTexEnviv
void glTexEnviv(GLenum target, GLenum pname, const GLint * params) {
        LOAD_GLES(glTexEnviv);
    #ifndef direct_glTexEnviv
    PUSH_IF_COMPILING(glTexEnviv);
#endif
        gles_glTexEnviv(target, pname, params);
}
#endif
#ifndef skip_glTexEnvx
void glTexEnvx(GLenum target, GLenum pname, GLfixed param) {
        LOAD_GLES(glTexEnvx);
    #ifndef direct_glTexEnvx
    PUSH_IF_COMPILING(glTexEnvx);
#endif
        gles_glTexEnvx(target, pname, param);
}
#endif
#ifndef skip_glTexEnvxv
void glTexEnvxv(GLenum target, GLenum pname, const GLfixed * params) {
        LOAD_GLES(glTexEnvxv);
    #ifndef direct_glTexEnvxv
    PUSH_IF_COMPILING(glTexEnvxv);
#endif
        gles_glTexEnvxv(target, pname, params);
}
#endif
#ifndef skip_glTexImage2D
void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {
        LOAD_GLES(glTexImage2D);
    #ifndef direct_glTexImage2D
    PUSH_IF_COMPILING(glTexImage2D);
#endif
        gles_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
}
#endif
#ifndef skip_glTexParameterf
void glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
        LOAD_GLES(glTexParameterf);
    #ifndef direct_glTexParameterf
    PUSH_IF_COMPILING(glTexParameterf);
#endif
        gles_glTexParameterf(target, pname, param);
}
#endif
#ifndef skip_glTexParameterfv
void glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) {
        LOAD_GLES(glTexParameterfv);
    #ifndef direct_glTexParameterfv
    PUSH_IF_COMPILING(glTexParameterfv);
#endif
        gles_glTexParameterfv(target, pname, params);
}
#endif
#ifndef skip_glTexParameteri
void glTexParameteri(GLenum target, GLenum pname, GLint param) {
        LOAD_GLES(glTexParameteri);
    #ifndef direct_glTexParameteri
    PUSH_IF_COMPILING(glTexParameteri);
#endif
        gles_glTexParameteri(target, pname, param);
}
#endif
#ifndef skip_glTexParameteriv
void glTexParameteriv(GLenum target, GLenum pname, const GLint * params) {
        LOAD_GLES(glTexParameteriv);
    #ifndef direct_glTexParameteriv
    PUSH_IF_COMPILING(glTexParameteriv);
#endif
        gles_glTexParameteriv(target, pname, params);
}
#endif
#ifndef skip_glTexParameterx
void glTexParameterx(GLenum target, GLenum pname, GLfixed param) {
        LOAD_GLES(glTexParameterx);
    #ifndef direct_glTexParameterx
    PUSH_IF_COMPILING(glTexParameterx);
#endif
        gles_glTexParameterx(target, pname, param);
}
#endif
#ifndef skip_glTexParameterxv
void glTexParameterxv(GLenum target, GLenum pname, const GLfixed * params) {
        LOAD_GLES(glTexParameterxv);
    #ifndef direct_glTexParameterxv
    PUSH_IF_COMPILING(glTexParameterxv);
#endif
        gles_glTexParameterxv(target, pname, params);
}
#endif
#ifndef skip_glTexSubImage2D
void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {
        LOAD_GLES(glTexSubImage2D);
    #ifndef direct_glTexSubImage2D
    PUSH_IF_COMPILING(glTexSubImage2D);
#endif
        gles_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
}
#endif
#ifndef skip_glTranslatef
void glTranslatef(GLfloat x, GLfloat y, GLfloat z) {
        LOAD_GLES(glTranslatef);
    #ifndef direct_glTranslatef
    PUSH_IF_COMPILING(glTranslatef);
#endif
        gles_glTranslatef(x, y, z);
}
#endif
#ifndef skip_glTranslatex
void glTranslatex(GLfixed x, GLfixed y, GLfixed z) {
        LOAD_GLES(glTranslatex);
    #ifndef direct_glTranslatex
    PUSH_IF_COMPILING(glTranslatex);
#endif
        gles_glTranslatex(x, y, z);
}
#endif
#ifndef skip_glVertexPointer
void glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {
        LOAD_GLES(glVertexPointer);
    #ifndef direct_glVertexPointer
    PUSH_IF_COMPILING(glVertexPointer);
#endif
        gles_glVertexPointer(size, type, stride, pointer);
}
#endif
#ifndef skip_glViewport
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
        LOAD_GLES(glViewport);
    #ifndef direct_glViewport
    PUSH_IF_COMPILING(glViewport);
#endif
        gles_glViewport(x, y, width, height);
}
#endif
#endif
Added jni/glshim/src/gl/wrap/gles.h.

more than 10,000 changes

Added jni/glshim/src/gl/wrap/gles2.c.




































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
#ifdef USE_ES2
#include "gles2.h"
#include "../loader.h"

void glPackedCall(const packed_call_t *packed) {
    switch (packed->format) {
                case FORMAT_void_GLenum: {
            PACKED_void_GLenum *unpacked = (PACKED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLuint_GLuint: {
            PACKED_void_GLuint_GLuint *unpacked = (PACKED_void_GLuint_GLuint *)packed;
                        ARGS_void_GLuint_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLuint_GLuint_const_GLchar___GENPT__: {
            PACKED_void_GLuint_GLuint_const_GLchar___GENPT__ *unpacked = (PACKED_void_GLuint_GLuint_const_GLchar___GENPT__ *)packed;
                        ARGS_void_GLuint_GLuint_const_GLchar___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLuint: {
            PACKED_void_GLenum_GLuint *unpacked = (PACKED_void_GLenum_GLuint *)packed;
                        ARGS_void_GLenum_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf: {
            PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf *unpacked = (PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLenum: {
            PACKED_void_GLenum_GLenum *unpacked = (PACKED_void_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum_GLenum: {
            PACKED_void_GLenum_GLenum_GLenum_GLenum *unpacked = (PACKED_void_GLenum_GLenum_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum: {
            PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum *unpacked = (PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum *)packed;
                        ARGS_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_GLenum_GLenum: {
            PACKED_GLenum_GLenum *unpacked = (PACKED_GLenum_GLenum *)packed;
                        ARGS_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLbitfield: {
            PACKED_void_GLbitfield *unpacked = (PACKED_void_GLbitfield *)packed;
                        ARGS_void_GLbitfield args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLclampf: {
            PACKED_void_GLclampf *unpacked = (PACKED_void_GLclampf *)packed;
                        ARGS_void_GLclampf args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLint: {
            PACKED_void_GLint *unpacked = (PACKED_void_GLint *)packed;
                        ARGS_void_GLint args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLboolean_GLboolean_GLboolean_GLboolean: {
            PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean *unpacked = (PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean *)packed;
                        ARGS_void_GLboolean_GLboolean_GLboolean_GLboolean args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLuint: {
            PACKED_void_GLuint *unpacked = (PACKED_void_GLuint *)packed;
                        ARGS_void_GLuint args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8,             args.a9            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint: {
            PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint *unpacked = (PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint *)packed;
                        ARGS_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei: {
            PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei *unpacked = (PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8            );
            break;
        }
                case FORMAT_GLuint: {
            PACKED_GLuint *unpacked = (PACKED_GLuint *)packed;
                        unpacked->func();
            break;
        }
                case FORMAT_GLuint_GLenum: {
            PACKED_GLuint_GLenum *unpacked = (PACKED_GLuint_GLenum *)packed;
                        ARGS_GLuint_GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLsizei_const_GLuint___GENPT__: {
            PACKED_void_GLsizei_const_GLuint___GENPT__ *unpacked = (PACKED_void_GLsizei_const_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_const_GLuint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLboolean: {
            PACKED_void_GLboolean *unpacked = (PACKED_void_GLboolean *)packed;
                        ARGS_void_GLboolean args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLclampf_GLclampf: {
            PACKED_void_GLclampf_GLclampf *unpacked = (PACKED_void_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLsizei: {
            PACKED_void_GLenum_GLint_GLsizei *unpacked = (PACKED_void_GLenum_GLint_GLsizei *)packed;
                        ARGS_void_GLenum_GLint_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void: {
            PACKED_void *unpacked = (PACKED_void *)packed;
                        unpacked->func();
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum_GLuint: {
            PACKED_void_GLenum_GLenum_GLenum_GLuint *unpacked = (PACKED_void_GLenum_GLenum_GLenum_GLuint *)packed;
                        ARGS_void_GLenum_GLenum_GLenum_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum_GLuint_GLint: {
            PACKED_void_GLenum_GLenum_GLenum_GLuint_GLint *unpacked = (PACKED_void_GLenum_GLenum_GLenum_GLuint_GLint *)packed;
                        ARGS_void_GLenum_GLenum_GLenum_GLuint_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLsizei_GLuint___GENPT__: {
            PACKED_void_GLsizei_GLuint___GENPT__ *unpacked = (PACKED_void_GLsizei_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_GLuint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__: {
            PACKED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__ *unpacked = (PACKED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__ *)packed;
                        ARGS_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7            );
            break;
        }
                case FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__: {
            PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__ *unpacked = (PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__ *)packed;
                        ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_GLint_GLuint_const_GLchar___GENPT__: {
            PACKED_GLint_GLuint_const_GLchar___GENPT__ *unpacked = (PACKED_GLint_GLuint_const_GLchar___GENPT__ *)packed;
                        ARGS_GLint_GLuint_const_GLchar___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLboolean___GENPT__: {
            PACKED_void_GLenum_GLboolean___GENPT__ *unpacked = (PACKED_void_GLenum_GLboolean___GENPT__ *)packed;
                        ARGS_void_GLenum_GLboolean___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLint___GENPT__: {
            PACKED_void_GLenum_GLenum_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_GLenum: {
            PACKED_GLenum *unpacked = (PACKED_GLenum *)packed;
                        unpacked->func();
            break;
        }
                case FORMAT_void_GLenum_GLfloat___GENPT__: {
            PACKED_void_GLenum_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum_GLint___GENPT__: {
            PACKED_void_GLenum_GLenum_GLenum_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLenum_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLint___GENPT__: {
            PACKED_void_GLenum_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__: {
            PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__ *unpacked = (PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__ *)packed;
                        ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLuint_GLenum_GLint___GENPT__: {
            PACKED_void_GLuint_GLenum_GLint___GENPT__ *unpacked = (PACKED_void_GLuint_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLuint_GLenum_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__: {
            PACKED_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_const_GLubyte___GENPT___GLenum: {
            PACKED_const_GLubyte___GENPT___GLenum *unpacked = (PACKED_const_GLubyte___GENPT___GLenum *)packed;
                        ARGS_const_GLubyte___GENPT___GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLfloat___GENPT__: {
            PACKED_void_GLenum_GLenum_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLuint_GLint_GLfloat___GENPT__: {
            PACKED_void_GLuint_GLint_GLfloat___GENPT__ *unpacked = (PACKED_void_GLuint_GLint_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLuint_GLint_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLuint_GLint_GLint___GENPT__: {
            PACKED_void_GLuint_GLint_GLint___GENPT__ *unpacked = (PACKED_void_GLuint_GLint_GLint___GENPT__ *)packed;
                        ARGS_void_GLuint_GLint_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLuint_GLenum_GLvoid___GENPT____GENPT__: {
            PACKED_void_GLuint_GLenum_GLvoid___GENPT____GENPT__ *unpacked = (PACKED_void_GLuint_GLenum_GLvoid___GENPT____GENPT__ *)packed;
                        ARGS_void_GLuint_GLenum_GLvoid___GENPT____GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLuint_GLenum_GLfloat___GENPT__: {
            PACKED_void_GLuint_GLenum_GLfloat___GENPT__ *unpacked = (PACKED_void_GLuint_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLuint_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_GLboolean_GLuint: {
            PACKED_GLboolean_GLuint *unpacked = (PACKED_GLboolean_GLuint *)packed;
                        ARGS_GLboolean_GLuint args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_GLboolean_GLenum: {
            PACKED_GLboolean_GLenum *unpacked = (PACKED_GLboolean_GLenum *)packed;
                        ARGS_GLboolean_GLenum args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLfloat: {
            PACKED_void_GLfloat *unpacked = (PACKED_void_GLfloat *)packed;
                        ARGS_void_GLfloat args = unpacked->args;
                        unpacked->func(args.a1            );
            break;
        }
                case FORMAT_void_GLenum_GLint: {
            PACKED_void_GLenum_GLint *unpacked = (PACKED_void_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLfloat_GLfloat: {
            PACKED_void_GLfloat_GLfloat *unpacked = (PACKED_void_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__: {
            PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ *unpacked = (PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLsizei_GLsizei: {
            PACKED_void_GLenum_GLenum_GLsizei_GLsizei *unpacked = (PACKED_void_GLenum_GLenum_GLsizei_GLsizei *)packed;
                        ARGS_void_GLenum_GLenum_GLsizei_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLclampf_GLboolean: {
            PACKED_void_GLclampf_GLboolean *unpacked = (PACKED_void_GLclampf_GLboolean *)packed;
                        ARGS_void_GLclampf_GLboolean args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLsizei_GLsizei: {
            PACKED_void_GLint_GLint_GLsizei_GLsizei *unpacked = (PACKED_void_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei: {
            PACKED_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei *unpacked = (PACKED_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei *)packed;
                        ARGS_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__: {
            PACKED_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__ *unpacked = (PACKED_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__ *)packed;
                        ARGS_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLuint: {
            PACKED_void_GLenum_GLint_GLuint *unpacked = (PACKED_void_GLenum_GLint_GLuint *)packed;
                        ARGS_void_GLenum_GLint_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLint_GLuint: {
            PACKED_void_GLenum_GLenum_GLint_GLuint *unpacked = (PACKED_void_GLenum_GLenum_GLint_GLuint *)packed;
                        ARGS_void_GLenum_GLenum_GLint_GLuint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLenum: {
            PACKED_void_GLenum_GLenum_GLenum *unpacked = (PACKED_void_GLenum_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum_GLenum args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8,             args.a9            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLfloat: {
            PACKED_void_GLenum_GLenum_GLfloat *unpacked = (PACKED_void_GLenum_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__: {
            PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_GLint: {
            PACKED_void_GLenum_GLenum_GLint *unpacked = (PACKED_void_GLenum_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLenum_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLenum_const_GLint___GENPT__: {
            PACKED_void_GLenum_GLenum_const_GLint___GENPT__ *unpacked = (PACKED_void_GLenum_GLenum_const_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__: {
            PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6,             args.a7,             args.a8,             args.a9            );
            break;
        }
                case FORMAT_void_GLint_GLfloat: {
            PACKED_void_GLint_GLfloat *unpacked = (PACKED_void_GLint_GLfloat *)packed;
                        ARGS_void_GLint_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLint_GLsizei_const_GLfloat___GENPT__: {
            PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__ *unpacked = (PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLint_GLsizei_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLint_GLint: {
            PACKED_void_GLint_GLint *unpacked = (PACKED_void_GLint_GLint *)packed;
                        ARGS_void_GLint_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLint_GLsizei_const_GLint___GENPT__: {
            PACKED_void_GLint_GLsizei_const_GLint___GENPT__ *unpacked = (PACKED_void_GLint_GLsizei_const_GLint___GENPT__ *)packed;
                        ARGS_void_GLint_GLsizei_const_GLint___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLint_GLfloat_GLfloat: {
            PACKED_void_GLint_GLfloat_GLfloat *unpacked = (PACKED_void_GLint_GLfloat_GLfloat *)packed;
                        ARGS_void_GLint_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLint: {
            PACKED_void_GLint_GLint_GLint *unpacked = (PACKED_void_GLint_GLint_GLint *)packed;
                        ARGS_void_GLint_GLint_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLint_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLint_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLint_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLint_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLint_GLint: {
            PACKED_void_GLint_GLint_GLint_GLint *unpacked = (PACKED_void_GLint_GLint_GLint_GLint *)packed;
                        ARGS_void_GLint_GLint_GLint_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLint_GLint_GLint_GLint_GLint: {
            PACKED_void_GLint_GLint_GLint_GLint_GLint *unpacked = (PACKED_void_GLint_GLint_GLint_GLint_GLint *)packed;
                        ARGS_void_GLint_GLint_GLint_GLint_GLint args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__: {
            PACKED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__ *unpacked = (PACKED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLuint_GLfloat: {
            PACKED_void_GLuint_GLfloat *unpacked = (PACKED_void_GLuint_GLfloat *)packed;
                        ARGS_void_GLuint_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLuint_const_GLfloat___GENPT__: {
            PACKED_void_GLuint_const_GLfloat___GENPT__ *unpacked = (PACKED_void_GLuint_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLuint_const_GLfloat___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2            );
            break;
        }
                case FORMAT_void_GLuint_GLfloat_GLfloat: {
            PACKED_void_GLuint_GLfloat_GLfloat *unpacked = (PACKED_void_GLuint_GLfloat_GLfloat *)packed;
                        ARGS_void_GLuint_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3            );
            break;
        }
                case FORMAT_void_GLuint_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLuint_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLuint_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLuint_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4            );
            break;
        }
                case FORMAT_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat: {
            PACKED_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (PACKED_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5            );
            break;
        }
                case FORMAT_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__: {
            PACKED_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__ *unpacked = (PACKED_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        unpacked->func(args.a1,             args.a2,             args.a3,             args.a4,             args.a5,             args.a6            );
            break;
        }
            }
}
#ifndef skip_glActiveTexture
void glActiveTexture(GLenum texture) {
        LOAD_GLES(glActiveTexture);
    #ifndef direct_glActiveTexture
    PUSH_IF_COMPILING(glActiveTexture);
#endif
        gles_glActiveTexture(texture);
}
#endif
#ifndef skip_glAttachShader
void glAttachShader(GLuint program, GLuint shader) {
        LOAD_GLES(glAttachShader);
    #ifndef direct_glAttachShader
    PUSH_IF_COMPILING(glAttachShader);
#endif
        gles_glAttachShader(program, shader);
}
#endif
#ifndef skip_glBindAttribLocation
void glBindAttribLocation(GLuint program, GLuint index, const GLchar * name) {
        LOAD_GLES(glBindAttribLocation);
    #ifndef direct_glBindAttribLocation
    PUSH_IF_COMPILING(glBindAttribLocation);
#endif
        gles_glBindAttribLocation(program, index, name);
}
#endif
#ifndef skip_glBindBuffer
void glBindBuffer(GLenum target, GLuint buffer) {
        LOAD_GLES(glBindBuffer);
    #ifndef direct_glBindBuffer
    PUSH_IF_COMPILING(glBindBuffer);
#endif
        gles_glBindBuffer(target, buffer);
}
#endif
#ifndef skip_glBindFramebuffer
void glBindFramebuffer(GLenum target, GLuint framebuffer) {
        LOAD_GLES(glBindFramebuffer);
    #ifndef direct_glBindFramebuffer
    PUSH_IF_COMPILING(glBindFramebuffer);
#endif
        gles_glBindFramebuffer(target, framebuffer);
}
#endif
#ifndef skip_glBindRenderbuffer
void glBindRenderbuffer(GLenum target, GLuint renderbuffer) {
        LOAD_GLES(glBindRenderbuffer);
    #ifndef direct_glBindRenderbuffer
    PUSH_IF_COMPILING(glBindRenderbuffer);
#endif
        gles_glBindRenderbuffer(target, renderbuffer);
}
#endif
#ifndef skip_glBindTexture
void glBindTexture(GLenum target, GLuint texture) {
        LOAD_GLES(glBindTexture);
    #ifndef direct_glBindTexture
    PUSH_IF_COMPILING(glBindTexture);
#endif
        gles_glBindTexture(target, texture);
}
#endif
#ifndef skip_glBlendColor
void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
        LOAD_GLES(glBlendColor);
    #ifndef direct_glBlendColor
    PUSH_IF_COMPILING(glBlendColor);
#endif
        gles_glBlendColor(red, green, blue, alpha);
}
#endif
#ifndef skip_glBlendEquation
void glBlendEquation(GLenum mode) {
        LOAD_GLES(glBlendEquation);
    #ifndef direct_glBlendEquation
    PUSH_IF_COMPILING(glBlendEquation);
#endif
        gles_glBlendEquation(mode);
}
#endif
#ifndef skip_glBlendEquationSeparate
void glBlendEquationSeparate(GLenum modeRGB, GLenum modeA) {
        LOAD_GLES(glBlendEquationSeparate);
    #ifndef direct_glBlendEquationSeparate
    PUSH_IF_COMPILING(glBlendEquationSeparate);
#endif
        gles_glBlendEquationSeparate(modeRGB, modeA);
}
#endif
#ifndef skip_glBlendFunc
void glBlendFunc(GLenum sfactor, GLenum dfactor) {
        LOAD_GLES(glBlendFunc);
    #ifndef direct_glBlendFunc
    PUSH_IF_COMPILING(glBlendFunc);
#endif
        gles_glBlendFunc(sfactor, dfactor);
}
#endif
#ifndef skip_glBlendFuncSeparate
void glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {
        LOAD_GLES(glBlendFuncSeparate);
    #ifndef direct_glBlendFuncSeparate
    PUSH_IF_COMPILING(glBlendFuncSeparate);
#endif
        gles_glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
}
#endif
#ifndef skip_glBufferData
void glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) {
        LOAD_GLES(glBufferData);
    #ifndef direct_glBufferData
    PUSH_IF_COMPILING(glBufferData);
#endif
        gles_glBufferData(target, size, data, usage);
}
#endif
#ifndef skip_glBufferSubData
void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) {
        LOAD_GLES(glBufferSubData);
    #ifndef direct_glBufferSubData
    PUSH_IF_COMPILING(glBufferSubData);
#endif
        gles_glBufferSubData(target, offset, size, data);
}
#endif
#ifndef skip_glCheckFramebufferStatus
GLenum glCheckFramebufferStatus(GLenum target) {
        LOAD_GLES(glCheckFramebufferStatus);
    #ifndef direct_glCheckFramebufferStatus
    PUSH_IF_COMPILING(glCheckFramebufferStatus);
#endif
        return gles_glCheckFramebufferStatus(target);
}
#endif
#ifndef skip_glClear
void glClear(GLbitfield mask) {
        LOAD_GLES(glClear);
    #ifndef direct_glClear
    PUSH_IF_COMPILING(glClear);
#endif
        gles_glClear(mask);
}
#endif
#ifndef skip_glClearColor
void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
        LOAD_GLES(glClearColor);
    #ifndef direct_glClearColor
    PUSH_IF_COMPILING(glClearColor);
#endif
        gles_glClearColor(red, green, blue, alpha);
}
#endif
#ifndef skip_glClearDepthf
void glClearDepthf(GLclampf depth) {
        LOAD_GLES(glClearDepthf);
    #ifndef direct_glClearDepthf
    PUSH_IF_COMPILING(glClearDepthf);
#endif
        gles_glClearDepthf(depth);
}
#endif
#ifndef skip_glClearStencil
void glClearStencil(GLint s) {
        LOAD_GLES(glClearStencil);
    #ifndef direct_glClearStencil
    PUSH_IF_COMPILING(glClearStencil);
#endif
        gles_glClearStencil(s);
}
#endif
#ifndef skip_glColorMask
void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
        LOAD_GLES(glColorMask);
    #ifndef direct_glColorMask
    PUSH_IF_COMPILING(glColorMask);
#endif
        gles_glColorMask(red, green, blue, alpha);
}
#endif
#ifndef skip_glCompileShader
void glCompileShader(GLuint shader) {
        LOAD_GLES(glCompileShader);
    #ifndef direct_glCompileShader
    PUSH_IF_COMPILING(glCompileShader);
#endif
        gles_glCompileShader(shader);
}
#endif
#ifndef skip_glCompressedTexImage2D
void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {
        LOAD_GLES(glCompressedTexImage2D);
    #ifndef direct_glCompressedTexImage2D
    PUSH_IF_COMPILING(glCompressedTexImage2D);
#endif
        gles_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
}
#endif
#ifndef skip_glCompressedTexSubImage2D
void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {
        LOAD_GLES(glCompressedTexSubImage2D);
    #ifndef direct_glCompressedTexSubImage2D
    PUSH_IF_COMPILING(glCompressedTexSubImage2D);
#endif
        gles_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
#endif
#ifndef skip_glCopyTexImage2D
void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
        LOAD_GLES(glCopyTexImage2D);
    #ifndef direct_glCopyTexImage2D
    PUSH_IF_COMPILING(glCopyTexImage2D);
#endif
        gles_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
}
#endif
#ifndef skip_glCopyTexSubImage2D
void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
        LOAD_GLES(glCopyTexSubImage2D);
    #ifndef direct_glCopyTexSubImage2D
    PUSH_IF_COMPILING(glCopyTexSubImage2D);
#endif
        gles_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}
#endif
#ifndef skip_glCreateProgram
GLuint glCreateProgram() {
        LOAD_GLES(glCreateProgram);
    #ifndef direct_glCreateProgram
    PUSH_IF_COMPILING(glCreateProgram);
#endif
        return gles_glCreateProgram();
}
#endif
#ifndef skip_glCreateShader
GLuint glCreateShader(GLenum type) {
        LOAD_GLES(glCreateShader);
    #ifndef direct_glCreateShader
    PUSH_IF_COMPILING(glCreateShader);
#endif
        return gles_glCreateShader(type);
}
#endif
#ifndef skip_glCullFace
void glCullFace(GLenum mode) {
        LOAD_GLES(glCullFace);
    #ifndef direct_glCullFace
    PUSH_IF_COMPILING(glCullFace);
#endif
        gles_glCullFace(mode);
}
#endif
#ifndef skip_glDeleteBuffers
void glDeleteBuffers(GLsizei n, const GLuint * buffer) {
        LOAD_GLES(glDeleteBuffers);
    #ifndef direct_glDeleteBuffers
    PUSH_IF_COMPILING(glDeleteBuffers);
#endif
        gles_glDeleteBuffers(n, buffer);
}
#endif
#ifndef skip_glDeleteFramebuffers
void glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers) {
        LOAD_GLES(glDeleteFramebuffers);
    #ifndef direct_glDeleteFramebuffers
    PUSH_IF_COMPILING(glDeleteFramebuffers);
#endif
        gles_glDeleteFramebuffers(n, framebuffers);
}
#endif
#ifndef skip_glDeleteProgram
void glDeleteProgram(GLuint program) {
        LOAD_GLES(glDeleteProgram);
    #ifndef direct_glDeleteProgram
    PUSH_IF_COMPILING(glDeleteProgram);
#endif
        gles_glDeleteProgram(program);
}
#endif
#ifndef skip_glDeleteRenderbuffers
void glDeleteRenderbuffers(GLsizei n, const GLuint * renderbuffers) {
        LOAD_GLES(glDeleteRenderbuffers);
    #ifndef direct_glDeleteRenderbuffers
    PUSH_IF_COMPILING(glDeleteRenderbuffers);
#endif
        gles_glDeleteRenderbuffers(n, renderbuffers);
}
#endif
#ifndef skip_glDeleteShader
void glDeleteShader(GLuint program) {
        LOAD_GLES(glDeleteShader);
    #ifndef direct_glDeleteShader
    PUSH_IF_COMPILING(glDeleteShader);
#endif
        gles_glDeleteShader(program);
}
#endif
#ifndef skip_glDeleteTextures
void glDeleteTextures(GLsizei n, const GLuint * textures) {
        LOAD_GLES(glDeleteTextures);
    #ifndef direct_glDeleteTextures
    PUSH_IF_COMPILING(glDeleteTextures);
#endif
        gles_glDeleteTextures(n, textures);
}
#endif
#ifndef skip_glDepthFunc
void glDepthFunc(GLenum func) {
        LOAD_GLES(glDepthFunc);
    #ifndef direct_glDepthFunc
    PUSH_IF_COMPILING(glDepthFunc);
#endif
        gles_glDepthFunc(func);
}
#endif
#ifndef skip_glDepthMask
void glDepthMask(GLboolean flag) {
        LOAD_GLES(glDepthMask);
    #ifndef direct_glDepthMask
    PUSH_IF_COMPILING(glDepthMask);
#endif
        gles_glDepthMask(flag);
}
#endif
#ifndef skip_glDepthRangef
void glDepthRangef(GLclampf near, GLclampf far) {
        LOAD_GLES(glDepthRangef);
    #ifndef direct_glDepthRangef
    PUSH_IF_COMPILING(glDepthRangef);
#endif
        gles_glDepthRangef(near, far);
}
#endif
#ifndef skip_glDetachShader
void glDetachShader(GLuint program, GLuint shader) {
        LOAD_GLES(glDetachShader);
    #ifndef direct_glDetachShader
    PUSH_IF_COMPILING(glDetachShader);
#endif
        gles_glDetachShader(program, shader);
}
#endif
#ifndef skip_glDisable
void glDisable(GLenum cap) {
        LOAD_GLES(glDisable);
    #ifndef direct_glDisable
    PUSH_IF_COMPILING(glDisable);
#endif
        gles_glDisable(cap);
}
#endif
#ifndef skip_glDisableVertexAttribArray
void glDisableVertexAttribArray(GLuint index) {
        LOAD_GLES(glDisableVertexAttribArray);
    #ifndef direct_glDisableVertexAttribArray
    PUSH_IF_COMPILING(glDisableVertexAttribArray);
#endif
        gles_glDisableVertexAttribArray(index);
}
#endif
#ifndef skip_glDrawArrays
void glDrawArrays(GLenum mode, GLint first, GLsizei count) {
        LOAD_GLES(glDrawArrays);
    #ifndef direct_glDrawArrays
    PUSH_IF_COMPILING(glDrawArrays);
#endif
        gles_glDrawArrays(mode, first, count);
}
#endif
#ifndef skip_glDrawElements
void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices) {
        LOAD_GLES(glDrawElements);
    #ifndef direct_glDrawElements
    PUSH_IF_COMPILING(glDrawElements);
#endif
        gles_glDrawElements(mode, count, type, indices);
}
#endif
#ifndef skip_glEnable
void glEnable(GLenum cap) {
        LOAD_GLES(glEnable);
    #ifndef direct_glEnable
    PUSH_IF_COMPILING(glEnable);
#endif
        gles_glEnable(cap);
}
#endif
#ifndef skip_glEnableVertexAttribArray
void glEnableVertexAttribArray(GLuint index) {
        LOAD_GLES(glEnableVertexAttribArray);
    #ifndef direct_glEnableVertexAttribArray
    PUSH_IF_COMPILING(glEnableVertexAttribArray);
#endif
        gles_glEnableVertexAttribArray(index);
}
#endif
#ifndef skip_glFinish
void glFinish() {
        LOAD_GLES(glFinish);
    #ifndef direct_glFinish
    PUSH_IF_COMPILING(glFinish);
#endif
        gles_glFinish();
}
#endif
#ifndef skip_glFlush
void glFlush() {
        LOAD_GLES(glFlush);
    #ifndef direct_glFlush
    PUSH_IF_COMPILING(glFlush);
#endif
        gles_glFlush();
}
#endif
#ifndef skip_glFramebufferRenderbuffer
void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {
        LOAD_GLES(glFramebufferRenderbuffer);
    #ifndef direct_glFramebufferRenderbuffer
    PUSH_IF_COMPILING(glFramebufferRenderbuffer);
#endif
        gles_glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
}
#endif
#ifndef skip_glFramebufferTexture2D
void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {
        LOAD_GLES(glFramebufferTexture2D);
    #ifndef direct_glFramebufferTexture2D
    PUSH_IF_COMPILING(glFramebufferTexture2D);
#endif
        gles_glFramebufferTexture2D(target, attachment, textarget, texture, level);
}
#endif
#ifndef skip_glFrontFace
void glFrontFace(GLenum mode) {
        LOAD_GLES(glFrontFace);
    #ifndef direct_glFrontFace
    PUSH_IF_COMPILING(glFrontFace);
#endif
        gles_glFrontFace(mode);
}
#endif
#ifndef skip_glGenBuffers
void glGenBuffers(GLsizei n, GLuint * buffer) {
        LOAD_GLES(glGenBuffers);
    #ifndef direct_glGenBuffers
    PUSH_IF_COMPILING(glGenBuffers);
#endif
        gles_glGenBuffers(n, buffer);
}
#endif
#ifndef skip_glGenFramebuffers
void glGenFramebuffers(GLsizei n, GLuint * framebuffers) {
        LOAD_GLES(glGenFramebuffers);
    #ifndef direct_glGenFramebuffers
    PUSH_IF_COMPILING(glGenFramebuffers);
#endif
        gles_glGenFramebuffers(n, framebuffers);
}
#endif
#ifndef skip_glGenRenderbuffers
void glGenRenderbuffers(GLsizei n, GLuint * renderbuffers) {
        LOAD_GLES(glGenRenderbuffers);
    #ifndef direct_glGenRenderbuffers
    PUSH_IF_COMPILING(glGenRenderbuffers);
#endif
        gles_glGenRenderbuffers(n, renderbuffers);
}
#endif
#ifndef skip_glGenTextures
void glGenTextures(GLsizei n, GLuint * textures) {
        LOAD_GLES(glGenTextures);
    #ifndef direct_glGenTextures
    PUSH_IF_COMPILING(glGenTextures);
#endif
        gles_glGenTextures(n, textures);
}
#endif
#ifndef skip_glGenerateMipmap
void glGenerateMipmap(GLenum target) {
        LOAD_GLES(glGenerateMipmap);
    #ifndef direct_glGenerateMipmap
    PUSH_IF_COMPILING(glGenerateMipmap);
#endif
        gles_glGenerateMipmap(target);
}
#endif
#ifndef skip_glGetActiveAttrib
void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {
        LOAD_GLES(glGetActiveAttrib);
    #ifndef direct_glGetActiveAttrib
    PUSH_IF_COMPILING(glGetActiveAttrib);
#endif
        gles_glGetActiveAttrib(program, index, bufSize, length, size, type, name);
}
#endif
#ifndef skip_glGetActiveUniform
void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {
        LOAD_GLES(glGetActiveUniform);
    #ifndef direct_glGetActiveUniform
    PUSH_IF_COMPILING(glGetActiveUniform);
#endif
        gles_glGetActiveUniform(program, index, bufSize, length, size, type, name);
}
#endif
#ifndef skip_glGetAttachedShaders
void glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj) {
        LOAD_GLES(glGetAttachedShaders);
    #ifndef direct_glGetAttachedShaders
    PUSH_IF_COMPILING(glGetAttachedShaders);
#endif
        gles_glGetAttachedShaders(program, maxCount, count, obj);
}
#endif
#ifndef skip_glGetAttribLocation
GLint glGetAttribLocation(GLuint program, const GLchar * name) {
        LOAD_GLES(glGetAttribLocation);
    #ifndef direct_glGetAttribLocation
    PUSH_IF_COMPILING(glGetAttribLocation);
#endif
        return gles_glGetAttribLocation(program, name);
}
#endif
#ifndef skip_glGetBooleanv
void glGetBooleanv(GLenum pname, GLboolean * params) {
        LOAD_GLES(glGetBooleanv);
    #ifndef direct_glGetBooleanv
    PUSH_IF_COMPILING(glGetBooleanv);
#endif
        gles_glGetBooleanv(pname, params);
}
#endif
#ifndef skip_glGetBufferParameteriv
void glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) {
        LOAD_GLES(glGetBufferParameteriv);
    #ifndef direct_glGetBufferParameteriv
    PUSH_IF_COMPILING(glGetBufferParameteriv);
#endif
        gles_glGetBufferParameteriv(target, pname, params);
}
#endif
#ifndef skip_glGetError
GLenum glGetError() {
        LOAD_GLES(glGetError);
    #ifndef direct_glGetError
    PUSH_IF_COMPILING(glGetError);
#endif
        return gles_glGetError();
}
#endif
#ifndef skip_glGetFloatv
void glGetFloatv(GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetFloatv);
    #ifndef direct_glGetFloatv
    PUSH_IF_COMPILING(glGetFloatv);
#endif
        gles_glGetFloatv(pname, params);
}
#endif
#ifndef skip_glGetFramebufferAttachmentParameteriv
void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint * params) {
        LOAD_GLES(glGetFramebufferAttachmentParameteriv);
    #ifndef direct_glGetFramebufferAttachmentParameteriv
    PUSH_IF_COMPILING(glGetFramebufferAttachmentParameteriv);
#endif
        gles_glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
}
#endif
#ifndef skip_glGetIntegerv
void glGetIntegerv(GLenum pname, GLint * params) {
        LOAD_GLES(glGetIntegerv);
    #ifndef direct_glGetIntegerv
    PUSH_IF_COMPILING(glGetIntegerv);
#endif
        gles_glGetIntegerv(pname, params);
}
#endif
#ifndef skip_glGetProgramInfoLog
void glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
        LOAD_GLES(glGetProgramInfoLog);
    #ifndef direct_glGetProgramInfoLog
    PUSH_IF_COMPILING(glGetProgramInfoLog);
#endif
        gles_glGetProgramInfoLog(program, bufSize, length, infoLog);
}
#endif
#ifndef skip_glGetProgramiv
void glGetProgramiv(GLuint program, GLenum pname, GLint * params) {
        LOAD_GLES(glGetProgramiv);
    #ifndef direct_glGetProgramiv
    PUSH_IF_COMPILING(glGetProgramiv);
#endif
        gles_glGetProgramiv(program, pname, params);
}
#endif
#ifndef skip_glGetRenderbufferParameteriv
void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint * params) {
        LOAD_GLES(glGetRenderbufferParameteriv);
    #ifndef direct_glGetRenderbufferParameteriv
    PUSH_IF_COMPILING(glGetRenderbufferParameteriv);
#endif
        gles_glGetRenderbufferParameteriv(target, pname, params);
}
#endif
#ifndef skip_glGetShaderInfoLog
void glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {
        LOAD_GLES(glGetShaderInfoLog);
    #ifndef direct_glGetShaderInfoLog
    PUSH_IF_COMPILING(glGetShaderInfoLog);
#endif
        gles_glGetShaderInfoLog(shader, bufSize, length, infoLog);
}
#endif
#ifndef skip_glGetShaderPrecisionFormat
void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision) {
        LOAD_GLES(glGetShaderPrecisionFormat);
    #ifndef direct_glGetShaderPrecisionFormat
    PUSH_IF_COMPILING(glGetShaderPrecisionFormat);
#endif
        gles_glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
}
#endif
#ifndef skip_glGetShaderSource
void glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) {
        LOAD_GLES(glGetShaderSource);
    #ifndef direct_glGetShaderSource
    PUSH_IF_COMPILING(glGetShaderSource);
#endif
        gles_glGetShaderSource(shader, bufSize, length, source);
}
#endif
#ifndef skip_glGetShaderiv
void glGetShaderiv(GLuint shader, GLenum pname, GLint * params) {
        LOAD_GLES(glGetShaderiv);
    #ifndef direct_glGetShaderiv
    PUSH_IF_COMPILING(glGetShaderiv);
#endif
        gles_glGetShaderiv(shader, pname, params);
}
#endif
#ifndef skip_glGetString
const GLubyte * glGetString(GLenum name) {
        LOAD_GLES(glGetString);
    #ifndef direct_glGetString
    PUSH_IF_COMPILING(glGetString);
#endif
        return gles_glGetString(name);
}
#endif
#ifndef skip_glGetTexParameterfv
void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetTexParameterfv);
    #ifndef direct_glGetTexParameterfv
    PUSH_IF_COMPILING(glGetTexParameterfv);
#endif
        gles_glGetTexParameterfv(target, pname, params);
}
#endif
#ifndef skip_glGetTexParameteriv
void glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) {
        LOAD_GLES(glGetTexParameteriv);
    #ifndef direct_glGetTexParameteriv
    PUSH_IF_COMPILING(glGetTexParameteriv);
#endif
        gles_glGetTexParameteriv(target, pname, params);
}
#endif
#ifndef skip_glGetUniformLocation
GLint glGetUniformLocation(GLuint program, const GLchar * name) {
        LOAD_GLES(glGetUniformLocation);
    #ifndef direct_glGetUniformLocation
    PUSH_IF_COMPILING(glGetUniformLocation);
#endif
        return gles_glGetUniformLocation(program, name);
}
#endif
#ifndef skip_glGetUniformfv
void glGetUniformfv(GLuint program, GLint location, GLfloat * params) {
        LOAD_GLES(glGetUniformfv);
    #ifndef direct_glGetUniformfv
    PUSH_IF_COMPILING(glGetUniformfv);
#endif
        gles_glGetUniformfv(program, location, params);
}
#endif
#ifndef skip_glGetUniformiv
void glGetUniformiv(GLuint program, GLint location, GLint * params) {
        LOAD_GLES(glGetUniformiv);
    #ifndef direct_glGetUniformiv
    PUSH_IF_COMPILING(glGetUniformiv);
#endif
        gles_glGetUniformiv(program, location, params);
}
#endif
#ifndef skip_glGetVertexAttribPointerv
void glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid ** pointer) {
        LOAD_GLES(glGetVertexAttribPointerv);
    #ifndef direct_glGetVertexAttribPointerv
    PUSH_IF_COMPILING(glGetVertexAttribPointerv);
#endif
        gles_glGetVertexAttribPointerv(index, pname, pointer);
}
#endif
#ifndef skip_glGetVertexAttribfv
void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat * params) {
        LOAD_GLES(glGetVertexAttribfv);
    #ifndef direct_glGetVertexAttribfv
    PUSH_IF_COMPILING(glGetVertexAttribfv);
#endif
        gles_glGetVertexAttribfv(index, pname, params);
}
#endif
#ifndef skip_glGetVertexAttribiv
void glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) {
        LOAD_GLES(glGetVertexAttribiv);
    #ifndef direct_glGetVertexAttribiv
    PUSH_IF_COMPILING(glGetVertexAttribiv);
#endif
        gles_glGetVertexAttribiv(index, pname, params);
}
#endif
#ifndef skip_glHint
void glHint(GLenum target, GLenum mode) {
        LOAD_GLES(glHint);
    #ifndef direct_glHint
    PUSH_IF_COMPILING(glHint);
#endif
        gles_glHint(target, mode);
}
#endif
#ifndef skip_glIsBuffer
GLboolean glIsBuffer(GLuint buffer) {
        LOAD_GLES(glIsBuffer);
    #ifndef direct_glIsBuffer
    PUSH_IF_COMPILING(glIsBuffer);
#endif
        return gles_glIsBuffer(buffer);
}
#endif
#ifndef skip_glIsEnabled
GLboolean glIsEnabled(GLenum cap) {
        LOAD_GLES(glIsEnabled);
    #ifndef direct_glIsEnabled
    PUSH_IF_COMPILING(glIsEnabled);
#endif
        return gles_glIsEnabled(cap);
}
#endif
#ifndef skip_glIsFramebuffer
GLboolean glIsFramebuffer(GLuint framebuffer) {
        LOAD_GLES(glIsFramebuffer);
    #ifndef direct_glIsFramebuffer
    PUSH_IF_COMPILING(glIsFramebuffer);
#endif
        return gles_glIsFramebuffer(framebuffer);
}
#endif
#ifndef skip_glIsProgram
GLboolean glIsProgram(GLuint program) {
        LOAD_GLES(glIsProgram);
    #ifndef direct_glIsProgram
    PUSH_IF_COMPILING(glIsProgram);
#endif
        return gles_glIsProgram(program);
}
#endif
#ifndef skip_glIsRenderbuffer
GLboolean glIsRenderbuffer(GLuint renderbuffer) {
        LOAD_GLES(glIsRenderbuffer);
    #ifndef direct_glIsRenderbuffer
    PUSH_IF_COMPILING(glIsRenderbuffer);
#endif
        return gles_glIsRenderbuffer(renderbuffer);
}
#endif
#ifndef skip_glIsShader
GLboolean glIsShader(GLuint shader) {
        LOAD_GLES(glIsShader);
    #ifndef direct_glIsShader
    PUSH_IF_COMPILING(glIsShader);
#endif
        return gles_glIsShader(shader);
}
#endif
#ifndef skip_glIsTexture
GLboolean glIsTexture(GLuint texture) {
        LOAD_GLES(glIsTexture);
    #ifndef direct_glIsTexture
    PUSH_IF_COMPILING(glIsTexture);
#endif
        return gles_glIsTexture(texture);
}
#endif
#ifndef skip_glLineWidth
void glLineWidth(GLfloat width) {
        LOAD_GLES(glLineWidth);
    #ifndef direct_glLineWidth
    PUSH_IF_COMPILING(glLineWidth);
#endif
        gles_glLineWidth(width);
}
#endif
#ifndef skip_glLinkProgram
void glLinkProgram(GLuint program) {
        LOAD_GLES(glLinkProgram);
    #ifndef direct_glLinkProgram
    PUSH_IF_COMPILING(glLinkProgram);
#endif
        gles_glLinkProgram(program);
}
#endif
#ifndef skip_glPixelStorei
void glPixelStorei(GLenum pname, GLint param) {
        LOAD_GLES(glPixelStorei);
    #ifndef direct_glPixelStorei
    PUSH_IF_COMPILING(glPixelStorei);
#endif
        gles_glPixelStorei(pname, param);
}
#endif
#ifndef skip_glPolygonOffset
void glPolygonOffset(GLfloat factor, GLfloat units) {
        LOAD_GLES(glPolygonOffset);
    #ifndef direct_glPolygonOffset
    PUSH_IF_COMPILING(glPolygonOffset);
#endif
        gles_glPolygonOffset(factor, units);
}
#endif
#ifndef skip_glReadPixels
void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels) {
        LOAD_GLES(glReadPixels);
    #ifndef direct_glReadPixels
    PUSH_IF_COMPILING(glReadPixels);
#endif
        gles_glReadPixels(x, y, width, height, format, type, pixels);
}
#endif
#ifndef skip_glReleaseShaderCompiler
void glReleaseShaderCompiler() {
        LOAD_GLES(glReleaseShaderCompiler);
    #ifndef direct_glReleaseShaderCompiler
    PUSH_IF_COMPILING(glReleaseShaderCompiler);
#endif
        gles_glReleaseShaderCompiler();
}
#endif
#ifndef skip_glRenderbufferStorage
void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
        LOAD_GLES(glRenderbufferStorage);
    #ifndef direct_glRenderbufferStorage
    PUSH_IF_COMPILING(glRenderbufferStorage);
#endif
        gles_glRenderbufferStorage(target, internalformat, width, height);
}
#endif
#ifndef skip_glSampleCoverage
void glSampleCoverage(GLclampf value, GLboolean invert) {
        LOAD_GLES(glSampleCoverage);
    #ifndef direct_glSampleCoverage
    PUSH_IF_COMPILING(glSampleCoverage);
#endif
        gles_glSampleCoverage(value, invert);
}
#endif
#ifndef skip_glScissor
void glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
        LOAD_GLES(glScissor);
    #ifndef direct_glScissor
    PUSH_IF_COMPILING(glScissor);
#endif
        gles_glScissor(x, y, width, height);
}
#endif
#ifndef skip_glShaderBinary
void glShaderBinary(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length) {
        LOAD_GLES(glShaderBinary);
    #ifndef direct_glShaderBinary
    PUSH_IF_COMPILING(glShaderBinary);
#endif
        gles_glShaderBinary(n, shaders, binaryformat, binary, length);
}
#endif
#ifndef skip_glShaderSource
void glShaderSource(GLuint shader, GLsizei count, const GLchar * const * string, const GLint * length) {
        LOAD_GLES(glShaderSource);
    #ifndef direct_glShaderSource
    PUSH_IF_COMPILING(glShaderSource);
#endif
        gles_glShaderSource(shader, count, string, length);
}
#endif
#ifndef skip_glStencilFunc
void glStencilFunc(GLenum func, GLint ref, GLuint mask) {
        LOAD_GLES(glStencilFunc);
    #ifndef direct_glStencilFunc
    PUSH_IF_COMPILING(glStencilFunc);
#endif
        gles_glStencilFunc(func, ref, mask);
}
#endif
#ifndef skip_glStencilFuncSeparate
void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {
        LOAD_GLES(glStencilFuncSeparate);
    #ifndef direct_glStencilFuncSeparate
    PUSH_IF_COMPILING(glStencilFuncSeparate);
#endif
        gles_glStencilFuncSeparate(face, func, ref, mask);
}
#endif
#ifndef skip_glStencilMask
void glStencilMask(GLuint mask) {
        LOAD_GLES(glStencilMask);
    #ifndef direct_glStencilMask
    PUSH_IF_COMPILING(glStencilMask);
#endif
        gles_glStencilMask(mask);
}
#endif
#ifndef skip_glStencilMaskSeparate
void glStencilMaskSeparate(GLenum face, GLuint mask) {
        LOAD_GLES(glStencilMaskSeparate);
    #ifndef direct_glStencilMaskSeparate
    PUSH_IF_COMPILING(glStencilMaskSeparate);
#endif
        gles_glStencilMaskSeparate(face, mask);
}
#endif
#ifndef skip_glStencilOp
void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
        LOAD_GLES(glStencilOp);
    #ifndef direct_glStencilOp
    PUSH_IF_COMPILING(glStencilOp);
#endif
        gles_glStencilOp(fail, zfail, zpass);
}
#endif
#ifndef skip_glStencilOpSeparate
void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum zfail, GLenum zpass) {
        LOAD_GLES(glStencilOpSeparate);
    #ifndef direct_glStencilOpSeparate
    PUSH_IF_COMPILING(glStencilOpSeparate);
#endif
        gles_glStencilOpSeparate(face, sfail, zfail, zpass);
}
#endif
#ifndef skip_glTexImage2D
void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {
        LOAD_GLES(glTexImage2D);
    #ifndef direct_glTexImage2D
    PUSH_IF_COMPILING(glTexImage2D);
#endif
        gles_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
}
#endif
#ifndef skip_glTexParameterf
void glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
        LOAD_GLES(glTexParameterf);
    #ifndef direct_glTexParameterf
    PUSH_IF_COMPILING(glTexParameterf);
#endif
        gles_glTexParameterf(target, pname, param);
}
#endif
#ifndef skip_glTexParameterfv
void glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) {
        LOAD_GLES(glTexParameterfv);
    #ifndef direct_glTexParameterfv
    PUSH_IF_COMPILING(glTexParameterfv);
#endif
        gles_glTexParameterfv(target, pname, params);
}
#endif
#ifndef skip_glTexParameteri
void glTexParameteri(GLenum target, GLenum pname, GLint param) {
        LOAD_GLES(glTexParameteri);
    #ifndef direct_glTexParameteri
    PUSH_IF_COMPILING(glTexParameteri);
#endif
        gles_glTexParameteri(target, pname, param);
}
#endif
#ifndef skip_glTexParameteriv
void glTexParameteriv(GLenum target, GLenum pname, const GLint * params) {
        LOAD_GLES(glTexParameteriv);
    #ifndef direct_glTexParameteriv
    PUSH_IF_COMPILING(glTexParameteriv);
#endif
        gles_glTexParameteriv(target, pname, params);
}
#endif
#ifndef skip_glTexSubImage2D
void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {
        LOAD_GLES(glTexSubImage2D);
    #ifndef direct_glTexSubImage2D
    PUSH_IF_COMPILING(glTexSubImage2D);
#endif
        gles_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
}
#endif
#ifndef skip_glUniform1f
void glUniform1f(GLint location, GLfloat v0) {
        LOAD_GLES(glUniform1f);
    #ifndef direct_glUniform1f
    PUSH_IF_COMPILING(glUniform1f);
#endif
        gles_glUniform1f(location, v0);
}
#endif
#ifndef skip_glUniform1fv
void glUniform1fv(GLint location, GLsizei count, const GLfloat * value) {
        LOAD_GLES(glUniform1fv);
    #ifndef direct_glUniform1fv
    PUSH_IF_COMPILING(glUniform1fv);
#endif
        gles_glUniform1fv(location, count, value);
}
#endif
#ifndef skip_glUniform1i
void glUniform1i(GLint location, GLint v0) {
        LOAD_GLES(glUniform1i);
    #ifndef direct_glUniform1i
    PUSH_IF_COMPILING(glUniform1i);
#endif
        gles_glUniform1i(location, v0);
}
#endif
#ifndef skip_glUniform1iv
void glUniform1iv(GLint location, GLsizei count, const GLint * value) {
        LOAD_GLES(glUniform1iv);
    #ifndef direct_glUniform1iv
    PUSH_IF_COMPILING(glUniform1iv);
#endif
        gles_glUniform1iv(location, count, value);
}
#endif
#ifndef skip_glUniform2f
void glUniform2f(GLint location, GLfloat v0, GLfloat v1) {
        LOAD_GLES(glUniform2f);
    #ifndef direct_glUniform2f
    PUSH_IF_COMPILING(glUniform2f);
#endif
        gles_glUniform2f(location, v0, v1);
}
#endif
#ifndef skip_glUniform2fv
void glUniform2fv(GLint location, GLsizei count, const GLfloat * value) {
        LOAD_GLES(glUniform2fv);
    #ifndef direct_glUniform2fv
    PUSH_IF_COMPILING(glUniform2fv);
#endif
        gles_glUniform2fv(location, count, value);
}
#endif
#ifndef skip_glUniform2i
void glUniform2i(GLint location, GLint v0, GLint v1) {
        LOAD_GLES(glUniform2i);
    #ifndef direct_glUniform2i
    PUSH_IF_COMPILING(glUniform2i);
#endif
        gles_glUniform2i(location, v0, v1);
}
#endif
#ifndef skip_glUniform2iv
void glUniform2iv(GLint location, GLsizei count, const GLint * value) {
        LOAD_GLES(glUniform2iv);
    #ifndef direct_glUniform2iv
    PUSH_IF_COMPILING(glUniform2iv);
#endif
        gles_glUniform2iv(location, count, value);
}
#endif
#ifndef skip_glUniform3f
void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
        LOAD_GLES(glUniform3f);
    #ifndef direct_glUniform3f
    PUSH_IF_COMPILING(glUniform3f);
#endif
        gles_glUniform3f(location, v0, v1, v2);
}
#endif
#ifndef skip_glUniform3fv
void glUniform3fv(GLint location, GLsizei count, const GLfloat * value) {
        LOAD_GLES(glUniform3fv);
    #ifndef direct_glUniform3fv
    PUSH_IF_COMPILING(glUniform3fv);
#endif
        gles_glUniform3fv(location, count, value);
}
#endif
#ifndef skip_glUniform3i
void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {
        LOAD_GLES(glUniform3i);
    #ifndef direct_glUniform3i
    PUSH_IF_COMPILING(glUniform3i);
#endif
        gles_glUniform3i(location, v0, v1, v2);
}
#endif
#ifndef skip_glUniform3iv
void glUniform3iv(GLint location, GLsizei count, const GLint * value) {
        LOAD_GLES(glUniform3iv);
    #ifndef direct_glUniform3iv
    PUSH_IF_COMPILING(glUniform3iv);
#endif
        gles_glUniform3iv(location, count, value);
}
#endif
#ifndef skip_glUniform4f
void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {
        LOAD_GLES(glUniform4f);
    #ifndef direct_glUniform4f
    PUSH_IF_COMPILING(glUniform4f);
#endif
        gles_glUniform4f(location, v0, v1, v2, v3);
}
#endif
#ifndef skip_glUniform4fv
void glUniform4fv(GLint location, GLsizei count, const GLfloat * value) {
        LOAD_GLES(glUniform4fv);
    #ifndef direct_glUniform4fv
    PUSH_IF_COMPILING(glUniform4fv);
#endif
        gles_glUniform4fv(location, count, value);
}
#endif
#ifndef skip_glUniform4i
void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {
        LOAD_GLES(glUniform4i);
    #ifndef direct_glUniform4i
    PUSH_IF_COMPILING(glUniform4i);
#endif
        gles_glUniform4i(location, v0, v1, v2, v3);
}
#endif
#ifndef skip_glUniform4iv
void glUniform4iv(GLint location, GLsizei count, const GLint * value) {
        LOAD_GLES(glUniform4iv);
    #ifndef direct_glUniform4iv
    PUSH_IF_COMPILING(glUniform4iv);
#endif
        gles_glUniform4iv(location, count, value);
}
#endif
#ifndef skip_glUniformMatrix2fv
void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
        LOAD_GLES(glUniformMatrix2fv);
    #ifndef direct_glUniformMatrix2fv
    PUSH_IF_COMPILING(glUniformMatrix2fv);
#endif
        gles_glUniformMatrix2fv(location, count, transpose, value);
}
#endif
#ifndef skip_glUniformMatrix3fv
void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
        LOAD_GLES(glUniformMatrix3fv);
    #ifndef direct_glUniformMatrix3fv
    PUSH_IF_COMPILING(glUniformMatrix3fv);
#endif
        gles_glUniformMatrix3fv(location, count, transpose, value);
}
#endif
#ifndef skip_glUniformMatrix4fv
void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {
        LOAD_GLES(glUniformMatrix4fv);
    #ifndef direct_glUniformMatrix4fv
    PUSH_IF_COMPILING(glUniformMatrix4fv);
#endif
        gles_glUniformMatrix4fv(location, count, transpose, value);
}
#endif
#ifndef skip_glUseProgram
void glUseProgram(GLuint program) {
        LOAD_GLES(glUseProgram);
    #ifndef direct_glUseProgram
    PUSH_IF_COMPILING(glUseProgram);
#endif
        gles_glUseProgram(program);
}
#endif
#ifndef skip_glValidateProgram
void glValidateProgram(GLuint program) {
        LOAD_GLES(glValidateProgram);
    #ifndef direct_glValidateProgram
    PUSH_IF_COMPILING(glValidateProgram);
#endif
        gles_glValidateProgram(program);
}
#endif
#ifndef skip_glVertexAttrib1f
void glVertexAttrib1f(GLuint index, GLfloat x) {
        LOAD_GLES(glVertexAttrib1f);
    #ifndef direct_glVertexAttrib1f
    PUSH_IF_COMPILING(glVertexAttrib1f);
#endif
        gles_glVertexAttrib1f(index, x);
}
#endif
#ifndef skip_glVertexAttrib1fv
void glVertexAttrib1fv(GLuint index, const GLfloat * v) {
        LOAD_GLES(glVertexAttrib1fv);
    #ifndef direct_glVertexAttrib1fv
    PUSH_IF_COMPILING(glVertexAttrib1fv);
#endif
        gles_glVertexAttrib1fv(index, v);
}
#endif
#ifndef skip_glVertexAttrib2f
void glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) {
        LOAD_GLES(glVertexAttrib2f);
    #ifndef direct_glVertexAttrib2f
    PUSH_IF_COMPILING(glVertexAttrib2f);
#endif
        gles_glVertexAttrib2f(index, x, y);
}
#endif
#ifndef skip_glVertexAttrib2fv
void glVertexAttrib2fv(GLuint index, const GLfloat * v) {
        LOAD_GLES(glVertexAttrib2fv);
    #ifndef direct_glVertexAttrib2fv
    PUSH_IF_COMPILING(glVertexAttrib2fv);
#endif
        gles_glVertexAttrib2fv(index, v);
}
#endif
#ifndef skip_glVertexAttrib3f
void glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) {
        LOAD_GLES(glVertexAttrib3f);
    #ifndef direct_glVertexAttrib3f
    PUSH_IF_COMPILING(glVertexAttrib3f);
#endif
        gles_glVertexAttrib3f(index, x, y, z);
}
#endif
#ifndef skip_glVertexAttrib3fv
void glVertexAttrib3fv(GLuint index, const GLfloat * v) {
        LOAD_GLES(glVertexAttrib3fv);
    #ifndef direct_glVertexAttrib3fv
    PUSH_IF_COMPILING(glVertexAttrib3fv);
#endif
        gles_glVertexAttrib3fv(index, v);
}
#endif
#ifndef skip_glVertexAttrib4f
void glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
        LOAD_GLES(glVertexAttrib4f);
    #ifndef direct_glVertexAttrib4f
    PUSH_IF_COMPILING(glVertexAttrib4f);
#endif
        gles_glVertexAttrib4f(index, x, y, z, w);
}
#endif
#ifndef skip_glVertexAttrib4fv
void glVertexAttrib4fv(GLuint index, const GLfloat * v) {
        LOAD_GLES(glVertexAttrib4fv);
    #ifndef direct_glVertexAttrib4fv
    PUSH_IF_COMPILING(glVertexAttrib4fv);
#endif
        gles_glVertexAttrib4fv(index, v);
}
#endif
#ifndef skip_glVertexAttribPointer
void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) {
        LOAD_GLES(glVertexAttribPointer);
    #ifndef direct_glVertexAttribPointer
    PUSH_IF_COMPILING(glVertexAttribPointer);
#endif
        gles_glVertexAttribPointer(index, size, type, normalized, stride, pointer);
}
#endif
#ifndef skip_glViewport
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
        LOAD_GLES(glViewport);
    #ifndef direct_glViewport
    PUSH_IF_COMPILING(glViewport);
#endif
        gles_glViewport(x, y, width, height);
}
#endif
#endif
Added jni/glshim/src/gl/wrap/gles2.h.


























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
#ifdef USE_ES2
#include "../types.h"

#ifndef GLES2WRAP_H
#define GLES2WRAP_H

enum FORMAT {
    FORMAT_void_GLenum,
    FORMAT_void_GLuint_GLuint,
    FORMAT_void_GLuint_GLuint_const_GLchar___GENPT__,
    FORMAT_void_GLenum_GLuint,
    FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf,
    FORMAT_void_GLenum_GLenum,
    FORMAT_void_GLenum_GLenum_GLenum_GLenum,
    FORMAT_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum,
    FORMAT_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__,
    FORMAT_GLenum_GLenum,
    FORMAT_void_GLbitfield,
    FORMAT_void_GLclampf,
    FORMAT_void_GLint,
    FORMAT_void_GLboolean_GLboolean_GLboolean_GLboolean,
    FORMAT_void_GLuint,
    FORMAT_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__,
    FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__,
    FORMAT_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint,
    FORMAT_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei,
    FORMAT_GLuint,
    FORMAT_GLuint_GLenum,
    FORMAT_void_GLsizei_const_GLuint___GENPT__,
    FORMAT_void_GLboolean,
    FORMAT_void_GLclampf_GLclampf,
    FORMAT_void_GLenum_GLint_GLsizei,
    FORMAT_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__,
    FORMAT_void,
    FORMAT_void_GLenum_GLenum_GLenum_GLuint,
    FORMAT_void_GLenum_GLenum_GLenum_GLuint_GLint,
    FORMAT_void_GLsizei_GLuint___GENPT__,
    FORMAT_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__,
    FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__,
    FORMAT_GLint_GLuint_const_GLchar___GENPT__,
    FORMAT_void_GLenum_GLboolean___GENPT__,
    FORMAT_void_GLenum_GLenum_GLint___GENPT__,
    FORMAT_GLenum,
    FORMAT_void_GLenum_GLfloat___GENPT__,
    FORMAT_void_GLenum_GLenum_GLenum_GLint___GENPT__,
    FORMAT_void_GLenum_GLint___GENPT__,
    FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__,
    FORMAT_void_GLuint_GLenum_GLint___GENPT__,
    FORMAT_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__,
    FORMAT_const_GLubyte___GENPT___GLenum,
    FORMAT_void_GLenum_GLenum_GLfloat___GENPT__,
    FORMAT_void_GLuint_GLint_GLfloat___GENPT__,
    FORMAT_void_GLuint_GLint_GLint___GENPT__,
    FORMAT_void_GLuint_GLenum_GLvoid___GENPT____GENPT__,
    FORMAT_void_GLuint_GLenum_GLfloat___GENPT__,
    FORMAT_GLboolean_GLuint,
    FORMAT_GLboolean_GLenum,
    FORMAT_void_GLfloat,
    FORMAT_void_GLenum_GLint,
    FORMAT_void_GLfloat_GLfloat,
    FORMAT_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__,
    FORMAT_void_GLenum_GLenum_GLsizei_GLsizei,
    FORMAT_void_GLclampf_GLboolean,
    FORMAT_void_GLint_GLint_GLsizei_GLsizei,
    FORMAT_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei,
    FORMAT_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__,
    FORMAT_void_GLenum_GLint_GLuint,
    FORMAT_void_GLenum_GLenum_GLint_GLuint,
    FORMAT_void_GLenum_GLenum_GLenum,
    FORMAT_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__,
    FORMAT_void_GLenum_GLenum_GLfloat,
    FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__,
    FORMAT_void_GLenum_GLenum_GLint,
    FORMAT_void_GLenum_GLenum_const_GLint___GENPT__,
    FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__,
    FORMAT_void_GLint_GLfloat,
    FORMAT_void_GLint_GLsizei_const_GLfloat___GENPT__,
    FORMAT_void_GLint_GLint,
    FORMAT_void_GLint_GLsizei_const_GLint___GENPT__,
    FORMAT_void_GLint_GLfloat_GLfloat,
    FORMAT_void_GLint_GLint_GLint,
    FORMAT_void_GLint_GLfloat_GLfloat_GLfloat,
    FORMAT_void_GLint_GLint_GLint_GLint,
    FORMAT_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat,
    FORMAT_void_GLint_GLint_GLint_GLint_GLint,
    FORMAT_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__,
    FORMAT_void_GLuint_GLfloat,
    FORMAT_void_GLuint_const_GLfloat___GENPT__,
    FORMAT_void_GLuint_GLfloat_GLfloat,
    FORMAT_void_GLuint_GLfloat_GLfloat_GLfloat,
    FORMAT_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat,
    FORMAT_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__,
};

typedef void (*FUNC_void_GLenum)(GLenum texture);
typedef struct {
        GLenum a1;
    } ARGS_void_GLenum;
typedef struct {
    int format;
    FUNC_void_GLenum func;
    int refs;
        ARGS_void_GLenum args;
    } PACKED_void_GLenum;
typedef struct {
    int func;
        ARGS_void_GLenum args;
    } INDEXED_void_GLenum;
typedef void (*FUNC_void_GLuint_GLuint)(GLuint program, GLuint shader);
typedef struct {
        GLuint a1;
        GLuint a2;
    } ARGS_void_GLuint_GLuint;
typedef struct {
    int format;
    FUNC_void_GLuint_GLuint func;
    int refs;
        ARGS_void_GLuint_GLuint args;
    } PACKED_void_GLuint_GLuint;
typedef struct {
    int func;
        ARGS_void_GLuint_GLuint args;
    } INDEXED_void_GLuint_GLuint;
typedef void (*FUNC_void_GLuint_GLuint_const_GLchar___GENPT__)(GLuint program, GLuint index, const GLchar * name);
typedef struct {
        GLuint a1;
        GLuint a2;
        GLchar * a3;
    } ARGS_void_GLuint_GLuint_const_GLchar___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLuint_const_GLchar___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLuint_const_GLchar___GENPT__ args;
    } PACKED_void_GLuint_GLuint_const_GLchar___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLuint_const_GLchar___GENPT__ args;
    } INDEXED_void_GLuint_GLuint_const_GLchar___GENPT__;
typedef void (*FUNC_void_GLenum_GLuint)(GLenum target, GLuint buffer);
typedef struct {
        GLenum a1;
        GLuint a2;
    } ARGS_void_GLenum_GLuint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLuint func;
    int refs;
        ARGS_void_GLenum_GLuint args;
    } PACKED_void_GLenum_GLuint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLuint args;
    } INDEXED_void_GLenum_GLuint;
typedef void (*FUNC_void_GLclampf_GLclampf_GLclampf_GLclampf)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef struct {
        GLclampf a1;
        GLclampf a2;
        GLclampf a3;
        GLclampf a4;
    } ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf;
typedef struct {
    int format;
    FUNC_void_GLclampf_GLclampf_GLclampf_GLclampf func;
    int refs;
        ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf args;
    } PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf;
typedef struct {
    int func;
        ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf args;
    } INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf;
typedef void (*FUNC_void_GLenum_GLenum)(GLenum modeRGB, GLenum modeA);
typedef struct {
        GLenum a1;
        GLenum a2;
    } ARGS_void_GLenum_GLenum;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum func;
    int refs;
        ARGS_void_GLenum_GLenum args;
    } PACKED_void_GLenum_GLenum;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum args;
    } INDEXED_void_GLenum_GLenum;
typedef void (*FUNC_void_GLenum_GLenum_GLenum_GLenum)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLenum a3;
        GLenum a4;
    } ARGS_void_GLenum_GLenum_GLenum_GLenum;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLenum_GLenum func;
    int refs;
        ARGS_void_GLenum_GLenum_GLenum_GLenum args;
    } PACKED_void_GLenum_GLenum_GLenum_GLenum;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLenum_GLenum args;
    } INDEXED_void_GLenum_GLenum_GLenum_GLenum;
typedef void (*FUNC_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum)(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage);
typedef struct {
        GLenum a1;
        GLsizeiptr a2;
        GLvoid * a3;
        GLenum a4;
    } ARGS_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum;
typedef struct {
    int format;
    FUNC_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum func;
    int refs;
        ARGS_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum args;
    } PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum;
typedef struct {
    int func;
        ARGS_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum args;
    } INDEXED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum;
typedef void (*FUNC_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__)(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data);
typedef struct {
        GLenum a1;
        GLintptr a2;
        GLsizeiptr a3;
        GLvoid * a4;
    } ARGS_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ args;
    } PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__;
typedef GLenum (*FUNC_GLenum_GLenum)(GLenum target);
typedef struct {
        GLenum a1;
    } ARGS_GLenum_GLenum;
typedef struct {
    int format;
    FUNC_GLenum_GLenum func;
    int refs;
        ARGS_GLenum_GLenum args;
    } PACKED_GLenum_GLenum;
typedef struct {
    int func;
        ARGS_GLenum_GLenum args;
    } INDEXED_GLenum_GLenum;
typedef void (*FUNC_void_GLbitfield)(GLbitfield mask);
typedef struct {
        GLbitfield a1;
    } ARGS_void_GLbitfield;
typedef struct {
    int format;
    FUNC_void_GLbitfield func;
    int refs;
        ARGS_void_GLbitfield args;
    } PACKED_void_GLbitfield;
typedef struct {
    int func;
        ARGS_void_GLbitfield args;
    } INDEXED_void_GLbitfield;
typedef void (*FUNC_void_GLclampf)(GLclampf depth);
typedef struct {
        GLclampf a1;
    } ARGS_void_GLclampf;
typedef struct {
    int format;
    FUNC_void_GLclampf func;
    int refs;
        ARGS_void_GLclampf args;
    } PACKED_void_GLclampf;
typedef struct {
    int func;
        ARGS_void_GLclampf args;
    } INDEXED_void_GLclampf;
typedef void (*FUNC_void_GLint)(GLint s);
typedef struct {
        GLint a1;
    } ARGS_void_GLint;
typedef struct {
    int format;
    FUNC_void_GLint func;
    int refs;
        ARGS_void_GLint args;
    } PACKED_void_GLint;
typedef struct {
    int func;
        ARGS_void_GLint args;
    } INDEXED_void_GLint;
typedef void (*FUNC_void_GLboolean_GLboolean_GLboolean_GLboolean)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
typedef struct {
        GLboolean a1;
        GLboolean a2;
        GLboolean a3;
        GLboolean a4;
    } ARGS_void_GLboolean_GLboolean_GLboolean_GLboolean;
typedef struct {
    int format;
    FUNC_void_GLboolean_GLboolean_GLboolean_GLboolean func;
    int refs;
        ARGS_void_GLboolean_GLboolean_GLboolean_GLboolean args;
    } PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean;
typedef struct {
    int func;
        ARGS_void_GLboolean_GLboolean_GLboolean_GLboolean args;
    } INDEXED_void_GLboolean_GLboolean_GLboolean_GLboolean;
typedef void (*FUNC_void_GLuint)(GLuint shader);
typedef struct {
        GLuint a1;
    } ARGS_void_GLuint;
typedef struct {
    int format;
    FUNC_void_GLuint func;
    int refs;
        ARGS_void_GLuint args;
    } PACKED_void_GLuint;
typedef struct {
    int func;
        ARGS_void_GLuint args;
    } INDEXED_void_GLuint;
typedef void (*FUNC_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data);
typedef struct {
        GLenum a1;
        GLint a2;
        GLenum a3;
        GLsizei a4;
        GLsizei a5;
        GLint a6;
        GLsizei a7;
        GLvoid * a8;
    } ARGS_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ args;
    } PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__;
typedef void (*FUNC_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data);
typedef struct {
        GLenum a1;
        GLint a2;
        GLint a3;
        GLint a4;
        GLsizei a5;
        GLsizei a6;
        GLenum a7;
        GLsizei a8;
        GLvoid * a9;
    } ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ args;
    } PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__;
typedef void (*FUNC_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
typedef struct {
        GLenum a1;
        GLint a2;
        GLenum a3;
        GLint a4;
        GLint a5;
        GLsizei a6;
        GLsizei a7;
        GLint a8;
    } ARGS_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint func;
    int refs;
        ARGS_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint args;
    } PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint args;
    } INDEXED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint;
typedef void (*FUNC_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
typedef struct {
        GLenum a1;
        GLint a2;
        GLint a3;
        GLint a4;
        GLint a5;
        GLint a6;
        GLsizei a7;
        GLsizei a8;
    } ARGS_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei func;
    int refs;
        ARGS_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei args;
    } PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei args;
    } INDEXED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei;
typedef GLuint (*FUNC_GLuint)();
typedef struct {
    int format;
    FUNC_GLuint func;
    int refs;
    } PACKED_GLuint;
typedef struct {
    int func;
    } INDEXED_GLuint;
typedef GLuint (*FUNC_GLuint_GLenum)(GLenum type);
typedef struct {
        GLenum a1;
    } ARGS_GLuint_GLenum;
typedef struct {
    int format;
    FUNC_GLuint_GLenum func;
    int refs;
        ARGS_GLuint_GLenum args;
    } PACKED_GLuint_GLenum;
typedef struct {
    int func;
        ARGS_GLuint_GLenum args;
    } INDEXED_GLuint_GLenum;
typedef void (*FUNC_void_GLsizei_const_GLuint___GENPT__)(GLsizei n, const GLuint * buffer);
typedef struct {
        GLsizei a1;
        GLuint * a2;
    } ARGS_void_GLsizei_const_GLuint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLsizei_const_GLuint___GENPT__ func;
    int refs;
        ARGS_void_GLsizei_const_GLuint___GENPT__ args;
    } PACKED_void_GLsizei_const_GLuint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLsizei_const_GLuint___GENPT__ args;
    } INDEXED_void_GLsizei_const_GLuint___GENPT__;
typedef void (*FUNC_void_GLboolean)(GLboolean flag);
typedef struct {
        GLboolean a1;
    } ARGS_void_GLboolean;
typedef struct {
    int format;
    FUNC_void_GLboolean func;
    int refs;
        ARGS_void_GLboolean args;
    } PACKED_void_GLboolean;
typedef struct {
    int func;
        ARGS_void_GLboolean args;
    } INDEXED_void_GLboolean;
typedef void (*FUNC_void_GLclampf_GLclampf)(GLclampf zNear, GLclampf zFar);
typedef struct {
        GLclampf a1;
        GLclampf a2;
    } ARGS_void_GLclampf_GLclampf;
typedef struct {
    int format;
    FUNC_void_GLclampf_GLclampf func;
    int refs;
        ARGS_void_GLclampf_GLclampf args;
    } PACKED_void_GLclampf_GLclampf;
typedef struct {
    int func;
        ARGS_void_GLclampf_GLclampf args;
    } INDEXED_void_GLclampf_GLclampf;
typedef void (*FUNC_void_GLenum_GLint_GLsizei)(GLenum mode, GLint first, GLsizei count);
typedef struct {
        GLenum a1;
        GLint a2;
        GLsizei a3;
    } ARGS_void_GLenum_GLint_GLsizei;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLsizei func;
    int refs;
        ARGS_void_GLenum_GLint_GLsizei args;
    } PACKED_void_GLenum_GLint_GLsizei;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLsizei args;
    } INDEXED_void_GLenum_GLint_GLsizei;
typedef void (*FUNC_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);
typedef struct {
        GLenum a1;
        GLsizei a2;
        GLenum a3;
        GLvoid * a4;
    } ARGS_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ args;
    } PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__;
typedef void (*FUNC_void)();
typedef struct {
    int format;
    FUNC_void func;
    int refs;
    } PACKED_void;
typedef struct {
    int func;
    } INDEXED_void;
typedef void (*FUNC_void_GLenum_GLenum_GLenum_GLuint)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLenum a3;
        GLuint a4;
    } ARGS_void_GLenum_GLenum_GLenum_GLuint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLenum_GLuint func;
    int refs;
        ARGS_void_GLenum_GLenum_GLenum_GLuint args;
    } PACKED_void_GLenum_GLenum_GLenum_GLuint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLenum_GLuint args;
    } INDEXED_void_GLenum_GLenum_GLenum_GLuint;
typedef void (*FUNC_void_GLenum_GLenum_GLenum_GLuint_GLint)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLenum a3;
        GLuint a4;
        GLint a5;
    } ARGS_void_GLenum_GLenum_GLenum_GLuint_GLint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLenum_GLuint_GLint func;
    int refs;
        ARGS_void_GLenum_GLenum_GLenum_GLuint_GLint args;
    } PACKED_void_GLenum_GLenum_GLenum_GLuint_GLint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLenum_GLuint_GLint args;
    } INDEXED_void_GLenum_GLenum_GLenum_GLuint_GLint;
typedef void (*FUNC_void_GLsizei_GLuint___GENPT__)(GLsizei n, GLuint * buffer);
typedef struct {
        GLsizei a1;
        GLuint * a2;
    } ARGS_void_GLsizei_GLuint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLsizei_GLuint___GENPT__ func;
    int refs;
        ARGS_void_GLsizei_GLuint___GENPT__ args;
    } PACKED_void_GLsizei_GLuint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLsizei_GLuint___GENPT__ args;
    } INDEXED_void_GLsizei_GLuint___GENPT__;
typedef void (*FUNC_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name);
typedef struct {
        GLuint a1;
        GLuint a2;
        GLsizei a3;
        GLsizei * a4;
        GLint * a5;
        GLenum * a6;
        GLchar * a7;
    } ARGS_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__ args;
    } PACKED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__ args;
    } INDEXED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__;
typedef void (*FUNC_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj);
typedef struct {
        GLuint a1;
        GLsizei a2;
        GLsizei * a3;
        GLuint * a4;
    } ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__ args;
    } PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__ args;
    } INDEXED_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__;
typedef GLint (*FUNC_GLint_GLuint_const_GLchar___GENPT__)(GLuint program, const GLchar * name);
typedef struct {
        GLuint a1;
        GLchar * a2;
    } ARGS_GLint_GLuint_const_GLchar___GENPT__;
typedef struct {
    int format;
    FUNC_GLint_GLuint_const_GLchar___GENPT__ func;
    int refs;
        ARGS_GLint_GLuint_const_GLchar___GENPT__ args;
    } PACKED_GLint_GLuint_const_GLchar___GENPT__;
typedef struct {
    int func;
        ARGS_GLint_GLuint_const_GLchar___GENPT__ args;
    } INDEXED_GLint_GLuint_const_GLchar___GENPT__;
typedef void (*FUNC_void_GLenum_GLboolean___GENPT__)(GLenum pname, GLboolean * params);
typedef struct {
        GLenum a1;
        GLboolean * a2;
    } ARGS_void_GLenum_GLboolean___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLboolean___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLboolean___GENPT__ args;
    } PACKED_void_GLenum_GLboolean___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLboolean___GENPT__ args;
    } INDEXED_void_GLenum_GLboolean___GENPT__;
typedef void (*FUNC_void_GLenum_GLenum_GLint___GENPT__)(GLenum target, GLenum pname, GLint * params);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLint * a3;
    } ARGS_void_GLenum_GLenum_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLenum_GLint___GENPT__ args;
    } PACKED_void_GLenum_GLenum_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLint___GENPT__ args;
    } INDEXED_void_GLenum_GLenum_GLint___GENPT__;
typedef GLenum (*FUNC_GLenum)();
typedef struct {
    int format;
    FUNC_GLenum func;
    int refs;
    } PACKED_GLenum;
typedef struct {
    int func;
    } INDEXED_GLenum;
typedef void (*FUNC_void_GLenum_GLfloat___GENPT__)(GLenum pname, GLfloat * params);
typedef struct {
        GLenum a1;
        GLfloat * a2;
    } ARGS_void_GLenum_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLfloat___GENPT__ args;
    } PACKED_void_GLenum_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLfloat___GENPT__ args;
    } INDEXED_void_GLenum_GLfloat___GENPT__;
typedef void (*FUNC_void_GLenum_GLenum_GLenum_GLint___GENPT__)(GLenum target, GLenum attachment, GLenum pname, GLint * params);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLenum a3;
        GLint * a4;
    } ARGS_void_GLenum_GLenum_GLenum_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLenum_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLenum_GLenum_GLint___GENPT__ args;
    } PACKED_void_GLenum_GLenum_GLenum_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLenum_GLint___GENPT__ args;
    } INDEXED_void_GLenum_GLenum_GLenum_GLint___GENPT__;
typedef void (*FUNC_void_GLenum_GLint___GENPT__)(GLenum pname, GLint * params);
typedef struct {
        GLenum a1;
        GLint * a2;
    } ARGS_void_GLenum_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLint___GENPT__ args;
    } PACKED_void_GLenum_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint___GENPT__ args;
    } INDEXED_void_GLenum_GLint___GENPT__;
typedef void (*FUNC_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog);
typedef struct {
        GLuint a1;
        GLsizei a2;
        GLsizei * a3;
        GLchar * a4;
    } ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__ args;
    } PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__ args;
    } INDEXED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__;
typedef void (*FUNC_void_GLuint_GLenum_GLint___GENPT__)(GLuint program, GLenum pname, GLint * params);
typedef struct {
        GLuint a1;
        GLenum a2;
        GLint * a3;
    } ARGS_void_GLuint_GLenum_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLenum_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLenum_GLint___GENPT__ args;
    } PACKED_void_GLuint_GLenum_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLenum_GLint___GENPT__ args;
    } INDEXED_void_GLuint_GLenum_GLint___GENPT__;
typedef void (*FUNC_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLint * a3;
        GLint * a4;
    } ARGS_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__ args;
    } PACKED_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__ args;
    } INDEXED_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__;
typedef const GLubyte * (*FUNC_const_GLubyte___GENPT___GLenum)(GLenum name);
typedef struct {
        GLenum a1;
    } ARGS_const_GLubyte___GENPT___GLenum;
typedef struct {
    int format;
    FUNC_const_GLubyte___GENPT___GLenum func;
    int refs;
        ARGS_const_GLubyte___GENPT___GLenum args;
    } PACKED_const_GLubyte___GENPT___GLenum;
typedef struct {
    int func;
        ARGS_const_GLubyte___GENPT___GLenum args;
    } INDEXED_const_GLubyte___GENPT___GLenum;
typedef void (*FUNC_void_GLenum_GLenum_GLfloat___GENPT__)(GLenum target, GLenum pname, GLfloat * params);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLfloat * a3;
    } ARGS_void_GLenum_GLenum_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args;
    } PACKED_void_GLenum_GLenum_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args;
    } INDEXED_void_GLenum_GLenum_GLfloat___GENPT__;
typedef void (*FUNC_void_GLuint_GLint_GLfloat___GENPT__)(GLuint program, GLint location, GLfloat * params);
typedef struct {
        GLuint a1;
        GLint a2;
        GLfloat * a3;
    } ARGS_void_GLuint_GLint_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLint_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLint_GLfloat___GENPT__ args;
    } PACKED_void_GLuint_GLint_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLint_GLfloat___GENPT__ args;
    } INDEXED_void_GLuint_GLint_GLfloat___GENPT__;
typedef void (*FUNC_void_GLuint_GLint_GLint___GENPT__)(GLuint program, GLint location, GLint * params);
typedef struct {
        GLuint a1;
        GLint a2;
        GLint * a3;
    } ARGS_void_GLuint_GLint_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLint_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLint_GLint___GENPT__ args;
    } PACKED_void_GLuint_GLint_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLint_GLint___GENPT__ args;
    } INDEXED_void_GLuint_GLint_GLint___GENPT__;
typedef void (*FUNC_void_GLuint_GLenum_GLvoid___GENPT____GENPT__)(GLuint index, GLenum pname, GLvoid ** pointer);
typedef struct {
        GLuint a1;
        GLenum a2;
        GLvoid ** a3;
    } ARGS_void_GLuint_GLenum_GLvoid___GENPT____GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLenum_GLvoid___GENPT____GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLenum_GLvoid___GENPT____GENPT__ args;
    } PACKED_void_GLuint_GLenum_GLvoid___GENPT____GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLenum_GLvoid___GENPT____GENPT__ args;
    } INDEXED_void_GLuint_GLenum_GLvoid___GENPT____GENPT__;
typedef void (*FUNC_void_GLuint_GLenum_GLfloat___GENPT__)(GLuint index, GLenum pname, GLfloat * params);
typedef struct {
        GLuint a1;
        GLenum a2;
        GLfloat * a3;
    } ARGS_void_GLuint_GLenum_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLenum_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLenum_GLfloat___GENPT__ args;
    } PACKED_void_GLuint_GLenum_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLenum_GLfloat___GENPT__ args;
    } INDEXED_void_GLuint_GLenum_GLfloat___GENPT__;
typedef GLboolean (*FUNC_GLboolean_GLuint)(GLuint buffer);
typedef struct {
        GLuint a1;
    } ARGS_GLboolean_GLuint;
typedef struct {
    int format;
    FUNC_GLboolean_GLuint func;
    int refs;
        ARGS_GLboolean_GLuint args;
    } PACKED_GLboolean_GLuint;
typedef struct {
    int func;
        ARGS_GLboolean_GLuint args;
    } INDEXED_GLboolean_GLuint;
typedef GLboolean (*FUNC_GLboolean_GLenum)(GLenum cap);
typedef struct {
        GLenum a1;
    } ARGS_GLboolean_GLenum;
typedef struct {
    int format;
    FUNC_GLboolean_GLenum func;
    int refs;
        ARGS_GLboolean_GLenum args;
    } PACKED_GLboolean_GLenum;
typedef struct {
    int func;
        ARGS_GLboolean_GLenum args;
    } INDEXED_GLboolean_GLenum;
typedef void (*FUNC_void_GLfloat)(GLfloat width);
typedef struct {
        GLfloat a1;
    } ARGS_void_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLfloat func;
    int refs;
        ARGS_void_GLfloat args;
    } PACKED_void_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLfloat args;
    } INDEXED_void_GLfloat;
typedef void (*FUNC_void_GLenum_GLint)(GLenum pname, GLint param);
typedef struct {
        GLenum a1;
        GLint a2;
    } ARGS_void_GLenum_GLint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint func;
    int refs;
        ARGS_void_GLenum_GLint args;
    } PACKED_void_GLenum_GLint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint args;
    } INDEXED_void_GLenum_GLint;
typedef void (*FUNC_void_GLfloat_GLfloat)(GLfloat factor, GLfloat units);
typedef struct {
        GLfloat a1;
        GLfloat a2;
    } ARGS_void_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLfloat_GLfloat args;
    } PACKED_void_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLfloat_GLfloat args;
    } INDEXED_void_GLfloat_GLfloat;
typedef void (*FUNC_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels);
typedef struct {
        GLint a1;
        GLint a2;
        GLsizei a3;
        GLsizei a4;
        GLenum a5;
        GLenum a6;
        GLvoid * a7;
    } ARGS_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ args;
    } PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ args;
    } INDEXED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__;
typedef void (*FUNC_void_GLenum_GLenum_GLsizei_GLsizei)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLsizei a3;
        GLsizei a4;
    } ARGS_void_GLenum_GLenum_GLsizei_GLsizei;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLsizei_GLsizei func;
    int refs;
        ARGS_void_GLenum_GLenum_GLsizei_GLsizei args;
    } PACKED_void_GLenum_GLenum_GLsizei_GLsizei;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLsizei_GLsizei args;
    } INDEXED_void_GLenum_GLenum_GLsizei_GLsizei;
typedef void (*FUNC_void_GLclampf_GLboolean)(GLclampf value, GLboolean invert);
typedef struct {
        GLclampf a1;
        GLboolean a2;
    } ARGS_void_GLclampf_GLboolean;
typedef struct {
    int format;
    FUNC_void_GLclampf_GLboolean func;
    int refs;
        ARGS_void_GLclampf_GLboolean args;
    } PACKED_void_GLclampf_GLboolean;
typedef struct {
    int func;
        ARGS_void_GLclampf_GLboolean args;
    } INDEXED_void_GLclampf_GLboolean;
typedef void (*FUNC_void_GLint_GLint_GLsizei_GLsizei)(GLint x, GLint y, GLsizei width, GLsizei height);
typedef struct {
        GLint a1;
        GLint a2;
        GLsizei a3;
        GLsizei a4;
    } ARGS_void_GLint_GLint_GLsizei_GLsizei;
typedef struct {
    int format;
    FUNC_void_GLint_GLint_GLsizei_GLsizei func;
    int refs;
        ARGS_void_GLint_GLint_GLsizei_GLsizei args;
    } PACKED_void_GLint_GLint_GLsizei_GLsizei;
typedef struct {
    int func;
        ARGS_void_GLint_GLint_GLsizei_GLsizei args;
    } INDEXED_void_GLint_GLint_GLsizei_GLsizei;
typedef void (*FUNC_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei)(GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length);
typedef struct {
        GLsizei a1;
        GLuint * a2;
        GLenum a3;
        GLvoid * a4;
        GLsizei a5;
    } ARGS_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei;
typedef struct {
    int format;
    FUNC_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei func;
    int refs;
        ARGS_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei args;
    } PACKED_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei;
typedef struct {
    int func;
        ARGS_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei args;
    } INDEXED_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei;
typedef void (*FUNC_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__)(GLuint shader, GLsizei count, const GLchar * const * string, const GLint * length);
typedef struct {
        GLuint a1;
        GLsizei a2;
        GLchar * * a3;
        GLint * a4;
    } ARGS_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__ args;
    } PACKED_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__ args;
    } INDEXED_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__;
typedef void (*FUNC_void_GLenum_GLint_GLuint)(GLenum func, GLint ref, GLuint mask);
typedef struct {
        GLenum a1;
        GLint a2;
        GLuint a3;
    } ARGS_void_GLenum_GLint_GLuint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLuint func;
    int refs;
        ARGS_void_GLenum_GLint_GLuint args;
    } PACKED_void_GLenum_GLint_GLuint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLuint args;
    } INDEXED_void_GLenum_GLint_GLuint;
typedef void (*FUNC_void_GLenum_GLenum_GLint_GLuint)(GLenum face, GLenum func, GLint ref, GLuint mask);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLint a3;
        GLuint a4;
    } ARGS_void_GLenum_GLenum_GLint_GLuint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLint_GLuint func;
    int refs;
        ARGS_void_GLenum_GLenum_GLint_GLuint args;
    } PACKED_void_GLenum_GLenum_GLint_GLuint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLint_GLuint args;
    } INDEXED_void_GLenum_GLenum_GLint_GLuint;
typedef void (*FUNC_void_GLenum_GLenum_GLenum)(GLenum fail, GLenum zfail, GLenum zpass);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLenum a3;
    } ARGS_void_GLenum_GLenum_GLenum;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLenum func;
    int refs;
        ARGS_void_GLenum_GLenum_GLenum args;
    } PACKED_void_GLenum_GLenum_GLenum;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLenum args;
    } INDEXED_void_GLenum_GLenum_GLenum;
typedef void (*FUNC_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels);
typedef struct {
        GLenum a1;
        GLint a2;
        GLint a3;
        GLsizei a4;
        GLsizei a5;
        GLint a6;
        GLenum a7;
        GLenum a8;
        GLvoid * a9;
    } ARGS_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ args;
    } PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__;
typedef void (*FUNC_void_GLenum_GLenum_GLfloat)(GLenum target, GLenum pname, GLfloat param);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLfloat a3;
    } ARGS_void_GLenum_GLenum_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLfloat func;
    int refs;
        ARGS_void_GLenum_GLenum_GLfloat args;
    } PACKED_void_GLenum_GLenum_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLfloat args;
    } INDEXED_void_GLenum_GLenum_GLfloat;
typedef void (*FUNC_void_GLenum_GLenum_const_GLfloat___GENPT__)(GLenum target, GLenum pname, const GLfloat * params);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLfloat * a3;
    } ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_const_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args;
    } PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args;
    } INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__;
typedef void (*FUNC_void_GLenum_GLenum_GLint)(GLenum target, GLenum pname, GLint param);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLint a3;
    } ARGS_void_GLenum_GLenum_GLint;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_GLint func;
    int refs;
        ARGS_void_GLenum_GLenum_GLint args;
    } PACKED_void_GLenum_GLenum_GLint;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_GLint args;
    } INDEXED_void_GLenum_GLenum_GLint;
typedef void (*FUNC_void_GLenum_GLenum_const_GLint___GENPT__)(GLenum target, GLenum pname, const GLint * params);
typedef struct {
        GLenum a1;
        GLenum a2;
        GLint * a3;
    } ARGS_void_GLenum_GLenum_const_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLenum_const_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLenum_const_GLint___GENPT__ args;
    } PACKED_void_GLenum_GLenum_const_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLenum_const_GLint___GENPT__ args;
    } INDEXED_void_GLenum_GLenum_const_GLint___GENPT__;
typedef void (*FUNC_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels);
typedef struct {
        GLenum a1;
        GLint a2;
        GLint a3;
        GLint a4;
        GLsizei a5;
        GLsizei a6;
        GLenum a7;
        GLenum a8;
        GLvoid * a9;
    } ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ args;
    } PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__;
typedef void (*FUNC_void_GLint_GLfloat)(GLint location, GLfloat v0);
typedef struct {
        GLint a1;
        GLfloat a2;
    } ARGS_void_GLint_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLint_GLfloat func;
    int refs;
        ARGS_void_GLint_GLfloat args;
    } PACKED_void_GLint_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLint_GLfloat args;
    } INDEXED_void_GLint_GLfloat;
typedef void (*FUNC_void_GLint_GLsizei_const_GLfloat___GENPT__)(GLint location, GLsizei count, const GLfloat * value);
typedef struct {
        GLint a1;
        GLsizei a2;
        GLfloat * a3;
    } ARGS_void_GLint_GLsizei_const_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLint_GLsizei_const_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLint_GLsizei_const_GLfloat___GENPT__ args;
    } PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLint_GLsizei_const_GLfloat___GENPT__ args;
    } INDEXED_void_GLint_GLsizei_const_GLfloat___GENPT__;
typedef void (*FUNC_void_GLint_GLint)(GLint location, GLint v0);
typedef struct {
        GLint a1;
        GLint a2;
    } ARGS_void_GLint_GLint;
typedef struct {
    int format;
    FUNC_void_GLint_GLint func;
    int refs;
        ARGS_void_GLint_GLint args;
    } PACKED_void_GLint_GLint;
typedef struct {
    int func;
        ARGS_void_GLint_GLint args;
    } INDEXED_void_GLint_GLint;
typedef void (*FUNC_void_GLint_GLsizei_const_GLint___GENPT__)(GLint location, GLsizei count, const GLint * value);
typedef struct {
        GLint a1;
        GLsizei a2;
        GLint * a3;
    } ARGS_void_GLint_GLsizei_const_GLint___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLint_GLsizei_const_GLint___GENPT__ func;
    int refs;
        ARGS_void_GLint_GLsizei_const_GLint___GENPT__ args;
    } PACKED_void_GLint_GLsizei_const_GLint___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLint_GLsizei_const_GLint___GENPT__ args;
    } INDEXED_void_GLint_GLsizei_const_GLint___GENPT__;
typedef void (*FUNC_void_GLint_GLfloat_GLfloat)(GLint location, GLfloat v0, GLfloat v1);
typedef struct {
        GLint a1;
        GLfloat a2;
        GLfloat a3;
    } ARGS_void_GLint_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLint_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLint_GLfloat_GLfloat args;
    } PACKED_void_GLint_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLint_GLfloat_GLfloat args;
    } INDEXED_void_GLint_GLfloat_GLfloat;
typedef void (*FUNC_void_GLint_GLint_GLint)(GLint location, GLint v0, GLint v1);
typedef struct {
        GLint a1;
        GLint a2;
        GLint a3;
    } ARGS_void_GLint_GLint_GLint;
typedef struct {
    int format;
    FUNC_void_GLint_GLint_GLint func;
    int refs;
        ARGS_void_GLint_GLint_GLint args;
    } PACKED_void_GLint_GLint_GLint;
typedef struct {
    int func;
        ARGS_void_GLint_GLint_GLint args;
    } INDEXED_void_GLint_GLint_GLint;
typedef void (*FUNC_void_GLint_GLfloat_GLfloat_GLfloat)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
typedef struct {
        GLint a1;
        GLfloat a2;
        GLfloat a3;
        GLfloat a4;
    } ARGS_void_GLint_GLfloat_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLint_GLfloat_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLint_GLfloat_GLfloat_GLfloat args;
    } PACKED_void_GLint_GLfloat_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLint_GLfloat_GLfloat_GLfloat args;
    } INDEXED_void_GLint_GLfloat_GLfloat_GLfloat;
typedef void (*FUNC_void_GLint_GLint_GLint_GLint)(GLint location, GLint v0, GLint v1, GLint v2);
typedef struct {
        GLint a1;
        GLint a2;
        GLint a3;
        GLint a4;
    } ARGS_void_GLint_GLint_GLint_GLint;
typedef struct {
    int format;
    FUNC_void_GLint_GLint_GLint_GLint func;
    int refs;
        ARGS_void_GLint_GLint_GLint_GLint args;
    } PACKED_void_GLint_GLint_GLint_GLint;
typedef struct {
    int func;
        ARGS_void_GLint_GLint_GLint_GLint args;
    } INDEXED_void_GLint_GLint_GLint_GLint;
typedef void (*FUNC_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
typedef struct {
        GLint a1;
        GLfloat a2;
        GLfloat a3;
        GLfloat a4;
        GLfloat a5;
    } ARGS_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat args;
    } PACKED_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat args;
    } INDEXED_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat;
typedef void (*FUNC_void_GLint_GLint_GLint_GLint_GLint)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
typedef struct {
        GLint a1;
        GLint a2;
        GLint a3;
        GLint a4;
        GLint a5;
    } ARGS_void_GLint_GLint_GLint_GLint_GLint;
typedef struct {
    int format;
    FUNC_void_GLint_GLint_GLint_GLint_GLint func;
    int refs;
        ARGS_void_GLint_GLint_GLint_GLint_GLint args;
    } PACKED_void_GLint_GLint_GLint_GLint_GLint;
typedef struct {
    int func;
        ARGS_void_GLint_GLint_GLint_GLint_GLint args;
    } INDEXED_void_GLint_GLint_GLint_GLint_GLint;
typedef void (*FUNC_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value);
typedef struct {
        GLint a1;
        GLsizei a2;
        GLboolean a3;
        GLfloat * a4;
    } ARGS_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__ args;
    } PACKED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__ args;
    } INDEXED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__;
typedef void (*FUNC_void_GLuint_GLfloat)(GLuint index, GLfloat x);
typedef struct {
        GLuint a1;
        GLfloat a2;
    } ARGS_void_GLuint_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLuint_GLfloat func;
    int refs;
        ARGS_void_GLuint_GLfloat args;
    } PACKED_void_GLuint_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLuint_GLfloat args;
    } INDEXED_void_GLuint_GLfloat;
typedef void (*FUNC_void_GLuint_const_GLfloat___GENPT__)(GLuint index, const GLfloat * v);
typedef struct {
        GLuint a1;
        GLfloat * a2;
    } ARGS_void_GLuint_const_GLfloat___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_const_GLfloat___GENPT__ func;
    int refs;
        ARGS_void_GLuint_const_GLfloat___GENPT__ args;
    } PACKED_void_GLuint_const_GLfloat___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_const_GLfloat___GENPT__ args;
    } INDEXED_void_GLuint_const_GLfloat___GENPT__;
typedef void (*FUNC_void_GLuint_GLfloat_GLfloat)(GLuint index, GLfloat x, GLfloat y);
typedef struct {
        GLuint a1;
        GLfloat a2;
        GLfloat a3;
    } ARGS_void_GLuint_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLuint_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLuint_GLfloat_GLfloat args;
    } PACKED_void_GLuint_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLuint_GLfloat_GLfloat args;
    } INDEXED_void_GLuint_GLfloat_GLfloat;
typedef void (*FUNC_void_GLuint_GLfloat_GLfloat_GLfloat)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
typedef struct {
        GLuint a1;
        GLfloat a2;
        GLfloat a3;
        GLfloat a4;
    } ARGS_void_GLuint_GLfloat_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLuint_GLfloat_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLuint_GLfloat_GLfloat_GLfloat args;
    } PACKED_void_GLuint_GLfloat_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLuint_GLfloat_GLfloat_GLfloat args;
    } INDEXED_void_GLuint_GLfloat_GLfloat_GLfloat;
typedef void (*FUNC_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
typedef struct {
        GLuint a1;
        GLfloat a2;
        GLfloat a3;
        GLfloat a4;
        GLfloat a5;
    } ARGS_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat;
typedef struct {
    int format;
    FUNC_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat func;
    int refs;
        ARGS_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat args;
    } PACKED_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat;
typedef struct {
    int func;
        ARGS_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat args;
    } INDEXED_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat;
typedef void (*FUNC_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer);
typedef struct {
        GLuint a1;
        GLint a2;
        GLenum a3;
        GLboolean a4;
        GLsizei a5;
        GLvoid * a6;
    } ARGS_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__;
typedef struct {
    int format;
    FUNC_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__ func;
    int refs;
        ARGS_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__ args;
    } PACKED_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__;
typedef struct {
    int func;
        ARGS_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__ args;
    } INDEXED_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__;

extern void glPushCall(void *data);
void glPackedCall(const packed_call_t *packed);
void glIndexedCall(const indexed_call_t *packed, void *ret_v);

#define glActiveTexture_INDEX 1
#define glActiveTexture_RETURN void
#define glActiveTexture_ARG_NAMES texture
#define glActiveTexture_ARG_EXPAND GLenum texture
#define glActiveTexture_PACKED PACKED_void_GLenum
#define glActiveTexture_INDEXED INDEXED_void_GLenum
#define glActiveTexture_FORMAT FORMAT_void_GLenum
#define glAttachShader_INDEX 2
#define glAttachShader_RETURN void
#define glAttachShader_ARG_NAMES program, shader
#define glAttachShader_ARG_EXPAND GLuint program, GLuint shader
#define glAttachShader_PACKED PACKED_void_GLuint_GLuint
#define glAttachShader_INDEXED INDEXED_void_GLuint_GLuint
#define glAttachShader_FORMAT FORMAT_void_GLuint_GLuint
#define glBindAttribLocation_INDEX 3
#define glBindAttribLocation_RETURN void
#define glBindAttribLocation_ARG_NAMES program, index, name
#define glBindAttribLocation_ARG_EXPAND GLuint program, GLuint index, const GLchar * name
#define glBindAttribLocation_PACKED PACKED_void_GLuint_GLuint_const_GLchar___GENPT__
#define glBindAttribLocation_INDEXED INDEXED_void_GLuint_GLuint_const_GLchar___GENPT__
#define glBindAttribLocation_FORMAT FORMAT_void_GLuint_GLuint_const_GLchar___GENPT__
#define glBindBuffer_INDEX 4
#define glBindBuffer_RETURN void
#define glBindBuffer_ARG_NAMES target, buffer
#define glBindBuffer_ARG_EXPAND GLenum target, GLuint buffer
#define glBindBuffer_PACKED PACKED_void_GLenum_GLuint
#define glBindBuffer_INDEXED INDEXED_void_GLenum_GLuint
#define glBindBuffer_FORMAT FORMAT_void_GLenum_GLuint
#define glBindFramebuffer_INDEX 5
#define glBindFramebuffer_RETURN void
#define glBindFramebuffer_ARG_NAMES target, framebuffer
#define glBindFramebuffer_ARG_EXPAND GLenum target, GLuint framebuffer
#define glBindFramebuffer_PACKED PACKED_void_GLenum_GLuint
#define glBindFramebuffer_INDEXED INDEXED_void_GLenum_GLuint
#define glBindFramebuffer_FORMAT FORMAT_void_GLenum_GLuint
#define glBindRenderbuffer_INDEX 6
#define glBindRenderbuffer_RETURN void
#define glBindRenderbuffer_ARG_NAMES target, renderbuffer
#define glBindRenderbuffer_ARG_EXPAND GLenum target, GLuint renderbuffer
#define glBindRenderbuffer_PACKED PACKED_void_GLenum_GLuint
#define glBindRenderbuffer_INDEXED INDEXED_void_GLenum_GLuint
#define glBindRenderbuffer_FORMAT FORMAT_void_GLenum_GLuint
#define glBindTexture_INDEX 7
#define glBindTexture_RETURN void
#define glBindTexture_ARG_NAMES target, texture
#define glBindTexture_ARG_EXPAND GLenum target, GLuint texture
#define glBindTexture_PACKED PACKED_void_GLenum_GLuint
#define glBindTexture_INDEXED INDEXED_void_GLenum_GLuint
#define glBindTexture_FORMAT FORMAT_void_GLenum_GLuint
#define glBlendColor_INDEX 8
#define glBlendColor_RETURN void
#define glBlendColor_ARG_NAMES red, green, blue, alpha
#define glBlendColor_ARG_EXPAND GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha
#define glBlendColor_PACKED PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define glBlendColor_INDEXED INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define glBlendColor_FORMAT FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf
#define glBlendEquation_INDEX 9
#define glBlendEquation_RETURN void
#define glBlendEquation_ARG_NAMES mode
#define glBlendEquation_ARG_EXPAND GLenum mode
#define glBlendEquation_PACKED PACKED_void_GLenum
#define glBlendEquation_INDEXED INDEXED_void_GLenum
#define glBlendEquation_FORMAT FORMAT_void_GLenum
#define glBlendEquationSeparate_INDEX 10
#define glBlendEquationSeparate_RETURN void
#define glBlendEquationSeparate_ARG_NAMES modeRGB, modeA
#define glBlendEquationSeparate_ARG_EXPAND GLenum modeRGB, GLenum modeA
#define glBlendEquationSeparate_PACKED PACKED_void_GLenum_GLenum
#define glBlendEquationSeparate_INDEXED INDEXED_void_GLenum_GLenum
#define glBlendEquationSeparate_FORMAT FORMAT_void_GLenum_GLenum
#define glBlendFunc_INDEX 11
#define glBlendFunc_RETURN void
#define glBlendFunc_ARG_NAMES sfactor, dfactor
#define glBlendFunc_ARG_EXPAND GLenum sfactor, GLenum dfactor
#define glBlendFunc_PACKED PACKED_void_GLenum_GLenum
#define glBlendFunc_INDEXED INDEXED_void_GLenum_GLenum
#define glBlendFunc_FORMAT FORMAT_void_GLenum_GLenum
#define glBlendFuncSeparate_INDEX 12
#define glBlendFuncSeparate_RETURN void
#define glBlendFuncSeparate_ARG_NAMES sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha
#define glBlendFuncSeparate_ARG_EXPAND GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha
#define glBlendFuncSeparate_PACKED PACKED_void_GLenum_GLenum_GLenum_GLenum
#define glBlendFuncSeparate_INDEXED INDEXED_void_GLenum_GLenum_GLenum_GLenum
#define glBlendFuncSeparate_FORMAT FORMAT_void_GLenum_GLenum_GLenum_GLenum
#define glBufferData_INDEX 13
#define glBufferData_RETURN void
#define glBufferData_ARG_NAMES target, size, data, usage
#define glBufferData_ARG_EXPAND GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage
#define glBufferData_PACKED PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum
#define glBufferData_INDEXED INDEXED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum
#define glBufferData_FORMAT FORMAT_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum
#define glBufferSubData_INDEX 14
#define glBufferSubData_RETURN void
#define glBufferSubData_ARG_NAMES target, offset, size, data
#define glBufferSubData_ARG_EXPAND GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data
#define glBufferSubData_PACKED PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__
#define glBufferSubData_INDEXED INDEXED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__
#define glBufferSubData_FORMAT FORMAT_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__
#define glCheckFramebufferStatus_INDEX 15
#define glCheckFramebufferStatus_RETURN GLenum
#define glCheckFramebufferStatus_ARG_NAMES target
#define glCheckFramebufferStatus_ARG_EXPAND GLenum target
#define glCheckFramebufferStatus_PACKED PACKED_GLenum_GLenum
#define glCheckFramebufferStatus_INDEXED INDEXED_GLenum_GLenum
#define glCheckFramebufferStatus_FORMAT FORMAT_GLenum_GLenum
#define glClear_INDEX 16
#define glClear_RETURN void
#define glClear_ARG_NAMES mask
#define glClear_ARG_EXPAND GLbitfield mask
#define glClear_PACKED PACKED_void_GLbitfield
#define glClear_INDEXED INDEXED_void_GLbitfield
#define glClear_FORMAT FORMAT_void_GLbitfield
#define glClearColor_INDEX 17
#define glClearColor_RETURN void
#define glClearColor_ARG_NAMES red, green, blue, alpha
#define glClearColor_ARG_EXPAND GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha
#define glClearColor_PACKED PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define glClearColor_INDEXED INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define glClearColor_FORMAT FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf
#define glClearDepthf_INDEX 18
#define glClearDepthf_RETURN void
#define glClearDepthf_ARG_NAMES depth
#define glClearDepthf_ARG_EXPAND GLclampf depth
#define glClearDepthf_PACKED PACKED_void_GLclampf
#define glClearDepthf_INDEXED INDEXED_void_GLclampf
#define glClearDepthf_FORMAT FORMAT_void_GLclampf
#define glClearStencil_INDEX 19
#define glClearStencil_RETURN void
#define glClearStencil_ARG_NAMES s
#define glClearStencil_ARG_EXPAND GLint s
#define glClearStencil_PACKED PACKED_void_GLint
#define glClearStencil_INDEXED INDEXED_void_GLint
#define glClearStencil_FORMAT FORMAT_void_GLint
#define glColorMask_INDEX 20
#define glColorMask_RETURN void
#define glColorMask_ARG_NAMES red, green, blue, alpha
#define glColorMask_ARG_EXPAND GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha
#define glColorMask_PACKED PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean
#define glColorMask_INDEXED INDEXED_void_GLboolean_GLboolean_GLboolean_GLboolean
#define glColorMask_FORMAT FORMAT_void_GLboolean_GLboolean_GLboolean_GLboolean
#define glCompileShader_INDEX 21
#define glCompileShader_RETURN void
#define glCompileShader_ARG_NAMES shader
#define glCompileShader_ARG_EXPAND GLuint shader
#define glCompileShader_PACKED PACKED_void_GLuint
#define glCompileShader_INDEXED INDEXED_void_GLuint
#define glCompileShader_FORMAT FORMAT_void_GLuint
#define glCompressedTexImage2D_INDEX 22
#define glCompressedTexImage2D_RETURN void
#define glCompressedTexImage2D_ARG_NAMES target, level, internalformat, width, height, border, imageSize, data
#define glCompressedTexImage2D_ARG_EXPAND GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data
#define glCompressedTexImage2D_PACKED PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__
#define glCompressedTexImage2D_INDEXED INDEXED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__
#define glCompressedTexImage2D_FORMAT FORMAT_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__
#define glCompressedTexSubImage2D_INDEX 23
#define glCompressedTexSubImage2D_RETURN void
#define glCompressedTexSubImage2D_ARG_NAMES target, level, xoffset, yoffset, width, height, format, imageSize, data
#define glCompressedTexSubImage2D_ARG_EXPAND GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data
#define glCompressedTexSubImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__
#define glCompressedTexSubImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__
#define glCompressedTexSubImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__
#define glCopyTexImage2D_INDEX 24
#define glCopyTexImage2D_RETURN void
#define glCopyTexImage2D_ARG_NAMES target, level, internalformat, x, y, width, height, border
#define glCopyTexImage2D_ARG_EXPAND GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border
#define glCopyTexImage2D_PACKED PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint
#define glCopyTexImage2D_INDEXED INDEXED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint
#define glCopyTexImage2D_FORMAT FORMAT_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint
#define glCopyTexSubImage2D_INDEX 25
#define glCopyTexSubImage2D_RETURN void
#define glCopyTexSubImage2D_ARG_NAMES target, level, xoffset, yoffset, x, y, width, height
#define glCopyTexSubImage2D_ARG_EXPAND GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height
#define glCopyTexSubImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei
#define glCopyTexSubImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei
#define glCopyTexSubImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei
#define glCreateProgram_INDEX 26
#define glCreateProgram_RETURN GLuint
#define glCreateProgram_ARG_NAMES 
#define glCreateProgram_ARG_EXPAND 
#define glCreateProgram_PACKED PACKED_GLuint
#define glCreateProgram_INDEXED INDEXED_GLuint
#define glCreateProgram_FORMAT FORMAT_GLuint
#define glCreateShader_INDEX 27
#define glCreateShader_RETURN GLuint
#define glCreateShader_ARG_NAMES type
#define glCreateShader_ARG_EXPAND GLenum type
#define glCreateShader_PACKED PACKED_GLuint_GLenum
#define glCreateShader_INDEXED INDEXED_GLuint_GLenum
#define glCreateShader_FORMAT FORMAT_GLuint_GLenum
#define glCullFace_INDEX 28
#define glCullFace_RETURN void
#define glCullFace_ARG_NAMES mode
#define glCullFace_ARG_EXPAND GLenum mode
#define glCullFace_PACKED PACKED_void_GLenum
#define glCullFace_INDEXED INDEXED_void_GLenum
#define glCullFace_FORMAT FORMAT_void_GLenum
#define glDeleteBuffers_INDEX 29
#define glDeleteBuffers_RETURN void
#define glDeleteBuffers_ARG_NAMES n, buffer
#define glDeleteBuffers_ARG_EXPAND GLsizei n, const GLuint * buffer
#define glDeleteBuffers_PACKED PACKED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteBuffers_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteBuffers_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT__
#define glDeleteFramebuffers_INDEX 30
#define glDeleteFramebuffers_RETURN void
#define glDeleteFramebuffers_ARG_NAMES n, framebuffers
#define glDeleteFramebuffers_ARG_EXPAND GLsizei n, const GLuint * framebuffers
#define glDeleteFramebuffers_PACKED PACKED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteFramebuffers_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteFramebuffers_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT__
#define glDeleteProgram_INDEX 31
#define glDeleteProgram_RETURN void
#define glDeleteProgram_ARG_NAMES program
#define glDeleteProgram_ARG_EXPAND GLuint program
#define glDeleteProgram_PACKED PACKED_void_GLuint
#define glDeleteProgram_INDEXED INDEXED_void_GLuint
#define glDeleteProgram_FORMAT FORMAT_void_GLuint
#define glDeleteRenderbuffers_INDEX 32
#define glDeleteRenderbuffers_RETURN void
#define glDeleteRenderbuffers_ARG_NAMES n, renderbuffers
#define glDeleteRenderbuffers_ARG_EXPAND GLsizei n, const GLuint * renderbuffers
#define glDeleteRenderbuffers_PACKED PACKED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteRenderbuffers_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteRenderbuffers_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT__
#define glDeleteShader_INDEX 33
#define glDeleteShader_RETURN void
#define glDeleteShader_ARG_NAMES program
#define glDeleteShader_ARG_EXPAND GLuint program
#define glDeleteShader_PACKED PACKED_void_GLuint
#define glDeleteShader_INDEXED INDEXED_void_GLuint
#define glDeleteShader_FORMAT FORMAT_void_GLuint
#define glDeleteTextures_INDEX 34
#define glDeleteTextures_RETURN void
#define glDeleteTextures_ARG_NAMES n, textures
#define glDeleteTextures_ARG_EXPAND GLsizei n, const GLuint * textures
#define glDeleteTextures_PACKED PACKED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteTextures_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT__
#define glDeleteTextures_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT__
#define glDepthFunc_INDEX 35
#define glDepthFunc_RETURN void
#define glDepthFunc_ARG_NAMES func
#define glDepthFunc_ARG_EXPAND GLenum func
#define glDepthFunc_PACKED PACKED_void_GLenum
#define glDepthFunc_INDEXED INDEXED_void_GLenum
#define glDepthFunc_FORMAT FORMAT_void_GLenum
#define glDepthMask_INDEX 36
#define glDepthMask_RETURN void
#define glDepthMask_ARG_NAMES flag
#define glDepthMask_ARG_EXPAND GLboolean flag
#define glDepthMask_PACKED PACKED_void_GLboolean
#define glDepthMask_INDEXED INDEXED_void_GLboolean
#define glDepthMask_FORMAT FORMAT_void_GLboolean
#define glDepthRangef_INDEX 37
#define glDepthRangef_RETURN void
#define glDepthRangef_ARG_NAMES near, far
#define glDepthRangef_ARG_EXPAND GLclampf near, GLclampf far
#define glDepthRangef_PACKED PACKED_void_GLclampf_GLclampf
#define glDepthRangef_INDEXED INDEXED_void_GLclampf_GLclampf
#define glDepthRangef_FORMAT FORMAT_void_GLclampf_GLclampf
#define glDetachShader_INDEX 38
#define glDetachShader_RETURN void
#define glDetachShader_ARG_NAMES program, shader
#define glDetachShader_ARG_EXPAND GLuint program, GLuint shader
#define glDetachShader_PACKED PACKED_void_GLuint_GLuint
#define glDetachShader_INDEXED INDEXED_void_GLuint_GLuint
#define glDetachShader_FORMAT FORMAT_void_GLuint_GLuint
#define glDisable_INDEX 39
#define glDisable_RETURN void
#define glDisable_ARG_NAMES cap
#define glDisable_ARG_EXPAND GLenum cap
#define glDisable_PACKED PACKED_void_GLenum
#define glDisable_INDEXED INDEXED_void_GLenum
#define glDisable_FORMAT FORMAT_void_GLenum
#define glDisableVertexAttribArray_INDEX 40
#define glDisableVertexAttribArray_RETURN void
#define glDisableVertexAttribArray_ARG_NAMES index
#define glDisableVertexAttribArray_ARG_EXPAND GLuint index
#define glDisableVertexAttribArray_PACKED PACKED_void_GLuint
#define glDisableVertexAttribArray_INDEXED INDEXED_void_GLuint
#define glDisableVertexAttribArray_FORMAT FORMAT_void_GLuint
#define glDrawArrays_INDEX 41
#define glDrawArrays_RETURN void
#define glDrawArrays_ARG_NAMES mode, first, count
#define glDrawArrays_ARG_EXPAND GLenum mode, GLint first, GLsizei count
#define glDrawArrays_PACKED PACKED_void_GLenum_GLint_GLsizei
#define glDrawArrays_INDEXED INDEXED_void_GLenum_GLint_GLsizei
#define glDrawArrays_FORMAT FORMAT_void_GLenum_GLint_GLsizei
#define glDrawElements_INDEX 42
#define glDrawElements_RETURN void
#define glDrawElements_ARG_NAMES mode, count, type, indices
#define glDrawElements_ARG_EXPAND GLenum mode, GLsizei count, GLenum type, const GLvoid * indices
#define glDrawElements_PACKED PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__
#define glDrawElements_INDEXED INDEXED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__
#define glDrawElements_FORMAT FORMAT_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__
#define glEnable_INDEX 43
#define glEnable_RETURN void
#define glEnable_ARG_NAMES cap
#define glEnable_ARG_EXPAND GLenum cap
#define glEnable_PACKED PACKED_void_GLenum
#define glEnable_INDEXED INDEXED_void_GLenum
#define glEnable_FORMAT FORMAT_void_GLenum
#define glEnableVertexAttribArray_INDEX 44
#define glEnableVertexAttribArray_RETURN void
#define glEnableVertexAttribArray_ARG_NAMES index
#define glEnableVertexAttribArray_ARG_EXPAND GLuint index
#define glEnableVertexAttribArray_PACKED PACKED_void_GLuint
#define glEnableVertexAttribArray_INDEXED INDEXED_void_GLuint
#define glEnableVertexAttribArray_FORMAT FORMAT_void_GLuint
#define glFinish_INDEX 45
#define glFinish_RETURN void
#define glFinish_ARG_NAMES 
#define glFinish_ARG_EXPAND 
#define glFinish_PACKED PACKED_void
#define glFinish_INDEXED INDEXED_void
#define glFinish_FORMAT FORMAT_void
#define glFlush_INDEX 46
#define glFlush_RETURN void
#define glFlush_ARG_NAMES 
#define glFlush_ARG_EXPAND 
#define glFlush_PACKED PACKED_void
#define glFlush_INDEXED INDEXED_void
#define glFlush_FORMAT FORMAT_void
#define glFramebufferRenderbuffer_INDEX 47
#define glFramebufferRenderbuffer_RETURN void
#define glFramebufferRenderbuffer_ARG_NAMES target, attachment, renderbuffertarget, renderbuffer
#define glFramebufferRenderbuffer_ARG_EXPAND GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer
#define glFramebufferRenderbuffer_PACKED PACKED_void_GLenum_GLenum_GLenum_GLuint
#define glFramebufferRenderbuffer_INDEXED INDEXED_void_GLenum_GLenum_GLenum_GLuint
#define glFramebufferRenderbuffer_FORMAT FORMAT_void_GLenum_GLenum_GLenum_GLuint
#define glFramebufferTexture2D_INDEX 48
#define glFramebufferTexture2D_RETURN void
#define glFramebufferTexture2D_ARG_NAMES target, attachment, textarget, texture, level
#define glFramebufferTexture2D_ARG_EXPAND GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level
#define glFramebufferTexture2D_PACKED PACKED_void_GLenum_GLenum_GLenum_GLuint_GLint
#define glFramebufferTexture2D_INDEXED INDEXED_void_GLenum_GLenum_GLenum_GLuint_GLint
#define glFramebufferTexture2D_FORMAT FORMAT_void_GLenum_GLenum_GLenum_GLuint_GLint
#define glFrontFace_INDEX 49
#define glFrontFace_RETURN void
#define glFrontFace_ARG_NAMES mode
#define glFrontFace_ARG_EXPAND GLenum mode
#define glFrontFace_PACKED PACKED_void_GLenum
#define glFrontFace_INDEXED INDEXED_void_GLenum
#define glFrontFace_FORMAT FORMAT_void_GLenum
#define glGenBuffers_INDEX 50
#define glGenBuffers_RETURN void
#define glGenBuffers_ARG_NAMES n, buffer
#define glGenBuffers_ARG_EXPAND GLsizei n, GLuint * buffer
#define glGenBuffers_PACKED PACKED_void_GLsizei_GLuint___GENPT__
#define glGenBuffers_INDEXED INDEXED_void_GLsizei_GLuint___GENPT__
#define glGenBuffers_FORMAT FORMAT_void_GLsizei_GLuint___GENPT__
#define glGenFramebuffers_INDEX 51
#define glGenFramebuffers_RETURN void
#define glGenFramebuffers_ARG_NAMES n, framebuffers
#define glGenFramebuffers_ARG_EXPAND GLsizei n, GLuint * framebuffers
#define glGenFramebuffers_PACKED PACKED_void_GLsizei_GLuint___GENPT__
#define glGenFramebuffers_INDEXED INDEXED_void_GLsizei_GLuint___GENPT__
#define glGenFramebuffers_FORMAT FORMAT_void_GLsizei_GLuint___GENPT__
#define glGenRenderbuffers_INDEX 52
#define glGenRenderbuffers_RETURN void
#define glGenRenderbuffers_ARG_NAMES n, renderbuffers
#define glGenRenderbuffers_ARG_EXPAND GLsizei n, GLuint * renderbuffers
#define glGenRenderbuffers_PACKED PACKED_void_GLsizei_GLuint___GENPT__
#define glGenRenderbuffers_INDEXED INDEXED_void_GLsizei_GLuint___GENPT__
#define glGenRenderbuffers_FORMAT FORMAT_void_GLsizei_GLuint___GENPT__
#define glGenTextures_INDEX 53
#define glGenTextures_RETURN void
#define glGenTextures_ARG_NAMES n, textures
#define glGenTextures_ARG_EXPAND GLsizei n, GLuint * textures
#define glGenTextures_PACKED PACKED_void_GLsizei_GLuint___GENPT__
#define glGenTextures_INDEXED INDEXED_void_GLsizei_GLuint___GENPT__
#define glGenTextures_FORMAT FORMAT_void_GLsizei_GLuint___GENPT__
#define glGenerateMipmap_INDEX 54
#define glGenerateMipmap_RETURN void
#define glGenerateMipmap_ARG_NAMES target
#define glGenerateMipmap_ARG_EXPAND GLenum target
#define glGenerateMipmap_PACKED PACKED_void_GLenum
#define glGenerateMipmap_INDEXED INDEXED_void_GLenum
#define glGenerateMipmap_FORMAT FORMAT_void_GLenum
#define glGetActiveAttrib_INDEX 55
#define glGetActiveAttrib_RETURN void
#define glGetActiveAttrib_ARG_NAMES program, index, bufSize, length, size, type, name
#define glGetActiveAttrib_ARG_EXPAND GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name
#define glGetActiveAttrib_PACKED PACKED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__
#define glGetActiveAttrib_INDEXED INDEXED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__
#define glGetActiveAttrib_FORMAT FORMAT_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__
#define glGetActiveUniform_INDEX 56
#define glGetActiveUniform_RETURN void
#define glGetActiveUniform_ARG_NAMES program, index, bufSize, length, size, type, name
#define glGetActiveUniform_ARG_EXPAND GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name
#define glGetActiveUniform_PACKED PACKED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__
#define glGetActiveUniform_INDEXED INDEXED_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__
#define glGetActiveUniform_FORMAT FORMAT_void_GLuint_GLuint_GLsizei_GLsizei___GENPT___GLint___GENPT___GLenum___GENPT___GLchar___GENPT__
#define glGetAttachedShaders_INDEX 57
#define glGetAttachedShaders_RETURN void
#define glGetAttachedShaders_ARG_NAMES program, maxCount, count, obj
#define glGetAttachedShaders_ARG_EXPAND GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj
#define glGetAttachedShaders_PACKED PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__
#define glGetAttachedShaders_INDEXED INDEXED_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__
#define glGetAttachedShaders_FORMAT FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLuint___GENPT__
#define glGetAttribLocation_INDEX 58
#define glGetAttribLocation_RETURN GLint
#define glGetAttribLocation_ARG_NAMES program, name
#define glGetAttribLocation_ARG_EXPAND GLuint program, const GLchar * name
#define glGetAttribLocation_PACKED PACKED_GLint_GLuint_const_GLchar___GENPT__
#define glGetAttribLocation_INDEXED INDEXED_GLint_GLuint_const_GLchar___GENPT__
#define glGetAttribLocation_FORMAT FORMAT_GLint_GLuint_const_GLchar___GENPT__
#define glGetBooleanv_INDEX 59
#define glGetBooleanv_RETURN void
#define glGetBooleanv_ARG_NAMES pname, params
#define glGetBooleanv_ARG_EXPAND GLenum pname, GLboolean * params
#define glGetBooleanv_PACKED PACKED_void_GLenum_GLboolean___GENPT__
#define glGetBooleanv_INDEXED INDEXED_void_GLenum_GLboolean___GENPT__
#define glGetBooleanv_FORMAT FORMAT_void_GLenum_GLboolean___GENPT__
#define glGetBufferParameteriv_INDEX 60
#define glGetBufferParameteriv_RETURN void
#define glGetBufferParameteriv_ARG_NAMES target, pname, params
#define glGetBufferParameteriv_ARG_EXPAND GLenum target, GLenum pname, GLint * params
#define glGetBufferParameteriv_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT__
#define glGetBufferParameteriv_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT__
#define glGetBufferParameteriv_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT__
#define glGetError_INDEX 61
#define glGetError_RETURN GLenum
#define glGetError_ARG_NAMES 
#define glGetError_ARG_EXPAND 
#define glGetError_PACKED PACKED_GLenum
#define glGetError_INDEXED INDEXED_GLenum
#define glGetError_FORMAT FORMAT_GLenum
#define glGetFloatv_INDEX 62
#define glGetFloatv_RETURN void
#define glGetFloatv_ARG_NAMES pname, params
#define glGetFloatv_ARG_EXPAND GLenum pname, GLfloat * params
#define glGetFloatv_PACKED PACKED_void_GLenum_GLfloat___GENPT__
#define glGetFloatv_INDEXED INDEXED_void_GLenum_GLfloat___GENPT__
#define glGetFloatv_FORMAT FORMAT_void_GLenum_GLfloat___GENPT__
#define glGetFramebufferAttachmentParameteriv_INDEX 63
#define glGetFramebufferAttachmentParameteriv_RETURN void
#define glGetFramebufferAttachmentParameteriv_ARG_NAMES target, attachment, pname, params
#define glGetFramebufferAttachmentParameteriv_ARG_EXPAND GLenum target, GLenum attachment, GLenum pname, GLint * params
#define glGetFramebufferAttachmentParameteriv_PACKED PACKED_void_GLenum_GLenum_GLenum_GLint___GENPT__
#define glGetFramebufferAttachmentParameteriv_INDEXED INDEXED_void_GLenum_GLenum_GLenum_GLint___GENPT__
#define glGetFramebufferAttachmentParameteriv_FORMAT FORMAT_void_GLenum_GLenum_GLenum_GLint___GENPT__
#define glGetIntegerv_INDEX 64
#define glGetIntegerv_RETURN void
#define glGetIntegerv_ARG_NAMES pname, params
#define glGetIntegerv_ARG_EXPAND GLenum pname, GLint * params
#define glGetIntegerv_PACKED PACKED_void_GLenum_GLint___GENPT__
#define glGetIntegerv_INDEXED INDEXED_void_GLenum_GLint___GENPT__
#define glGetIntegerv_FORMAT FORMAT_void_GLenum_GLint___GENPT__
#define glGetProgramInfoLog_INDEX 65
#define glGetProgramInfoLog_RETURN void
#define glGetProgramInfoLog_ARG_NAMES program, bufSize, length, infoLog
#define glGetProgramInfoLog_ARG_EXPAND GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog
#define glGetProgramInfoLog_PACKED PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetProgramInfoLog_INDEXED INDEXED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetProgramInfoLog_FORMAT FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetProgramiv_INDEX 66
#define glGetProgramiv_RETURN void
#define glGetProgramiv_ARG_NAMES program, pname, params
#define glGetProgramiv_ARG_EXPAND GLuint program, GLenum pname, GLint * params
#define glGetProgramiv_PACKED PACKED_void_GLuint_GLenum_GLint___GENPT__
#define glGetProgramiv_INDEXED INDEXED_void_GLuint_GLenum_GLint___GENPT__
#define glGetProgramiv_FORMAT FORMAT_void_GLuint_GLenum_GLint___GENPT__
#define glGetRenderbufferParameteriv_INDEX 67
#define glGetRenderbufferParameteriv_RETURN void
#define glGetRenderbufferParameteriv_ARG_NAMES target, pname, params
#define glGetRenderbufferParameteriv_ARG_EXPAND GLenum target, GLenum pname, GLint * params
#define glGetRenderbufferParameteriv_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT__
#define glGetRenderbufferParameteriv_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT__
#define glGetRenderbufferParameteriv_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT__
#define glGetShaderInfoLog_INDEX 68
#define glGetShaderInfoLog_RETURN void
#define glGetShaderInfoLog_ARG_NAMES shader, bufSize, length, infoLog
#define glGetShaderInfoLog_ARG_EXPAND GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog
#define glGetShaderInfoLog_PACKED PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetShaderInfoLog_INDEXED INDEXED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetShaderInfoLog_FORMAT FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetShaderPrecisionFormat_INDEX 69
#define glGetShaderPrecisionFormat_RETURN void
#define glGetShaderPrecisionFormat_ARG_NAMES shadertype, precisiontype, range, precision
#define glGetShaderPrecisionFormat_ARG_EXPAND GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision
#define glGetShaderPrecisionFormat_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__
#define glGetShaderPrecisionFormat_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__
#define glGetShaderPrecisionFormat_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT___GLint___GENPT__
#define glGetShaderSource_INDEX 70
#define glGetShaderSource_RETURN void
#define glGetShaderSource_ARG_NAMES shader, bufSize, length, source
#define glGetShaderSource_ARG_EXPAND GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source
#define glGetShaderSource_PACKED PACKED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetShaderSource_INDEXED INDEXED_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetShaderSource_FORMAT FORMAT_void_GLuint_GLsizei_GLsizei___GENPT___GLchar___GENPT__
#define glGetShaderiv_INDEX 71
#define glGetShaderiv_RETURN void
#define glGetShaderiv_ARG_NAMES shader, pname, params
#define glGetShaderiv_ARG_EXPAND GLuint shader, GLenum pname, GLint * params
#define glGetShaderiv_PACKED PACKED_void_GLuint_GLenum_GLint___GENPT__
#define glGetShaderiv_INDEXED INDEXED_void_GLuint_GLenum_GLint___GENPT__
#define glGetShaderiv_FORMAT FORMAT_void_GLuint_GLenum_GLint___GENPT__
#define glGetString_INDEX 72
#define glGetString_RETURN const GLubyte *
#define glGetString_ARG_NAMES name
#define glGetString_ARG_EXPAND GLenum name
#define glGetString_PACKED PACKED_const_GLubyte___GENPT___GLenum
#define glGetString_INDEXED INDEXED_const_GLubyte___GENPT___GLenum
#define glGetString_FORMAT FORMAT_const_GLubyte___GENPT___GLenum
#define glGetTexParameterfv_INDEX 73
#define glGetTexParameterfv_RETURN void
#define glGetTexParameterfv_ARG_NAMES target, pname, params
#define glGetTexParameterfv_ARG_EXPAND GLenum target, GLenum pname, GLfloat * params
#define glGetTexParameterfv_PACKED PACKED_void_GLenum_GLenum_GLfloat___GENPT__
#define glGetTexParameterfv_INDEXED INDEXED_void_GLenum_GLenum_GLfloat___GENPT__
#define glGetTexParameterfv_FORMAT FORMAT_void_GLenum_GLenum_GLfloat___GENPT__
#define glGetTexParameteriv_INDEX 74
#define glGetTexParameteriv_RETURN void
#define glGetTexParameteriv_ARG_NAMES target, pname, params
#define glGetTexParameteriv_ARG_EXPAND GLenum target, GLenum pname, GLint * params
#define glGetTexParameteriv_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT__
#define glGetTexParameteriv_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT__
#define glGetTexParameteriv_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT__
#define glGetUniformLocation_INDEX 75
#define glGetUniformLocation_RETURN GLint
#define glGetUniformLocation_ARG_NAMES program, name
#define glGetUniformLocation_ARG_EXPAND GLuint program, const GLchar * name
#define glGetUniformLocation_PACKED PACKED_GLint_GLuint_const_GLchar___GENPT__
#define glGetUniformLocation_INDEXED INDEXED_GLint_GLuint_const_GLchar___GENPT__
#define glGetUniformLocation_FORMAT FORMAT_GLint_GLuint_const_GLchar___GENPT__
#define glGetUniformfv_INDEX 76
#define glGetUniformfv_RETURN void
#define glGetUniformfv_ARG_NAMES program, location, params
#define glGetUniformfv_ARG_EXPAND GLuint program, GLint location, GLfloat * params
#define glGetUniformfv_PACKED PACKED_void_GLuint_GLint_GLfloat___GENPT__
#define glGetUniformfv_INDEXED INDEXED_void_GLuint_GLint_GLfloat___GENPT__
#define glGetUniformfv_FORMAT FORMAT_void_GLuint_GLint_GLfloat___GENPT__
#define glGetUniformiv_INDEX 77
#define glGetUniformiv_RETURN void
#define glGetUniformiv_ARG_NAMES program, location, params
#define glGetUniformiv_ARG_EXPAND GLuint program, GLint location, GLint * params
#define glGetUniformiv_PACKED PACKED_void_GLuint_GLint_GLint___GENPT__
#define glGetUniformiv_INDEXED INDEXED_void_GLuint_GLint_GLint___GENPT__
#define glGetUniformiv_FORMAT FORMAT_void_GLuint_GLint_GLint___GENPT__
#define glGetVertexAttribPointerv_INDEX 78
#define glGetVertexAttribPointerv_RETURN void
#define glGetVertexAttribPointerv_ARG_NAMES index, pname, pointer
#define glGetVertexAttribPointerv_ARG_EXPAND GLuint index, GLenum pname, GLvoid ** pointer
#define glGetVertexAttribPointerv_PACKED PACKED_void_GLuint_GLenum_GLvoid___GENPT____GENPT__
#define glGetVertexAttribPointerv_INDEXED INDEXED_void_GLuint_GLenum_GLvoid___GENPT____GENPT__
#define glGetVertexAttribPointerv_FORMAT FORMAT_void_GLuint_GLenum_GLvoid___GENPT____GENPT__
#define glGetVertexAttribfv_INDEX 79
#define glGetVertexAttribfv_RETURN void
#define glGetVertexAttribfv_ARG_NAMES index, pname, params
#define glGetVertexAttribfv_ARG_EXPAND GLuint index, GLenum pname, GLfloat * params
#define glGetVertexAttribfv_PACKED PACKED_void_GLuint_GLenum_GLfloat___GENPT__
#define glGetVertexAttribfv_INDEXED INDEXED_void_GLuint_GLenum_GLfloat___GENPT__
#define glGetVertexAttribfv_FORMAT FORMAT_void_GLuint_GLenum_GLfloat___GENPT__
#define glGetVertexAttribiv_INDEX 80
#define glGetVertexAttribiv_RETURN void
#define glGetVertexAttribiv_ARG_NAMES index, pname, params
#define glGetVertexAttribiv_ARG_EXPAND GLuint index, GLenum pname, GLint * params
#define glGetVertexAttribiv_PACKED PACKED_void_GLuint_GLenum_GLint___GENPT__
#define glGetVertexAttribiv_INDEXED INDEXED_void_GLuint_GLenum_GLint___GENPT__
#define glGetVertexAttribiv_FORMAT FORMAT_void_GLuint_GLenum_GLint___GENPT__
#define glHint_INDEX 81
#define glHint_RETURN void
#define glHint_ARG_NAMES target, mode
#define glHint_ARG_EXPAND GLenum target, GLenum mode
#define glHint_PACKED PACKED_void_GLenum_GLenum
#define glHint_INDEXED INDEXED_void_GLenum_GLenum
#define glHint_FORMAT FORMAT_void_GLenum_GLenum
#define glIsBuffer_INDEX 82
#define glIsBuffer_RETURN GLboolean
#define glIsBuffer_ARG_NAMES buffer
#define glIsBuffer_ARG_EXPAND GLuint buffer
#define glIsBuffer_PACKED PACKED_GLboolean_GLuint
#define glIsBuffer_INDEXED INDEXED_GLboolean_GLuint
#define glIsBuffer_FORMAT FORMAT_GLboolean_GLuint
#define glIsEnabled_INDEX 83
#define glIsEnabled_RETURN GLboolean
#define glIsEnabled_ARG_NAMES cap
#define glIsEnabled_ARG_EXPAND GLenum cap
#define glIsEnabled_PACKED PACKED_GLboolean_GLenum
#define glIsEnabled_INDEXED INDEXED_GLboolean_GLenum
#define glIsEnabled_FORMAT FORMAT_GLboolean_GLenum
#define glIsFramebuffer_INDEX 84
#define glIsFramebuffer_RETURN GLboolean
#define glIsFramebuffer_ARG_NAMES framebuffer
#define glIsFramebuffer_ARG_EXPAND GLuint framebuffer
#define glIsFramebuffer_PACKED PACKED_GLboolean_GLuint
#define glIsFramebuffer_INDEXED INDEXED_GLboolean_GLuint
#define glIsFramebuffer_FORMAT FORMAT_GLboolean_GLuint
#define glIsProgram_INDEX 85
#define glIsProgram_RETURN GLboolean
#define glIsProgram_ARG_NAMES program
#define glIsProgram_ARG_EXPAND GLuint program
#define glIsProgram_PACKED PACKED_GLboolean_GLuint
#define glIsProgram_INDEXED INDEXED_GLboolean_GLuint
#define glIsProgram_FORMAT FORMAT_GLboolean_GLuint
#define glIsRenderbuffer_INDEX 86
#define glIsRenderbuffer_RETURN GLboolean
#define glIsRenderbuffer_ARG_NAMES renderbuffer
#define glIsRenderbuffer_ARG_EXPAND GLuint renderbuffer
#define glIsRenderbuffer_PACKED PACKED_GLboolean_GLuint
#define glIsRenderbuffer_INDEXED INDEXED_GLboolean_GLuint
#define glIsRenderbuffer_FORMAT FORMAT_GLboolean_GLuint
#define glIsShader_INDEX 87
#define glIsShader_RETURN GLboolean
#define glIsShader_ARG_NAMES shader
#define glIsShader_ARG_EXPAND GLuint shader
#define glIsShader_PACKED PACKED_GLboolean_GLuint
#define glIsShader_INDEXED INDEXED_GLboolean_GLuint
#define glIsShader_FORMAT FORMAT_GLboolean_GLuint
#define glIsTexture_INDEX 88
#define glIsTexture_RETURN GLboolean
#define glIsTexture_ARG_NAMES texture
#define glIsTexture_ARG_EXPAND GLuint texture
#define glIsTexture_PACKED PACKED_GLboolean_GLuint
#define glIsTexture_INDEXED INDEXED_GLboolean_GLuint
#define glIsTexture_FORMAT FORMAT_GLboolean_GLuint
#define glLineWidth_INDEX 89
#define glLineWidth_RETURN void
#define glLineWidth_ARG_NAMES width
#define glLineWidth_ARG_EXPAND GLfloat width
#define glLineWidth_PACKED PACKED_void_GLfloat
#define glLineWidth_INDEXED INDEXED_void_GLfloat
#define glLineWidth_FORMAT FORMAT_void_GLfloat
#define glLinkProgram_INDEX 90
#define glLinkProgram_RETURN void
#define glLinkProgram_ARG_NAMES program
#define glLinkProgram_ARG_EXPAND GLuint program
#define glLinkProgram_PACKED PACKED_void_GLuint
#define glLinkProgram_INDEXED INDEXED_void_GLuint
#define glLinkProgram_FORMAT FORMAT_void_GLuint
#define glPixelStorei_INDEX 91
#define glPixelStorei_RETURN void
#define glPixelStorei_ARG_NAMES pname, param
#define glPixelStorei_ARG_EXPAND GLenum pname, GLint param
#define glPixelStorei_PACKED PACKED_void_GLenum_GLint
#define glPixelStorei_INDEXED INDEXED_void_GLenum_GLint
#define glPixelStorei_FORMAT FORMAT_void_GLenum_GLint
#define glPolygonOffset_INDEX 92
#define glPolygonOffset_RETURN void
#define glPolygonOffset_ARG_NAMES factor, units
#define glPolygonOffset_ARG_EXPAND GLfloat factor, GLfloat units
#define glPolygonOffset_PACKED PACKED_void_GLfloat_GLfloat
#define glPolygonOffset_INDEXED INDEXED_void_GLfloat_GLfloat
#define glPolygonOffset_FORMAT FORMAT_void_GLfloat_GLfloat
#define glReadPixels_INDEX 93
#define glReadPixels_RETURN void
#define glReadPixels_ARG_NAMES x, y, width, height, format, type, pixels
#define glReadPixels_ARG_EXPAND GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels
#define glReadPixels_PACKED PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__
#define glReadPixels_INDEXED INDEXED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__
#define glReadPixels_FORMAT FORMAT_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__
#define glReleaseShaderCompiler_INDEX 94
#define glReleaseShaderCompiler_RETURN void
#define glReleaseShaderCompiler_ARG_NAMES 
#define glReleaseShaderCompiler_ARG_EXPAND 
#define glReleaseShaderCompiler_PACKED PACKED_void
#define glReleaseShaderCompiler_INDEXED INDEXED_void
#define glReleaseShaderCompiler_FORMAT FORMAT_void
#define glRenderbufferStorage_INDEX 95
#define glRenderbufferStorage_RETURN void
#define glRenderbufferStorage_ARG_NAMES target, internalformat, width, height
#define glRenderbufferStorage_ARG_EXPAND GLenum target, GLenum internalformat, GLsizei width, GLsizei height
#define glRenderbufferStorage_PACKED PACKED_void_GLenum_GLenum_GLsizei_GLsizei
#define glRenderbufferStorage_INDEXED INDEXED_void_GLenum_GLenum_GLsizei_GLsizei
#define glRenderbufferStorage_FORMAT FORMAT_void_GLenum_GLenum_GLsizei_GLsizei
#define glSampleCoverage_INDEX 96
#define glSampleCoverage_RETURN void
#define glSampleCoverage_ARG_NAMES value, invert
#define glSampleCoverage_ARG_EXPAND GLclampf value, GLboolean invert
#define glSampleCoverage_PACKED PACKED_void_GLclampf_GLboolean
#define glSampleCoverage_INDEXED INDEXED_void_GLclampf_GLboolean
#define glSampleCoverage_FORMAT FORMAT_void_GLclampf_GLboolean
#define glScissor_INDEX 97
#define glScissor_RETURN void
#define glScissor_ARG_NAMES x, y, width, height
#define glScissor_ARG_EXPAND GLint x, GLint y, GLsizei width, GLsizei height
#define glScissor_PACKED PACKED_void_GLint_GLint_GLsizei_GLsizei
#define glScissor_INDEXED INDEXED_void_GLint_GLint_GLsizei_GLsizei
#define glScissor_FORMAT FORMAT_void_GLint_GLint_GLsizei_GLsizei
#define glShaderBinary_INDEX 98
#define glShaderBinary_RETURN void
#define glShaderBinary_ARG_NAMES n, shaders, binaryformat, binary, length
#define glShaderBinary_ARG_EXPAND GLsizei n, const GLuint * shaders, GLenum binaryformat, const GLvoid * binary, GLsizei length
#define glShaderBinary_PACKED PACKED_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei
#define glShaderBinary_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei
#define glShaderBinary_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT___GLenum_const_GLvoid___GENPT___GLsizei
#define glShaderSource_INDEX 99
#define glShaderSource_RETURN void
#define glShaderSource_ARG_NAMES shader, count, string, length
#define glShaderSource_ARG_EXPAND GLuint shader, GLsizei count, const GLchar * const * string, const GLint * length
#define glShaderSource_PACKED PACKED_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__
#define glShaderSource_INDEXED INDEXED_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__
#define glShaderSource_FORMAT FORMAT_void_GLuint_GLsizei_const_GLchar___GENPT___const___GENPT___const_GLint___GENPT__
#define glStencilFunc_INDEX 100
#define glStencilFunc_RETURN void
#define glStencilFunc_ARG_NAMES func, ref, mask
#define glStencilFunc_ARG_EXPAND GLenum func, GLint ref, GLuint mask
#define glStencilFunc_PACKED PACKED_void_GLenum_GLint_GLuint
#define glStencilFunc_INDEXED INDEXED_void_GLenum_GLint_GLuint
#define glStencilFunc_FORMAT FORMAT_void_GLenum_GLint_GLuint
#define glStencilFuncSeparate_INDEX 101
#define glStencilFuncSeparate_RETURN void
#define glStencilFuncSeparate_ARG_NAMES face, func, ref, mask
#define glStencilFuncSeparate_ARG_EXPAND GLenum face, GLenum func, GLint ref, GLuint mask
#define glStencilFuncSeparate_PACKED PACKED_void_GLenum_GLenum_GLint_GLuint
#define glStencilFuncSeparate_INDEXED INDEXED_void_GLenum_GLenum_GLint_GLuint
#define glStencilFuncSeparate_FORMAT FORMAT_void_GLenum_GLenum_GLint_GLuint
#define glStencilMask_INDEX 102
#define glStencilMask_RETURN void
#define glStencilMask_ARG_NAMES mask
#define glStencilMask_ARG_EXPAND GLuint mask
#define glStencilMask_PACKED PACKED_void_GLuint
#define glStencilMask_INDEXED INDEXED_void_GLuint
#define glStencilMask_FORMAT FORMAT_void_GLuint
#define glStencilMaskSeparate_INDEX 103
#define glStencilMaskSeparate_RETURN void
#define glStencilMaskSeparate_ARG_NAMES face, mask
#define glStencilMaskSeparate_ARG_EXPAND GLenum face, GLuint mask
#define glStencilMaskSeparate_PACKED PACKED_void_GLenum_GLuint
#define glStencilMaskSeparate_INDEXED INDEXED_void_GLenum_GLuint
#define glStencilMaskSeparate_FORMAT FORMAT_void_GLenum_GLuint
#define glStencilOp_INDEX 104
#define glStencilOp_RETURN void
#define glStencilOp_ARG_NAMES fail, zfail, zpass
#define glStencilOp_ARG_EXPAND GLenum fail, GLenum zfail, GLenum zpass
#define glStencilOp_PACKED PACKED_void_GLenum_GLenum_GLenum
#define glStencilOp_INDEXED INDEXED_void_GLenum_GLenum_GLenum
#define glStencilOp_FORMAT FORMAT_void_GLenum_GLenum_GLenum
#define glStencilOpSeparate_INDEX 105
#define glStencilOpSeparate_RETURN void
#define glStencilOpSeparate_ARG_NAMES face, sfail, zfail, zpass
#define glStencilOpSeparate_ARG_EXPAND GLenum face, GLenum sfail, GLenum zfail, GLenum zpass
#define glStencilOpSeparate_PACKED PACKED_void_GLenum_GLenum_GLenum_GLenum
#define glStencilOpSeparate_INDEXED INDEXED_void_GLenum_GLenum_GLenum_GLenum
#define glStencilOpSeparate_FORMAT FORMAT_void_GLenum_GLenum_GLenum_GLenum
#define glTexImage2D_INDEX 106
#define glTexImage2D_RETURN void
#define glTexImage2D_ARG_NAMES target, level, internalformat, width, height, border, format, type, pixels
#define glTexImage2D_ARG_EXPAND GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels
#define glTexImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__
#define glTexImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__
#define glTexImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__
#define glTexParameterf_INDEX 107
#define glTexParameterf_RETURN void
#define glTexParameterf_ARG_NAMES target, pname, param
#define glTexParameterf_ARG_EXPAND GLenum target, GLenum pname, GLfloat param
#define glTexParameterf_PACKED PACKED_void_GLenum_GLenum_GLfloat
#define glTexParameterf_INDEXED INDEXED_void_GLenum_GLenum_GLfloat
#define glTexParameterf_FORMAT FORMAT_void_GLenum_GLenum_GLfloat
#define glTexParameterfv_INDEX 108
#define glTexParameterfv_RETURN void
#define glTexParameterfv_ARG_NAMES target, pname, params
#define glTexParameterfv_ARG_EXPAND GLenum target, GLenum pname, const GLfloat * params
#define glTexParameterfv_PACKED PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define glTexParameterfv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define glTexParameterfv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__
#define glTexParameteri_INDEX 109
#define glTexParameteri_RETURN void
#define glTexParameteri_ARG_NAMES target, pname, param
#define glTexParameteri_ARG_EXPAND GLenum target, GLenum pname, GLint param
#define glTexParameteri_PACKED PACKED_void_GLenum_GLenum_GLint
#define glTexParameteri_INDEXED INDEXED_void_GLenum_GLenum_GLint
#define glTexParameteri_FORMAT FORMAT_void_GLenum_GLenum_GLint
#define glTexParameteriv_INDEX 110
#define glTexParameteriv_RETURN void
#define glTexParameteriv_ARG_NAMES target, pname, params
#define glTexParameteriv_ARG_EXPAND GLenum target, GLenum pname, const GLint * params
#define glTexParameteriv_PACKED PACKED_void_GLenum_GLenum_const_GLint___GENPT__
#define glTexParameteriv_INDEXED INDEXED_void_GLenum_GLenum_const_GLint___GENPT__
#define glTexParameteriv_FORMAT FORMAT_void_GLenum_GLenum_const_GLint___GENPT__
#define glTexSubImage2D_INDEX 111
#define glTexSubImage2D_RETURN void
#define glTexSubImage2D_ARG_NAMES target, level, xoffset, yoffset, width, height, format, type, pixels
#define glTexSubImage2D_ARG_EXPAND GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels
#define glTexSubImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__
#define glTexSubImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__
#define glTexSubImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__
#define glUniform1f_INDEX 112
#define glUniform1f_RETURN void
#define glUniform1f_ARG_NAMES location, v0
#define glUniform1f_ARG_EXPAND GLint location, GLfloat v0
#define glUniform1f_PACKED PACKED_void_GLint_GLfloat
#define glUniform1f_INDEXED INDEXED_void_GLint_GLfloat
#define glUniform1f_FORMAT FORMAT_void_GLint_GLfloat
#define glUniform1fv_INDEX 113
#define glUniform1fv_RETURN void
#define glUniform1fv_ARG_NAMES location, count, value
#define glUniform1fv_ARG_EXPAND GLint location, GLsizei count, const GLfloat * value
#define glUniform1fv_PACKED PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform1fv_INDEXED INDEXED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform1fv_FORMAT FORMAT_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform1i_INDEX 114
#define glUniform1i_RETURN void
#define glUniform1i_ARG_NAMES location, v0
#define glUniform1i_ARG_EXPAND GLint location, GLint v0
#define glUniform1i_PACKED PACKED_void_GLint_GLint
#define glUniform1i_INDEXED INDEXED_void_GLint_GLint
#define glUniform1i_FORMAT FORMAT_void_GLint_GLint
#define glUniform1iv_INDEX 115
#define glUniform1iv_RETURN void
#define glUniform1iv_ARG_NAMES location, count, value
#define glUniform1iv_ARG_EXPAND GLint location, GLsizei count, const GLint * value
#define glUniform1iv_PACKED PACKED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform1iv_INDEXED INDEXED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform1iv_FORMAT FORMAT_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform2f_INDEX 116
#define glUniform2f_RETURN void
#define glUniform2f_ARG_NAMES location, v0, v1
#define glUniform2f_ARG_EXPAND GLint location, GLfloat v0, GLfloat v1
#define glUniform2f_PACKED PACKED_void_GLint_GLfloat_GLfloat
#define glUniform2f_INDEXED INDEXED_void_GLint_GLfloat_GLfloat
#define glUniform2f_FORMAT FORMAT_void_GLint_GLfloat_GLfloat
#define glUniform2fv_INDEX 117
#define glUniform2fv_RETURN void
#define glUniform2fv_ARG_NAMES location, count, value
#define glUniform2fv_ARG_EXPAND GLint location, GLsizei count, const GLfloat * value
#define glUniform2fv_PACKED PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform2fv_INDEXED INDEXED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform2fv_FORMAT FORMAT_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform2i_INDEX 118
#define glUniform2i_RETURN void
#define glUniform2i_ARG_NAMES location, v0, v1
#define glUniform2i_ARG_EXPAND GLint location, GLint v0, GLint v1
#define glUniform2i_PACKED PACKED_void_GLint_GLint_GLint
#define glUniform2i_INDEXED INDEXED_void_GLint_GLint_GLint
#define glUniform2i_FORMAT FORMAT_void_GLint_GLint_GLint
#define glUniform2iv_INDEX 119
#define glUniform2iv_RETURN void
#define glUniform2iv_ARG_NAMES location, count, value
#define glUniform2iv_ARG_EXPAND GLint location, GLsizei count, const GLint * value
#define glUniform2iv_PACKED PACKED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform2iv_INDEXED INDEXED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform2iv_FORMAT FORMAT_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform3f_INDEX 120
#define glUniform3f_RETURN void
#define glUniform3f_ARG_NAMES location, v0, v1, v2
#define glUniform3f_ARG_EXPAND GLint location, GLfloat v0, GLfloat v1, GLfloat v2
#define glUniform3f_PACKED PACKED_void_GLint_GLfloat_GLfloat_GLfloat
#define glUniform3f_INDEXED INDEXED_void_GLint_GLfloat_GLfloat_GLfloat
#define glUniform3f_FORMAT FORMAT_void_GLint_GLfloat_GLfloat_GLfloat
#define glUniform3fv_INDEX 121
#define glUniform3fv_RETURN void
#define glUniform3fv_ARG_NAMES location, count, value
#define glUniform3fv_ARG_EXPAND GLint location, GLsizei count, const GLfloat * value
#define glUniform3fv_PACKED PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform3fv_INDEXED INDEXED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform3fv_FORMAT FORMAT_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform3i_INDEX 122
#define glUniform3i_RETURN void
#define glUniform3i_ARG_NAMES location, v0, v1, v2
#define glUniform3i_ARG_EXPAND GLint location, GLint v0, GLint v1, GLint v2
#define glUniform3i_PACKED PACKED_void_GLint_GLint_GLint_GLint
#define glUniform3i_INDEXED INDEXED_void_GLint_GLint_GLint_GLint
#define glUniform3i_FORMAT FORMAT_void_GLint_GLint_GLint_GLint
#define glUniform3iv_INDEX 123
#define glUniform3iv_RETURN void
#define glUniform3iv_ARG_NAMES location, count, value
#define glUniform3iv_ARG_EXPAND GLint location, GLsizei count, const GLint * value
#define glUniform3iv_PACKED PACKED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform3iv_INDEXED INDEXED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform3iv_FORMAT FORMAT_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform4f_INDEX 124
#define glUniform4f_RETURN void
#define glUniform4f_ARG_NAMES location, v0, v1, v2, v3
#define glUniform4f_ARG_EXPAND GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3
#define glUniform4f_PACKED PACKED_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat
#define glUniform4f_INDEXED INDEXED_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat
#define glUniform4f_FORMAT FORMAT_void_GLint_GLfloat_GLfloat_GLfloat_GLfloat
#define glUniform4fv_INDEX 125
#define glUniform4fv_RETURN void
#define glUniform4fv_ARG_NAMES location, count, value
#define glUniform4fv_ARG_EXPAND GLint location, GLsizei count, const GLfloat * value
#define glUniform4fv_PACKED PACKED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform4fv_INDEXED INDEXED_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform4fv_FORMAT FORMAT_void_GLint_GLsizei_const_GLfloat___GENPT__
#define glUniform4i_INDEX 126
#define glUniform4i_RETURN void
#define glUniform4i_ARG_NAMES location, v0, v1, v2, v3
#define glUniform4i_ARG_EXPAND GLint location, GLint v0, GLint v1, GLint v2, GLint v3
#define glUniform4i_PACKED PACKED_void_GLint_GLint_GLint_GLint_GLint
#define glUniform4i_INDEXED INDEXED_void_GLint_GLint_GLint_GLint_GLint
#define glUniform4i_FORMAT FORMAT_void_GLint_GLint_GLint_GLint_GLint
#define glUniform4iv_INDEX 127
#define glUniform4iv_RETURN void
#define glUniform4iv_ARG_NAMES location, count, value
#define glUniform4iv_ARG_EXPAND GLint location, GLsizei count, const GLint * value
#define glUniform4iv_PACKED PACKED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform4iv_INDEXED INDEXED_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniform4iv_FORMAT FORMAT_void_GLint_GLsizei_const_GLint___GENPT__
#define glUniformMatrix2fv_INDEX 128
#define glUniformMatrix2fv_RETURN void
#define glUniformMatrix2fv_ARG_NAMES location, count, transpose, value
#define glUniformMatrix2fv_ARG_EXPAND GLint location, GLsizei count, GLboolean transpose, const GLfloat * value
#define glUniformMatrix2fv_PACKED PACKED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix2fv_INDEXED INDEXED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix2fv_FORMAT FORMAT_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix3fv_INDEX 129
#define glUniformMatrix3fv_RETURN void
#define glUniformMatrix3fv_ARG_NAMES location, count, transpose, value
#define glUniformMatrix3fv_ARG_EXPAND GLint location, GLsizei count, GLboolean transpose, const GLfloat * value
#define glUniformMatrix3fv_PACKED PACKED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix3fv_INDEXED INDEXED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix3fv_FORMAT FORMAT_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix4fv_INDEX 130
#define glUniformMatrix4fv_RETURN void
#define glUniformMatrix4fv_ARG_NAMES location, count, transpose, value
#define glUniformMatrix4fv_ARG_EXPAND GLint location, GLsizei count, GLboolean transpose, const GLfloat * value
#define glUniformMatrix4fv_PACKED PACKED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix4fv_INDEXED INDEXED_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUniformMatrix4fv_FORMAT FORMAT_void_GLint_GLsizei_GLboolean_const_GLfloat___GENPT__
#define glUseProgram_INDEX 131
#define glUseProgram_RETURN void
#define glUseProgram_ARG_NAMES program
#define glUseProgram_ARG_EXPAND GLuint program
#define glUseProgram_PACKED PACKED_void_GLuint
#define glUseProgram_INDEXED INDEXED_void_GLuint
#define glUseProgram_FORMAT FORMAT_void_GLuint
#define glValidateProgram_INDEX 132
#define glValidateProgram_RETURN void
#define glValidateProgram_ARG_NAMES program
#define glValidateProgram_ARG_EXPAND GLuint program
#define glValidateProgram_PACKED PACKED_void_GLuint
#define glValidateProgram_INDEXED INDEXED_void_GLuint
#define glValidateProgram_FORMAT FORMAT_void_GLuint
#define glVertexAttrib1f_INDEX 133
#define glVertexAttrib1f_RETURN void
#define glVertexAttrib1f_ARG_NAMES index, x
#define glVertexAttrib1f_ARG_EXPAND GLuint index, GLfloat x
#define glVertexAttrib1f_PACKED PACKED_void_GLuint_GLfloat
#define glVertexAttrib1f_INDEXED INDEXED_void_GLuint_GLfloat
#define glVertexAttrib1f_FORMAT FORMAT_void_GLuint_GLfloat
#define glVertexAttrib1fv_INDEX 134
#define glVertexAttrib1fv_RETURN void
#define glVertexAttrib1fv_ARG_NAMES index, v
#define glVertexAttrib1fv_ARG_EXPAND GLuint index, const GLfloat * v
#define glVertexAttrib1fv_PACKED PACKED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib1fv_INDEXED INDEXED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib1fv_FORMAT FORMAT_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib2f_INDEX 135
#define glVertexAttrib2f_RETURN void
#define glVertexAttrib2f_ARG_NAMES index, x, y
#define glVertexAttrib2f_ARG_EXPAND GLuint index, GLfloat x, GLfloat y
#define glVertexAttrib2f_PACKED PACKED_void_GLuint_GLfloat_GLfloat
#define glVertexAttrib2f_INDEXED INDEXED_void_GLuint_GLfloat_GLfloat
#define glVertexAttrib2f_FORMAT FORMAT_void_GLuint_GLfloat_GLfloat
#define glVertexAttrib2fv_INDEX 136
#define glVertexAttrib2fv_RETURN void
#define glVertexAttrib2fv_ARG_NAMES index, v
#define glVertexAttrib2fv_ARG_EXPAND GLuint index, const GLfloat * v
#define glVertexAttrib2fv_PACKED PACKED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib2fv_INDEXED INDEXED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib2fv_FORMAT FORMAT_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib3f_INDEX 137
#define glVertexAttrib3f_RETURN void
#define glVertexAttrib3f_ARG_NAMES index, x, y, z
#define glVertexAttrib3f_ARG_EXPAND GLuint index, GLfloat x, GLfloat y, GLfloat z
#define glVertexAttrib3f_PACKED PACKED_void_GLuint_GLfloat_GLfloat_GLfloat
#define glVertexAttrib3f_INDEXED INDEXED_void_GLuint_GLfloat_GLfloat_GLfloat
#define glVertexAttrib3f_FORMAT FORMAT_void_GLuint_GLfloat_GLfloat_GLfloat
#define glVertexAttrib3fv_INDEX 138
#define glVertexAttrib3fv_RETURN void
#define glVertexAttrib3fv_ARG_NAMES index, v
#define glVertexAttrib3fv_ARG_EXPAND GLuint index, const GLfloat * v
#define glVertexAttrib3fv_PACKED PACKED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib3fv_INDEXED INDEXED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib3fv_FORMAT FORMAT_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib4f_INDEX 139
#define glVertexAttrib4f_RETURN void
#define glVertexAttrib4f_ARG_NAMES index, x, y, z, w
#define glVertexAttrib4f_ARG_EXPAND GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w
#define glVertexAttrib4f_PACKED PACKED_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat
#define glVertexAttrib4f_INDEXED INDEXED_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat
#define glVertexAttrib4f_FORMAT FORMAT_void_GLuint_GLfloat_GLfloat_GLfloat_GLfloat
#define glVertexAttrib4fv_INDEX 140
#define glVertexAttrib4fv_RETURN void
#define glVertexAttrib4fv_ARG_NAMES index, v
#define glVertexAttrib4fv_ARG_EXPAND GLuint index, const GLfloat * v
#define glVertexAttrib4fv_PACKED PACKED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib4fv_INDEXED INDEXED_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttrib4fv_FORMAT FORMAT_void_GLuint_const_GLfloat___GENPT__
#define glVertexAttribPointer_INDEX 141
#define glVertexAttribPointer_RETURN void
#define glVertexAttribPointer_ARG_NAMES index, size, type, normalized, stride, pointer
#define glVertexAttribPointer_ARG_EXPAND GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer
#define glVertexAttribPointer_PACKED PACKED_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__
#define glVertexAttribPointer_INDEXED INDEXED_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__
#define glVertexAttribPointer_FORMAT FORMAT_void_GLuint_GLint_GLenum_GLboolean_GLsizei_const_GLvoid___GENPT__
#define glViewport_INDEX 142
#define glViewport_RETURN void
#define glViewport_ARG_NAMES x, y, width, height
#define glViewport_ARG_EXPAND GLint x, GLint y, GLsizei width, GLsizei height
#define glViewport_PACKED PACKED_void_GLint_GLint_GLsizei_GLsizei
#define glViewport_INDEXED INDEXED_void_GLint_GLint_GLsizei_GLsizei
#define glViewport_FORMAT FORMAT_void_GLint_GLint_GLsizei_GLsizei

void glActiveTexture(glActiveTexture_ARG_EXPAND);
typedef void (*glActiveTexture_PTR)(glActiveTexture_ARG_EXPAND);
void glAttachShader(glAttachShader_ARG_EXPAND);
typedef void (*glAttachShader_PTR)(glAttachShader_ARG_EXPAND);
void glBindAttribLocation(glBindAttribLocation_ARG_EXPAND);
typedef void (*glBindAttribLocation_PTR)(glBindAttribLocation_ARG_EXPAND);
void glBindBuffer(glBindBuffer_ARG_EXPAND);
typedef void (*glBindBuffer_PTR)(glBindBuffer_ARG_EXPAND);
void glBindFramebuffer(glBindFramebuffer_ARG_EXPAND);
typedef void (*glBindFramebuffer_PTR)(glBindFramebuffer_ARG_EXPAND);
void glBindRenderbuffer(glBindRenderbuffer_ARG_EXPAND);
typedef void (*glBindRenderbuffer_PTR)(glBindRenderbuffer_ARG_EXPAND);
void glBindTexture(glBindTexture_ARG_EXPAND);
typedef void (*glBindTexture_PTR)(glBindTexture_ARG_EXPAND);
void glBlendColor(glBlendColor_ARG_EXPAND);
typedef void (*glBlendColor_PTR)(glBlendColor_ARG_EXPAND);
void glBlendEquation(glBlendEquation_ARG_EXPAND);
typedef void (*glBlendEquation_PTR)(glBlendEquation_ARG_EXPAND);
void glBlendEquationSeparate(glBlendEquationSeparate_ARG_EXPAND);
typedef void (*glBlendEquationSeparate_PTR)(glBlendEquationSeparate_ARG_EXPAND);
void glBlendFunc(glBlendFunc_ARG_EXPAND);
typedef void (*glBlendFunc_PTR)(glBlendFunc_ARG_EXPAND);
void glBlendFuncSeparate(glBlendFuncSeparate_ARG_EXPAND);
typedef void (*glBlendFuncSeparate_PTR)(glBlendFuncSeparate_ARG_EXPAND);
void glBufferData(glBufferData_ARG_EXPAND);
typedef void (*glBufferData_PTR)(glBufferData_ARG_EXPAND);
void glBufferSubData(glBufferSubData_ARG_EXPAND);
typedef void (*glBufferSubData_PTR)(glBufferSubData_ARG_EXPAND);
GLenum glCheckFramebufferStatus(glCheckFramebufferStatus_ARG_EXPAND);
typedef GLenum (*glCheckFramebufferStatus_PTR)(glCheckFramebufferStatus_ARG_EXPAND);
void glClear(glClear_ARG_EXPAND);
typedef void (*glClear_PTR)(glClear_ARG_EXPAND);
void glClearColor(glClearColor_ARG_EXPAND);
typedef void (*glClearColor_PTR)(glClearColor_ARG_EXPAND);
void glClearDepthf(glClearDepthf_ARG_EXPAND);
typedef void (*glClearDepthf_PTR)(glClearDepthf_ARG_EXPAND);
void glClearStencil(glClearStencil_ARG_EXPAND);
typedef void (*glClearStencil_PTR)(glClearStencil_ARG_EXPAND);
void glColorMask(glColorMask_ARG_EXPAND);
typedef void (*glColorMask_PTR)(glColorMask_ARG_EXPAND);
void glCompileShader(glCompileShader_ARG_EXPAND);
typedef void (*glCompileShader_PTR)(glCompileShader_ARG_EXPAND);
void glCompressedTexImage2D(glCompressedTexImage2D_ARG_EXPAND);
typedef void (*glCompressedTexImage2D_PTR)(glCompressedTexImage2D_ARG_EXPAND);
void glCompressedTexSubImage2D(glCompressedTexSubImage2D_ARG_EXPAND);
typedef void (*glCompressedTexSubImage2D_PTR)(glCompressedTexSubImage2D_ARG_EXPAND);
void glCopyTexImage2D(glCopyTexImage2D_ARG_EXPAND);
typedef void (*glCopyTexImage2D_PTR)(glCopyTexImage2D_ARG_EXPAND);
void glCopyTexSubImage2D(glCopyTexSubImage2D_ARG_EXPAND);
typedef void (*glCopyTexSubImage2D_PTR)(glCopyTexSubImage2D_ARG_EXPAND);
GLuint glCreateProgram(glCreateProgram_ARG_EXPAND);
typedef GLuint (*glCreateProgram_PTR)(glCreateProgram_ARG_EXPAND);
GLuint glCreateShader(glCreateShader_ARG_EXPAND);
typedef GLuint (*glCreateShader_PTR)(glCreateShader_ARG_EXPAND);
void glCullFace(glCullFace_ARG_EXPAND);
typedef void (*glCullFace_PTR)(glCullFace_ARG_EXPAND);
void glDeleteBuffers(glDeleteBuffers_ARG_EXPAND);
typedef void (*glDeleteBuffers_PTR)(glDeleteBuffers_ARG_EXPAND);
void glDeleteFramebuffers(glDeleteFramebuffers_ARG_EXPAND);
typedef void (*glDeleteFramebuffers_PTR)(glDeleteFramebuffers_ARG_EXPAND);
void glDeleteProgram(glDeleteProgram_ARG_EXPAND);
typedef void (*glDeleteProgram_PTR)(glDeleteProgram_ARG_EXPAND);
void glDeleteRenderbuffers(glDeleteRenderbuffers_ARG_EXPAND);
typedef void (*glDeleteRenderbuffers_PTR)(glDeleteRenderbuffers_ARG_EXPAND);
void glDeleteShader(glDeleteShader_ARG_EXPAND);
typedef void (*glDeleteShader_PTR)(glDeleteShader_ARG_EXPAND);
void glDeleteTextures(glDeleteTextures_ARG_EXPAND);
typedef void (*glDeleteTextures_PTR)(glDeleteTextures_ARG_EXPAND);
void glDepthFunc(glDepthFunc_ARG_EXPAND);
typedef void (*glDepthFunc_PTR)(glDepthFunc_ARG_EXPAND);
void glDepthMask(glDepthMask_ARG_EXPAND);
typedef void (*glDepthMask_PTR)(glDepthMask_ARG_EXPAND);
void glDepthRangef(glDepthRangef_ARG_EXPAND);
typedef void (*glDepthRangef_PTR)(glDepthRangef_ARG_EXPAND);
void glDetachShader(glDetachShader_ARG_EXPAND);
typedef void (*glDetachShader_PTR)(glDetachShader_ARG_EXPAND);
void glDisable(glDisable_ARG_EXPAND);
typedef void (*glDisable_PTR)(glDisable_ARG_EXPAND);
void glDisableVertexAttribArray(glDisableVertexAttribArray_ARG_EXPAND);
typedef void (*glDisableVertexAttribArray_PTR)(glDisableVertexAttribArray_ARG_EXPAND);
void glDrawArrays(glDrawArrays_ARG_EXPAND);
typedef void (*glDrawArrays_PTR)(glDrawArrays_ARG_EXPAND);
void glDrawElements(glDrawElements_ARG_EXPAND);
typedef void (*glDrawElements_PTR)(glDrawElements_ARG_EXPAND);
void glEnable(glEnable_ARG_EXPAND);
typedef void (*glEnable_PTR)(glEnable_ARG_EXPAND);
void glEnableVertexAttribArray(glEnableVertexAttribArray_ARG_EXPAND);
typedef void (*glEnableVertexAttribArray_PTR)(glEnableVertexAttribArray_ARG_EXPAND);
void glFinish(glFinish_ARG_EXPAND);
typedef void (*glFinish_PTR)(glFinish_ARG_EXPAND);
void glFlush(glFlush_ARG_EXPAND);
typedef void (*glFlush_PTR)(glFlush_ARG_EXPAND);
void glFramebufferRenderbuffer(glFramebufferRenderbuffer_ARG_EXPAND);
typedef void (*glFramebufferRenderbuffer_PTR)(glFramebufferRenderbuffer_ARG_EXPAND);
void glFramebufferTexture2D(glFramebufferTexture2D_ARG_EXPAND);
typedef void (*glFramebufferTexture2D_PTR)(glFramebufferTexture2D_ARG_EXPAND);
void glFrontFace(glFrontFace_ARG_EXPAND);
typedef void (*glFrontFace_PTR)(glFrontFace_ARG_EXPAND);
void glGenBuffers(glGenBuffers_ARG_EXPAND);
typedef void (*glGenBuffers_PTR)(glGenBuffers_ARG_EXPAND);
void glGenFramebuffers(glGenFramebuffers_ARG_EXPAND);
typedef void (*glGenFramebuffers_PTR)(glGenFramebuffers_ARG_EXPAND);
void glGenRenderbuffers(glGenRenderbuffers_ARG_EXPAND);
typedef void (*glGenRenderbuffers_PTR)(glGenRenderbuffers_ARG_EXPAND);
void glGenTextures(glGenTextures_ARG_EXPAND);
typedef void (*glGenTextures_PTR)(glGenTextures_ARG_EXPAND);
void glGenerateMipmap(glGenerateMipmap_ARG_EXPAND);
typedef void (*glGenerateMipmap_PTR)(glGenerateMipmap_ARG_EXPAND);
void glGetActiveAttrib(glGetActiveAttrib_ARG_EXPAND);
typedef void (*glGetActiveAttrib_PTR)(glGetActiveAttrib_ARG_EXPAND);
void glGetActiveUniform(glGetActiveUniform_ARG_EXPAND);
typedef void (*glGetActiveUniform_PTR)(glGetActiveUniform_ARG_EXPAND);
void glGetAttachedShaders(glGetAttachedShaders_ARG_EXPAND);
typedef void (*glGetAttachedShaders_PTR)(glGetAttachedShaders_ARG_EXPAND);
GLint glGetAttribLocation(glGetAttribLocation_ARG_EXPAND);
typedef GLint (*glGetAttribLocation_PTR)(glGetAttribLocation_ARG_EXPAND);
void glGetBooleanv(glGetBooleanv_ARG_EXPAND);
typedef void (*glGetBooleanv_PTR)(glGetBooleanv_ARG_EXPAND);
void glGetBufferParameteriv(glGetBufferParameteriv_ARG_EXPAND);
typedef void (*glGetBufferParameteriv_PTR)(glGetBufferParameteriv_ARG_EXPAND);
GLenum glGetError(glGetError_ARG_EXPAND);
typedef GLenum (*glGetError_PTR)(glGetError_ARG_EXPAND);
void glGetFloatv(glGetFloatv_ARG_EXPAND);
typedef void (*glGetFloatv_PTR)(glGetFloatv_ARG_EXPAND);
void glGetFramebufferAttachmentParameteriv(glGetFramebufferAttachmentParameteriv_ARG_EXPAND);
typedef void (*glGetFramebufferAttachmentParameteriv_PTR)(glGetFramebufferAttachmentParameteriv_ARG_EXPAND);
void glGetIntegerv(glGetIntegerv_ARG_EXPAND);
typedef void (*glGetIntegerv_PTR)(glGetIntegerv_ARG_EXPAND);
void glGetProgramInfoLog(glGetProgramInfoLog_ARG_EXPAND);
typedef void (*glGetProgramInfoLog_PTR)(glGetProgramInfoLog_ARG_EXPAND);
void glGetProgramiv(glGetProgramiv_ARG_EXPAND);
typedef void (*glGetProgramiv_PTR)(glGetProgramiv_ARG_EXPAND);
void glGetRenderbufferParameteriv(glGetRenderbufferParameteriv_ARG_EXPAND);
typedef void (*glGetRenderbufferParameteriv_PTR)(glGetRenderbufferParameteriv_ARG_EXPAND);
void glGetShaderInfoLog(glGetShaderInfoLog_ARG_EXPAND);
typedef void (*glGetShaderInfoLog_PTR)(glGetShaderInfoLog_ARG_EXPAND);
void glGetShaderPrecisionFormat(glGetShaderPrecisionFormat_ARG_EXPAND);
typedef void (*glGetShaderPrecisionFormat_PTR)(glGetShaderPrecisionFormat_ARG_EXPAND);
void glGetShaderSource(glGetShaderSource_ARG_EXPAND);
typedef void (*glGetShaderSource_PTR)(glGetShaderSource_ARG_EXPAND);
void glGetShaderiv(glGetShaderiv_ARG_EXPAND);
typedef void (*glGetShaderiv_PTR)(glGetShaderiv_ARG_EXPAND);
const GLubyte * glGetString(glGetString_ARG_EXPAND);
typedef const GLubyte * (*glGetString_PTR)(glGetString_ARG_EXPAND);
void glGetTexParameterfv(glGetTexParameterfv_ARG_EXPAND);
typedef void (*glGetTexParameterfv_PTR)(glGetTexParameterfv_ARG_EXPAND);
void glGetTexParameteriv(glGetTexParameteriv_ARG_EXPAND);
typedef void (*glGetTexParameteriv_PTR)(glGetTexParameteriv_ARG_EXPAND);
GLint glGetUniformLocation(glGetUniformLocation_ARG_EXPAND);
typedef GLint (*glGetUniformLocation_PTR)(glGetUniformLocation_ARG_EXPAND);
void glGetUniformfv(glGetUniformfv_ARG_EXPAND);
typedef void (*glGetUniformfv_PTR)(glGetUniformfv_ARG_EXPAND);
void glGetUniformiv(glGetUniformiv_ARG_EXPAND);
typedef void (*glGetUniformiv_PTR)(glGetUniformiv_ARG_EXPAND);
void glGetVertexAttribPointerv(glGetVertexAttribPointerv_ARG_EXPAND);
typedef void (*glGetVertexAttribPointerv_PTR)(glGetVertexAttribPointerv_ARG_EXPAND);
void glGetVertexAttribfv(glGetVertexAttribfv_ARG_EXPAND);
typedef void (*glGetVertexAttribfv_PTR)(glGetVertexAttribfv_ARG_EXPAND);
void glGetVertexAttribiv(glGetVertexAttribiv_ARG_EXPAND);
typedef void (*glGetVertexAttribiv_PTR)(glGetVertexAttribiv_ARG_EXPAND);
void glHint(glHint_ARG_EXPAND);
typedef void (*glHint_PTR)(glHint_ARG_EXPAND);
GLboolean glIsBuffer(glIsBuffer_ARG_EXPAND);
typedef GLboolean (*glIsBuffer_PTR)(glIsBuffer_ARG_EXPAND);
GLboolean glIsEnabled(glIsEnabled_ARG_EXPAND);
typedef GLboolean (*glIsEnabled_PTR)(glIsEnabled_ARG_EXPAND);
GLboolean glIsFramebuffer(glIsFramebuffer_ARG_EXPAND);
typedef GLboolean (*glIsFramebuffer_PTR)(glIsFramebuffer_ARG_EXPAND);
GLboolean glIsProgram(glIsProgram_ARG_EXPAND);
typedef GLboolean (*glIsProgram_PTR)(glIsProgram_ARG_EXPAND);
GLboolean glIsRenderbuffer(glIsRenderbuffer_ARG_EXPAND);
typedef GLboolean (*glIsRenderbuffer_PTR)(glIsRenderbuffer_ARG_EXPAND);
GLboolean glIsShader(glIsShader_ARG_EXPAND);
typedef GLboolean (*glIsShader_PTR)(glIsShader_ARG_EXPAND);
GLboolean glIsTexture(glIsTexture_ARG_EXPAND);
typedef GLboolean (*glIsTexture_PTR)(glIsTexture_ARG_EXPAND);
void glLineWidth(glLineWidth_ARG_EXPAND);
typedef void (*glLineWidth_PTR)(glLineWidth_ARG_EXPAND);
void glLinkProgram(glLinkProgram_ARG_EXPAND);
typedef void (*glLinkProgram_PTR)(glLinkProgram_ARG_EXPAND);
void glPixelStorei(glPixelStorei_ARG_EXPAND);
typedef void (*glPixelStorei_PTR)(glPixelStorei_ARG_EXPAND);
void glPolygonOffset(glPolygonOffset_ARG_EXPAND);
typedef void (*glPolygonOffset_PTR)(glPolygonOffset_ARG_EXPAND);
void glReadPixels(glReadPixels_ARG_EXPAND);
typedef void (*glReadPixels_PTR)(glReadPixels_ARG_EXPAND);
void glReleaseShaderCompiler(glReleaseShaderCompiler_ARG_EXPAND);
typedef void (*glReleaseShaderCompiler_PTR)(glReleaseShaderCompiler_ARG_EXPAND);
void glRenderbufferStorage(glRenderbufferStorage_ARG_EXPAND);
typedef void (*glRenderbufferStorage_PTR)(glRenderbufferStorage_ARG_EXPAND);
void glSampleCoverage(glSampleCoverage_ARG_EXPAND);
typedef void (*glSampleCoverage_PTR)(glSampleCoverage_ARG_EXPAND);
void glScissor(glScissor_ARG_EXPAND);
typedef void (*glScissor_PTR)(glScissor_ARG_EXPAND);
void glShaderBinary(glShaderBinary_ARG_EXPAND);
typedef void (*glShaderBinary_PTR)(glShaderBinary_ARG_EXPAND);
void glShaderSource(glShaderSource_ARG_EXPAND);
typedef void (*glShaderSource_PTR)(glShaderSource_ARG_EXPAND);
void glStencilFunc(glStencilFunc_ARG_EXPAND);
typedef void (*glStencilFunc_PTR)(glStencilFunc_ARG_EXPAND);
void glStencilFuncSeparate(glStencilFuncSeparate_ARG_EXPAND);
typedef void (*glStencilFuncSeparate_PTR)(glStencilFuncSeparate_ARG_EXPAND);
void glStencilMask(glStencilMask_ARG_EXPAND);
typedef void (*glStencilMask_PTR)(glStencilMask_ARG_EXPAND);
void glStencilMaskSeparate(glStencilMaskSeparate_ARG_EXPAND);
typedef void (*glStencilMaskSeparate_PTR)(glStencilMaskSeparate_ARG_EXPAND);
void glStencilOp(glStencilOp_ARG_EXPAND);
typedef void (*glStencilOp_PTR)(glStencilOp_ARG_EXPAND);
void glStencilOpSeparate(glStencilOpSeparate_ARG_EXPAND);
typedef void (*glStencilOpSeparate_PTR)(glStencilOpSeparate_ARG_EXPAND);
void glTexImage2D(glTexImage2D_ARG_EXPAND);
typedef void (*glTexImage2D_PTR)(glTexImage2D_ARG_EXPAND);
void glTexParameterf(glTexParameterf_ARG_EXPAND);
typedef void (*glTexParameterf_PTR)(glTexParameterf_ARG_EXPAND);
void glTexParameterfv(glTexParameterfv_ARG_EXPAND);
typedef void (*glTexParameterfv_PTR)(glTexParameterfv_ARG_EXPAND);
void glTexParameteri(glTexParameteri_ARG_EXPAND);
typedef void (*glTexParameteri_PTR)(glTexParameteri_ARG_EXPAND);
void glTexParameteriv(glTexParameteriv_ARG_EXPAND);
typedef void (*glTexParameteriv_PTR)(glTexParameteriv_ARG_EXPAND);
void glTexSubImage2D(glTexSubImage2D_ARG_EXPAND);
typedef void (*glTexSubImage2D_PTR)(glTexSubImage2D_ARG_EXPAND);
void glUniform1f(glUniform1f_ARG_EXPAND);
typedef void (*glUniform1f_PTR)(glUniform1f_ARG_EXPAND);
void glUniform1fv(glUniform1fv_ARG_EXPAND);
typedef void (*glUniform1fv_PTR)(glUniform1fv_ARG_EXPAND);
void glUniform1i(glUniform1i_ARG_EXPAND);
typedef void (*glUniform1i_PTR)(glUniform1i_ARG_EXPAND);
void glUniform1iv(glUniform1iv_ARG_EXPAND);
typedef void (*glUniform1iv_PTR)(glUniform1iv_ARG_EXPAND);
void glUniform2f(glUniform2f_ARG_EXPAND);
typedef void (*glUniform2f_PTR)(glUniform2f_ARG_EXPAND);
void glUniform2fv(glUniform2fv_ARG_EXPAND);
typedef void (*glUniform2fv_PTR)(glUniform2fv_ARG_EXPAND);
void glUniform2i(glUniform2i_ARG_EXPAND);
typedef void (*glUniform2i_PTR)(glUniform2i_ARG_EXPAND);
void glUniform2iv(glUniform2iv_ARG_EXPAND);
typedef void (*glUniform2iv_PTR)(glUniform2iv_ARG_EXPAND);
void glUniform3f(glUniform3f_ARG_EXPAND);
typedef void (*glUniform3f_PTR)(glUniform3f_ARG_EXPAND);
void glUniform3fv(glUniform3fv_ARG_EXPAND);
typedef void (*glUniform3fv_PTR)(glUniform3fv_ARG_EXPAND);
void glUniform3i(glUniform3i_ARG_EXPAND);
typedef void (*glUniform3i_PTR)(glUniform3i_ARG_EXPAND);
void glUniform3iv(glUniform3iv_ARG_EXPAND);
typedef void (*glUniform3iv_PTR)(glUniform3iv_ARG_EXPAND);
void glUniform4f(glUniform4f_ARG_EXPAND);
typedef void (*glUniform4f_PTR)(glUniform4f_ARG_EXPAND);
void glUniform4fv(glUniform4fv_ARG_EXPAND);
typedef void (*glUniform4fv_PTR)(glUniform4fv_ARG_EXPAND);
void glUniform4i(glUniform4i_ARG_EXPAND);
typedef void (*glUniform4i_PTR)(glUniform4i_ARG_EXPAND);
void glUniform4iv(glUniform4iv_ARG_EXPAND);
typedef void (*glUniform4iv_PTR)(glUniform4iv_ARG_EXPAND);
void glUniformMatrix2fv(glUniformMatrix2fv_ARG_EXPAND);
typedef void (*glUniformMatrix2fv_PTR)(glUniformMatrix2fv_ARG_EXPAND);
void glUniformMatrix3fv(glUniformMatrix3fv_ARG_EXPAND);
typedef void (*glUniformMatrix3fv_PTR)(glUniformMatrix3fv_ARG_EXPAND);
void glUniformMatrix4fv(glUniformMatrix4fv_ARG_EXPAND);
typedef void (*glUniformMatrix4fv_PTR)(glUniformMatrix4fv_ARG_EXPAND);
void glUseProgram(glUseProgram_ARG_EXPAND);
typedef void (*glUseProgram_PTR)(glUseProgram_ARG_EXPAND);
void glValidateProgram(glValidateProgram_ARG_EXPAND);
typedef void (*glValidateProgram_PTR)(glValidateProgram_ARG_EXPAND);
void glVertexAttrib1f(glVertexAttrib1f_ARG_EXPAND);
typedef void (*glVertexAttrib1f_PTR)(glVertexAttrib1f_ARG_EXPAND);
void glVertexAttrib1fv(glVertexAttrib1fv_ARG_EXPAND);
typedef void (*glVertexAttrib1fv_PTR)(glVertexAttrib1fv_ARG_EXPAND);
void glVertexAttrib2f(glVertexAttrib2f_ARG_EXPAND);
typedef void (*glVertexAttrib2f_PTR)(glVertexAttrib2f_ARG_EXPAND);
void glVertexAttrib2fv(glVertexAttrib2fv_ARG_EXPAND);
typedef void (*glVertexAttrib2fv_PTR)(glVertexAttrib2fv_ARG_EXPAND);
void glVertexAttrib3f(glVertexAttrib3f_ARG_EXPAND);
typedef void (*glVertexAttrib3f_PTR)(glVertexAttrib3f_ARG_EXPAND);
void glVertexAttrib3fv(glVertexAttrib3fv_ARG_EXPAND);
typedef void (*glVertexAttrib3fv_PTR)(glVertexAttrib3fv_ARG_EXPAND);
void glVertexAttrib4f(glVertexAttrib4f_ARG_EXPAND);
typedef void (*glVertexAttrib4f_PTR)(glVertexAttrib4f_ARG_EXPAND);
void glVertexAttrib4fv(glVertexAttrib4fv_ARG_EXPAND);
typedef void (*glVertexAttrib4fv_PTR)(glVertexAttrib4fv_ARG_EXPAND);
void glVertexAttribPointer(glVertexAttribPointer_ARG_EXPAND);
typedef void (*glVertexAttribPointer_PTR)(glVertexAttribPointer_ARG_EXPAND);
void glViewport(glViewport_ARG_EXPAND);
typedef void (*glViewport_PTR)(glViewport_ARG_EXPAND);



#ifndef direct_glActiveTexture
#define push_glActiveTexture(texture) { \
    glActiveTexture_PACKED *packed_data = malloc(sizeof(glActiveTexture_PACKED)); \
    packed_data->format = glActiveTexture_FORMAT; \
    packed_data->func = glActiveTexture; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)texture; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glAttachShader
#define push_glAttachShader(program, shader) { \
    glAttachShader_PACKED *packed_data = malloc(sizeof(glAttachShader_PACKED)); \
    packed_data->format = glAttachShader_FORMAT; \
    packed_data->func = glAttachShader; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLuint)shader; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBindAttribLocation
#define push_glBindAttribLocation(program, index, name) { \
    glBindAttribLocation_PACKED *packed_data = malloc(sizeof(glBindAttribLocation_PACKED)); \
    packed_data->format = glBindAttribLocation_FORMAT; \
    packed_data->func = glBindAttribLocation; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLuint)index; \
        packed_data->args.a3 = (GLchar *)name; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBindBuffer
#define push_glBindBuffer(target, buffer) { \
    glBindBuffer_PACKED *packed_data = malloc(sizeof(glBindBuffer_PACKED)); \
    packed_data->format = glBindBuffer_FORMAT; \
    packed_data->func = glBindBuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLuint)buffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBindFramebuffer
#define push_glBindFramebuffer(target, framebuffer) { \
    glBindFramebuffer_PACKED *packed_data = malloc(sizeof(glBindFramebuffer_PACKED)); \
    packed_data->format = glBindFramebuffer_FORMAT; \
    packed_data->func = glBindFramebuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLuint)framebuffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBindRenderbuffer
#define push_glBindRenderbuffer(target, renderbuffer) { \
    glBindRenderbuffer_PACKED *packed_data = malloc(sizeof(glBindRenderbuffer_PACKED)); \
    packed_data->format = glBindRenderbuffer_FORMAT; \
    packed_data->func = glBindRenderbuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLuint)renderbuffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBindTexture
#define push_glBindTexture(target, texture) { \
    glBindTexture_PACKED *packed_data = malloc(sizeof(glBindTexture_PACKED)); \
    packed_data->format = glBindTexture_FORMAT; \
    packed_data->func = glBindTexture; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLuint)texture; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBlendColor
#define push_glBlendColor(red, green, blue, alpha) { \
    glBlendColor_PACKED *packed_data = malloc(sizeof(glBlendColor_PACKED)); \
    packed_data->format = glBlendColor_FORMAT; \
    packed_data->func = glBlendColor; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLclampf)red; \
        packed_data->args.a2 = (GLclampf)green; \
        packed_data->args.a3 = (GLclampf)blue; \
        packed_data->args.a4 = (GLclampf)alpha; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBlendEquation
#define push_glBlendEquation(mode) { \
    glBlendEquation_PACKED *packed_data = malloc(sizeof(glBlendEquation_PACKED)); \
    packed_data->format = glBlendEquation_FORMAT; \
    packed_data->func = glBlendEquation; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)mode; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBlendEquationSeparate
#define push_glBlendEquationSeparate(modeRGB, modeA) { \
    glBlendEquationSeparate_PACKED *packed_data = malloc(sizeof(glBlendEquationSeparate_PACKED)); \
    packed_data->format = glBlendEquationSeparate_FORMAT; \
    packed_data->func = glBlendEquationSeparate; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)modeRGB; \
        packed_data->args.a2 = (GLenum)modeA; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBlendFunc
#define push_glBlendFunc(sfactor, dfactor) { \
    glBlendFunc_PACKED *packed_data = malloc(sizeof(glBlendFunc_PACKED)); \
    packed_data->format = glBlendFunc_FORMAT; \
    packed_data->func = glBlendFunc; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)sfactor; \
        packed_data->args.a2 = (GLenum)dfactor; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBlendFuncSeparate
#define push_glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha) { \
    glBlendFuncSeparate_PACKED *packed_data = malloc(sizeof(glBlendFuncSeparate_PACKED)); \
    packed_data->format = glBlendFuncSeparate_FORMAT; \
    packed_data->func = glBlendFuncSeparate; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)sfactorRGB; \
        packed_data->args.a2 = (GLenum)dfactorRGB; \
        packed_data->args.a3 = (GLenum)sfactorAlpha; \
        packed_data->args.a4 = (GLenum)dfactorAlpha; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBufferData
#define push_glBufferData(target, size, data, usage) { \
    glBufferData_PACKED *packed_data = malloc(sizeof(glBufferData_PACKED)); \
    packed_data->format = glBufferData_FORMAT; \
    packed_data->func = glBufferData; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLsizeiptr)size; \
        packed_data->args.a3 = (GLvoid *)data; \
        packed_data->args.a4 = (GLenum)usage; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glBufferSubData
#define push_glBufferSubData(target, offset, size, data) { \
    glBufferSubData_PACKED *packed_data = malloc(sizeof(glBufferSubData_PACKED)); \
    packed_data->format = glBufferSubData_FORMAT; \
    packed_data->func = glBufferSubData; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLintptr)offset; \
        packed_data->args.a3 = (GLsizeiptr)size; \
        packed_data->args.a4 = (GLvoid *)data; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCheckFramebufferStatus
#define push_glCheckFramebufferStatus(target) { \
    glCheckFramebufferStatus_PACKED *packed_data = malloc(sizeof(glCheckFramebufferStatus_PACKED)); \
    packed_data->format = glCheckFramebufferStatus_FORMAT; \
    packed_data->func = glCheckFramebufferStatus; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glClear
#define push_glClear(mask) { \
    glClear_PACKED *packed_data = malloc(sizeof(glClear_PACKED)); \
    packed_data->format = glClear_FORMAT; \
    packed_data->func = glClear; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLbitfield)mask; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glClearColor
#define push_glClearColor(red, green, blue, alpha) { \
    glClearColor_PACKED *packed_data = malloc(sizeof(glClearColor_PACKED)); \
    packed_data->format = glClearColor_FORMAT; \
    packed_data->func = glClearColor; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLclampf)red; \
        packed_data->args.a2 = (GLclampf)green; \
        packed_data->args.a3 = (GLclampf)blue; \
        packed_data->args.a4 = (GLclampf)alpha; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glClearDepthf
#define push_glClearDepthf(depth) { \
    glClearDepthf_PACKED *packed_data = malloc(sizeof(glClearDepthf_PACKED)); \
    packed_data->format = glClearDepthf_FORMAT; \
    packed_data->func = glClearDepthf; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLclampf)depth; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glClearStencil
#define push_glClearStencil(s) { \
    glClearStencil_PACKED *packed_data = malloc(sizeof(glClearStencil_PACKED)); \
    packed_data->format = glClearStencil_FORMAT; \
    packed_data->func = glClearStencil; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)s; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glColorMask
#define push_glColorMask(red, green, blue, alpha) { \
    glColorMask_PACKED *packed_data = malloc(sizeof(glColorMask_PACKED)); \
    packed_data->format = glColorMask_FORMAT; \
    packed_data->func = glColorMask; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLboolean)red; \
        packed_data->args.a2 = (GLboolean)green; \
        packed_data->args.a3 = (GLboolean)blue; \
        packed_data->args.a4 = (GLboolean)alpha; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCompileShader
#define push_glCompileShader(shader) { \
    glCompileShader_PACKED *packed_data = malloc(sizeof(glCompileShader_PACKED)); \
    packed_data->format = glCompileShader_FORMAT; \
    packed_data->func = glCompileShader; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)shader; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCompressedTexImage2D
#define push_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data) { \
    glCompressedTexImage2D_PACKED *packed_data = malloc(sizeof(glCompressedTexImage2D_PACKED)); \
    packed_data->format = glCompressedTexImage2D_FORMAT; \
    packed_data->func = glCompressedTexImage2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLenum)internalformat; \
        packed_data->args.a4 = (GLsizei)width; \
        packed_data->args.a5 = (GLsizei)height; \
        packed_data->args.a6 = (GLint)border; \
        packed_data->args.a7 = (GLsizei)imageSize; \
        packed_data->args.a8 = (GLvoid *)data; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCompressedTexSubImage2D
#define push_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data) { \
    glCompressedTexSubImage2D_PACKED *packed_data = malloc(sizeof(glCompressedTexSubImage2D_PACKED)); \
    packed_data->format = glCompressedTexSubImage2D_FORMAT; \
    packed_data->func = glCompressedTexSubImage2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)xoffset; \
        packed_data->args.a4 = (GLint)yoffset; \
        packed_data->args.a5 = (GLsizei)width; \
        packed_data->args.a6 = (GLsizei)height; \
        packed_data->args.a7 = (GLenum)format; \
        packed_data->args.a8 = (GLsizei)imageSize; \
        packed_data->args.a9 = (GLvoid *)data; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCopyTexImage2D
#define push_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border) { \
    glCopyTexImage2D_PACKED *packed_data = malloc(sizeof(glCopyTexImage2D_PACKED)); \
    packed_data->format = glCopyTexImage2D_FORMAT; \
    packed_data->func = glCopyTexImage2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLenum)internalformat; \
        packed_data->args.a4 = (GLint)x; \
        packed_data->args.a5 = (GLint)y; \
        packed_data->args.a6 = (GLsizei)width; \
        packed_data->args.a7 = (GLsizei)height; \
        packed_data->args.a8 = (GLint)border; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCopyTexSubImage2D
#define push_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) { \
    glCopyTexSubImage2D_PACKED *packed_data = malloc(sizeof(glCopyTexSubImage2D_PACKED)); \
    packed_data->format = glCopyTexSubImage2D_FORMAT; \
    packed_data->func = glCopyTexSubImage2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)xoffset; \
        packed_data->args.a4 = (GLint)yoffset; \
        packed_data->args.a5 = (GLint)x; \
        packed_data->args.a6 = (GLint)y; \
        packed_data->args.a7 = (GLsizei)width; \
        packed_data->args.a8 = (GLsizei)height; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCreateProgram
#define push_glCreateProgram() { \
    glCreateProgram_PACKED *packed_data = malloc(sizeof(glCreateProgram_PACKED)); \
    packed_data->format = glCreateProgram_FORMAT; \
    packed_data->func = glCreateProgram; \
    packed_data->refs = 0; \
        glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCreateShader
#define push_glCreateShader(type) { \
    glCreateShader_PACKED *packed_data = malloc(sizeof(glCreateShader_PACKED)); \
    packed_data->format = glCreateShader_FORMAT; \
    packed_data->func = glCreateShader; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)type; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glCullFace
#define push_glCullFace(mode) { \
    glCullFace_PACKED *packed_data = malloc(sizeof(glCullFace_PACKED)); \
    packed_data->format = glCullFace_FORMAT; \
    packed_data->func = glCullFace; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)mode; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDeleteBuffers
#define push_glDeleteBuffers(n, buffer) { \
    glDeleteBuffers_PACKED *packed_data = malloc(sizeof(glDeleteBuffers_PACKED)); \
    packed_data->format = glDeleteBuffers_FORMAT; \
    packed_data->func = glDeleteBuffers; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)buffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDeleteFramebuffers
#define push_glDeleteFramebuffers(n, framebuffers) { \
    glDeleteFramebuffers_PACKED *packed_data = malloc(sizeof(glDeleteFramebuffers_PACKED)); \
    packed_data->format = glDeleteFramebuffers_FORMAT; \
    packed_data->func = glDeleteFramebuffers; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)framebuffers; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDeleteProgram
#define push_glDeleteProgram(program) { \
    glDeleteProgram_PACKED *packed_data = malloc(sizeof(glDeleteProgram_PACKED)); \
    packed_data->format = glDeleteProgram_FORMAT; \
    packed_data->func = glDeleteProgram; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDeleteRenderbuffers
#define push_glDeleteRenderbuffers(n, renderbuffers) { \
    glDeleteRenderbuffers_PACKED *packed_data = malloc(sizeof(glDeleteRenderbuffers_PACKED)); \
    packed_data->format = glDeleteRenderbuffers_FORMAT; \
    packed_data->func = glDeleteRenderbuffers; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)renderbuffers; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDeleteShader
#define push_glDeleteShader(program) { \
    glDeleteShader_PACKED *packed_data = malloc(sizeof(glDeleteShader_PACKED)); \
    packed_data->format = glDeleteShader_FORMAT; \
    packed_data->func = glDeleteShader; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDeleteTextures
#define push_glDeleteTextures(n, textures) { \
    glDeleteTextures_PACKED *packed_data = malloc(sizeof(glDeleteTextures_PACKED)); \
    packed_data->format = glDeleteTextures_FORMAT; \
    packed_data->func = glDeleteTextures; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)textures; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDepthFunc
#define push_glDepthFunc(func) { \
    glDepthFunc_PACKED *packed_data = malloc(sizeof(glDepthFunc_PACKED)); \
    packed_data->format = glDepthFunc_FORMAT; \
    packed_data->func = glDepthFunc; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)func; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDepthMask
#define push_glDepthMask(flag) { \
    glDepthMask_PACKED *packed_data = malloc(sizeof(glDepthMask_PACKED)); \
    packed_data->format = glDepthMask_FORMAT; \
    packed_data->func = glDepthMask; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLboolean)flag; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDepthRangef
#define push_glDepthRangef(zNear, zFar) { \
    glDepthRangef_PACKED *packed_data = malloc(sizeof(glDepthRangef_PACKED)); \
    packed_data->format = glDepthRangef_FORMAT; \
    packed_data->func = glDepthRangef; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLclampf)zNear; \
        packed_data->args.a2 = (GLclampf)zFar; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDetachShader
#define push_glDetachShader(program, shader) { \
    glDetachShader_PACKED *packed_data = malloc(sizeof(glDetachShader_PACKED)); \
    packed_data->format = glDetachShader_FORMAT; \
    packed_data->func = glDetachShader; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLuint)shader; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDisable
#define push_glDisable(cap) { \
    glDisable_PACKED *packed_data = malloc(sizeof(glDisable_PACKED)); \
    packed_data->format = glDisable_FORMAT; \
    packed_data->func = glDisable; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)cap; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDisableVertexAttribArray
#define push_glDisableVertexAttribArray(index) { \
    glDisableVertexAttribArray_PACKED *packed_data = malloc(sizeof(glDisableVertexAttribArray_PACKED)); \
    packed_data->format = glDisableVertexAttribArray_FORMAT; \
    packed_data->func = glDisableVertexAttribArray; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDrawArrays
#define push_glDrawArrays(mode, first, count) { \
    glDrawArrays_PACKED *packed_data = malloc(sizeof(glDrawArrays_PACKED)); \
    packed_data->format = glDrawArrays_FORMAT; \
    packed_data->func = glDrawArrays; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)mode; \
        packed_data->args.a2 = (GLint)first; \
        packed_data->args.a3 = (GLsizei)count; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glDrawElements
#define push_glDrawElements(mode, count, type, indices) { \
    glDrawElements_PACKED *packed_data = malloc(sizeof(glDrawElements_PACKED)); \
    packed_data->format = glDrawElements_FORMAT; \
    packed_data->func = glDrawElements; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)mode; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLenum)type; \
        packed_data->args.a4 = (GLvoid *)indices; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glEnable
#define push_glEnable(cap) { \
    glEnable_PACKED *packed_data = malloc(sizeof(glEnable_PACKED)); \
    packed_data->format = glEnable_FORMAT; \
    packed_data->func = glEnable; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)cap; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glEnableVertexAttribArray
#define push_glEnableVertexAttribArray(index) { \
    glEnableVertexAttribArray_PACKED *packed_data = malloc(sizeof(glEnableVertexAttribArray_PACKED)); \
    packed_data->format = glEnableVertexAttribArray_FORMAT; \
    packed_data->func = glEnableVertexAttribArray; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glFinish
#define push_glFinish() { \
    glFinish_PACKED *packed_data = malloc(sizeof(glFinish_PACKED)); \
    packed_data->format = glFinish_FORMAT; \
    packed_data->func = glFinish; \
    packed_data->refs = 0; \
        glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glFlush
#define push_glFlush() { \
    glFlush_PACKED *packed_data = malloc(sizeof(glFlush_PACKED)); \
    packed_data->format = glFlush_FORMAT; \
    packed_data->func = glFlush; \
    packed_data->refs = 0; \
        glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glFramebufferRenderbuffer
#define push_glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) { \
    glFramebufferRenderbuffer_PACKED *packed_data = malloc(sizeof(glFramebufferRenderbuffer_PACKED)); \
    packed_data->format = glFramebufferRenderbuffer_FORMAT; \
    packed_data->func = glFramebufferRenderbuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)attachment; \
        packed_data->args.a3 = (GLenum)renderbuffertarget; \
        packed_data->args.a4 = (GLuint)renderbuffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glFramebufferTexture2D
#define push_glFramebufferTexture2D(target, attachment, textarget, texture, level) { \
    glFramebufferTexture2D_PACKED *packed_data = malloc(sizeof(glFramebufferTexture2D_PACKED)); \
    packed_data->format = glFramebufferTexture2D_FORMAT; \
    packed_data->func = glFramebufferTexture2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)attachment; \
        packed_data->args.a3 = (GLenum)textarget; \
        packed_data->args.a4 = (GLuint)texture; \
        packed_data->args.a5 = (GLint)level; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glFrontFace
#define push_glFrontFace(mode) { \
    glFrontFace_PACKED *packed_data = malloc(sizeof(glFrontFace_PACKED)); \
    packed_data->format = glFrontFace_FORMAT; \
    packed_data->func = glFrontFace; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)mode; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGenBuffers
#define push_glGenBuffers(n, buffer) { \
    glGenBuffers_PACKED *packed_data = malloc(sizeof(glGenBuffers_PACKED)); \
    packed_data->format = glGenBuffers_FORMAT; \
    packed_data->func = glGenBuffers; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)buffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGenFramebuffers
#define push_glGenFramebuffers(n, framebuffers) { \
    glGenFramebuffers_PACKED *packed_data = malloc(sizeof(glGenFramebuffers_PACKED)); \
    packed_data->format = glGenFramebuffers_FORMAT; \
    packed_data->func = glGenFramebuffers; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)framebuffers; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGenRenderbuffers
#define push_glGenRenderbuffers(n, renderbuffers) { \
    glGenRenderbuffers_PACKED *packed_data = malloc(sizeof(glGenRenderbuffers_PACKED)); \
    packed_data->format = glGenRenderbuffers_FORMAT; \
    packed_data->func = glGenRenderbuffers; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)renderbuffers; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGenTextures
#define push_glGenTextures(n, textures) { \
    glGenTextures_PACKED *packed_data = malloc(sizeof(glGenTextures_PACKED)); \
    packed_data->format = glGenTextures_FORMAT; \
    packed_data->func = glGenTextures; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)textures; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGenerateMipmap
#define push_glGenerateMipmap(target) { \
    glGenerateMipmap_PACKED *packed_data = malloc(sizeof(glGenerateMipmap_PACKED)); \
    packed_data->format = glGenerateMipmap_FORMAT; \
    packed_data->func = glGenerateMipmap; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetActiveAttrib
#define push_glGetActiveAttrib(program, index, bufSize, length, size, type, name) { \
    glGetActiveAttrib_PACKED *packed_data = malloc(sizeof(glGetActiveAttrib_PACKED)); \
    packed_data->format = glGetActiveAttrib_FORMAT; \
    packed_data->func = glGetActiveAttrib; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLuint)index; \
        packed_data->args.a3 = (GLsizei)bufSize; \
        packed_data->args.a4 = (GLsizei *)length; \
        packed_data->args.a5 = (GLint *)size; \
        packed_data->args.a6 = (GLenum *)type; \
        packed_data->args.a7 = (GLchar *)name; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetActiveUniform
#define push_glGetActiveUniform(program, index, bufSize, length, size, type, name) { \
    glGetActiveUniform_PACKED *packed_data = malloc(sizeof(glGetActiveUniform_PACKED)); \
    packed_data->format = glGetActiveUniform_FORMAT; \
    packed_data->func = glGetActiveUniform; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLuint)index; \
        packed_data->args.a3 = (GLsizei)bufSize; \
        packed_data->args.a4 = (GLsizei *)length; \
        packed_data->args.a5 = (GLint *)size; \
        packed_data->args.a6 = (GLenum *)type; \
        packed_data->args.a7 = (GLchar *)name; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetAttachedShaders
#define push_glGetAttachedShaders(program, maxCount, count, obj) { \
    glGetAttachedShaders_PACKED *packed_data = malloc(sizeof(glGetAttachedShaders_PACKED)); \
    packed_data->format = glGetAttachedShaders_FORMAT; \
    packed_data->func = glGetAttachedShaders; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLsizei)maxCount; \
        packed_data->args.a3 = (GLsizei *)count; \
        packed_data->args.a4 = (GLuint *)obj; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetAttribLocation
#define push_glGetAttribLocation(program, name) { \
    glGetAttribLocation_PACKED *packed_data = malloc(sizeof(glGetAttribLocation_PACKED)); \
    packed_data->format = glGetAttribLocation_FORMAT; \
    packed_data->func = glGetAttribLocation; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLchar *)name; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetBooleanv
#define push_glGetBooleanv(pname, params) { \
    glGetBooleanv_PACKED *packed_data = malloc(sizeof(glGetBooleanv_PACKED)); \
    packed_data->format = glGetBooleanv_FORMAT; \
    packed_data->func = glGetBooleanv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLboolean *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetBufferParameteriv
#define push_glGetBufferParameteriv(target, pname, params) { \
    glGetBufferParameteriv_PACKED *packed_data = malloc(sizeof(glGetBufferParameteriv_PACKED)); \
    packed_data->format = glGetBufferParameteriv_FORMAT; \
    packed_data->func = glGetBufferParameteriv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetError
#define push_glGetError() { \
    glGetError_PACKED *packed_data = malloc(sizeof(glGetError_PACKED)); \
    packed_data->format = glGetError_FORMAT; \
    packed_data->func = glGetError; \
    packed_data->refs = 0; \
        glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetFloatv
#define push_glGetFloatv(pname, params) { \
    glGetFloatv_PACKED *packed_data = malloc(sizeof(glGetFloatv_PACKED)); \
    packed_data->format = glGetFloatv_FORMAT; \
    packed_data->func = glGetFloatv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetFramebufferAttachmentParameteriv
#define push_glGetFramebufferAttachmentParameteriv(target, attachment, pname, params) { \
    glGetFramebufferAttachmentParameteriv_PACKED *packed_data = malloc(sizeof(glGetFramebufferAttachmentParameteriv_PACKED)); \
    packed_data->format = glGetFramebufferAttachmentParameteriv_FORMAT; \
    packed_data->func = glGetFramebufferAttachmentParameteriv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)attachment; \
        packed_data->args.a3 = (GLenum)pname; \
        packed_data->args.a4 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetIntegerv
#define push_glGetIntegerv(pname, params) { \
    glGetIntegerv_PACKED *packed_data = malloc(sizeof(glGetIntegerv_PACKED)); \
    packed_data->format = glGetIntegerv_FORMAT; \
    packed_data->func = glGetIntegerv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetProgramInfoLog
#define push_glGetProgramInfoLog(program, bufSize, length, infoLog) { \
    glGetProgramInfoLog_PACKED *packed_data = malloc(sizeof(glGetProgramInfoLog_PACKED)); \
    packed_data->format = glGetProgramInfoLog_FORMAT; \
    packed_data->func = glGetProgramInfoLog; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLsizei)bufSize; \
        packed_data->args.a3 = (GLsizei *)length; \
        packed_data->args.a4 = (GLchar *)infoLog; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetProgramiv
#define push_glGetProgramiv(program, pname, params) { \
    glGetProgramiv_PACKED *packed_data = malloc(sizeof(glGetProgramiv_PACKED)); \
    packed_data->format = glGetProgramiv_FORMAT; \
    packed_data->func = glGetProgramiv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetRenderbufferParameteriv
#define push_glGetRenderbufferParameteriv(target, pname, params) { \
    glGetRenderbufferParameteriv_PACKED *packed_data = malloc(sizeof(glGetRenderbufferParameteriv_PACKED)); \
    packed_data->format = glGetRenderbufferParameteriv_FORMAT; \
    packed_data->func = glGetRenderbufferParameteriv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetShaderInfoLog
#define push_glGetShaderInfoLog(shader, bufSize, length, infoLog) { \
    glGetShaderInfoLog_PACKED *packed_data = malloc(sizeof(glGetShaderInfoLog_PACKED)); \
    packed_data->format = glGetShaderInfoLog_FORMAT; \
    packed_data->func = glGetShaderInfoLog; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)shader; \
        packed_data->args.a2 = (GLsizei)bufSize; \
        packed_data->args.a3 = (GLsizei *)length; \
        packed_data->args.a4 = (GLchar *)infoLog; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetShaderPrecisionFormat
#define push_glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision) { \
    glGetShaderPrecisionFormat_PACKED *packed_data = malloc(sizeof(glGetShaderPrecisionFormat_PACKED)); \
    packed_data->format = glGetShaderPrecisionFormat_FORMAT; \
    packed_data->func = glGetShaderPrecisionFormat; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)shadertype; \
        packed_data->args.a2 = (GLenum)precisiontype; \
        packed_data->args.a3 = (GLint *)range; \
        packed_data->args.a4 = (GLint *)precision; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetShaderSource
#define push_glGetShaderSource(shader, bufSize, length, source) { \
    glGetShaderSource_PACKED *packed_data = malloc(sizeof(glGetShaderSource_PACKED)); \
    packed_data->format = glGetShaderSource_FORMAT; \
    packed_data->func = glGetShaderSource; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)shader; \
        packed_data->args.a2 = (GLsizei)bufSize; \
        packed_data->args.a3 = (GLsizei *)length; \
        packed_data->args.a4 = (GLchar *)source; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetShaderiv
#define push_glGetShaderiv(shader, pname, params) { \
    glGetShaderiv_PACKED *packed_data = malloc(sizeof(glGetShaderiv_PACKED)); \
    packed_data->format = glGetShaderiv_FORMAT; \
    packed_data->func = glGetShaderiv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)shader; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetString
#define push_glGetString(name) { \
    glGetString_PACKED *packed_data = malloc(sizeof(glGetString_PACKED)); \
    packed_data->format = glGetString_FORMAT; \
    packed_data->func = glGetString; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)name; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetTexParameterfv
#define push_glGetTexParameterfv(target, pname, params) { \
    glGetTexParameterfv_PACKED *packed_data = malloc(sizeof(glGetTexParameterfv_PACKED)); \
    packed_data->format = glGetTexParameterfv_FORMAT; \
    packed_data->func = glGetTexParameterfv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetTexParameteriv
#define push_glGetTexParameteriv(target, pname, params) { \
    glGetTexParameteriv_PACKED *packed_data = malloc(sizeof(glGetTexParameteriv_PACKED)); \
    packed_data->format = glGetTexParameteriv_FORMAT; \
    packed_data->func = glGetTexParameteriv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetUniformLocation
#define push_glGetUniformLocation(program, name) { \
    glGetUniformLocation_PACKED *packed_data = malloc(sizeof(glGetUniformLocation_PACKED)); \
    packed_data->format = glGetUniformLocation_FORMAT; \
    packed_data->func = glGetUniformLocation; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLchar *)name; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetUniformfv
#define push_glGetUniformfv(program, location, params) { \
    glGetUniformfv_PACKED *packed_data = malloc(sizeof(glGetUniformfv_PACKED)); \
    packed_data->format = glGetUniformfv_FORMAT; \
    packed_data->func = glGetUniformfv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLint)location; \
        packed_data->args.a3 = (GLfloat *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetUniformiv
#define push_glGetUniformiv(program, location, params) { \
    glGetUniformiv_PACKED *packed_data = malloc(sizeof(glGetUniformiv_PACKED)); \
    packed_data->format = glGetUniformiv_FORMAT; \
    packed_data->func = glGetUniformiv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
        packed_data->args.a2 = (GLint)location; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetVertexAttribPointerv
#define push_glGetVertexAttribPointerv(index, pname, pointer) { \
    glGetVertexAttribPointerv_PACKED *packed_data = malloc(sizeof(glGetVertexAttribPointerv_PACKED)); \
    packed_data->format = glGetVertexAttribPointerv_FORMAT; \
    packed_data->func = glGetVertexAttribPointerv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLvoid **)pointer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetVertexAttribfv
#define push_glGetVertexAttribfv(index, pname, params) { \
    glGetVertexAttribfv_PACKED *packed_data = malloc(sizeof(glGetVertexAttribfv_PACKED)); \
    packed_data->format = glGetVertexAttribfv_FORMAT; \
    packed_data->func = glGetVertexAttribfv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glGetVertexAttribiv
#define push_glGetVertexAttribiv(index, pname, params) { \
    glGetVertexAttribiv_PACKED *packed_data = malloc(sizeof(glGetVertexAttribiv_PACKED)); \
    packed_data->format = glGetVertexAttribiv_FORMAT; \
    packed_data->func = glGetVertexAttribiv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glHint
#define push_glHint(target, mode) { \
    glHint_PACKED *packed_data = malloc(sizeof(glHint_PACKED)); \
    packed_data->format = glHint_FORMAT; \
    packed_data->func = glHint; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)mode; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsBuffer
#define push_glIsBuffer(buffer) { \
    glIsBuffer_PACKED *packed_data = malloc(sizeof(glIsBuffer_PACKED)); \
    packed_data->format = glIsBuffer_FORMAT; \
    packed_data->func = glIsBuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)buffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsEnabled
#define push_glIsEnabled(cap) { \
    glIsEnabled_PACKED *packed_data = malloc(sizeof(glIsEnabled_PACKED)); \
    packed_data->format = glIsEnabled_FORMAT; \
    packed_data->func = glIsEnabled; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)cap; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsFramebuffer
#define push_glIsFramebuffer(framebuffer) { \
    glIsFramebuffer_PACKED *packed_data = malloc(sizeof(glIsFramebuffer_PACKED)); \
    packed_data->format = glIsFramebuffer_FORMAT; \
    packed_data->func = glIsFramebuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)framebuffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsProgram
#define push_glIsProgram(program) { \
    glIsProgram_PACKED *packed_data = malloc(sizeof(glIsProgram_PACKED)); \
    packed_data->format = glIsProgram_FORMAT; \
    packed_data->func = glIsProgram; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsRenderbuffer
#define push_glIsRenderbuffer(renderbuffer) { \
    glIsRenderbuffer_PACKED *packed_data = malloc(sizeof(glIsRenderbuffer_PACKED)); \
    packed_data->format = glIsRenderbuffer_FORMAT; \
    packed_data->func = glIsRenderbuffer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)renderbuffer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsShader
#define push_glIsShader(shader) { \
    glIsShader_PACKED *packed_data = malloc(sizeof(glIsShader_PACKED)); \
    packed_data->format = glIsShader_FORMAT; \
    packed_data->func = glIsShader; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)shader; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glIsTexture
#define push_glIsTexture(texture) { \
    glIsTexture_PACKED *packed_data = malloc(sizeof(glIsTexture_PACKED)); \
    packed_data->format = glIsTexture_FORMAT; \
    packed_data->func = glIsTexture; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)texture; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glLineWidth
#define push_glLineWidth(width) { \
    glLineWidth_PACKED *packed_data = malloc(sizeof(glLineWidth_PACKED)); \
    packed_data->format = glLineWidth_FORMAT; \
    packed_data->func = glLineWidth; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLfloat)width; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glLinkProgram
#define push_glLinkProgram(program) { \
    glLinkProgram_PACKED *packed_data = malloc(sizeof(glLinkProgram_PACKED)); \
    packed_data->format = glLinkProgram_FORMAT; \
    packed_data->func = glLinkProgram; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glPixelStorei
#define push_glPixelStorei(pname, param) { \
    glPixelStorei_PACKED *packed_data = malloc(sizeof(glPixelStorei_PACKED)); \
    packed_data->format = glPixelStorei_FORMAT; \
    packed_data->func = glPixelStorei; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLint)param; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glPolygonOffset
#define push_glPolygonOffset(factor, units) { \
    glPolygonOffset_PACKED *packed_data = malloc(sizeof(glPolygonOffset_PACKED)); \
    packed_data->format = glPolygonOffset_FORMAT; \
    packed_data->func = glPolygonOffset; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLfloat)factor; \
        packed_data->args.a2 = (GLfloat)units; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glReadPixels
#define push_glReadPixels(x, y, width, height, format, type, pixels) { \
    glReadPixels_PACKED *packed_data = malloc(sizeof(glReadPixels_PACKED)); \
    packed_data->format = glReadPixels_FORMAT; \
    packed_data->func = glReadPixels; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)x; \
        packed_data->args.a2 = (GLint)y; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
        packed_data->args.a5 = (GLenum)format; \
        packed_data->args.a6 = (GLenum)type; \
        packed_data->args.a7 = (GLvoid *)pixels; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glReleaseShaderCompiler
#define push_glReleaseShaderCompiler() { \
    glReleaseShaderCompiler_PACKED *packed_data = malloc(sizeof(glReleaseShaderCompiler_PACKED)); \
    packed_data->format = glReleaseShaderCompiler_FORMAT; \
    packed_data->func = glReleaseShaderCompiler; \
    packed_data->refs = 0; \
        glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glRenderbufferStorage
#define push_glRenderbufferStorage(target, internalformat, width, height) { \
    glRenderbufferStorage_PACKED *packed_data = malloc(sizeof(glRenderbufferStorage_PACKED)); \
    packed_data->format = glRenderbufferStorage_FORMAT; \
    packed_data->func = glRenderbufferStorage; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)internalformat; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glSampleCoverage
#define push_glSampleCoverage(value, invert) { \
    glSampleCoverage_PACKED *packed_data = malloc(sizeof(glSampleCoverage_PACKED)); \
    packed_data->format = glSampleCoverage_FORMAT; \
    packed_data->func = glSampleCoverage; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLclampf)value; \
        packed_data->args.a2 = (GLboolean)invert; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glScissor
#define push_glScissor(x, y, width, height) { \
    glScissor_PACKED *packed_data = malloc(sizeof(glScissor_PACKED)); \
    packed_data->format = glScissor_FORMAT; \
    packed_data->func = glScissor; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)x; \
        packed_data->args.a2 = (GLint)y; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glShaderBinary
#define push_glShaderBinary(n, shaders, binaryformat, binary, length) { \
    glShaderBinary_PACKED *packed_data = malloc(sizeof(glShaderBinary_PACKED)); \
    packed_data->format = glShaderBinary_FORMAT; \
    packed_data->func = glShaderBinary; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)shaders; \
        packed_data->args.a3 = (GLenum)binaryformat; \
        packed_data->args.a4 = (GLvoid *)binary; \
        packed_data->args.a5 = (GLsizei)length; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glShaderSource
#define push_glShaderSource(shader, count, string, length) { \
    glShaderSource_PACKED *packed_data = malloc(sizeof(glShaderSource_PACKED)); \
    packed_data->format = glShaderSource_FORMAT; \
    packed_data->func = glShaderSource; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)shader; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLchar * *)string; \
        packed_data->args.a4 = (GLint *)length; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glStencilFunc
#define push_glStencilFunc(func, ref, mask) { \
    glStencilFunc_PACKED *packed_data = malloc(sizeof(glStencilFunc_PACKED)); \
    packed_data->format = glStencilFunc_FORMAT; \
    packed_data->func = glStencilFunc; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)func; \
        packed_data->args.a2 = (GLint)ref; \
        packed_data->args.a3 = (GLuint)mask; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glStencilFuncSeparate
#define push_glStencilFuncSeparate(face, func, ref, mask) { \
    glStencilFuncSeparate_PACKED *packed_data = malloc(sizeof(glStencilFuncSeparate_PACKED)); \
    packed_data->format = glStencilFuncSeparate_FORMAT; \
    packed_data->func = glStencilFuncSeparate; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)func; \
        packed_data->args.a3 = (GLint)ref; \
        packed_data->args.a4 = (GLuint)mask; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glStencilMask
#define push_glStencilMask(mask) { \
    glStencilMask_PACKED *packed_data = malloc(sizeof(glStencilMask_PACKED)); \
    packed_data->format = glStencilMask_FORMAT; \
    packed_data->func = glStencilMask; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)mask; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glStencilMaskSeparate
#define push_glStencilMaskSeparate(face, mask) { \
    glStencilMaskSeparate_PACKED *packed_data = malloc(sizeof(glStencilMaskSeparate_PACKED)); \
    packed_data->format = glStencilMaskSeparate_FORMAT; \
    packed_data->func = glStencilMaskSeparate; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLuint)mask; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glStencilOp
#define push_glStencilOp(fail, zfail, zpass) { \
    glStencilOp_PACKED *packed_data = malloc(sizeof(glStencilOp_PACKED)); \
    packed_data->format = glStencilOp_FORMAT; \
    packed_data->func = glStencilOp; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)fail; \
        packed_data->args.a2 = (GLenum)zfail; \
        packed_data->args.a3 = (GLenum)zpass; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glStencilOpSeparate
#define push_glStencilOpSeparate(face, sfail, zfail, zpass) { \
    glStencilOpSeparate_PACKED *packed_data = malloc(sizeof(glStencilOpSeparate_PACKED)); \
    packed_data->format = glStencilOpSeparate_FORMAT; \
    packed_data->func = glStencilOpSeparate; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)sfail; \
        packed_data->args.a3 = (GLenum)zfail; \
        packed_data->args.a4 = (GLenum)zpass; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glTexImage2D
#define push_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels) { \
    glTexImage2D_PACKED *packed_data = malloc(sizeof(glTexImage2D_PACKED)); \
    packed_data->format = glTexImage2D_FORMAT; \
    packed_data->func = glTexImage2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)internalformat; \
        packed_data->args.a4 = (GLsizei)width; \
        packed_data->args.a5 = (GLsizei)height; \
        packed_data->args.a6 = (GLint)border; \
        packed_data->args.a7 = (GLenum)format; \
        packed_data->args.a8 = (GLenum)type; \
        packed_data->args.a9 = (GLvoid *)pixels; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glTexParameterf
#define push_glTexParameterf(target, pname, param) { \
    glTexParameterf_PACKED *packed_data = malloc(sizeof(glTexParameterf_PACKED)); \
    packed_data->format = glTexParameterf_FORMAT; \
    packed_data->func = glTexParameterf; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat)param; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glTexParameterfv
#define push_glTexParameterfv(target, pname, params) { \
    glTexParameterfv_PACKED *packed_data = malloc(sizeof(glTexParameterfv_PACKED)); \
    packed_data->format = glTexParameterfv_FORMAT; \
    packed_data->func = glTexParameterfv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glTexParameteri
#define push_glTexParameteri(target, pname, param) { \
    glTexParameteri_PACKED *packed_data = malloc(sizeof(glTexParameteri_PACKED)); \
    packed_data->format = glTexParameteri_FORMAT; \
    packed_data->func = glTexParameteri; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint)param; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glTexParameteriv
#define push_glTexParameteriv(target, pname, params) { \
    glTexParameteriv_PACKED *packed_data = malloc(sizeof(glTexParameteriv_PACKED)); \
    packed_data->format = glTexParameteriv_FORMAT; \
    packed_data->func = glTexParameteriv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glTexSubImage2D
#define push_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels) { \
    glTexSubImage2D_PACKED *packed_data = malloc(sizeof(glTexSubImage2D_PACKED)); \
    packed_data->format = glTexSubImage2D_FORMAT; \
    packed_data->func = glTexSubImage2D; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)xoffset; \
        packed_data->args.a4 = (GLint)yoffset; \
        packed_data->args.a5 = (GLsizei)width; \
        packed_data->args.a6 = (GLsizei)height; \
        packed_data->args.a7 = (GLenum)format; \
        packed_data->args.a8 = (GLenum)type; \
        packed_data->args.a9 = (GLvoid *)pixels; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform1f
#define push_glUniform1f(location, v0) { \
    glUniform1f_PACKED *packed_data = malloc(sizeof(glUniform1f_PACKED)); \
    packed_data->format = glUniform1f_FORMAT; \
    packed_data->func = glUniform1f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLfloat)v0; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform1fv
#define push_glUniform1fv(location, count, value) { \
    glUniform1fv_PACKED *packed_data = malloc(sizeof(glUniform1fv_PACKED)); \
    packed_data->format = glUniform1fv_FORMAT; \
    packed_data->func = glUniform1fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform1i
#define push_glUniform1i(location, v0) { \
    glUniform1i_PACKED *packed_data = malloc(sizeof(glUniform1i_PACKED)); \
    packed_data->format = glUniform1i_FORMAT; \
    packed_data->func = glUniform1i; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLint)v0; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform1iv
#define push_glUniform1iv(location, count, value) { \
    glUniform1iv_PACKED *packed_data = malloc(sizeof(glUniform1iv_PACKED)); \
    packed_data->format = glUniform1iv_FORMAT; \
    packed_data->func = glUniform1iv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLint *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform2f
#define push_glUniform2f(location, v0, v1) { \
    glUniform2f_PACKED *packed_data = malloc(sizeof(glUniform2f_PACKED)); \
    packed_data->format = glUniform2f_FORMAT; \
    packed_data->func = glUniform2f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLfloat)v0; \
        packed_data->args.a3 = (GLfloat)v1; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform2fv
#define push_glUniform2fv(location, count, value) { \
    glUniform2fv_PACKED *packed_data = malloc(sizeof(glUniform2fv_PACKED)); \
    packed_data->format = glUniform2fv_FORMAT; \
    packed_data->func = glUniform2fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform2i
#define push_glUniform2i(location, v0, v1) { \
    glUniform2i_PACKED *packed_data = malloc(sizeof(glUniform2i_PACKED)); \
    packed_data->format = glUniform2i_FORMAT; \
    packed_data->func = glUniform2i; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLint)v0; \
        packed_data->args.a3 = (GLint)v1; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform2iv
#define push_glUniform2iv(location, count, value) { \
    glUniform2iv_PACKED *packed_data = malloc(sizeof(glUniform2iv_PACKED)); \
    packed_data->format = glUniform2iv_FORMAT; \
    packed_data->func = glUniform2iv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLint *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform3f
#define push_glUniform3f(location, v0, v1, v2) { \
    glUniform3f_PACKED *packed_data = malloc(sizeof(glUniform3f_PACKED)); \
    packed_data->format = glUniform3f_FORMAT; \
    packed_data->func = glUniform3f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLfloat)v0; \
        packed_data->args.a3 = (GLfloat)v1; \
        packed_data->args.a4 = (GLfloat)v2; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform3fv
#define push_glUniform3fv(location, count, value) { \
    glUniform3fv_PACKED *packed_data = malloc(sizeof(glUniform3fv_PACKED)); \
    packed_data->format = glUniform3fv_FORMAT; \
    packed_data->func = glUniform3fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform3i
#define push_glUniform3i(location, v0, v1, v2) { \
    glUniform3i_PACKED *packed_data = malloc(sizeof(glUniform3i_PACKED)); \
    packed_data->format = glUniform3i_FORMAT; \
    packed_data->func = glUniform3i; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLint)v0; \
        packed_data->args.a3 = (GLint)v1; \
        packed_data->args.a4 = (GLint)v2; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform3iv
#define push_glUniform3iv(location, count, value) { \
    glUniform3iv_PACKED *packed_data = malloc(sizeof(glUniform3iv_PACKED)); \
    packed_data->format = glUniform3iv_FORMAT; \
    packed_data->func = glUniform3iv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLint *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform4f
#define push_glUniform4f(location, v0, v1, v2, v3) { \
    glUniform4f_PACKED *packed_data = malloc(sizeof(glUniform4f_PACKED)); \
    packed_data->format = glUniform4f_FORMAT; \
    packed_data->func = glUniform4f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLfloat)v0; \
        packed_data->args.a3 = (GLfloat)v1; \
        packed_data->args.a4 = (GLfloat)v2; \
        packed_data->args.a5 = (GLfloat)v3; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform4fv
#define push_glUniform4fv(location, count, value) { \
    glUniform4fv_PACKED *packed_data = malloc(sizeof(glUniform4fv_PACKED)); \
    packed_data->format = glUniform4fv_FORMAT; \
    packed_data->func = glUniform4fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform4i
#define push_glUniform4i(location, v0, v1, v2, v3) { \
    glUniform4i_PACKED *packed_data = malloc(sizeof(glUniform4i_PACKED)); \
    packed_data->format = glUniform4i_FORMAT; \
    packed_data->func = glUniform4i; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLint)v0; \
        packed_data->args.a3 = (GLint)v1; \
        packed_data->args.a4 = (GLint)v2; \
        packed_data->args.a5 = (GLint)v3; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniform4iv
#define push_glUniform4iv(location, count, value) { \
    glUniform4iv_PACKED *packed_data = malloc(sizeof(glUniform4iv_PACKED)); \
    packed_data->format = glUniform4iv_FORMAT; \
    packed_data->func = glUniform4iv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLint *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniformMatrix2fv
#define push_glUniformMatrix2fv(location, count, transpose, value) { \
    glUniformMatrix2fv_PACKED *packed_data = malloc(sizeof(glUniformMatrix2fv_PACKED)); \
    packed_data->format = glUniformMatrix2fv_FORMAT; \
    packed_data->func = glUniformMatrix2fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLboolean)transpose; \
        packed_data->args.a4 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniformMatrix3fv
#define push_glUniformMatrix3fv(location, count, transpose, value) { \
    glUniformMatrix3fv_PACKED *packed_data = malloc(sizeof(glUniformMatrix3fv_PACKED)); \
    packed_data->format = glUniformMatrix3fv_FORMAT; \
    packed_data->func = glUniformMatrix3fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLboolean)transpose; \
        packed_data->args.a4 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUniformMatrix4fv
#define push_glUniformMatrix4fv(location, count, transpose, value) { \
    glUniformMatrix4fv_PACKED *packed_data = malloc(sizeof(glUniformMatrix4fv_PACKED)); \
    packed_data->format = glUniformMatrix4fv_FORMAT; \
    packed_data->func = glUniformMatrix4fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)location; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLboolean)transpose; \
        packed_data->args.a4 = (GLfloat *)value; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glUseProgram
#define push_glUseProgram(program) { \
    glUseProgram_PACKED *packed_data = malloc(sizeof(glUseProgram_PACKED)); \
    packed_data->format = glUseProgram_FORMAT; \
    packed_data->func = glUseProgram; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glValidateProgram
#define push_glValidateProgram(program) { \
    glValidateProgram_PACKED *packed_data = malloc(sizeof(glValidateProgram_PACKED)); \
    packed_data->format = glValidateProgram_FORMAT; \
    packed_data->func = glValidateProgram; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)program; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib1f
#define push_glVertexAttrib1f(index, x) { \
    glVertexAttrib1f_PACKED *packed_data = malloc(sizeof(glVertexAttrib1f_PACKED)); \
    packed_data->format = glVertexAttrib1f_FORMAT; \
    packed_data->func = glVertexAttrib1f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat)x; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib1fv
#define push_glVertexAttrib1fv(index, v) { \
    glVertexAttrib1fv_PACKED *packed_data = malloc(sizeof(glVertexAttrib1fv_PACKED)); \
    packed_data->format = glVertexAttrib1fv_FORMAT; \
    packed_data->func = glVertexAttrib1fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat *)v; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib2f
#define push_glVertexAttrib2f(index, x, y) { \
    glVertexAttrib2f_PACKED *packed_data = malloc(sizeof(glVertexAttrib2f_PACKED)); \
    packed_data->format = glVertexAttrib2f_FORMAT; \
    packed_data->func = glVertexAttrib2f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat)x; \
        packed_data->args.a3 = (GLfloat)y; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib2fv
#define push_glVertexAttrib2fv(index, v) { \
    glVertexAttrib2fv_PACKED *packed_data = malloc(sizeof(glVertexAttrib2fv_PACKED)); \
    packed_data->format = glVertexAttrib2fv_FORMAT; \
    packed_data->func = glVertexAttrib2fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat *)v; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib3f
#define push_glVertexAttrib3f(index, x, y, z) { \
    glVertexAttrib3f_PACKED *packed_data = malloc(sizeof(glVertexAttrib3f_PACKED)); \
    packed_data->format = glVertexAttrib3f_FORMAT; \
    packed_data->func = glVertexAttrib3f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat)x; \
        packed_data->args.a3 = (GLfloat)y; \
        packed_data->args.a4 = (GLfloat)z; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib3fv
#define push_glVertexAttrib3fv(index, v) { \
    glVertexAttrib3fv_PACKED *packed_data = malloc(sizeof(glVertexAttrib3fv_PACKED)); \
    packed_data->format = glVertexAttrib3fv_FORMAT; \
    packed_data->func = glVertexAttrib3fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat *)v; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib4f
#define push_glVertexAttrib4f(index, x, y, z, w) { \
    glVertexAttrib4f_PACKED *packed_data = malloc(sizeof(glVertexAttrib4f_PACKED)); \
    packed_data->format = glVertexAttrib4f_FORMAT; \
    packed_data->func = glVertexAttrib4f; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat)x; \
        packed_data->args.a3 = (GLfloat)y; \
        packed_data->args.a4 = (GLfloat)z; \
        packed_data->args.a5 = (GLfloat)w; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttrib4fv
#define push_glVertexAttrib4fv(index, v) { \
    glVertexAttrib4fv_PACKED *packed_data = malloc(sizeof(glVertexAttrib4fv_PACKED)); \
    packed_data->format = glVertexAttrib4fv_FORMAT; \
    packed_data->func = glVertexAttrib4fv; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLfloat *)v; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glVertexAttribPointer
#define push_glVertexAttribPointer(index, size, type, normalized, stride, pointer) { \
    glVertexAttribPointer_PACKED *packed_data = malloc(sizeof(glVertexAttribPointer_PACKED)); \
    packed_data->format = glVertexAttribPointer_FORMAT; \
    packed_data->func = glVertexAttribPointer; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLuint)index; \
        packed_data->args.a2 = (GLint)size; \
        packed_data->args.a3 = (GLenum)type; \
        packed_data->args.a4 = (GLboolean)normalized; \
        packed_data->args.a5 = (GLsizei)stride; \
        packed_data->args.a6 = (GLvoid *)pointer; \
            glPushCall((void *)packed_data); \
}
#endif
#ifndef direct_glViewport
#define push_glViewport(x, y, width, height) { \
    glViewport_PACKED *packed_data = malloc(sizeof(glViewport_PACKED)); \
    packed_data->format = glViewport_FORMAT; \
    packed_data->func = glViewport; \
    packed_data->refs = 0; \
            packed_data->args.a1 = (GLint)x; \
        packed_data->args.a2 = (GLint)y; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
            glPushCall((void *)packed_data); \
}
#endif
#endif
#endif
Added jni/glshim/src/gl/wrap/glstub.c.






























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "stub.h"

#define STUB(def)\
def {\
    char *debug = getenv("LIBGL_DEBUG");\
    if (debug && strcmp(debug, "1") == 0)\
        printf("stub: %s;\n", #def);\
}

STUB(void glFogCoordd(GLdouble coord))
STUB(void glFogCoordf(GLfloat coord))
STUB(void glFogCoorddv(const GLdouble *coord))
STUB(void glFogCoordfv(const GLfloat *coord))
#ifdef BCMHOST
STUB(void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments))
#endif

#ifdef USE_ES2
STUB(void glClipPlanef(GLenum plane, const GLfloat *equation));
STUB(void glDisableClientState(GLenum state));
STUB(void glEnableClientState(GLenum state));
STUB(void glFogf(GLenum pname, GLfloat param));
STUB(void glFogfv(GLenum pname, const GLfloat *params));
STUB(void glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far));
STUB(void glGetClipPlanef(GLenum plane, GLfloat *equation));
STUB(void glLightf(GLenum light, GLenum pname, GLfloat param));
STUB(void glLightfv(GLenum light, GLenum pname, const GLfloat *params));
STUB(void glLoadIdentity());
STUB(void glLoadMatrixf(const GLfloat *m));
STUB(void glMaterialf(GLenum face, GLenum pname, GLfloat param));
STUB(void glMatrixMode(GLenum mode));
STUB(void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat r, GLfloat q, GLfloat t));
STUB(void glMultMatrixf(const GLfloat *m));
STUB(void glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat nearVal, GLfloat farVal));
STUB(void glPopMatrix());
STUB(void glPushMatrix());
STUB(void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z));
STUB(void glScalef(GLfloat x, GLfloat y, GLfloat z));
STUB(void glTexEnvf(GLenum target, GLenum pname, GLfloat param));
STUB(void glTexEnvi(GLenum target, GLenum pname, GLint param));
STUB(void glTranslatef(GLfloat x, GLfloat y, GLfloat z));
#endif

// STUB(void glMultiTexCoord());
// STUB(void glVertexAttrib());
STUB(void glClearAccum(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha))
STUB(void glColorMaterial(GLenum face, GLenum mode))
STUB(void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type))
STUB(void glDrawBuffer(GLenum mode))
STUB(void glEdgeFlag(GLboolean flag))
STUB(void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * img))
STUB(void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params))
STUB(void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params))
STUB(void glIndexf(GLfloat c))
STUB(void glPixelTransferf(GLenum pname, GLfloat param))
STUB(void glPixelTransferi(GLenum pname, GLint param))
STUB(void glPixelZoom(GLfloat xfactor, GLfloat yfactor))
STUB(void glPolygonMode(GLenum face, GLenum mode))
STUB(void glPolygonStipple(const GLubyte *mask))
STUB(void glReadBuffer(GLenum mode))
STUB(void glSecondaryColor3f(GLfloat r, GLfloat g, GLfloat b))

#undef STUB
Added jni/glshim/src/gl/wrap/stub.h.


































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "../gl.h"

GLint glRenderMode(GLenum mode);
void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);
void glBlendEquationSeparatei(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
void glBlendFuncSeparatei(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
void glColorMaterial(GLenum face, GLenum mode);
void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
void glDrawBuffer(GLenum mode);
void glEdgeFlag(GLboolean flag);
void glFogCoordd(GLdouble coord);
void glFogCoorddv(const GLdouble *coord);
void glFogCoordf(GLfloat coord);
void glFogCoordfv(const GLfloat *coord);
void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * img);
void glGetTexLevelParameterfv(GLenum target, GLint level, GLenum pname, GLfloat *params);
void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint *params);
void glIndexf(GLfloat c);
void glInitNames();
void glLightModeli(GLenum pname, GLint param);
void glLoadName(GLuint name);
void glPixelTransferf(GLenum pname, GLfloat param);
void glPixelTransferi(GLenum pname, GLint param);
void glPixelZoom(GLfloat xfactor, GLfloat yfactor);
void glPolygonMode(GLenum face, GLenum mode);
void glPolygonStipple(const GLubyte *mask);
void glPopName();
void glPushName();
void glReadBuffer(GLenum mode);
void glSecondaryColor3f(GLfloat r, GLfloat g, GLfloat b);
// glSelectBuffer: http://www.lighthouse3d.com/opengl/picking/index.php?color1
void glSelectBuffer(GLsizei size, GLuint *buffer);
Added jni/glshim/src/gl/wrap/types.h.




























>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef PACKED_TYPE_H
#define PACKED_TYPE_H
typedef struct {
    int format;
    void *func;
    int refs;
    void *args;
} packed_call_t;

typedef struct {
    int func;
    void *args;
} indexed_call_t;
#endif
Added jni/glshim/src/util/extypes.h.
































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#ifndef GL_EXTYPES_H
#define GL_EXTYPES_H

#include <stdint.h>
#if !defined(ANDROID)
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#endif

// gles

typedef void *GLDEBUGPROC;
typedef int32_t GLclampx;
typedef int32_t GLfixed;

// glx + x11
#if !defined(ANDROID)
typedef void *DMbuffer;
typedef void *GLXContextID;
typedef int GLXDrawable;
typedef void *GLXFBConfigSGIX;
typedef void *GLXHyperpipeConfigSGIX;
typedef void *GLXHyperpipeNetworkSGIX;
typedef void *GLXPbuffer;
typedef void *GLXPbufferSGIX;
typedef void *GLXPixmap;
typedef void *GLXVideoCaptureDeviceNV;
typedef void *GLXVideoDeviceNV;
typedef void *GLXVideoSourceSGIX;
typedef void *GLXWindow;
typedef void *VLNode;
typedef void *VLPath;
typedef void *VLServer;
typedef void *__GLXextFuncPtr;
typedef void DMparams;

struct __GLXContextRec {
    Display *display;
    unsigned char direct;
    int currentWritable;
    int currentReadable;
    XID xid;
};
typedef struct __GLXContextRec *GLXContext;

struct __GLXFBConfigRec {
    int visualType;
    int transparentType;
                                /*    colors are floats scaled to ints */
    int transparentRed, transparentGreen, transparentBlue, transparentAlpha;
    int transparentIndex;

    int visualCaveat;

    int associatedVisualId;
    int screen;

    int drawableType;
    int renderType;

    int maxPbufferWidth, maxPbufferHeight, maxPbufferPixels;
    int optimalPbufferWidth, optimalPbufferHeight;  /* for SGIX_pbuffer */

    int visualSelectGroup;  /* visuals grouped by select priority */

    unsigned int id;

    unsigned char rgbMode;
    unsigned char colorIndexMode;
    unsigned char doubleBufferMode;
    unsigned char stereoMode;
    unsigned char haveAccumBuffer;
    unsigned char haveDepthBuffer;
    unsigned char haveStencilBuffer;

    /* The number of bits present in various buffers */
    int accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
    int depthBits;
    int stencilBits;
    int indexBits;
    int redBits, greenBits, blueBits, alphaBits;
    unsigned int redMask, greenMask, blueMask, alphaMask;

    unsigned int multiSampleSize; /* Number of samples per pixel (0 if no ms) */

    unsigned int nMultiSampleBuffers; /* Number of availble ms buffers */
    int maxAuxBuffers;

    /* frame buffer level */
    int level;

    /* color ranges (for SGI_color_range) */
    unsigned char extendedRange;
    double minRed, maxRed;
    double minGreen, maxGreen;
    double minBlue, maxBlue;
    double minAlpha, maxAlpha;
};
typedef struct __GLXFBConfigRec *GLXFBConfig;
#endif /* !defined(ANDROID) */

// egl
#if !defined(__unix__) && defined(__APPLE__) && defined(__MACH__)
#define __unix__
#include <EGL/egl.h>
#include <EGL/eglext.h>
#undef __unix__
#else
#include <EGL/egl.h>
#include <EGL/eglext.h>
#endif
#endif
Added jni/glshim/src/util/gl_helpers.h.






































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include <GL/gl.h>
#include <stdbool.h>
#include <stdio.h>

#ifndef GL_HELPERS_H
#define GL_HELPERS_H

#define GL_TYPE_CASE(name, var, magic, type, code) \
    case magic: {                                  \
        type *name = (type *)var;                  \
        code                                       \
        break;                                     \
    }

#define GL_TYPE_SWITCH(name, var, type, code, extra)               \
    switch (type) {                                                \
        GL_TYPE_CASE(name, var, GL_DOUBLE, GLdouble, code)         \
        GL_TYPE_CASE(name, var, GL_FLOAT, GLfloat, code)           \
        GL_TYPE_CASE(name, var, GL_INT, GLint, code)               \
        GL_TYPE_CASE(name, var, GL_SHORT, GLshort, code)           \
        GL_TYPE_CASE(name, var, GL_UNSIGNED_BYTE, GLubyte, code)   \
        GL_TYPE_CASE(name, var, GL_UNSIGNED_INT, GLuint, code)     \
        GL_TYPE_CASE(name, var, GL_UNSIGNED_SHORT, GLushort, code) \
        extra                                                      \
    }

static const GLsizei gl_sizeof(GLenum type) {
    // types
    switch (type) {
        case GL_DOUBLE:
            return 8;
        case GL_FLOAT:
        case GL_INT:
        case GL_UNSIGNED_INT:
        case GL_UNSIGNED_INT_10_10_10_2:
        case GL_UNSIGNED_INT_2_10_10_10_REV:
        case GL_UNSIGNED_INT_8_8_8_8:
        case GL_UNSIGNED_INT_8_8_8_8_REV:
        case GL_4_BYTES:
            return 4;
        case GL_3_BYTES:
            return 3;
        case GL_LUMINANCE_ALPHA:
        case GL_UNSIGNED_SHORT:
        case GL_UNSIGNED_SHORT_1_5_5_5_REV:
        case GL_UNSIGNED_SHORT_4_4_4_4:
        case GL_UNSIGNED_SHORT_4_4_4_4_REV:
        case GL_UNSIGNED_SHORT_5_5_5_1:
        case GL_UNSIGNED_SHORT_5_6_5:
        case GL_UNSIGNED_SHORT_5_6_5_REV:
        case GL_2_BYTES:
            return 2;
        case GL_LUMINANCE:
        case GL_UNSIGNED_BYTE:
        case GL_UNSIGNED_BYTE_2_3_3_REV:
        case GL_UNSIGNED_BYTE_3_3_2:
            return 1;
    }
    // formats
    printf("gl_sizeof(): Unknown data type 0x%x\n", type);
    return 0;
}

static const GLuint gl_max_value(GLenum type) {
    switch (type) {
        // float/double only make sense on tex/color
        // be careful about using this
        case GL_DOUBLE:
        case GL_FLOAT:
            return 1;
        case GL_BYTE:           return 127;
        case GL_UNSIGNED_BYTE:  return 255;
        case GL_SHORT:          return 32767;
        case GL_UNSIGNED_SHORT: return 65535;
        case GL_INT:            return 2147483647;
        case GL_UNSIGNED_INT:   return 4294967295;
    }
    printf("gl_max_value(): Unknown GL type 0x%x\n", type);
    return 0;
}

static const bool gl_is_type_packed(GLenum type) {
    switch (type) {
        case GL_4_BYTES:
        case GL_UNSIGNED_BYTE_2_3_3_REV:
        case GL_UNSIGNED_BYTE_3_3_2:
        case GL_UNSIGNED_INT_10_10_10_2:
        case GL_UNSIGNED_INT_2_10_10_10_REV:
        case GL_UNSIGNED_INT_8_8_8_8:
        case GL_UNSIGNED_INT_8_8_8_8_REV:
        case GL_UNSIGNED_SHORT_1_5_5_5_REV:
        case GL_UNSIGNED_SHORT_4_4_4_4:
        case GL_UNSIGNED_SHORT_4_4_4_4_REV:
        case GL_UNSIGNED_SHORT_5_5_5_1:
        case GL_UNSIGNED_SHORT_5_6_5:
        case GL_UNSIGNED_SHORT_5_6_5_REV:
            return true;
    }
    return false;
}

static const GLsizei gl_pixel_sizeof(GLenum format, GLenum type) {
    GLsizei width = 0;
    switch (format) {
        case GL_ALPHA:
        case GL_LUMINANCE:
        case GL_RED:
            width = 1;
            break;
        case GL_LUMINANCE_ALPHA:
        case GL_RG:
            width = 2;
            break;
        case GL_RGB:
        case GL_BGR:
            width = 3;
            break;
        case GL_RGBA:
        case GL_BGRA:
            width = 4;
            break;
        default:
            printf("gl_pixel_sizeof(): Unknown format %x\n", format);
            return 0;
    }

    if (gl_is_type_packed(type))
        width = 1;

    return width * gl_sizeof(type);
}

static inline const bool gl_valid_vertex_type(GLenum type) {
    switch (type) {
        case GL_BYTE:
        case GL_FIXED:
        case GL_FLOAT:
        case GL_SHORT:
            return true;
        default:
            return false;
    }
}

static inline const bool gl_valid_mode(GLenum mode) {
    switch (mode) {
        case GL_POINTS:
        case GL_LINES:
        case GL_LINE_STRIP:
        case GL_LINE_LOOP:
        case GL_TRIANGLES:
        case GL_TRIANGLE_STRIP:
        case GL_TRIANGLE_FAN:
        case GL_QUADS:
        case GL_QUAD_STRIP:
        case GL_POLYGON:
            return true;
        default:
            return false;
    }
}

#endif
Added jni/glshim/src/util/gl_str.c.
























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
#include <stdlib.h>
#include <string.h>

#include "tack.h"

#define bit(a, b) ((a & b) == b)
#define bit_push(b, str) { if (value & b) tack_push(&bits, str); }

static char *finish(tack_t *bits) {
    char *out = tack_str_join(bits, " | ");
    tack_clear(bits);
    return out;
}

#define strdup _strdup
static char *strdup(const char *str) {
    char *dup = malloc(strlen(str) + 1);
    if (dup) {
        strcpy(dup, str);
    }
    return dup;
}

char *gl_bits_glPushAttrib(int value) {
    tack_t bits = {0};
    if (bit(value, 0x000FFFFF)) {
        return strdup("GL_ALL_ATTRIB_BITS");
    }
    bit_push(0x00000001, "GL_CURRENT_BIT");
    bit_push(0x00000002, "GL_POINT_BIT");
    bit_push(0x00000004, "GL_LINE_BIT");
    bit_push(0x00000008, "GL_POLYGON_BIT");
    bit_push(0x00000010, "GL_POLYGON_STIPPLE_BIT");
    bit_push(0x00000020, "GL_PIXEL_MODE_BIT");
    bit_push(0x00000040, "GL_LIGHTING_BIT");
    bit_push(0x00000080, "GL_FOG_BIT");
    bit_push(0x00000100, "GL_DEPTH_BUFFER_BIT");
    bit_push(0x00000200, "GL_ACCUM_BUFFER_BIT");
    bit_push(0x00000400, "GL_STENCIL_BUFFER_BIT");
    bit_push(0x00000800, "GL_VIEWPORT_BIT");
    bit_push(0x00001000, "GL_TRANSFORM_BIT");
    bit_push(0x00002000, "GL_ENABLE_BIT");
    bit_push(0x00004000, "GL_COLOR_BUFFER_BIT");
    bit_push(0x00008000, "GL_HINT_BIT");
    bit_push(0x00010000, "GL_EVAL_BIT");
    bit_push(0x00020000, "GL_LIST_BIT");
    bit_push(0x00040000, "GL_TEXTURE_BIT");
    bit_push(0x00080000, "GL_SCISSOR_BIT");
    return finish(&bits);
}

char *gl_bits_glPushClientAttrib(int value) {
    tack_t bits = {0};
    if (bit(value, 0xFFFFFFFF)) {
        return strdup("GL_CLIENT_ALL_ATTRIB_BITS");
    }
    bit_push(0x00000001, "GL_CLIENT_PIXEL_STORE_BIT");
    bit_push(0x00000002, "GL_CLIENT_VERTEX_ARRAY_BIT");
    return finish(&bits);
}

char *gl_bits_glCreateShader(int value) {
    tack_t bits = {0};
    if (bit(value, 0xFFFFFFFF)) {
        return strdup("GL_ALL_SHADER_BITS");
    }
    bit_push(0x00000001, "GL_VERTEX_SHADER_BIT");
    bit_push(0x00000002, "GL_FRAGMENT_SHADER_BIT");
    bit_push(0x00000004, "GL_GEOMETRY_SHADER_BIT");
    bit_push(0x00000008, "GL_TESS_CONTROL_SHADER_BIT");
    return finish(&bits);
}

const char *gl_str_glMap(int value) {
    switch (value) {
        case 0x0001: return "GL_MAP_READ_BIT";
        case 0x0002: return "GL_MAP_WRITE_BIT";
        case 0x0004: return "GL_MAP_INVALIDATE_RANGE_BIT";
        case 0x0008: return "GL_MAP_INVALIDATE_BUFFER_BIT";
        case 0x0010: return "GL_MAP_FLUSH_EXPLICIT_BIT";
        case 0x0020: return "GL_MAP_UNSYNCHRONIZED_BIT";
    }
    return NULL;
}

const char *gl_str_primitive(int value) {
    switch (value) {
        case 0x0000: return "GL_POINTS";
        case 0x0001: return "GL_LINES";
        case 0x0002: return "GL_LINE_LOOP";
        case 0x0003: return "GL_LINE_STRIP";
        case 0x0004: return "GL_TRIANGLES";
        case 0x0005: return "GL_TRIANGLE_STRIP";
        case 0x0006: return "GL_TRIANGLE_FAN";
        case 0x0007: return "GL_QUADS";
        case 0x0008: return "GL_QUAD_STRIP";
        case 0x0009: return "GL_POLYGON";
        case 0x000A: return "GL_LINES_ADJACENCY";
        case 0x000B: return "GL_LINE_STRIP_ADJACENCY";
        case 0x000C: return "GL_TRIANGLES_ADJACENCY";
        case 0x000D: return "GL_TRIANGLE_STRIP_ADJACENCY";
    }
    return NULL;
}

const char *gl_str(int value) {
    switch (value) {
        case 0x0: return "GL_ZERO";
        case 0x1: return "GL_ONE";
        case 0x0A00: return "GL_COEFF";
        case 0x0A01: return "GL_ORDER";
        case 0x0A02: return "GL_DOMAIN";
        case 0x0B00: return "GL_CURRENT_COLOR";
        case 0x0B01: return "GL_CURRENT_INDEX";
        case 0x0B02: return "GL_CURRENT_NORMAL";
        case 0x0B03: return "GL_CURRENT_TEXTURE_COORDS";
        case 0x0B04: return "GL_CURRENT_RASTER_COLOR";
        case 0x0B05: return "GL_CURRENT_RASTER_INDEX";
        case 0x0B06: return "GL_CURRENT_RASTER_TEXTURE_COORDS";
        case 0x0B07: return "GL_CURRENT_RASTER_POSITION";
        case 0x0B08: return "GL_CURRENT_RASTER_POSITION_VALID";
        case 0x0B09: return "GL_CURRENT_RASTER_DISTANCE";
        case 0x0B10: return "GL_POINT_SMOOTH";
        case 0x0B11: return "GL_POINT_SIZE";
        case 0x0B12: return "GL_POINT_SIZE_RANGE";
        case 0x0B13: return "GL_POINT_SIZE_GRANULARITY";
        case 0x0B20: return "GL_LINE_SMOOTH";
        case 0x0B21: return "GL_LINE_WIDTH";
        case 0x0B22: return "GL_LINE_WIDTH_RANGE";
        case 0x0B23: return "GL_LINE_WIDTH_GRANULARITY";
        case 0x0B24: return "GL_LINE_STIPPLE";
        case 0x0B25: return "GL_LINE_STIPPLE_PATTERN";
        case 0x0B26: return "GL_LINE_STIPPLE_REPEAT";
        case 0x0B30: return "GL_LIST_MODE";
        case 0x0B31: return "GL_MAX_LIST_NESTING";
        case 0x0B32: return "GL_LIST_BASE";
        case 0x0B33: return "GL_LIST_INDEX";
        case 0x0B40: return "GL_POLYGON_MODE";
        case 0x0B41: return "GL_POLYGON_SMOOTH";
        case 0x0B42: return "GL_POLYGON_STIPPLE";
        case 0x0B43: return "GL_EDGE_FLAG";
        case 0x0B44: return "GL_CULL_FACE";
        case 0x0B45: return "GL_CULL_FACE_MODE";
        case 0x0B46: return "GL_FRONT_FACE";
        case 0x0B50: return "GL_LIGHTING";
        case 0x0B51: return "GL_LIGHT_MODEL_LOCAL_VIEWER";
        case 0x0B52: return "GL_LIGHT_MODEL_TWO_SIDE";
        case 0x0B53: return "GL_LIGHT_MODEL_AMBIENT";
        case 0x0B54: return "GL_SHADE_MODEL";
        case 0x0B55: return "GL_COLOR_MATERIAL_FACE";
        case 0x0B56: return "GL_COLOR_MATERIAL_PARAMETER";
        case 0x0B57: return "GL_COLOR_MATERIAL";
        case 0x0B60: return "GL_FOG";
        case 0x0B61: return "GL_FOG_INDEX";
        case 0x0B62: return "GL_FOG_DENSITY";
        case 0x0B63: return "GL_FOG_START";
        case 0x0B64: return "GL_FOG_END";
        case 0x0B65: return "GL_FOG_MODE";
        case 0x0B66: return "GL_FOG_COLOR";
        case 0x0B70: return "GL_DEPTH_RANGE";
        case 0x0B71: return "GL_DEPTH_TEST";
        case 0x0B72: return "GL_DEPTH_WRITEMASK";
        case 0x0B73: return "GL_DEPTH_CLEAR_VALUE";
        case 0x0B74: return "GL_DEPTH_FUNC";
        case 0x0B80: return "GL_ACCUM_CLEAR_VALUE";
        case 0x0B90: return "GL_STENCIL_TEST";
        case 0x0B91: return "GL_STENCIL_CLEAR_VALUE";
        case 0x0B92: return "GL_STENCIL_FUNC";
        case 0x0B93: return "GL_STENCIL_VALUE_MASK";
        case 0x0B94: return "GL_STENCIL_FAIL";
        case 0x0B95: return "GL_STENCIL_PASS_DEPTH_FAIL";
        case 0x0B96: return "GL_STENCIL_PASS_DEPTH_PASS";
        case 0x0B97: return "GL_STENCIL_REF";
        case 0x0B98: return "GL_STENCIL_WRITEMASK";
        case 0x0BA0: return "GL_MATRIX_MODE";
        case 0x0BA1: return "GL_NORMALIZE";
        case 0x0BA2: return "GL_VIEWPORT";
        case 0x0BA3: return "GL_MODELVIEW_STACK_DEPTH";
        case 0x0BA4: return "GL_PROJECTION_STACK_DEPTH";
        case 0x0BA5: return "GL_TEXTURE_STACK_DEPTH";
        case 0x0BA6: return "GL_MODELVIEW_MATRIX";
        case 0x0BA7: return "GL_PROJECTION_MATRIX";
        case 0x0BA8: return "GL_TEXTURE_MATRIX";
        case 0x0BB0: return "GL_ATTRIB_STACK_DEPTH";
        case 0x0BB1: return "GL_CLIENT_ATTRIB_STACK_DEPTH";
        case 0x0BC0: return "GL_ALPHA_TEST";
        case 0x0BC1: return "GL_ALPHA_TEST_FUNC";
        case 0x0BC2: return "GL_ALPHA_TEST_REF";
        case 0x0BD0: return "GL_DITHER";
        case 0x0BE0: return "GL_BLEND_DST";
        case 0x0BE1: return "GL_BLEND_SRC";
        case 0x0BE2: return "GL_BLEND";
        case 0x0BF0: return "GL_LOGIC_OP_MODE";
        case 0x0BF1: return "GL_LOGIC_OP";
        case 0x0BF2: return "GL_COLOR_LOGIC_OP";
        case 0x0C00: return "GL_AUX_BUFFERS";
        case 0x0C01: return "GL_DRAW_BUFFER";
        case 0x0C02: return "GL_READ_BUFFER";
        case 0x0C10: return "GL_SCISSOR_BOX";
        case 0x0C11: return "GL_SCISSOR_TEST";
        case 0x0C20: return "GL_INDEX_CLEAR_VALUE";
        case 0x0C21: return "GL_INDEX_WRITEMASK";
        case 0x0C22: return "GL_COLOR_CLEAR_VALUE";
        case 0x0C23: return "GL_COLOR_WRITEMASK";
        case 0x0C30: return "GL_INDEX_MODE";
        case 0x0C31: return "GL_RGBA_MODE";
        case 0x0C32: return "GL_DOUBLEBUFFER";
        case 0x0C33: return "GL_STEREO";
        case 0x0C40: return "GL_RENDER_MODE";
        case 0x0C50: return "GL_PERSPECTIVE_CORRECTION_HINT";
        case 0x0C51: return "GL_POINT_SMOOTH_HINT";
        case 0x0C52: return "GL_LINE_SMOOTH_HINT";
        case 0x0C53: return "GL_POLYGON_SMOOTH_HINT";
        case 0x0C54: return "GL_FOG_HINT";
        case 0x0C60: return "GL_TEXTURE_GEN_S";
        case 0x0C61: return "GL_TEXTURE_GEN_T";
        case 0x0C62: return "GL_TEXTURE_GEN_R";
        case 0x0C63: return "GL_TEXTURE_GEN_Q";
        case 0x0C70: return "GL_PIXEL_MAP_I_TO_I";
        case 0x0C71: return "GL_PIXEL_MAP_S_TO_S";
        case 0x0C72: return "GL_PIXEL_MAP_I_TO_R";
        case 0x0C73: return "GL_PIXEL_MAP_I_TO_G";
        case 0x0C74: return "GL_PIXEL_MAP_I_TO_B";
        case 0x0C75: return "GL_PIXEL_MAP_I_TO_A";
        case 0x0C76: return "GL_PIXEL_MAP_R_TO_R";
        case 0x0C77: return "GL_PIXEL_MAP_G_TO_G";
        case 0x0C78: return "GL_PIXEL_MAP_B_TO_B";
        case 0x0C79: return "GL_PIXEL_MAP_A_TO_A";
        case 0x0CB0: return "GL_PIXEL_MAP_I_TO_I_SIZE";
        case 0x0CB1: return "GL_PIXEL_MAP_S_TO_S_SIZE";
        case 0x0CB2: return "GL_PIXEL_MAP_I_TO_R_SIZE";
        case 0x0CB3: return "GL_PIXEL_MAP_I_TO_G_SIZE";
        case 0x0CB4: return "GL_PIXEL_MAP_I_TO_B_SIZE";
        case 0x0CB5: return "GL_PIXEL_MAP_I_TO_A_SIZE";
        case 0x0CB6: return "GL_PIXEL_MAP_R_TO_R_SIZE";
        case 0x0CB7: return "GL_PIXEL_MAP_G_TO_G_SIZE";
        case 0x0CB8: return "GL_PIXEL_MAP_B_TO_B_SIZE";
        case 0x0CB9: return "GL_PIXEL_MAP_A_TO_A_SIZE";
        case 0x0CF0: return "GL_UNPACK_SWAP_BYTES";
        case 0x0CF1: return "GL_UNPACK_LSB_FIRST";
        case 0x0CF2: return "GL_UNPACK_ROW_LENGTH";
        case 0x0CF3: return "GL_UNPACK_SKIP_ROWS";
        case 0x0CF4: return "GL_UNPACK_SKIP_PIXELS";
        case 0x0CF5: return "GL_UNPACK_ALIGNMENT";
        case 0x0D00: return "GL_PACK_SWAP_BYTES";
        case 0x0D01: return "GL_PACK_LSB_FIRST";
        case 0x0D1A: return "GL_BLUE_SCALE";
        case 0x0D1B: return "GL_BLUE_BIAS";
        case 0x0D1C: return "GL_ALPHA_SCALE";
        case 0x0D1D: return "GL_ALPHA_BIAS";
        case 0x0D1E: return "GL_DEPTH_SCALE";
        case 0x0D1F: return "GL_DEPTH_BIAS";
        case 0x0D02: return "GL_PACK_ROW_LENGTH";
        case 0x0D03: return "GL_PACK_SKIP_ROWS";
        case 0x0D3A: return "GL_MAX_VIEWPORT_DIMS";
        case 0x0D3B: return "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH";
        case 0x0D04: return "GL_PACK_SKIP_PIXELS";
        case 0x0D05: return "GL_PACK_ALIGNMENT";
        case 0x0D5A: return "GL_ACCUM_BLUE_BITS";
        case 0x0D5B: return "GL_ACCUM_ALPHA_BITS";
        case 0x0D10: return "GL_MAP_COLOR";
        case 0x0D11: return "GL_MAP_STENCIL";
        case 0x0D12: return "GL_INDEX_SHIFT";
        case 0x0D13: return "GL_INDEX_OFFSET";
        case 0x0D14: return "GL_RED_SCALE";
        case 0x0D15: return "GL_RED_BIAS";
        case 0x0D16: return "GL_ZOOM_X";
        case 0x0D17: return "GL_ZOOM_Y";
        case 0x0D18: return "GL_GREEN_SCALE";
        case 0x0D19: return "GL_GREEN_BIAS";
        case 0x0D30: return "GL_MAX_EVAL_ORDER";
        case 0x0D31: return "GL_MAX_LIGHTS";
        case 0x0D32: return "GL_MAX_CLIP_PLANES";
        case 0x0D33: return "GL_MAX_TEXTURE_SIZE";
        case 0x0D34: return "GL_MAX_PIXEL_MAP_TABLE";
        case 0x0D35: return "GL_MAX_ATTRIB_STACK_DEPTH";
        case 0x0D36: return "GL_MAX_MODELVIEW_STACK_DEPTH";
        case 0x0D37: return "GL_MAX_NAME_STACK_DEPTH";
        case 0x0D38: return "GL_MAX_PROJECTION_STACK_DEPTH";
        case 0x0D39: return "GL_MAX_TEXTURE_STACK_DEPTH";
        case 0x0D50: return "GL_SUBPIXEL_BITS";
        case 0x0D51: return "GL_INDEX_BITS";
        case 0x0D52: return "GL_RED_BITS";
        case 0x0D53: return "GL_GREEN_BITS";
        case 0x0D54: return "GL_BLUE_BITS";
        case 0x0D55: return "GL_ALPHA_BITS";
        case 0x0D56: return "GL_DEPTH_BITS";
        case 0x0D57: return "GL_STENCIL_BITS";
        case 0x0D58: return "GL_ACCUM_RED_BITS";
        case 0x0D59: return "GL_ACCUM_GREEN_BITS";
        case 0x0D70: return "GL_NAME_STACK_DEPTH";
        case 0x0D80: return "GL_AUTO_NORMAL";
        case 0x0D90: return "GL_MAP1_COLOR_4";
        case 0x0D91: return "GL_MAP1_INDEX";
        case 0x0D92: return "GL_MAP1_NORMAL";
        case 0x0D93: return "GL_MAP1_TEXTURE_COORD_1";
        case 0x0D94: return "GL_MAP1_TEXTURE_COORD_2";
        case 0x0D95: return "GL_MAP1_TEXTURE_COORD_3";
        case 0x0D96: return "GL_MAP1_TEXTURE_COORD_4";
        case 0x0D97: return "GL_MAP1_VERTEX_3";
        case 0x0D98: return "GL_MAP1_VERTEX_4";
        case 0x0DB0: return "GL_MAP2_COLOR_4";
        case 0x0DB1: return "GL_MAP2_INDEX";
        case 0x0DB2: return "GL_MAP2_NORMAL";
        case 0x0DB3: return "GL_MAP2_TEXTURE_COORD_1";
        case 0x0DB4: return "GL_MAP2_TEXTURE_COORD_2";
        case 0x0DB5: return "GL_MAP2_TEXTURE_COORD_3";
        case 0x0DB6: return "GL_MAP2_TEXTURE_COORD_4";
        case 0x0DB7: return "GL_MAP2_VERTEX_3";
        case 0x0DB8: return "GL_MAP2_VERTEX_4";
        case 0x0DD0: return "GL_MAP1_GRID_DOMAIN";
        case 0x0DD1: return "GL_MAP1_GRID_SEGMENTS";
        case 0x0DD2: return "GL_MAP2_GRID_DOMAIN";
        case 0x0DD3: return "GL_MAP2_GRID_SEGMENTS";
        case 0x0DE0: return "GL_TEXTURE_1D";
        case 0x0DE1: return "GL_TEXTURE_2D";
        case 0x0DF0: return "GL_FEEDBACK_BUFFER_POINTER";
        case 0x0DF1: return "GL_FEEDBACK_BUFFER_SIZE";
        case 0x0DF2: return "GL_FEEDBACK_BUFFER_TYPE";
        case 0x0DF3: return "GL_SELECTION_BUFFER_POINTER";
        case 0x0DF4: return "GL_SELECTION_BUFFER_SIZE";
        case 0x000E: return "GL_PATCHES";
        case 0x1A00: return "GL_BITMAP";
        case 0x1B00: return "GL_POINT";
        case 0x1B01: return "GL_LINE";
        case 0x1B02: return "GL_FILL";
        case 0x1C00: return "GL_RENDER";
        case 0x1C01: return "GL_FEEDBACK";
        case 0x1C02: return "GL_SELECT";
        case 0x1D00: return "GL_FLAT";
        case 0x1D01: return "GL_SMOOTH";
        case 0x1E00: return "GL_KEEP";
        case 0x1E01: return "GL_REPLACE";
        case 0x1E02: return "GL_INCR";
        case 0x1E03: return "GL_DECR";
        case 0x1F00: return "GL_VENDOR";
        case 0x1F01: return "GL_RENDERER";
        case 0x1F02: return "GL_VERSION";
        case 0x1F03: return "GL_EXTENSIONS";
        case 0x2A00: return "GL_POLYGON_OFFSET_UNITS";
        case 0x2A01: return "GL_POLYGON_OFFSET_POINT";
        case 0x2A02: return "GL_POLYGON_OFFSET_LINE";
        case 0x2A2A: return "GL_T2F_C3F_V3F";
        case 0x2A2B: return "GL_T2F_N3F_V3F";
        case 0x2A2C: return "GL_T2F_C4F_N3F_V3F";
        case 0x2A2D: return "GL_T4F_C4F_N3F_V4F";
        case 0x2A10: return "GL_R3_G3_B2";
        case 0x2A20: return "GL_V2F";
        case 0x2A21: return "GL_V3F";
        case 0x2A22: return "GL_C4UB_V2F";
        case 0x2A23: return "GL_C4UB_V3F";
        case 0x2A24: return "GL_C3F_V3F";
        case 0x2A25: return "GL_N3F_V3F";
        case 0x2A26: return "GL_C4F_N3F_V3F";
        case 0x2A27: return "GL_T2F_V3F";
        case 0x2A28: return "GL_T4F_V4F";
        case 0x2A29: return "GL_T2F_C4UB_V3F";
        case 0x8A00: return "GL_VERTEX_ATTRIB_MAP1_APPLE";
        case 0x8A0A: return "GL_DRAW_PIXELS_APPLE";
        case 0x8A0B: return "GL_FENCE_APPLE";
        case 0x8A0C: return "GL_ELEMENT_ARRAY_APPLE";
        case 0x8A0D: return "GL_ELEMENT_ARRAY_TYPE_APPLE";
        case 0x8A0E: return "GL_ELEMENT_ARRAY_POINTER_APPLE";
        case 0x8A0F: return "GL_COLOR_FLOAT_APPLE";
        case 0x8A01: return "GL_VERTEX_ATTRIB_MAP2_APPLE";
        case 0x8A1A: return "GL_VOLATILE_APPLE";
        case 0x8A1B: return "GL_RETAINED_APPLE";
        case 0x8A1C: return "GL_UNDEFINED_APPLE";
        case 0x8A1D: return "GL_PURGEABLE_APPLE";
        case 0x8A1F: return "GL_RGB_422_APPLE";
        case 0x8A02: return "GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE";
        case 0x8A2A: return "GL_UNIFORM_BUFFER_SIZE";
        case 0x8A2B: return "GL_MAX_VERTEX_UNIFORM_BLOCKS";
        case 0x8A2C: return "GL_MAX_GEOMETRY_UNIFORM_BLOCKS";
        case 0x8A2D: return "GL_MAX_FRAGMENT_UNIFORM_BLOCKS";
        case 0x8A2E: return "GL_MAX_COMBINED_UNIFORM_BLOCKS";
        case 0x8A2F: return "GL_MAX_UNIFORM_BUFFER_BINDINGS";
        case 0x8A03: return "GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE";
        case 0x8A3A: return "GL_UNIFORM_BLOCK_INDEX";
        case 0x8A3B: return "GL_UNIFORM_OFFSET";
        case 0x8A3C: return "GL_UNIFORM_ARRAY_STRIDE";
        case 0x8A3D: return "GL_UNIFORM_MATRIX_STRIDE";
        case 0x8A3E: return "GL_UNIFORM_IS_ROW_MAJOR";
        case 0x8A3F: return "GL_UNIFORM_BLOCK_BINDING";
        case 0x8A04: return "GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE";
        case 0x8A05: return "GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE";
        case 0x8A06: return "GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE";
        case 0x8A07: return "GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE";
        case 0x8A08: return "GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE";
        case 0x8A09: return "GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE";
        case 0x8A11: return "GL_UNIFORM_BUFFER";
        case 0x8A12: return "GL_BUFFER_SERIALIZED_MODIFY_APPLE";
        case 0x8A13: return "GL_BUFFER_FLUSHING_UNMAP_APPLE";
        case 0x8A14: return "GL_AUX_DEPTH_STENCIL_APPLE";
        case 0x8A15: return "GL_PACK_ROW_BYTES_APPLE";
        case 0x8A16: return "GL_UNPACK_ROW_BYTES_APPLE";
        case 0x8A19: return "GL_RELEASED_APPLE";
        case 0x8A28: return "GL_UNIFORM_BUFFER_BINDING";
        case 0x8A29: return "GL_UNIFORM_BUFFER_START";
        case 0x8A30: return "GL_MAX_UNIFORM_BLOCK_SIZE";
        case 0x8A31: return "GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS";
        case 0x8A32: return "GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS";
        case 0x8A33: return "GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS";
        case 0x8A34: return "GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT";
        case 0x8A35: return "GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH";
        case 0x8A36: return "GL_ACTIVE_UNIFORM_BLOCKS";
        case 0x8A37: return "GL_UNIFORM_TYPE";
        case 0x8A38: return "GL_UNIFORM_SIZE";
        case 0x8A39: return "GL_UNIFORM_NAME_LENGTH";
        case 0x8A40: return "GL_UNIFORM_BLOCK_DATA_SIZE";
        case 0x8A41: return "GL_UNIFORM_BLOCK_NAME_LENGTH";
        case 0x8A42: return "GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS";
        case 0x8A43: return "GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES";
        case 0x8A44: return "GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER";
        case 0x8A45: return "GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER";
        case 0x8A46: return "GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER";
        case 0x8B4A: return "GL_MAX_VERTEX_UNIFORM_COMPONENTS";
        case 0x8B4B: return "GL_MAX_VARYING_COMPONENTS";
        case 0x8B4C: return "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS";
        case 0x8B4D: return "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS";
        case 0x8B4E: return "GL_OBJECT_TYPE_ARB";
        case 0x8B4F: return "GL_SHADER_TYPE";
        case 0x8B5A: return "GL_FLOAT_MAT2";
        case 0x8B5B: return "GL_FLOAT_MAT3";
        case 0x8B5C: return "GL_FLOAT_MAT4";
        case 0x8B5D: return "GL_SAMPLER_1D";
        case 0x8B5E: return "GL_SAMPLER_2D";
        case 0x8B5F: return "GL_SAMPLER_3D";
        case 0x8B6A: return "GL_FLOAT_MAT4x3";
        case 0x8B8A: return "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH";
        case 0x8B8B: return "GL_FRAGMENT_SHADER_DERIVATIVE_HINT";
        case 0x8B8C: return "GL_SHADING_LANGUAGE_VERSION";
        case 0x8B8D: return "GL_CURRENT_PROGRAM";
        case 0x8B9A: return "GL_IMPLEMENTATION_COLOR_READ_TYPE";
        case 0x8B9B: return "GL_IMPLEMENTATION_COLOR_READ_FORMAT";
        case 0x8B30: return "GL_FRAGMENT_SHADER";
        case 0x8B31: return "GL_VERTEX_SHADER";
        case 0x8B40: return "GL_PROGRAM_OBJECT_ARB";
        case 0x8B48: return "GL_SHADER_OBJECT_ARB";
        case 0x8B49: return "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS";
        case 0x8B50: return "GL_FLOAT_VEC2";
        case 0x8B51: return "GL_FLOAT_VEC3";
        case 0x8B52: return "GL_FLOAT_VEC4";
        case 0x8B53: return "GL_INT_VEC2";
        case 0x8B54: return "GL_INT_VEC3";
        case 0x8B55: return "GL_INT_VEC4";
        case 0x8B56: return "GL_BOOL";
        case 0x8B57: return "GL_BOOL_VEC2";
        case 0x8B58: return "GL_BOOL_VEC3";
        case 0x8B59: return "GL_BOOL_VEC4";
        case 0x8B60: return "GL_SAMPLER_CUBE";
        case 0x8B61: return "GL_SAMPLER_1D_SHADOW";
        case 0x8B62: return "GL_SAMPLER_2D_SHADOW";
        case 0x8B63: return "GL_SAMPLER_2D_RECT";
        case 0x8B64: return "GL_SAMPLER_2D_RECT_SHADOW";
        case 0x8B65: return "GL_FLOAT_MAT2x3";
        case 0x8B66: return "GL_FLOAT_MAT2x4";
        case 0x8B67: return "GL_FLOAT_MAT3x2";
        case 0x8B68: return "GL_FLOAT_MAT3x4";
        case 0x8B69: return "GL_FLOAT_MAT4x2";
        case 0x8B80: return "GL_DELETE_STATUS";
        case 0x8B81: return "GL_COMPILE_STATUS";
        case 0x8B82: return "GL_LINK_STATUS";
        case 0x8B83: return "GL_OBJECT_VALIDATE_STATUS_ARB";
        case 0x8B84: return "GL_INFO_LOG_LENGTH";
        case 0x8B85: return "GL_ATTACHED_SHADERS";
        case 0x8B86: return "GL_ACTIVE_UNIFORMS";
        case 0x8B87: return "GL_ACTIVE_UNIFORM_MAX_LENGTH";
        case 0x8B88: return "GL_OBJECT_SHADER_SOURCE_LENGTH_ARB";
        case 0x8B89: return "GL_ACTIVE_ATTRIBUTES";
        case 0x8bb0: return "GL_FRAGMENT_PROGRAM_POSITION_MESA";
        case 0x8bb1: return "GL_FRAGMENT_PROGRAM_CALLBACK_MESA";
        case 0x8bb2: return "GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA";
        case 0x8bb3: return "GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA";
        case 0x8bb4: return "GL_VERTEX_PROGRAM_POSITION_MESA";
        case 0x8bb5: return "GL_VERTEX_PROGRAM_CALLBACK_MESA";
        case 0x8bb6: return "GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA";
        case 0x8bb7: return "GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA";
        case 0x8BC0: return "GL_COUNTER_TYPE_AMD";
        case 0x8BC1: return "GL_COUNTER_RANGE_AMD";
        case 0x8BC2: return "GL_UNSIGNED_INT64_AMD";
        case 0x8BC3: return "GL_PERCENTAGE_AMD";
        case 0x8BC4: return "GL_PERFMON_RESULT_AVAILABLE_AMD";
        case 0x8BC5: return "GL_PERFMON_RESULT_SIZE_AMD";
        case 0x8BC6: return "GL_PERFMON_RESULT_AMD";
        case 0x8C1A: return "GL_TEXTURE_2D_ARRAY";
        case 0x8C1B: return "GL_PROXY_TEXTURE_2D_ARRAY";
        case 0x8C1C: return "GL_TEXTURE_BINDING_1D_ARRAY";
        case 0x8C1D: return "GL_TEXTURE_BINDING_2D_ARRAY";
        case 0x8C2A: return "GL_TEXTURE_BUFFER";
        case 0x8C2B: return "GL_MAX_TEXTURE_BUFFER_SIZE";
        case 0x8C2C: return "GL_TEXTURE_BINDING_BUFFER";
        case 0x8C2D: return "GL_TEXTURE_BUFFER_DATA_STORE_BINDING";
        case 0x8C2E: return "GL_TEXTURE_BUFFER_FORMAT";
        case 0x8C2F: return "GL_ANY_SAMPLES_PASSED";
        case 0x8C3A: return "GL_R11F_G11F_B10F";
        case 0x8C3B: return "GL_UNSIGNED_INT_10F_11F_11F_REV";
        case 0x8C3C: return "GL_RGBA_SIGNED_COMPONENTS_EXT";
        case 0x8C3D: return "GL_RGB9_E5";
        case 0x8C3E: return "GL_UNSIGNED_INT_5_9_9_9_REV";
        case 0x8C3F: return "GL_TEXTURE_SHARED_SIZE";
        case 0x8C4A: return "GL_COMPRESSED_SLUMINANCE";
        case 0x8C4B: return "GL_COMPRESSED_SLUMINANCE_ALPHA";
        case 0x8C4C: return "GL_COMPRESSED_SRGB_S3TC_DXT1_EXT";
        case 0x8C4D: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT";
        case 0x8C4E: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT";
        case 0x8C4F: return "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT";
        case 0x8C7F: return "GL_TRANSFORM_FEEDBACK_BUFFER_MODE";
        case 0x8C8A: return "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS";
        case 0x8C8B: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS";
        case 0x8C8C: return "GL_INTERLEAVED_ATTRIBS";
        case 0x8C8D: return "GL_SEPARATE_ATTRIBS";
        case 0x8C8E: return "GL_TRANSFORM_FEEDBACK_BUFFER";
        case 0x8C8F: return "GL_TRANSFORM_FEEDBACK_BUFFER_BINDING";
        case 0x8C10: return "GL_TEXTURE_RED_TYPE";
        case 0x8C11: return "GL_TEXTURE_GREEN_TYPE";
        case 0x8C12: return "GL_TEXTURE_BLUE_TYPE";
        case 0x8C13: return "GL_TEXTURE_ALPHA_TYPE";
        case 0x8C14: return "GL_TEXTURE_LUMINANCE_TYPE";
        case 0x8C15: return "GL_TEXTURE_INTENSITY_TYPE";
        case 0x8C16: return "GL_TEXTURE_DEPTH_TYPE";
        case 0x8C17: return "GL_UNSIGNED_NORMALIZED";
        case 0x8C18: return "GL_TEXTURE_1D_ARRAY";
        case 0x8C19: return "GL_PROXY_TEXTURE_1D_ARRAY";
        case 0x8C29: return "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS";
        case 0x8C36: return "GL_SAMPLE_SHADING";
        case 0x8C37: return "GL_MIN_SAMPLE_SHADING_VALUE";
        case 0x8C40: return "GL_SRGB";
        case 0x8C41: return "GL_SRGB8";
        case 0x8C42: return "GL_SRGB_ALPHA";
        case 0x8C43: return "GL_SRGB8_ALPHA8";
        case 0x8C44: return "GL_SLUMINANCE_ALPHA";
        case 0x8C45: return "GL_SLUMINANCE8_ALPHA8";
        case 0x8C46: return "GL_SLUMINANCE";
        case 0x8C47: return "GL_SLUMINANCE8";
        case 0x8C48: return "GL_COMPRESSED_SRGB";
        case 0x8C49: return "GL_COMPRESSED_SRGB_ALPHA";
        case 0x8C70: return "GL_COMPRESSED_LUMINANCE_LATC1_EXT";
        case 0x8C71: return "GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT";
        case 0x8C72: return "GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT";
        case 0x8C73: return "GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT";
        case 0x8C76: return "GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH";
        case 0x8C80: return "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS";
        case 0x8C83: return "GL_TRANSFORM_FEEDBACK_VARYINGS";
        case 0x8C84: return "GL_TRANSFORM_FEEDBACK_BUFFER_START";
        case 0x8C85: return "GL_TRANSFORM_FEEDBACK_BUFFER_SIZE";
        case 0x8C87: return "GL_PRIMITIVES_GENERATED";
        case 0x8C88: return "GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN";
        case 0x8C89: return "GL_RASTERIZER_DISCARD";
        case 0x8CA0: return "GL_POINT_SPRITE_COORD_ORIGIN";
        case 0x8CA1: return "GL_LOWER_LEFT";
        case 0x8CA2: return "GL_UPPER_LEFT";
        case 0x8CA3: return "GL_STENCIL_BACK_REF";
        case 0x8CA4: return "GL_STENCIL_BACK_VALUE_MASK";
        case 0x8CA5: return "GL_STENCIL_BACK_WRITEMASK";
        case 0x8CA6: return "GL_FRAMEBUFFER_BINDING";
        case 0x8CA7: return "GL_RENDERBUFFER_BINDING";
        case 0x8CA8: return "GL_READ_FRAMEBUFFER";
        case 0x8CA9: return "GL_DRAW_FRAMEBUFFER";
        case 0x8CAA: return "GL_READ_FRAMEBUFFER_BINDING";
        case 0x8CAB: return "GL_RENDERBUFFER_SAMPLES";
        case 0x8CAC: return "GL_DEPTH_COMPONENT32F";
        case 0x8CAD: return "GL_DEPTH32F_STENCIL8";
        case 0x8CD0: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE";
        case 0x8CD1: return "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME";
        case 0x8CD2: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL";
        case 0x8CD3: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE";
        case 0x8CD4: return "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER";
        case 0x8CD5: return "GL_FRAMEBUFFER_COMPLETE";
        case 0x8CD6: return "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT";
        case 0x8CD7: return "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";
        case 0x8CD9: return "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT";
        case 0x8CDA: return "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT";
        case 0x8CDB: return "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER";
        case 0x8CDC: return "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER";
        case 0x8CDD: return "GL_FRAMEBUFFER_UNSUPPORTED";
        case 0x8CDF: return "GL_MAX_COLOR_ATTACHMENTS";
        case 0x8CE0: return "GL_COLOR_ATTACHMENT0";
        case 0x8CE1: return "GL_COLOR_ATTACHMENT1";
        case 0x8CE2: return "GL_COLOR_ATTACHMENT2";
        case 0x8CE3: return "GL_COLOR_ATTACHMENT3";
        case 0x8CE4: return "GL_COLOR_ATTACHMENT4";
        case 0x8CE5: return "GL_COLOR_ATTACHMENT5";
        case 0x8CE6: return "GL_COLOR_ATTACHMENT6";
        case 0x8CE7: return "GL_COLOR_ATTACHMENT7";
        case 0x8CE8: return "GL_COLOR_ATTACHMENT8";
        case 0x8CE9: return "GL_COLOR_ATTACHMENT9";
        case 0x8CEA: return "GL_COLOR_ATTACHMENT10";
        case 0x8CEB: return "GL_COLOR_ATTACHMENT11";
        case 0x8CEC: return "GL_COLOR_ATTACHMENT12";
        case 0x8CED: return "GL_COLOR_ATTACHMENT13";
        case 0x8CEE: return "GL_COLOR_ATTACHMENT14";
        case 0x8CEF: return "GL_COLOR_ATTACHMENT15";
        case 0x8D00: return "GL_DEPTH_ATTACHMENT";
        case 0x8D7A: return "GL_LUMINANCE16UI_EXT";
        case 0x8D7B: return "GL_LUMINANCE_ALPHA16UI_EXT";
        case 0x8D7C: return "GL_RGBA8UI";
        case 0x8D7D: return "GL_RGB8UI";
        case 0x8D7E: return "GL_ALPHA8UI_EXT";
        case 0x8D7F: return "GL_INTENSITY8UI_EXT";
        case 0x8D8A: return "GL_ALPHA16I_EXT";
        case 0x8D8B: return "GL_INTENSITY16I_EXT";
        case 0x8D8C: return "GL_LUMINANCE16I_EXT";
        case 0x8D8D: return "GL_LUMINANCE_ALPHA16I_EXT";
        case 0x8D8E: return "GL_RGBA8I";
        case 0x8D8F: return "GL_RGB8I";
        case 0x8D9A: return "GL_BGR_INTEGER";
        case 0x8D9B: return "GL_BGRA_INTEGER";
        case 0x8D9C: return "GL_LUMINANCE_INTEGER_EXT";
        case 0x8D9D: return "GL_LUMINANCE_ALPHA_INTEGER_EXT";
        case 0x8D9E: return "GL_RGBA_INTEGER_MODE_EXT";
        case 0x8D9F: return "GL_INT_2_10_10_10_REV";
        case 0x8D20: return "GL_STENCIL_ATTACHMENT";
        case 0x8D40: return "GL_FRAMEBUFFER";
        case 0x8D41: return "GL_RENDERBUFFER";
        case 0x8D42: return "GL_RENDERBUFFER_WIDTH";
        case 0x8D43: return "GL_RENDERBUFFER_HEIGHT";
        case 0x8D44: return "GL_RENDERBUFFER_INTERNAL_FORMAT";
        case 0x8D46: return "GL_STENCIL_INDEX1";
        case 0x8D47: return "GL_STENCIL_INDEX4";
        case 0x8D48: return "GL_STENCIL_INDEX8";
        case 0x8D49: return "GL_STENCIL_INDEX16";
        case 0x8D50: return "GL_RENDERBUFFER_RED_SIZE";
        case 0x8D51: return "GL_RENDERBUFFER_GREEN_SIZE";
        case 0x8D52: return "GL_RENDERBUFFER_BLUE_SIZE";
        case 0x8D53: return "GL_RENDERBUFFER_ALPHA_SIZE";
        case 0x8D54: return "GL_RENDERBUFFER_DEPTH_SIZE";
        case 0x8D55: return "GL_RENDERBUFFER_STENCIL_SIZE";
        case 0x8D56: return "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE";
        case 0x8D57: return "GL_MAX_SAMPLES";
        case 0x8D70: return "GL_RGBA32UI";
        case 0x8D71: return "GL_RGB32UI";
        case 0x8D72: return "GL_ALPHA32UI_EXT";
        case 0x8D73: return "GL_INTENSITY32UI_EXT";
        case 0x8D74: return "GL_LUMINANCE32UI_EXT";
        case 0x8D75: return "GL_LUMINANCE_ALPHA32UI_EXT";
        case 0x8D76: return "GL_RGBA16UI";
        case 0x8D77: return "GL_RGB16UI";
        case 0x8D78: return "GL_ALPHA16UI_EXT";
        case 0x8D79: return "GL_INTENSITY16UI_EXT";
        case 0x8D80: return "GL_LUMINANCE8UI_EXT";
        case 0x8D81: return "GL_LUMINANCE_ALPHA8UI_EXT";
        case 0x8D82: return "GL_RGBA32I";
        case 0x8D83: return "GL_RGB32I";
        case 0x8D84: return "GL_ALPHA32I_EXT";
        case 0x8D85: return "GL_INTENSITY32I_EXT";
        case 0x8D86: return "GL_LUMINANCE32I_EXT";
        case 0x8D87: return "GL_LUMINANCE_ALPHA32I_EXT";
        case 0x8D88: return "GL_RGBA16I";
        case 0x8D89: return "GL_RGB16I";
        case 0x8D90: return "GL_ALPHA8I_EXT";
        case 0x8D91: return "GL_INTENSITY8I_EXT";
        case 0x8D92: return "GL_LUMINANCE8I_EXT";
        case 0x8D93: return "GL_LUMINANCE_ALPHA8I_EXT";
        case 0x8D94: return "GL_RED_INTEGER";
        case 0x8D95: return "GL_GREEN_INTEGER";
        case 0x8D96: return "GL_BLUE_INTEGER";
        case 0x8D97: return "GL_ALPHA_INTEGER";
        case 0x8D98: return "GL_RGB_INTEGER";
        case 0x8D99: return "GL_RGBA_INTEGER";
        case 0x8DA7: return "GL_FRAMEBUFFER_ATTACHMENT_LAYERED";
        case 0x8DA8: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS";
        case 0x8DA9: return "GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT";
        case 0x8DAD: return "GL_FLOAT_32_UNSIGNED_INT_24_8_REV";
        case 0x8DAE: return "GL_SHADER_INCLUDE_ARB";
        case 0x8DB9: return "GL_FRAMEBUFFER_SRGB";
        case 0x8DBA: return "GL_FRAMEBUFFER_SRGB_CAPABLE_EXT";
        case 0x8DBB: return "GL_COMPRESSED_RED_RGTC1";
        case 0x8DBC: return "GL_COMPRESSED_SIGNED_RED_RGTC1";
        case 0x8DBD: return "GL_COMPRESSED_RG_RGTC2";
        case 0x8DBE: return "GL_COMPRESSED_SIGNED_RG_RGTC2";
        case 0x8DC0: return "GL_SAMPLER_1D_ARRAY";
        case 0x8DC1: return "GL_SAMPLER_2D_ARRAY";
        case 0x8DC2: return "GL_SAMPLER_BUFFER";
        case 0x8DC3: return "GL_SAMPLER_1D_ARRAY_SHADOW";
        case 0x8DC4: return "GL_SAMPLER_2D_ARRAY_SHADOW";
        case 0x8DC5: return "GL_SAMPLER_CUBE_SHADOW";
        case 0x8DC6: return "GL_UNSIGNED_INT_VEC2";
        case 0x8DC7: return "GL_UNSIGNED_INT_VEC3";
        case 0x8DC8: return "GL_UNSIGNED_INT_VEC4";
        case 0x8DC9: return "GL_INT_SAMPLER_1D";
        case 0x8DCA: return "GL_INT_SAMPLER_2D";
        case 0x8DCB: return "GL_INT_SAMPLER_3D";
        case 0x8DCC: return "GL_INT_SAMPLER_CUBE";
        case 0x8DCD: return "GL_INT_SAMPLER_2D_RECT";
        case 0x8DCE: return "GL_INT_SAMPLER_1D_ARRAY";
        case 0x8DCF: return "GL_INT_SAMPLER_2D_ARRAY";
        case 0x8DD0: return "GL_INT_SAMPLER_BUFFER";
        case 0x8DD1: return "GL_UNSIGNED_INT_SAMPLER_1D";
        case 0x8DD2: return "GL_UNSIGNED_INT_SAMPLER_2D";
        case 0x8DD3: return "GL_UNSIGNED_INT_SAMPLER_3D";
        case 0x8DD4: return "GL_UNSIGNED_INT_SAMPLER_CUBE";
        case 0x8DD5: return "GL_UNSIGNED_INT_SAMPLER_2D_RECT";
        case 0x8DD6: return "GL_UNSIGNED_INT_SAMPLER_1D_ARRAY";
        case 0x8DD7: return "GL_UNSIGNED_INT_SAMPLER_2D_ARRAY";
        case 0x8DD8: return "GL_UNSIGNED_INT_SAMPLER_BUFFER";
        case 0x8DD9: return "GL_GEOMETRY_SHADER";
        case 0x8DDA: return "GL_GEOMETRY_VERTICES_OUT_EXT";
        case 0x8DDB: return "GL_GEOMETRY_INPUT_TYPE_EXT";
        case 0x8DDC: return "GL_GEOMETRY_OUTPUT_TYPE_EXT";
        case 0x8DDD: return "GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT";
        case 0x8DDE: return "GL_MAX_VERTEX_VARYING_COMPONENTS_EXT";
        case 0x8DDF: return "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS";
        case 0x8DE0: return "GL_MAX_GEOMETRY_OUTPUT_VERTICES";
        case 0x8DE1: return "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS";
        case 0x8DE2: return "GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT";
        case 0x8DE3: return "GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT";
        case 0x8DE4: return "GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT";
        case 0x8DE5: return "GL_ACTIVE_SUBROUTINES";
        case 0x8DE6: return "GL_ACTIVE_SUBROUTINE_UNIFORMS";
        case 0x8DE7: return "GL_MAX_SUBROUTINES";
        case 0x8DE8: return "GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS";
        case 0x8DE9: return "GL_NAMED_STRING_LENGTH_ARB";
        case 0x8DEA: return "GL_NAMED_STRING_TYPE_ARB";
        case 0x8DED: return "GL_MAX_BINDABLE_UNIFORM_SIZE_EXT";
        case 0x8DEE: return "GL_UNIFORM_BUFFER_EXT";
        case 0x8DEF: return "GL_UNIFORM_BUFFER_BINDING_EXT";
        case 0x8DF0: return "GL_LOW_FLOAT";
        case 0x8DF1: return "GL_MEDIUM_FLOAT";
        case 0x8DF2: return "GL_HIGH_FLOAT";
        case 0x8DF3: return "GL_LOW_INT";
        case 0x8DF4: return "GL_MEDIUM_INT";
        case 0x8DF5: return "GL_HIGH_INT";
        case 0x8DF9: return "GL_NUM_SHADER_BINARY_FORMATS";
        case 0x8DFA: return "GL_SHADER_COMPILER";
        case 0x8DFB: return "GL_MAX_VERTEX_UNIFORM_VECTORS";
        case 0x8DFC: return "GL_MAX_VARYING_VECTORS";
        case 0x8DFD: return "GL_MAX_FRAGMENT_UNIFORM_VECTORS";
        case 0x8E1E: return "GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS";
        case 0x8E1F: return "GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS";
        case 0x8E2D: return "GL_PROGRAM_MATRIX_EXT";
        case 0x8E2E: return "GL_TRANSPOSE_PROGRAM_MATRIX_EXT";
        case 0x8E2F: return "GL_PROGRAM_MATRIX_STACK_DEPTH_EXT";
        case 0x8E4A: return "GL_NUM_COMPATIBLE_SUBROUTINES";
        case 0x8E4B: return "GL_COMPATIBLE_SUBROUTINES";
        case 0x8E4C: return "GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION";
        case 0x8E4D: return "GL_FIRST_VERTEX_CONVENTION";
        case 0x8E4E: return "GL_LAST_VERTEX_CONVENTION";
        case 0x8E4F: return "GL_PROVOKING_VERTEX";
        case 0x8E5A: return "GL_MAX_GEOMETRY_SHADER_INVOCATIONS";
        case 0x8E5B: return "GL_MIN_FRAGMENT_INTERPOLATION_OFFSET";
        case 0x8E5C: return "GL_MAX_FRAGMENT_INTERPOLATION_OFFSET";
        case 0x8E5D: return "GL_FRAGMENT_INTERPOLATION_OFFSET_BITS";
        case 0x8E5E: return "GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET";
        case 0x8E5F: return "GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET";
        case 0x8E7A: return "GL_ISOLINES";
        case 0x8E7B: return "GL_FRACTIONAL_ODD";
        case 0x8E7C: return "GL_FRACTIONAL_EVEN";
        case 0x8E7D: return "GL_MAX_PATCH_VERTICES";
        case 0x8E7E: return "GL_MAX_TESS_GEN_LEVEL";
        case 0x8E7F: return "GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS";
        case 0x8E8A: return "GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS";
        case 0x8E8C: return "GL_COMPRESSED_RGBA_BPTC_UNORM_ARB";
        case 0x8E8D: return "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB";
        case 0x8E8E: return "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB";
        case 0x8E8F: return "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB";
        case 0x8E13: return "GL_QUERY_WAIT";
        case 0x8E14: return "GL_QUERY_NO_WAIT";
        case 0x8E15: return "GL_QUERY_BY_REGION_WAIT";
        case 0x8E16: return "GL_QUERY_BY_REGION_NO_WAIT";
        case 0x8E22: return "GL_TRANSFORM_FEEDBACK";
        case 0x8E23: return "GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED";
        case 0x8E24: return "GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE";
        case 0x8E25: return "GL_TRANSFORM_FEEDBACK_BINDING";
        case 0x8E28: return "GL_TIMESTAMP";
        case 0x8E42: return "GL_TEXTURE_SWIZZLE_R";
        case 0x8E43: return "GL_TEXTURE_SWIZZLE_G";
        case 0x8E44: return "GL_TEXTURE_SWIZZLE_B";
        case 0x8E45: return "GL_TEXTURE_SWIZZLE_A";
        case 0x8E46: return "GL_TEXTURE_SWIZZLE_RGBA";
        case 0x8E47: return "GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS";
        case 0x8E48: return "GL_ACTIVE_SUBROUTINE_MAX_LENGTH";
        case 0x8E49: return "GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH";
        case 0x8E50: return "GL_SAMPLE_POSITION";
        case 0x8E51: return "GL_SAMPLE_MASK";
        case 0x8E52: return "GL_SAMPLE_MASK_VALUE";
        case 0x8E59: return "GL_MAX_SAMPLE_MASK_WORDS";
        case 0x8E70: return "GL_MAX_TRANSFORM_FEEDBACK_BUFFERS";
        case 0x8E71: return "GL_MAX_VERTEX_STREAMS";
        case 0x8E72: return "GL_PATCH_VERTICES";
        case 0x8E73: return "GL_PATCH_DEFAULT_INNER_LEVEL";
        case 0x8E74: return "GL_PATCH_DEFAULT_OUTER_LEVEL";
        case 0x8E75: return "GL_TESS_CONTROL_OUTPUT_VERTICES";
        case 0x8E76: return "GL_TESS_GEN_MODE";
        case 0x8E77: return "GL_TESS_GEN_SPACING";
        case 0x8E78: return "GL_TESS_GEN_VERTEX_ORDER";
        case 0x8E79: return "GL_TESS_GEN_POINT_MODE";
        case 0x8E80: return "GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS";
        case 0x8E81: return "GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS";
        case 0x8E82: return "GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS";
        case 0x8E83: return "GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS";
        case 0x8E84: return "GL_MAX_TESS_PATCH_COMPONENTS";
        case 0x8E85: return "GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS";
        case 0x8E86: return "GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS";
        case 0x8E87: return "GL_TESS_EVALUATION_SHADER";
        case 0x8E88: return "GL_TESS_CONTROL_SHADER";
        case 0x8E89: return "GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS";
        case 0x8F3A: return "GL_IMAGE_BINDING_NAME_EXT";
        case 0x8F3B: return "GL_IMAGE_BINDING_LEVEL_EXT";
        case 0x8F3C: return "GL_IMAGE_BINDING_LAYERED_EXT";
        case 0x8F3D: return "GL_IMAGE_BINDING_LAYER_EXT";
        case 0x8F3E: return "GL_IMAGE_BINDING_ACCESS_EXT";
        case 0x8F3F: return "GL_DRAW_INDIRECT_BUFFER";
        case 0x8F4A: return "GL_DOUBLE_MAT2x4";
        case 0x8F4B: return "GL_DOUBLE_MAT3x2";
        case 0x8F4C: return "GL_DOUBLE_MAT3x4";
        case 0x8F4D: return "GL_DOUBLE_MAT4x2";
        case 0x8F4E: return "GL_DOUBLE_MAT4x3";
        case 0x8F9A: return "GL_RGB16_SNORM";
        case 0x8F9B: return "GL_RGBA16_SNORM";
        case 0x8F9C: return "GL_SIGNED_NORMALIZED";
        case 0x8F9D: return "GL_PRIMITIVE_RESTART";
        case 0x8F9E: return "GL_PRIMITIVE_RESTART_INDEX";
        case 0x8F36: return "GL_COPY_READ_BUFFER";
        case 0x8F37: return "GL_COPY_WRITE_BUFFER";
        case 0x8F38: return "GL_MAX_IMAGE_UNITS_EXT";
        case 0x8F39: return "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT";
        case 0x8F43: return "GL_DRAW_INDIRECT_BUFFER_BINDING";
        case 0x8F46: return "GL_DOUBLE_MAT2";
        case 0x8F47: return "GL_DOUBLE_MAT3";
        case 0x8F48: return "GL_DOUBLE_MAT4";
        case 0x8F49: return "GL_DOUBLE_MAT2x3";
        case 0x8F90: return "GL_RED_SNORM";
        case 0x8F91: return "GL_RG_SNORM";
        case 0x8F92: return "GL_RGB_SNORM";
        case 0x8F93: return "GL_RGBA_SNORM";
        case 0x8F94: return "GL_R8_SNORM";
        case 0x8F95: return "GL_RG8_SNORM";
        case 0x8F96: return "GL_RGB8_SNORM";
        case 0x8F97: return "GL_RGBA8_SNORM";
        case 0x8F98: return "GL_R16_SNORM";
        case 0x8F99: return "GL_RG16_SNORM";
        case 0x8FFC: return "GL_DOUBLE_VEC2";
        case 0x8FFD: return "GL_DOUBLE_VEC3";
        case 0x8FFE: return "GL_DOUBLE_VEC4";
        case 0x040A: return "GL_AUX1";
        case 0x040B: return "GL_AUX2";
        case 0x040C: return "GL_AUX3";
        case 0x80A0: return "GL_SAMPLE_COVERAGE";
        case 0x80A1: return "GL_1PASS_EXT";
        case 0x80A2: return "GL_2PASS_0_EXT";
        case 0x80A3: return "GL_2PASS_1_EXT";
        case 0x80A4: return "GL_4PASS_0_EXT";
        case 0x80A5: return "GL_4PASS_1_EXT";
        case 0x80A6: return "GL_4PASS_2_EXT";
        case 0x80A7: return "GL_4PASS_3_EXT";
        case 0x80A8: return "GL_SAMPLE_BUFFERS";
        case 0x80A9: return "GL_SAMPLES";
        case 0x80AA: return "GL_SAMPLE_COVERAGE_VALUE";
        case 0x80AB: return "GL_SAMPLE_COVERAGE_INVERT";
        case 0x80AC: return "GL_SAMPLE_PATTERN_EXT";
        case 0x80AD: return "GL_LINEAR_SHARPEN_SGIS";
        case 0x80AE: return "GL_LINEAR_SHARPEN_ALPHA_SGIS";
        case 0x80AF: return "GL_LINEAR_SHARPEN_COLOR_SGIS";
        case 0x80B0: return "GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS";
        case 0x80B1: return "GL_COLOR_MATRIX";
        case 0x80B2: return "GL_COLOR_MATRIX_STACK_DEPTH";
        case 0x80B3: return "GL_MAX_COLOR_MATRIX_STACK_DEPTH";
        case 0x80B4: return "GL_POST_COLOR_MATRIX_RED_SCALE";
        case 0x80B5: return "GL_POST_COLOR_MATRIX_GREEN_SCALE";
        case 0x80B6: return "GL_POST_COLOR_MATRIX_BLUE_SCALE";
        case 0x80B7: return "GL_POST_COLOR_MATRIX_ALPHA_SCALE";
        case 0x80B8: return "GL_POST_COLOR_MATRIX_RED_BIAS";
        case 0x80B9: return "GL_POST_COLOR_MATRIX_GREEN_BIAS";
        case 0x80BA: return "GL_POST_COLOR_MATRIX_BLUE_BIAS";
        case 0x80BB: return "GL_POST_COLOR_MATRIX_ALPHA_BIAS";
        case 0x80BC: return "GL_TEXTURE_COLOR_TABLE_SGI";
        case 0x80BD: return "GL_PROXY_TEXTURE_COLOR_TABLE_SGI";
        case 0x80BF: return "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB";
        case 0x80C8: return "GL_BLEND_DST_RGB";
        case 0x80C9: return "GL_BLEND_SRC_RGB";
        case 0x80CA: return "GL_BLEND_DST_ALPHA";
        case 0x80CB: return "GL_BLEND_SRC_ALPHA";
        case 0x80CC: return "GL_422_EXT";
        case 0x80CD: return "GL_422_REV_EXT";
        case 0x80CE: return "GL_422_AVERAGE_EXT";
        case 0x80CF: return "GL_422_REV_AVERAGE_EXT";
        case 0x80D0: return "GL_COLOR_TABLE";
        case 0x80D1: return "GL_POST_CONVOLUTION_COLOR_TABLE";
        case 0x80D2: return "GL_POST_COLOR_MATRIX_COLOR_TABLE";
        case 0x80D3: return "GL_PROXY_COLOR_TABLE";
        case 0x80D4: return "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE";
        case 0x80D5: return "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE";
        case 0x80D6: return "GL_COLOR_TABLE_SCALE";
        case 0x80D7: return "GL_COLOR_TABLE_BIAS";
        case 0x80D8: return "GL_COLOR_TABLE_FORMAT";
        case 0x80D9: return "GL_COLOR_TABLE_WIDTH";
        case 0x80DA: return "GL_COLOR_TABLE_RED_SIZE";
        case 0x80DB: return "GL_COLOR_TABLE_GREEN_SIZE";
        case 0x80DC: return "GL_COLOR_TABLE_BLUE_SIZE";
        case 0x80DD: return "GL_COLOR_TABLE_ALPHA_SIZE";
        case 0x80DE: return "GL_COLOR_TABLE_LUMINANCE_SIZE";
        case 0x80DF: return "GL_COLOR_TABLE_INTENSITY_SIZE";
        case 0x80E0: return "GL_BGR";
        case 0x80E1: return "GL_BGRA";
        case 0x80E2: return "GL_COLOR_INDEX1_EXT";
        case 0x80E3: return "GL_COLOR_INDEX2_EXT";
        case 0x80E4: return "GL_COLOR_INDEX4_EXT";
        case 0x80E5: return "GL_COLOR_INDEX8_EXT";
        case 0x80E6: return "GL_COLOR_INDEX12_EXT";
        case 0x80E7: return "GL_COLOR_INDEX16_EXT";
        case 0x80E8: return "GL_MAX_ELEMENTS_VERTICES";
        case 0x80E9: return "GL_MAX_ELEMENTS_INDICES";
        case 0x80EA: return "GL_PHONG_WIN";
        case 0x80EB: return "GL_PHONG_HINT_WIN";
        case 0x80EC: return "GL_FOG_SPECULAR_TEXTURE_WIN";
        case 0x80ED: return "GL_TEXTURE_INDEX_SIZE_EXT";
        case 0x80F0: return "GL_CLIP_VOLUME_CLIPPING_HINT_EXT";
        case 0x81A5: return "GL_DEPTH_COMPONENT16";
        case 0x81A6: return "GL_DEPTH_COMPONENT24";
        case 0x81A7: return "GL_DEPTH_COMPONENT32";
        case 0x81A8: return "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT";
        case 0x81A9: return "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT";
        case 0x81AA: return "GL_CULL_VERTEX_EXT";
        case 0x81AB: return "GL_CULL_VERTEX_EYE_POSITION_EXT";
        case 0x81AC: return "GL_CULL_VERTEX_OBJECT_POSITION_EXT";
        case 0x81AD: return "GL_IUI_V2F_EXT";
        case 0x81AE: return "GL_IUI_V3F_EXT";
        case 0x81AF: return "GL_IUI_N3F_V2F_EXT";
        case 0x81B0: return "GL_IUI_N3F_V3F_EXT";
        case 0x81B1: return "GL_T2F_IUI_V2F_EXT";
        case 0x81B2: return "GL_T2F_IUI_V3F_EXT";
        case 0x81B3: return "GL_T2F_IUI_N3F_V2F_EXT";
        case 0x81B4: return "GL_T2F_IUI_N3F_V3F_EXT";
        case 0x81B5: return "GL_INDEX_TEST_EXT";
        case 0x81B6: return "GL_INDEX_TEST_FUNC_EXT";
        case 0x81B7: return "GL_INDEX_TEST_REF_EXT";
        case 0x81B8: return "GL_INDEX_MATERIAL_EXT";
        case 0x81B9: return "GL_INDEX_MATERIAL_PARAMETER_EXT";
        case 0x81BA: return "GL_INDEX_MATERIAL_FACE_EXT";
        case 0x81D4: return "GL_WRAP_BORDER_SUN";
        case 0x81D5: return "GL_UNPACK_CONSTANT_DATA_SUNX";
        case 0x81D6: return "GL_TEXTURE_CONSTANT_DATA_SUNX";
        case 0x81D7: return "GL_TRIANGLE_LIST_SUN";
        case 0x81D8: return "GL_REPLACEMENT_CODE_SUN";
        case 0x81D9: return "GL_GLOBAL_ALPHA_SUN";
        case 0x81DA: return "GL_GLOBAL_ALPHA_FACTOR_SUN";
        case 0x81EF: return "GL_TEXTURE_COLOR_WRITEMASK_SGIS";
        case 0x81F0: return "GL_EYE_DISTANCE_TO_POINT_SGIS";
        case 0x81F1: return "GL_OBJECT_DISTANCE_TO_POINT_SGIS";
        case 0x81F2: return "GL_EYE_DISTANCE_TO_LINE_SGIS";
        case 0x81F3: return "GL_OBJECT_DISTANCE_TO_LINE_SGIS";
        case 0x81F4: return "GL_EYE_POINT_SGIS";
        case 0x81F5: return "GL_OBJECT_POINT_SGIS";
        case 0x81F6: return "GL_EYE_LINE_SGIS";
        case 0x81F7: return "GL_OBJECT_LINE_SGIS";
        case 0x81F8: return "GL_LIGHT_MODEL_COLOR_CONTROL";
        case 0x81F9: return "GL_SINGLE_COLOR";
        case 0x81FA: return "GL_SEPARATE_SPECULAR_COLOR";
        case 0x81FB: return "GL_SHARED_TEXTURE_PALETTE_EXT";
        case 0x83A0: return "GL_RGB_S3TC";
        case 0x83A1: return "GL_RGB4_S3TC";
        case 0x83A2: return "GL_RGBA_S3TC";
        case 0x83A3: return "GL_RGBA4_S3TC";
        case 0x83F0: return "GL_COMPRESSED_RGB_S3TC_DXT1_EXT";
        case 0x83F1: return "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT";
        case 0x83F2: return "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT";
        case 0x83F3: return "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT";
        case 0x83F4: return "GL_PARALLEL_ARRAYS_INTEL";
        case 0x83F5: return "GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL";
        case 0x83F6: return "GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL";
        case 0x83F7: return "GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL";
        case 0x83F8: return "GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL";
        case 0x84C0: return "GL_TEXTURE0";
        case 0x84C1: return "GL_TEXTURE1";
        case 0x84C2: return "GL_TEXTURE2";
        case 0x84C3: return "GL_TEXTURE3";
        case 0x84C4: return "GL_TEXTURE4";
        case 0x84C5: return "GL_TEXTURE5";
        case 0x84C6: return "GL_TEXTURE6";
        case 0x84C7: return "GL_TEXTURE7";
        case 0x84C8: return "GL_TEXTURE8";
        case 0x84C9: return "GL_TEXTURE9";
        case 0x84CA: return "GL_TEXTURE10";
        case 0x84CB: return "GL_TEXTURE11";
        case 0x84CC: return "GL_TEXTURE12";
        case 0x84CD: return "GL_TEXTURE13";
        case 0x84CE: return "GL_TEXTURE14";
        case 0x84CF: return "GL_TEXTURE15";
        case 0x84D0: return "GL_TEXTURE16";
        case 0x84D1: return "GL_TEXTURE17";
        case 0x84D2: return "GL_TEXTURE18";
        case 0x84D3: return "GL_TEXTURE19";
        case 0x84D4: return "GL_TEXTURE20";
        case 0x84D5: return "GL_TEXTURE21";
        case 0x84D6: return "GL_TEXTURE22";
        case 0x84D7: return "GL_TEXTURE23";
        case 0x84D8: return "GL_TEXTURE24";
        case 0x84D9: return "GL_TEXTURE25";
        case 0x84DA: return "GL_TEXTURE26";
        case 0x84DB: return "GL_TEXTURE27";
        case 0x84DC: return "GL_TEXTURE28";
        case 0x84DD: return "GL_TEXTURE29";
        case 0x84DE: return "GL_TEXTURE30";
        case 0x84DF: return "GL_TEXTURE31";
        case 0x84E0: return "GL_ACTIVE_TEXTURE";
        case 0x84E1: return "GL_CLIENT_ACTIVE_TEXTURE";
        case 0x84E2: return "GL_MAX_TEXTURE_UNITS";
        case 0x84E3: return "GL_TRANSPOSE_MODELVIEW_MATRIX";
        case 0x84E4: return "GL_TRANSPOSE_PROJECTION_MATRIX";
        case 0x84E5: return "GL_TRANSPOSE_TEXTURE_MATRIX";
        case 0x84E6: return "GL_TRANSPOSE_COLOR_MATRIX";
        case 0x84E7: return "GL_SUBTRACT";
        case 0x84E8: return "GL_MAX_RENDERBUFFER_SIZE";
        case 0x84E9: return "GL_COMPRESSED_ALPHA";
        case 0x84EA: return "GL_COMPRESSED_LUMINANCE";
        case 0x84EB: return "GL_COMPRESSED_LUMINANCE_ALPHA";
        case 0x84EC: return "GL_COMPRESSED_INTENSITY";
        case 0x84ED: return "GL_COMPRESSED_RGB";
        case 0x84EE: return "GL_COMPRESSED_RGBA";
        case 0x84EF: return "GL_TEXTURE_COMPRESSION_HINT";
        case 0x84F0: return "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER";
        case 0x84F1: return "GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER";
        case 0x84F5: return "GL_TEXTURE_RECTANGLE";
        case 0x84F6: return "GL_TEXTURE_BINDING_RECTANGLE";
        case 0x84F7: return "GL_PROXY_TEXTURE_RECTANGLE";
        case 0x84F8: return "GL_MAX_RECTANGLE_TEXTURE_SIZE";
        case 0x84F9: return "GL_DEPTH_STENCIL";
        case 0x84FA: return "GL_UNSIGNED_INT_24_8";
        case 0x84FD: return "GL_MAX_TEXTURE_LOD_BIAS";
        case 0x84FE: return "GL_TEXTURE_MAX_ANISOTROPY_EXT";
        case 0x84FF: return "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT";
        case 0x85AE: return "GL_PERTURB_EXT";
        case 0x85AF: return "GL_TEXTURE_NORMAL_EXT";
        case 0x85B0: return "GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE";
        case 0x85B1: return "GL_TRANSFORM_HINT_APPLE";
        case 0x85B2: return "GL_UNPACK_CLIENT_STORAGE_APPLE";
        case 0x85B3: return "GL_BUFFER_OBJECT_APPLE";
        case 0x85B4: return "GL_STORAGE_CLIENT_APPLE";
        case 0x85B5: return "GL_VERTEX_ARRAY_BINDING";
        case 0x85B7: return "GL_TEXTURE_RANGE_LENGTH_APPLE";
        case 0x85B8: return "GL_TEXTURE_RANGE_POINTER_APPLE";
        case 0x85B9: return "GL_YCBCR_422_APPLE";
        case 0x85BA: return "GL_UNSIGNED_SHORT_8_8_MESA";
        case 0x85BB: return "GL_UNSIGNED_SHORT_8_8_REV_MESA";
        case 0x85BC: return "GL_TEXTURE_STORAGE_HINT_APPLE";
        case 0x85BD: return "GL_STORAGE_PRIVATE_APPLE";
        case 0x85BE: return "GL_STORAGE_CACHED_APPLE";
        case 0x85BF: return "GL_STORAGE_SHARED_APPLE";
        case 0x85C0: return "GL_REPLACEMENT_CODE_ARRAY_SUN";
        case 0x85C1: return "GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN";
        case 0x85C2: return "GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN";
        case 0x85C3: return "GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN";
        case 0x85C4: return "GL_R1UI_V3F_SUN";
        case 0x85C5: return "GL_R1UI_C4UB_V3F_SUN";
        case 0x85C6: return "GL_R1UI_C3F_V3F_SUN";
        case 0x85C7: return "GL_R1UI_N3F_V3F_SUN";
        case 0x85C8: return "GL_R1UI_C4F_N3F_V3F_SUN";
        case 0x85C9: return "GL_R1UI_T2F_V3F_SUN";
        case 0x85CA: return "GL_R1UI_T2F_N3F_V3F_SUN";
        case 0x85CB: return "GL_R1UI_T2F_C4F_N3F_V3F_SUN";
        case 0x85CC: return "GL_SLICE_ACCUM_SUN";
        case 0x86A0: return "GL_TEXTURE_COMPRESSED_IMAGE_SIZE";
        case 0x86A1: return "GL_TEXTURE_COMPRESSED";
        case 0x86A2: return "GL_NUM_COMPRESSED_TEXTURE_FORMATS";
        case 0x86A3: return "GL_COMPRESSED_TEXTURE_FORMATS";
        case 0x86A4: return "GL_MAX_VERTEX_UNITS_ARB";
        case 0x86A5: return "GL_ACTIVE_VERTEX_UNITS_ARB";
        case 0x86A6: return "GL_WEIGHT_SUM_UNITY_ARB";
        case 0x86A7: return "GL_VERTEX_BLEND_ARB";
        case 0x86A8: return "GL_CURRENT_WEIGHT_ARB";
        case 0x86A9: return "GL_WEIGHT_ARRAY_TYPE_ARB";
        case 0x86AA: return "GL_WEIGHT_ARRAY_STRIDE_ARB";
        case 0x86AB: return "GL_WEIGHT_ARRAY_SIZE_ARB";
        case 0x86AC: return "GL_WEIGHT_ARRAY_POINTER_ARB";
        case 0x86AD: return "GL_WEIGHT_ARRAY_ARB";
        case 0x86AE: return "GL_DOT3_RGB";
        case 0x86AF: return "GL_DOT3_RGBA";
        case 0x86B0: return "GL_COMPRESSED_RGB_FXT1_3DFX";
        case 0x86B1: return "GL_COMPRESSED_RGBA_FXT1_3DFX";
        case 0x86B2: return "GL_MULTISAMPLE_3DFX";
        case 0x86B3: return "GL_SAMPLE_BUFFERS_3DFX";
        case 0x86B4: return "GL_SAMPLES_3DFX";
        case 0x87A0: return "GL_OUTPUT_TEXTURE_COORD3_EXT";
        case 0x87A1: return "GL_OUTPUT_TEXTURE_COORD4_EXT";
        case 0x87A2: return "GL_OUTPUT_TEXTURE_COORD5_EXT";
        case 0x87A3: return "GL_OUTPUT_TEXTURE_COORD6_EXT";
        case 0x87A4: return "GL_OUTPUT_TEXTURE_COORD7_EXT";
        case 0x87A5: return "GL_OUTPUT_TEXTURE_COORD8_EXT";
        case 0x87A6: return "GL_OUTPUT_TEXTURE_COORD9_EXT";
        case 0x87A7: return "GL_OUTPUT_TEXTURE_COORD10_EXT";
        case 0x87A8: return "GL_OUTPUT_TEXTURE_COORD11_EXT";
        case 0x87A9: return "GL_OUTPUT_TEXTURE_COORD12_EXT";
        case 0x87AA: return "GL_OUTPUT_TEXTURE_COORD13_EXT";
        case 0x87AB: return "GL_OUTPUT_TEXTURE_COORD14_EXT";
        case 0x87AC: return "GL_OUTPUT_TEXTURE_COORD15_EXT";
        case 0x87AD: return "GL_OUTPUT_TEXTURE_COORD16_EXT";
        case 0x87AE: return "GL_OUTPUT_TEXTURE_COORD17_EXT";
        case 0x87AF: return "GL_OUTPUT_TEXTURE_COORD18_EXT";
        case 0x87B0: return "GL_OUTPUT_TEXTURE_COORD19_EXT";
        case 0x87B1: return "GL_OUTPUT_TEXTURE_COORD20_EXT";
        case 0x87B2: return "GL_OUTPUT_TEXTURE_COORD21_EXT";
        case 0x87B3: return "GL_OUTPUT_TEXTURE_COORD22_EXT";
        case 0x87B4: return "GL_OUTPUT_TEXTURE_COORD23_EXT";
        case 0x87B5: return "GL_OUTPUT_TEXTURE_COORD24_EXT";
        case 0x87B6: return "GL_OUTPUT_TEXTURE_COORD25_EXT";
        case 0x87B7: return "GL_OUTPUT_TEXTURE_COORD26_EXT";
        case 0x87B8: return "GL_OUTPUT_TEXTURE_COORD27_EXT";
        case 0x87B9: return "GL_OUTPUT_TEXTURE_COORD28_EXT";
        case 0x87BA: return "GL_OUTPUT_TEXTURE_COORD29_EXT";
        case 0x87BB: return "GL_OUTPUT_TEXTURE_COORD30_EXT";
        case 0x87BC: return "GL_OUTPUT_TEXTURE_COORD31_EXT";
        case 0x87BD: return "GL_OUTPUT_FOG_EXT";
        case 0x87BE: return "GL_SCALAR_EXT";
        case 0x87BF: return "GL_VECTOR_EXT";
        case 0x87C0: return "GL_MATRIX_EXT";
        case 0x87C1: return "GL_VARIANT_EXT";
        case 0x87C2: return "GL_INVARIANT_EXT";
        case 0x87C3: return "GL_LOCAL_CONSTANT_EXT";
        case 0x87C4: return "GL_LOCAL_EXT";
        case 0x87C5: return "GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT";
        case 0x87C6: return "GL_MAX_VERTEX_SHADER_VARIANTS_EXT";
        case 0x87C7: return "GL_MAX_VERTEX_SHADER_INVARIANTS_EXT";
        case 0x87C8: return "GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT";
        case 0x87C9: return "GL_MAX_VERTEX_SHADER_LOCALS_EXT";
        case 0x87CA: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT";
        case 0x87CB: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT";
        case 0x87CC: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT";
        case 0x87CD: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT";
        case 0x87CE: return "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT";
        case 0x87CF: return "GL_VERTEX_SHADER_INSTRUCTIONS_EXT";
        case 0x87D0: return "GL_VERTEX_SHADER_VARIANTS_EXT";
        case 0x87D1: return "GL_VERTEX_SHADER_INVARIANTS_EXT";
        case 0x87D2: return "GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT";
        case 0x87D3: return "GL_VERTEX_SHADER_LOCALS_EXT";
        case 0x87D4: return "GL_VERTEX_SHADER_OPTIMIZED_EXT";
        case 0x87D5: return "GL_X_EXT";
        case 0x87D6: return "GL_Y_EXT";
        case 0x87D7: return "GL_Z_EXT";
        case 0x87D8: return "GL_W_EXT";
        case 0x87D9: return "GL_NEGATIVE_X_EXT";
        case 0x87DA: return "GL_NEGATIVE_Y_EXT";
        case 0x87DB: return "GL_NEGATIVE_Z_EXT";
        case 0x87DC: return "GL_NEGATIVE_W_EXT";
        case 0x87DD: return "GL_ZERO_EXT";
        case 0x87DE: return "GL_ONE_EXT";
        case 0x87DF: return "GL_NEGATIVE_ONE_EXT";
        case 0x87E0: return "GL_NORMALIZED_RANGE_EXT";
        case 0x87E1: return "GL_FULL_RANGE_EXT";
        case 0x87E2: return "GL_CURRENT_VERTEX_EXT";
        case 0x87E3: return "GL_MVP_MATRIX_EXT";
        case 0x87E4: return "GL_VARIANT_VALUE_EXT";
        case 0x87E5: return "GL_VARIANT_DATATYPE_EXT";
        case 0x87E6: return "GL_VARIANT_ARRAY_STRIDE_EXT";
        case 0x87E7: return "GL_VARIANT_ARRAY_TYPE_EXT";
        case 0x87E8: return "GL_VARIANT_ARRAY_EXT";
        case 0x87E9: return "GL_VARIANT_ARRAY_POINTER_EXT";
        case 0x87EA: return "GL_INVARIANT_VALUE_EXT";
        case 0x87EB: return "GL_INVARIANT_DATATYPE_EXT";
        case 0x87EC: return "GL_LOCAL_CONSTANT_VALUE_EXT";
        case 0x87ED: return "GL_LOCAL_CONSTANT_DATATYPE_EXT";
        case 0x87FE: return "GL_NUM_PROGRAM_BINARY_FORMATS";
        case 0x87FF: return "GL_PROGRAM_BINARY_FORMATS";
        case 0x88A0: return "GL_PROGRAM_INSTRUCTIONS_ARB";
        case 0x88A1: return "GL_MAX_PROGRAM_INSTRUCTIONS_ARB";
        case 0x88A2: return "GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB";
        case 0x88A3: return "GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB";
        case 0x88A4: return "GL_PROGRAM_TEMPORARIES_ARB";
        case 0x88A5: return "GL_MAX_PROGRAM_TEMPORARIES_ARB";
        case 0x88A6: return "GL_PROGRAM_NATIVE_TEMPORARIES_ARB";
        case 0x88A7: return "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB";
        case 0x88A8: return "GL_PROGRAM_PARAMETERS_ARB";
        case 0x88A9: return "GL_MAX_PROGRAM_PARAMETERS_ARB";
        case 0x88AA: return "GL_PROGRAM_NATIVE_PARAMETERS_ARB";
        case 0x88AB: return "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB";
        case 0x88AC: return "GL_PROGRAM_ATTRIBS_ARB";
        case 0x88AD: return "GL_MAX_PROGRAM_ATTRIBS_ARB";
        case 0x88AE: return "GL_PROGRAM_NATIVE_ATTRIBS_ARB";
        case 0x88AF: return "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB";
        case 0x88B0: return "GL_PROGRAM_ADDRESS_REGISTERS_ARB";
        case 0x88B1: return "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB";
        case 0x88B2: return "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB";
        case 0x88B3: return "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB";
        case 0x88B4: return "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB";
        case 0x88B5: return "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB";
        case 0x88B6: return "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB";
        case 0x88B7: return "GL_TRANSPOSE_CURRENT_MATRIX_ARB";
        case 0x88B8: return "GL_READ_ONLY";
        case 0x88B9: return "GL_WRITE_ONLY";
        case 0x88BA: return "GL_READ_WRITE";
        case 0x88BB: return "GL_BUFFER_ACCESS";
        case 0x88BC: return "GL_BUFFER_MAPPED";
        case 0x88BD: return "GL_BUFFER_MAP_POINTER";
        case 0x88BF: return "GL_TIME_ELAPSED";
        case 0x88C0: return "GL_MATRIX0_ARB";
        case 0x88C1: return "GL_MATRIX1_ARB";
        case 0x88C2: return "GL_MATRIX2_ARB";
        case 0x88C3: return "GL_MATRIX3_ARB";
        case 0x88C4: return "GL_MATRIX4_ARB";
        case 0x88C5: return "GL_MATRIX5_ARB";
        case 0x88C6: return "GL_MATRIX6_ARB";
        case 0x88C7: return "GL_MATRIX7_ARB";
        case 0x88C8: return "GL_MATRIX8_ARB";
        case 0x88C9: return "GL_MATRIX9_ARB";
        case 0x88CA: return "GL_MATRIX10_ARB";
        case 0x88CB: return "GL_MATRIX11_ARB";
        case 0x88CC: return "GL_MATRIX12_ARB";
        case 0x88CD: return "GL_MATRIX13_ARB";
        case 0x88CE: return "GL_MATRIX14_ARB";
        case 0x88CF: return "GL_MATRIX15_ARB";
        case 0x88D0: return "GL_MATRIX16_ARB";
        case 0x88D1: return "GL_MATRIX17_ARB";
        case 0x88D2: return "GL_MATRIX18_ARB";
        case 0x88D3: return "GL_MATRIX19_ARB";
        case 0x88D4: return "GL_MATRIX20_ARB";
        case 0x88D5: return "GL_MATRIX21_ARB";
        case 0x88D6: return "GL_MATRIX22_ARB";
        case 0x88D7: return "GL_MATRIX23_ARB";
        case 0x88D8: return "GL_MATRIX24_ARB";
        case 0x88D9: return "GL_MATRIX25_ARB";
        case 0x88DA: return "GL_MATRIX26_ARB";
        case 0x88DB: return "GL_MATRIX27_ARB";
        case 0x88DC: return "GL_MATRIX28_ARB";
        case 0x88DD: return "GL_MATRIX29_ARB";
        case 0x88DE: return "GL_MATRIX30_ARB";
        case 0x88DF: return "GL_MATRIX31_ARB";
        case 0x88E0: return "GL_STREAM_DRAW";
        case 0x88E1: return "GL_STREAM_READ";
        case 0x88E2: return "GL_STREAM_COPY";
        case 0x88E4: return "GL_STATIC_DRAW";
        case 0x88E5: return "GL_STATIC_READ";
        case 0x88E6: return "GL_STATIC_COPY";
        case 0x88E8: return "GL_DYNAMIC_DRAW";
        case 0x88E9: return "GL_DYNAMIC_READ";
        case 0x88EA: return "GL_DYNAMIC_COPY";
        case 0x88EB: return "GL_PIXEL_PACK_BUFFER";
        case 0x88EC: return "GL_PIXEL_UNPACK_BUFFER";
        case 0x88ED: return "GL_PIXEL_PACK_BUFFER_BINDING";
        case 0x88EF: return "GL_PIXEL_UNPACK_BUFFER_BINDING";
        case 0x88F0: return "GL_DEPTH24_STENCIL8";
        case 0x88F1: return "GL_TEXTURE_STENCIL_SIZE";
        case 0x88F2: return "GL_STENCIL_TAG_BITS_EXT";
        case 0x88F3: return "GL_STENCIL_CLEAR_TAG_VALUE_EXT";
        case 0x88F9: return "GL_SRC1_COLOR";
        case 0x88FA: return "GL_ONE_MINUS_SRC1_COLOR";
        case 0x88FB: return "GL_ONE_MINUS_SRC1_ALPHA";
        case 0x88FC: return "GL_MAX_DUAL_SOURCE_DRAW_BUFFERS";
        case 0x88FD: return "GL_VERTEX_ATTRIB_ARRAY_INTEGER";
        case 0x88FE: return "GL_VERTEX_ATTRIB_ARRAY_DIVISOR";
        case 0x88FF: return "GL_MAX_ARRAY_TEXTURE_LAYERS";
        case 0x0100: return "GL_ACCUM";
        case 0x0101: return "GL_LOAD";
        case 0x0102: return "GL_RETURN";
        case 0x0103: return "GL_MULT";
        case 0x0104: return "GL_ADD";
        case 0x140A: return "GL_DOUBLE";
        case 0x140B: return "GL_HALF_FLOAT";
        case 0x140C: return "GL_FIXED";
        case 0x150A: return "GL_INVERT";
        case 0x150B: return "GL_OR_REVERSE";
        case 0x150C: return "GL_COPY_INVERTED";
        case 0x150D: return "GL_OR_INVERTED";
        case 0x150E: return "GL_NAND";
        case 0x150F: return "GL_SET";
        case 0x190A: return "GL_LUMINANCE_ALPHA";
        case 0x0200: return "GL_NEVER";
        case 0x0201: return "GL_LESS";
        case 0x0202: return "GL_EQUAL";
        case 0x0203: return "GL_LEQUAL";
        case 0x0204: return "GL_GREATER";
        case 0x0205: return "GL_NOTEQUAL";
        case 0x0206: return "GL_GEQUAL";
        case 0x0207: return "GL_ALWAYS";
        case 0x0300: return "GL_SRC_COLOR";
        case 0x0301: return "GL_ONE_MINUS_SRC_COLOR";
        case 0x0302: return "GL_SRC_ALPHA";
        case 0x0303: return "GL_ONE_MINUS_SRC_ALPHA";
        case 0x0304: return "GL_DST_ALPHA";
        case 0x0305: return "GL_ONE_MINUS_DST_ALPHA";
        case 0x0306: return "GL_DST_COLOR";
        case 0x0307: return "GL_ONE_MINUS_DST_COLOR";
        case 0x0308: return "GL_SRC_ALPHA_SATURATE";
        case 0x0400: return "GL_FRONT_LEFT";
        case 0x0401: return "GL_FRONT_RIGHT";
        case 0x0402: return "GL_BACK_LEFT";
        case 0x0403: return "GL_BACK_RIGHT";
        case 0x0404: return "GL_FRONT";
        case 0x0405: return "GL_BACK";
        case 0x0406: return "GL_LEFT";
        case 0x0407: return "GL_RIGHT";
        case 0x0408: return "GL_FRONT_AND_BACK";
        case 0x0409: return "GL_AUX0";
        case 0x0500: return "GL_INVALID_ENUM";
        case 0x0501: return "GL_INVALID_VALUE";
        case 0x0502: return "GL_INVALID_OPERATION";
        case 0x0503: return "GL_STACK_OVERFLOW";
        case 0x0504: return "GL_STACK_UNDERFLOW";
        case 0x0505: return "GL_OUT_OF_MEMORY";
        case 0x0506: return "GL_INVALID_FRAMEBUFFER_OPERATION";
        case 0x0600: return "GL_2D";
        case 0x0601: return "GL_3D";
        case 0x0602: return "GL_3D_COLOR";
        case 0x0603: return "GL_3D_COLOR_TEXTURE";
        case 0x0604: return "GL_4D_COLOR_TEXTURE";
        case 0x0700: return "GL_PASS_THROUGH_TOKEN";
        case 0x0701: return "GL_POINT_TOKEN";
        case 0x0702: return "GL_LINE_TOKEN";
        case 0x0703: return "GL_POLYGON_TOKEN";
        case 0x0704: return "GL_BITMAP_TOKEN";
        case 0x0705: return "GL_DRAW_PIXEL_TOKEN";
        case 0x0706: return "GL_COPY_PIXEL_TOKEN";
        case 0x0707: return "GL_LINE_RESET_TOKEN";
        case 0x0800: return "GL_EXP";
        case 0x800A: return "GL_FUNC_SUBTRACT";
        case 0x800B: return "GL_FUNC_REVERSE_SUBTRACT";
        case 0x800C: return "GL_CMYK_EXT";
        case 0x800D: return "GL_CMYKA_EXT";
        case 0x800E: return "GL_PACK_CMYK_HINT_EXT";
        case 0x800F: return "GL_UNPACK_CMYK_HINT_EXT";
        case 0x0801: return "GL_EXP2";
        case 0x801A: return "GL_MAX_CONVOLUTION_WIDTH";
        case 0x801B: return "GL_MAX_CONVOLUTION_HEIGHT";
        case 0x801C: return "GL_POST_CONVOLUTION_RED_SCALE";
        case 0x801D: return "GL_POST_CONVOLUTION_GREEN_SCALE";
        case 0x801E: return "GL_POST_CONVOLUTION_BLUE_SCALE";
        case 0x801F: return "GL_POST_CONVOLUTION_ALPHA_SCALE";
        case 0x802A: return "GL_HISTOGRAM_BLUE_SIZE";
        case 0x802B: return "GL_HISTOGRAM_ALPHA_SIZE";
        case 0x802C: return "GL_HISTOGRAM_LUMINANCE_SIZE";
        case 0x802D: return "GL_HISTOGRAM_SINK";
        case 0x802E: return "GL_MINMAX";
        case 0x802F: return "GL_MINMAX_FORMAT";
        case 0x803A: return "GL_RESCALE_NORMAL";
        case 0x803B: return "GL_ALPHA4";
        case 0x803C: return "GL_ALPHA8";
        case 0x803D: return "GL_ALPHA12";
        case 0x803E: return "GL_ALPHA16";
        case 0x803F: return "GL_LUMINANCE4";
        case 0x804A: return "GL_INTENSITY4";
        case 0x804B: return "GL_INTENSITY8";
        case 0x804C: return "GL_INTENSITY12";
        case 0x804D: return "GL_INTENSITY16";
        case 0x804E: return "GL_RGB2_EXT";
        case 0x804F: return "GL_RGB4";
        case 0x805A: return "GL_RGBA12";
        case 0x805B: return "GL_RGBA16";
        case 0x805C: return "GL_TEXTURE_RED_SIZE";
        case 0x805D: return "GL_TEXTURE_GREEN_SIZE";
        case 0x805E: return "GL_TEXTURE_BLUE_SIZE";
        case 0x805F: return "GL_TEXTURE_ALPHA_SIZE";
        case 0x806A: return "GL_TEXTURE_BINDING_3D";
        case 0x806B: return "GL_PACK_SKIP_IMAGES";
        case 0x806C: return "GL_PACK_IMAGE_HEIGHT";
        case 0x806D: return "GL_UNPACK_SKIP_IMAGES";
        case 0x806E: return "GL_UNPACK_IMAGE_HEIGHT";
        case 0x806F: return "GL_TEXTURE_3D";
        case 0x807A: return "GL_VERTEX_ARRAY_SIZE";
        case 0x807B: return "GL_VERTEX_ARRAY_TYPE";
        case 0x807C: return "GL_VERTEX_ARRAY_STRIDE";
        case 0x807D: return "GL_VERTEX_ARRAY_COUNT_EXT";
        case 0x807E: return "GL_NORMAL_ARRAY_TYPE";
        case 0x807F: return "GL_NORMAL_ARRAY_STRIDE";
        case 0x808A: return "GL_TEXTURE_COORD_ARRAY_STRIDE";
        case 0x808B: return "GL_TEXTURE_COORD_ARRAY_COUNT_EXT";
        case 0x808C: return "GL_EDGE_FLAG_ARRAY_STRIDE";
        case 0x808D: return "GL_EDGE_FLAG_ARRAY_COUNT_EXT";
        case 0x808E: return "GL_VERTEX_ARRAY_POINTER";
        case 0x808F: return "GL_NORMAL_ARRAY_POINTER";
        case 0x809A: return "GL_DETAIL_TEXTURE_LEVEL_SGIS";
        case 0x809B: return "GL_DETAIL_TEXTURE_MODE_SGIS";
        case 0x809C: return "GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS";
        case 0x809D: return "GL_MULTISAMPLE";
        case 0x809E: return "GL_SAMPLE_ALPHA_TO_COVERAGE";
        case 0x809F: return "GL_SAMPLE_ALPHA_TO_ONE";
        case 0x811A: return "GL_DUAL_INTENSITY12_SGIS";
        case 0x811B: return "GL_DUAL_INTENSITY16_SGIS";
        case 0x811C: return "GL_DUAL_LUMINANCE_ALPHA4_SGIS";
        case 0x811D: return "GL_DUAL_LUMINANCE_ALPHA8_SGIS";
        case 0x811E: return "GL_QUAD_ALPHA4_SGIS";
        case 0x811F: return "GL_QUAD_ALPHA8_SGIS";
        case 0x812A: return "GL_FOG_FUNC_SGIS";
        case 0x812B: return "GL_FOG_FUNC_POINTS_SGIS";
        case 0x812C: return "GL_MAX_FOG_FUNC_POINTS_SGIS";
        case 0x812D: return "GL_CLAMP_TO_BORDER";
        case 0x812F: return "GL_CLAMP_TO_EDGE";
        case 0x813A: return "GL_TEXTURE_MIN_LOD";
        case 0x813B: return "GL_TEXTURE_MAX_LOD";
        case 0x813C: return "GL_TEXTURE_BASE_LEVEL";
        case 0x813D: return "GL_TEXTURE_MAX_LEVEL";
        case 0x814F: return "GL_TEXTURE_4D_BINDING_SGIS";
        case 0x815A: return "GL_IMAGE_ROTATE_ORIGIN_X_HP";
        case 0x815B: return "GL_IMAGE_ROTATE_ORIGIN_Y_HP";
        case 0x815C: return "GL_IMAGE_MAG_FILTER_HP";
        case 0x815D: return "GL_IMAGE_MIN_FILTER_HP";
        case 0x815E: return "GL_IMAGE_CUBIC_WEIGHT_HP";
        case 0x815F: return "GL_CUBIC_HP";
        case 0x821A: return "GL_DEPTH_STENCIL_ATTACHMENT";
        case 0x821B: return "GL_MAJOR_VERSION";
        case 0x821C: return "GL_MINOR_VERSION";
        case 0x821D: return "GL_NUM_EXTENSIONS";
        case 0x821E: return "GL_CONTEXT_FLAGS";
        case 0x822A: return "GL_R16";
        case 0x822B: return "GL_RG8";
        case 0x822C: return "GL_RG16";
        case 0x822D: return "GL_R16F";
        case 0x822E: return "GL_R32F";
        case 0x822F: return "GL_RG16F";
        case 0x823A: return "GL_RG16UI";
        case 0x823B: return "GL_RG32I";
        case 0x823C: return "GL_RG32UI";
        case 0x824A: return "GL_DEBUG_SOURCE_APPLICATION_ARB";
        case 0x824B: return "GL_DEBUG_SOURCE_OTHER_ARB";
        case 0x824C: return "GL_DEBUG_TYPE_ERROR_ARB";
        case 0x824D: return "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB";
        case 0x824E: return "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB";
        case 0x824F: return "GL_DEBUG_TYPE_PORTABILITY_ARB";
        case 0x825A: return "GL_PROGRAM_PIPELINE_BINDING";
        case 0x825B: return "GL_MAX_VIEWPORTS";
        case 0x825C: return "GL_VIEWPORT_SUBPIXEL_BITS";
        case 0x825D: return "GL_VIEWPORT_BOUNDS_RANGE";
        case 0x825E: return "GL_LAYER_PROVOKING_VERTEX";
        case 0x825F: return "GL_VIEWPORT_INDEX_PROVOKING_VERTEX";
        case 0x834A: return "GL_FRAGMENT_NORMAL_EXT";
        case 0x834C: return "GL_FRAGMENT_COLOR_EXT";
        case 0x834D: return "GL_ATTENUATION_EXT";
        case 0x834E: return "GL_SHADOW_ATTENUATION_EXT";
        case 0x834F: return "GL_TEXTURE_APPLICATION_MODE_EXT";
        case 0x843A: return "GL_BINORMAL_ARRAY_EXT";
        case 0x843B: return "GL_CURRENT_TANGENT_EXT";
        case 0x843C: return "GL_CURRENT_BINORMAL_EXT";
        case 0x843E: return "GL_TANGENT_ARRAY_TYPE_EXT";
        case 0x843F: return "GL_TANGENT_ARRAY_STRIDE_EXT";
        case 0x845A: return "GL_SECONDARY_COLOR_ARRAY_SIZE";
        case 0x845B: return "GL_SECONDARY_COLOR_ARRAY_TYPE";
        case 0x845C: return "GL_SECONDARY_COLOR_ARRAY_STRIDE";
        case 0x845D: return "GL_SECONDARY_COLOR_ARRAY_POINTER";
        case 0x845E: return "GL_SECONDARY_COLOR_ARRAY";
        case 0x845F: return "GL_CURRENT_RASTER_SECONDARY_COLOR";
        case 0x846D: return "GL_ALIASED_POINT_SIZE_RANGE";
        case 0x846E: return "GL_ALIASED_LINE_WIDTH_RANGE";
        case 0x850A: return "GL_MODELVIEW1_EXT";
        case 0x850B: return "GL_CURRENT_VERTEX_WEIGHT_EXT";
        case 0x850C: return "GL_VERTEX_WEIGHT_ARRAY_EXT";
        case 0x850D: return "GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT";
        case 0x850E: return "GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT";
        case 0x850F: return "GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT";
        case 0x851A: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z";
        case 0x851B: return "GL_PROXY_TEXTURE_CUBE_MAP";
        case 0x851C: return "GL_MAX_CUBE_MAP_TEXTURE_SIZE";
        case 0x851D: return "GL_VERTEX_ARRAY_RANGE_APPLE";
        case 0x851E: return "GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE";
        case 0x851F: return "GL_VERTEX_ARRAY_STORAGE_HINT_APPLE";
        case 0x858A: return "GL_SRC2_ALPHA";
        case 0x859A: return "GL_OPERAND2_ALPHA";
        case 0x862E: return "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB";
        case 0x862F: return "GL_MAX_PROGRAM_MATRICES_ARB";
        case 0x864B: return "GL_PROGRAM_ERROR_POSITION_ARB";
        case 0x864F: return "GL_DEPTH_CLAMP";
        case 0x872A: return "GL_MODELVIEW10_ARB";
        case 0x872B: return "GL_MODELVIEW11_ARB";
        case 0x872C: return "GL_MODELVIEW12_ARB";
        case 0x872D: return "GL_MODELVIEW13_ARB";
        case 0x872E: return "GL_MODELVIEW14_ARB";
        case 0x872F: return "GL_MODELVIEW15_ARB";
        case 0x873A: return "GL_MODELVIEW26_ARB";
        case 0x873B: return "GL_MODELVIEW27_ARB";
        case 0x873C: return "GL_MODELVIEW28_ARB";
        case 0x873D: return "GL_MODELVIEW29_ARB";
        case 0x873E: return "GL_MODELVIEW30_ARB";
        case 0x873F: return "GL_MODELVIEW31_ARB";
        case 0x875A: return "GL_DEBUG_PRINT_MESA";
        // case 0x875A: return "GL_TEXTURE_2D_STACK_MESAX";
        case 0x875B: return "GL_DEBUG_ASSERT_MESA";
        // case 0x875B: return "GL_PROXY_TEXTURE_1D_STACK_MESAX";
        case 0x875C: return "GL_PROXY_TEXTURE_2D_STACK_MESAX";
        case 0x875D: return "GL_TEXTURE_1D_STACK_BINDING_MESAX";
        case 0x875E: return "GL_TEXTURE_2D_STACK_BINDING_MESAX";
        case 0x878A: return "GL_OP_MAX_EXT";
        case 0x878B: return "GL_OP_MIN_EXT";
        case 0x878C: return "GL_OP_SET_GE_EXT";
        case 0x878D: return "GL_OP_SET_LT_EXT";
        case 0x878E: return "GL_OP_CLAMP_EXT";
        case 0x878F: return "GL_OP_FLOOR_EXT";
        case 0x879A: return "GL_OUTPUT_VERTEX_EXT";
        case 0x879B: return "GL_OUTPUT_COLOR0_EXT";
        case 0x879C: return "GL_OUTPUT_COLOR1_EXT";
        case 0x879D: return "GL_OUTPUT_TEXTURE_COORD0_EXT";
        case 0x879E: return "GL_OUTPUT_TEXTURE_COORD1_EXT";
        case 0x879F: return "GL_OUTPUT_TEXTURE_COORD2_EXT";
        case 0x880A: return "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB";
        case 0x880B: return "GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB";
        case 0x880C: return "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB";
        case 0x880D: return "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB";
        case 0x880E: return "GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB";
        case 0x880F: return "GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB";
        case 0x881A: return "GL_RGBA16F";
        case 0x881B: return "GL_RGB16F";
        case 0x881C: return "GL_ALPHA16F_ARB";
        case 0x881D: return "GL_INTENSITY16F_ARB";
        case 0x881E: return "GL_LUMINANCE16F_ARB";
        case 0x881F: return "GL_LUMINANCE_ALPHA16F_ARB";
        case 0x882A: return "GL_DRAW_BUFFER5";
        case 0x882B: return "GL_DRAW_BUFFER6";
        case 0x882C: return "GL_DRAW_BUFFER7";
        case 0x882D: return "GL_DRAW_BUFFER8";
        case 0x882E: return "GL_DRAW_BUFFER9";
        case 0x882F: return "GL_DRAW_BUFFER10";
        case 0x883D: return "GL_BLEND_EQUATION_ALPHA";
        case 0x884A: return "GL_TEXTURE_DEPTH_SIZE";
        case 0x884B: return "GL_DEPTH_TEXTURE_MODE";
        case 0x884C: return "GL_TEXTURE_COMPARE_MODE";
        case 0x884D: return "GL_TEXTURE_COMPARE_FUNC";
        case 0x884E: return "GL_COMPARE_REF_TO_TEXTURE";
        case 0x884F: return "GL_TEXTURE_CUBE_MAP_SEAMLESS";
        case 0x886A: return "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED";
        case 0x886C: return "GL_MAX_TESS_CONTROL_INPUT_COMPONENTS";
        case 0x886D: return "GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS";
        case 0x887F: return "GL_GEOMETRY_SHADER_INVOCATIONS";
        case 0x889A: return "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING";
        case 0x889B: return "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING";
        case 0x889C: return "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING";
        case 0x889D: return "GL_FOG_COORD_ARRAY_BUFFER_BINDING";
        case 0x889E: return "GL_WEIGHT_ARRAY_BUFFER_BINDING";
        case 0x889F: return "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING";
        case 0x891A: return "GL_CLAMP_VERTEX_COLOR";
        case 0x891B: return "GL_CLAMP_FRAGMENT_COLOR";
        case 0x891C: return "GL_CLAMP_READ_COLOR";
        case 0x891D: return "GL_FIXED_ONLY";
        case 0x0900: return "GL_CW";
        case 0x900A: return "GL_TEXTURE_BINDING_CUBE_MAP_ARRAY";
        case 0x900B: return "GL_PROXY_TEXTURE_CUBE_MAP_ARRAY";
        case 0x900C: return "GL_SAMPLER_CUBE_MAP_ARRAY";
        case 0x900D: return "GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW";
        case 0x900E: return "GL_INT_SAMPLER_CUBE_MAP_ARRAY";
        case 0x900F: return "GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY";
        case 0x0901: return "GL_CCW";
        case 0x901A: return "GL_LUMINANCE16_ALPHA16_SNORM";
        case 0x901B: return "GL_INTENSITY16_SNORM";
        case 0x904C: return "GL_IMAGE_1D_EXT";
        case 0x904D: return "GL_IMAGE_2D_EXT";
        case 0x904E: return "GL_IMAGE_3D_EXT";
        case 0x904F: return "GL_IMAGE_2D_RECT_EXT";
        case 0x905A: return "GL_INT_IMAGE_2D_RECT_EXT";
        case 0x905B: return "GL_INT_IMAGE_CUBE_EXT";
        case 0x905C: return "GL_INT_IMAGE_BUFFER_EXT";
        case 0x905D: return "GL_INT_IMAGE_1D_ARRAY_EXT";
        case 0x905E: return "GL_INT_IMAGE_2D_ARRAY_EXT";
        case 0x905F: return "GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT";
        case 0x906A: return "GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT";
        case 0x906B: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT";
        case 0x906C: return "GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT";
        case 0x906D: return "GL_MAX_IMAGE_SAMPLES_EXT";
        case 0x906E: return "GL_IMAGE_BINDING_FORMAT_EXT";
        case 0x906F: return "GL_RGB10_A2UI";
        case 0x910A: return "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE";
        case 0x910B: return "GL_SAMPLER_2D_MULTISAMPLE_ARRAY";
        case 0x910C: return "GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY";
        case 0x910D: return "GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY";
        case 0x910E: return "GL_MAX_COLOR_TEXTURE_SAMPLES";
        case 0x910F: return "GL_MAX_DEPTH_TEXTURE_SAMPLES";
        case 0x911A: return "GL_ALREADY_SIGNALED";
        case 0x911B: return "GL_TIMEOUT_EXPIRED";
        case 0x911C: return "GL_CONDITION_SATISFIED";
        case 0x911D: return "GL_WAIT_FAILED";
        case 0x911F: return "GL_BUFFER_ACCESS_FLAGS";
        case 0x914A: return "GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD";
        case 0x914B: return "GL_DEBUG_CATEGORY_DEPRECATION_AMD";
        case 0x914C: return "GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD";
        case 0x914D: return "GL_DEBUG_CATEGORY_PERFORMANCE_AMD";
        case 0x914E: return "GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD";
        case 0x914F: return "GL_DEBUG_CATEGORY_APPLICATION_AMD";
        case 0x1000: return "GL_TEXTURE_WIDTH";
        case 0x1001: return "GL_TEXTURE_HEIGHT";
        case 0x1003: return "GL_TEXTURE_INTERNAL_FORMAT";
        case 0x1004: return "GL_TEXTURE_BORDER_COLOR";
        case 0x1005: return "GL_TEXTURE_BORDER";
        case 0x1100: return "GL_DONT_CARE";
        case 0x1101: return "GL_FASTEST";
        case 0x1102: return "GL_NICEST";
        case 0x1200: return "GL_AMBIENT";
        case 0x1201: return "GL_DIFFUSE";
        case 0x1202: return "GL_SPECULAR";
        case 0x1203: return "GL_POSITION";
        case 0x1204: return "GL_SPOT_DIRECTION";
        case 0x1205: return "GL_SPOT_EXPONENT";
        case 0x1206: return "GL_SPOT_CUTOFF";
        case 0x1207: return "GL_CONSTANT_ATTENUATION";
        case 0x1208: return "GL_LINEAR_ATTENUATION";
        case 0x1209: return "GL_QUADRATIC_ATTENUATION";
        case 0x1300: return "GL_COMPILE";
        case 0x1301: return "GL_COMPILE_AND_EXECUTE";
        case 0x1400: return "GL_BYTE";
        case 0x1401: return "GL_UNSIGNED_BYTE";
        case 0x1402: return "GL_SHORT";
        case 0x1403: return "GL_UNSIGNED_SHORT";
        case 0x1404: return "GL_INT";
        case 0x1405: return "GL_UNSIGNED_INT";
        case 0x1406: return "GL_FLOAT";
        case 0x1407: return "GL_2_BYTES";
        case 0x1408: return "GL_3_BYTES";
        case 0x1409: return "GL_4_BYTES";
        case 0x1500: return "GL_CLEAR";
        case 0x1501: return "GL_AND";
        case 0x1502: return "GL_AND_REVERSE";
        case 0x1503: return "GL_COPY";
        case 0x1504: return "GL_AND_INVERTED";
        case 0x1505: return "GL_NOOP";
        case 0x1506: return "GL_XOR";
        case 0x1507: return "GL_OR";
        case 0x1508: return "GL_NOR";
        case 0x1509: return "GL_EQUIV";
        case 0x1600: return "GL_EMISSION";
        case 0x1601: return "GL_SHININESS";
        case 0x1602: return "GL_AMBIENT_AND_DIFFUSE";
        case 0x1603: return "GL_COLOR_INDEXES";
        case 0x1700: return "GL_MODELVIEW";
        case 0x1701: return "GL_PROJECTION";
        case 0x1702: return "GL_TEXTURE";
        case 0x1800: return "GL_COLOR";
        case 0x1801: return "GL_DEPTH";
        case 0x1802: return "GL_STENCIL";
        case 0x1900: return "GL_COLOR_INDEX";
        case 0x1901: return "GL_STENCIL_INDEX";
        case 0x1902: return "GL_DEPTH_COMPONENT";
        case 0x1903: return "GL_RED";
        case 0x1904: return "GL_GREEN";
        case 0x1905: return "GL_BLUE";
        case 0x1906: return "GL_ALPHA";
        case 0x1907: return "GL_RGB";
        case 0x1908: return "GL_RGBA";
        case 0x1909: return "GL_LUMINANCE";
        case 0x2000: return "GL_S";
        case 0x2001: return "GL_T";
        case 0x2002: return "GL_R";
        case 0x2003: return "GL_Q";
        case 0x2100: return "GL_MODULATE";
        case 0x2101: return "GL_DECAL";
        case 0x2200: return "GL_TEXTURE_ENV_MODE";
        case 0x2201: return "GL_TEXTURE_ENV_COLOR";
        case 0x2300: return "GL_TEXTURE_ENV";
        case 0x2400: return "GL_EYE_LINEAR";
        case 0x2401: return "GL_OBJECT_LINEAR";
        case 0x2402: return "GL_SPHERE_MAP";
        case 0x2500: return "GL_TEXTURE_GEN_MODE";
        case 0x2501: return "GL_OBJECT_PLANE";
        case 0x2502: return "GL_EYE_PLANE";
        case 0x2600: return "GL_NEAREST";
        case 0x2601: return "GL_LINEAR";
        case 0x2700: return "GL_NEAREST_MIPMAP_NEAREST";
        case 0x2701: return "GL_LINEAR_MIPMAP_NEAREST";
        case 0x2702: return "GL_NEAREST_MIPMAP_LINEAR";
        case 0x2703: return "GL_LINEAR_MIPMAP_LINEAR";
        case 0x2800: return "GL_TEXTURE_MAG_FILTER";
        case 0x2801: return "GL_TEXTURE_MIN_FILTER";
        case 0x2802: return "GL_TEXTURE_WRAP_S";
        case 0x2803: return "GL_TEXTURE_WRAP_T";
        case 0x2900: return "GL_CLAMP";
        case 0x2901: return "GL_REPEAT";
        case 0x3000: return "GL_CLIP_PLANE0";
        case 0x3001: return "GL_CLIP_PLANE1";
        case 0x3002: return "GL_CLIP_PLANE2";
        case 0x3003: return "GL_CLIP_PLANE3";
        case 0x3004: return "GL_CLIP_PLANE4";
        case 0x3005: return "GL_CLIP_PLANE5";
        case 0x3006: return "GL_CLIP_DISTANCE6";
        case 0x3007: return "GL_CLIP_DISTANCE7";
        case 0x4000: return "GL_LIGHT0";
        case 0x4001: return "GL_LIGHT1";
        case 0x4002: return "GL_LIGHT2";
        case 0x4003: return "GL_LIGHT3";
        case 0x4004: return "GL_LIGHT4";
        case 0x4005: return "GL_LIGHT5";
        case 0x4006: return "GL_LIGHT6";
        case 0x4007: return "GL_LIGHT7";
        case 0x8000: return "GL_ABGR_EXT";
        case 0x8001: return "GL_CONSTANT_COLOR";
        case 0x8002: return "GL_ONE_MINUS_CONSTANT_COLOR";
        case 0x8003: return "GL_CONSTANT_ALPHA";
        case 0x8004: return "GL_ONE_MINUS_CONSTANT_ALPHA";
        case 0x8005: return "GL_BLEND_COLOR";
        case 0x8006: return "GL_FUNC_ADD";
        case 0x8007: return "GL_MIN";
        case 0x8008: return "GL_MAX";
        case 0x8009: return "GL_BLEND_EQUATION";
        case 0x8010: return "GL_CONVOLUTION_1D";
        case 0x8011: return "GL_CONVOLUTION_2D";
        case 0x8012: return "GL_SEPARABLE_2D";
        case 0x8013: return "GL_CONVOLUTION_BORDER_MODE";
        case 0x8014: return "GL_CONVOLUTION_FILTER_SCALE";
        case 0x8015: return "GL_CONVOLUTION_FILTER_BIAS";
        case 0x8016: return "GL_REDUCE";
        case 0x8017: return "GL_CONVOLUTION_FORMAT";
        case 0x8018: return "GL_CONVOLUTION_WIDTH";
        case 0x8019: return "GL_CONVOLUTION_HEIGHT";
        case 0x8020: return "GL_POST_CONVOLUTION_RED_BIAS";
        case 0x8021: return "GL_POST_CONVOLUTION_GREEN_BIAS";
        case 0x8022: return "GL_POST_CONVOLUTION_BLUE_BIAS";
        case 0x8023: return "GL_POST_CONVOLUTION_ALPHA_BIAS";
        case 0x8024: return "GL_HISTOGRAM";
        case 0x8025: return "GL_PROXY_HISTOGRAM";
        case 0x8026: return "GL_HISTOGRAM_WIDTH";
        case 0x8027: return "GL_HISTOGRAM_FORMAT";
        case 0x8028: return "GL_HISTOGRAM_RED_SIZE";
        case 0x8029: return "GL_HISTOGRAM_GREEN_SIZE";
        case 0x8030: return "GL_MINMAX_SINK";
        case 0x8031: return "GL_TABLE_TOO_LARGE";
        case 0x8032: return "GL_UNSIGNED_BYTE_3_3_2";
        case 0x8033: return "GL_UNSIGNED_SHORT_4_4_4_4";
        case 0x8034: return "GL_UNSIGNED_SHORT_5_5_5_1";
        case 0x8035: return "GL_UNSIGNED_INT_8_8_8_8";
        case 0x8036: return "GL_UNSIGNED_INT_10_10_10_2";
        case 0x8037: return "GL_POLYGON_OFFSET_EXT";
        case 0x8038: return "GL_POLYGON_OFFSET_FACTOR";
        case 0x8039: return "GL_POLYGON_OFFSET_BIAS_EXT";
        case 0x8040: return "GL_LUMINANCE8";
        case 0x8041: return "GL_LUMINANCE12";
        case 0x8042: return "GL_LUMINANCE16";
        case 0x8043: return "GL_LUMINANCE4_ALPHA4";
        case 0x8044: return "GL_LUMINANCE6_ALPHA2";
        case 0x8045: return "GL_LUMINANCE8_ALPHA8";
        case 0x8046: return "GL_LUMINANCE12_ALPHA4";
        case 0x8047: return "GL_LUMINANCE12_ALPHA12";
        case 0x8048: return "GL_LUMINANCE16_ALPHA16";
        case 0x8049: return "GL_INTENSITY";
        case 0x8050: return "GL_RGB5";
        case 0x8051: return "GL_RGB8";
        case 0x8052: return "GL_RGB10";
        case 0x8053: return "GL_RGB12";
        case 0x8054: return "GL_RGB16";
        case 0x8055: return "GL_RGBA2";
        case 0x8056: return "GL_RGBA4";
        case 0x8057: return "GL_RGB5_A1";
        case 0x8058: return "GL_RGBA8";
        case 0x8059: return "GL_RGB10_A2";
        case 0x8060: return "GL_TEXTURE_LUMINANCE_SIZE";
        case 0x8061: return "GL_TEXTURE_INTENSITY_SIZE";
        case 0x8062: return "GL_REPLACE_EXT";
        case 0x8063: return "GL_PROXY_TEXTURE_1D";
        case 0x8064: return "GL_PROXY_TEXTURE_2D";
        case 0x8065: return "GL_TEXTURE_TOO_LARGE_EXT";
        case 0x8066: return "GL_TEXTURE_PRIORITY";
        case 0x8067: return "GL_TEXTURE_RESIDENT";
        case 0x8068: return "GL_TEXTURE_BINDING_1D";
        case 0x8069: return "GL_TEXTURE_BINDING_2D";
        case 0x8070: return "GL_PROXY_TEXTURE_3D";
        case 0x8071: return "GL_TEXTURE_DEPTH";
        case 0x8072: return "GL_TEXTURE_WRAP_R";
        case 0x8073: return "GL_MAX_3D_TEXTURE_SIZE";
        case 0x8074: return "GL_VERTEX_ARRAY";
        case 0x8075: return "GL_NORMAL_ARRAY";
        case 0x8076: return "GL_COLOR_ARRAY";
        case 0x8077: return "GL_INDEX_ARRAY";
        case 0x8078: return "GL_TEXTURE_COORD_ARRAY";
        case 0x8079: return "GL_EDGE_FLAG_ARRAY";
        case 0x8080: return "GL_NORMAL_ARRAY_COUNT_EXT";
        case 0x8081: return "GL_COLOR_ARRAY_SIZE";
        case 0x8082: return "GL_COLOR_ARRAY_TYPE";
        case 0x8083: return "GL_COLOR_ARRAY_STRIDE";
        case 0x8084: return "GL_COLOR_ARRAY_COUNT_EXT";
        case 0x8085: return "GL_INDEX_ARRAY_TYPE";
        case 0x8086: return "GL_INDEX_ARRAY_STRIDE";
        case 0x8087: return "GL_INDEX_ARRAY_COUNT_EXT";
        case 0x8088: return "GL_TEXTURE_COORD_ARRAY_SIZE";
        case 0x8089: return "GL_TEXTURE_COORD_ARRAY_TYPE";
        case 0x8090: return "GL_COLOR_ARRAY_POINTER";
        case 0x8091: return "GL_INDEX_ARRAY_POINTER";
        case 0x8092: return "GL_TEXTURE_COORD_ARRAY_POINTER";
        case 0x8093: return "GL_EDGE_FLAG_ARRAY_POINTER";
        case 0x8095: return "GL_DETAIL_TEXTURE_2D_SGIS";
        case 0x8096: return "GL_DETAIL_TEXTURE_2D_BINDING_SGIS";
        case 0x8097: return "GL_LINEAR_DETAIL_SGIS";
        case 0x8098: return "GL_LINEAR_DETAIL_ALPHA_SGIS";
        case 0x8099: return "GL_LINEAR_DETAIL_COLOR_SGIS";
        case 0x8110: return "GL_DUAL_ALPHA4_SGIS";
        case 0x8111: return "GL_DUAL_ALPHA8_SGIS";
        case 0x8112: return "GL_DUAL_ALPHA12_SGIS";
        case 0x8113: return "GL_DUAL_ALPHA16_SGIS";
        case 0x8114: return "GL_DUAL_LUMINANCE4_SGIS";
        case 0x8115: return "GL_DUAL_LUMINANCE8_SGIS";
        case 0x8116: return "GL_DUAL_LUMINANCE12_SGIS";
        case 0x8117: return "GL_DUAL_LUMINANCE16_SGIS";
        case 0x8118: return "GL_DUAL_INTENSITY4_SGIS";
        case 0x8119: return "GL_DUAL_INTENSITY8_SGIS";
        case 0x8120: return "GL_QUAD_LUMINANCE4_SGIS";
        case 0x8121: return "GL_QUAD_LUMINANCE8_SGIS";
        case 0x8122: return "GL_QUAD_INTENSITY4_SGIS";
        case 0x8123: return "GL_QUAD_INTENSITY8_SGIS";
        case 0x8124: return "GL_DUAL_TEXTURE_SELECT_SGIS";
        case 0x8125: return "GL_QUAD_TEXTURE_SELECT_SGIS";
        case 0x8126: return "GL_POINT_SIZE_MIN";
        case 0x8127: return "GL_POINT_SIZE_MAX";
        case 0x8128: return "GL_POINT_FADE_THRESHOLD_SIZE";
        case 0x8129: return "GL_POINT_DISTANCE_ATTENUATION";
        case 0x8130: return "GL_PACK_SKIP_VOLUMES_SGIS";
        case 0x8131: return "GL_PACK_IMAGE_DEPTH_SGIS";
        case 0x8132: return "GL_UNPACK_SKIP_VOLUMES_SGIS";
        case 0x8133: return "GL_UNPACK_IMAGE_DEPTH_SGIS";
        case 0x8134: return "GL_TEXTURE_4D_SGIS";
        case 0x8135: return "GL_PROXY_TEXTURE_4D_SGIS";
        case 0x8136: return "GL_TEXTURE_4DSIZE_SGIS";
        case 0x8137: return "GL_TEXTURE_WRAP_Q_SGIS";
        case 0x8138: return "GL_MAX_4D_TEXTURE_SIZE_SGIS";
        case 0x8146: return "GL_FILTER4_SGIS";
        case 0x8147: return "GL_TEXTURE_FILTER4_SIZE_SGIS";
        case 0x8150: return "GL_IGNORE_BORDER_HP";
        case 0x8151: return "GL_CONSTANT_BORDER";
        case 0x8153: return "GL_REPLICATE_BORDER";
        case 0x8154: return "GL_CONVOLUTION_BORDER_COLOR";
        case 0x8155: return "GL_IMAGE_SCALE_X_HP";
        case 0x8156: return "GL_IMAGE_SCALE_Y_HP";
        case 0x8157: return "GL_IMAGE_TRANSLATE_X_HP";
        case 0x8158: return "GL_IMAGE_TRANSLATE_Y_HP";
        case 0x8159: return "GL_IMAGE_ROTATE_ANGLE_HP";
        case 0x8160: return "GL_AVERAGE_HP";
        case 0x8161: return "GL_IMAGE_TRANSFORM_2D_HP";
        case 0x8162: return "GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP";
        case 0x8163: return "GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP";
        case 0x8165: return "GL_OCCLUSION_TEST_HP";
        case 0x8166: return "GL_OCCLUSION_TEST_RESULT_HP";
        case 0x8167: return "GL_TEXTURE_LIGHTING_MODE_HP";
        case 0x8168: return "GL_TEXTURE_POST_SPECULAR_HP";
        case 0x8169: return "GL_TEXTURE_PRE_SPECULAR_HP";
        case 0x8191: return "GL_GENERATE_MIPMAP";
        case 0x8192: return "GL_GENERATE_MIPMAP_HINT";
        case 0x8210: return "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING";
        case 0x8211: return "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE";
        case 0x8212: return "GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE";
        case 0x8213: return "GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE";
        case 0x8214: return "GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE";
        case 0x8215: return "GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE";
        case 0x8216: return "GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE";
        case 0x8217: return "GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE";
        case 0x8218: return "GL_FRAMEBUFFER_DEFAULT";
        case 0x8219: return "GL_FRAMEBUFFER_UNDEFINED";
        case 0x8222: return "GL_INDEX";
        case 0x8223: return "GL_DEPTH_BUFFER";
        case 0x8224: return "GL_STENCIL_BUFFER";
        case 0x8225: return "GL_COMPRESSED_RED";
        case 0x8226: return "GL_COMPRESSED_RG";
        case 0x8227: return "GL_RG";
        case 0x8228: return "GL_RG_INTEGER";
        case 0x8229: return "GL_R8";
        case 0x8230: return "GL_RG32F";
        case 0x8231: return "GL_R8I";
        case 0x8232: return "GL_R8UI";
        case 0x8233: return "GL_R16I";
        case 0x8234: return "GL_R16UI";
        case 0x8235: return "GL_R32I";
        case 0x8236: return "GL_R32UI";
        case 0x8237: return "GL_RG8I";
        case 0x8238: return "GL_RG8UI";
        case 0x8239: return "GL_RG16I";
        case 0x8240: return "GL_SYNC_CL_EVENT_ARB";
        case 0x8241: return "GL_SYNC_CL_EVENT_COMPLETE_ARB";
        case 0x8242: return "GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB";
        case 0x8243: return "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB";
        case 0x8244: return "GL_DEBUG_CALLBACK_FUNCTION_ARB";
        case 0x8245: return "GL_DEBUG_CALLBACK_USER_PARAM_ARB";
        case 0x8246: return "GL_DEBUG_SOURCE_API_ARB";
        case 0x8247: return "GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB";
        case 0x8248: return "GL_DEBUG_SOURCE_SHADER_COMPILER_ARB";
        case 0x8249: return "GL_DEBUG_SOURCE_THIRD_PARTY_ARB";
        case 0x8250: return "GL_DEBUG_TYPE_PERFORMANCE_ARB";
        case 0x8251: return "GL_DEBUG_TYPE_OTHER_ARB";
        case 0x8252: return "GL_LOSE_CONTEXT_ON_RESET_ARB";
        case 0x8253: return "GL_GUILTY_CONTEXT_RESET_ARB";
        case 0x8254: return "GL_INNOCENT_CONTEXT_RESET_ARB";
        case 0x8255: return "GL_UNKNOWN_CONTEXT_RESET_ARB";
        case 0x8256: return "GL_RESET_NOTIFICATION_STRATEGY_ARB";
        case 0x8257: return "GL_PROGRAM_BINARY_RETRIEVABLE_HINT";
        case 0x8258: return "GL_PROGRAM_SEPARABLE";
        case 0x8259: return "GL_ACTIVE_PROGRAM";
        case 0x8260: return "GL_UNDEFINED_VERTEX";
        case 0x8261: return "GL_NO_RESET_NOTIFICATION_ARB";
        case 0x8330: return "GL_PIXEL_TRANSFORM_2D_EXT";
        case 0x8331: return "GL_PIXEL_MAG_FILTER_EXT";
        case 0x8332: return "GL_PIXEL_MIN_FILTER_EXT";
        case 0x8333: return "GL_PIXEL_CUBIC_WEIGHT_EXT";
        case 0x8334: return "GL_CUBIC_EXT";
        case 0x8335: return "GL_AVERAGE_EXT";
        case 0x8336: return "GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT";
        case 0x8337: return "GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT";
        case 0x8338: return "GL_PIXEL_TRANSFORM_2D_MATRIX_EXT";
        case 0x8349: return "GL_FRAGMENT_MATERIAL_EXT";
        case 0x8350: return "GL_TEXTURE_LIGHT_EXT";
        case 0x8351: return "GL_TEXTURE_MATERIAL_FACE_EXT";
        case 0x8352: return "GL_TEXTURE_MATERIAL_PARAMETER_EXT";
        case 0x8353: return "GL_PIXEL_TEXTURE_SGIS";
        case 0x8354: return "GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS";
        case 0x8355: return "GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS";
        case 0x8356: return "GL_PIXEL_GROUP_COLOR_SGIS";
        case 0x8362: return "GL_UNSIGNED_BYTE_2_3_3_REV";
        case 0x8363: return "GL_UNSIGNED_SHORT_5_6_5";
        case 0x8364: return "GL_UNSIGNED_SHORT_5_6_5_REV";
        case 0x8365: return "GL_UNSIGNED_SHORT_4_4_4_4_REV";
        case 0x8366: return "GL_UNSIGNED_SHORT_1_5_5_5_REV";
        case 0x8367: return "GL_UNSIGNED_INT_8_8_8_8_REV";
        case 0x8368: return "GL_UNSIGNED_INT_2_10_10_10_REV";
        case 0x8370: return "GL_MIRRORED_REPEAT";
        case 0x8439: return "GL_TANGENT_ARRAY_EXT";
        case 0x8440: return "GL_BINORMAL_ARRAY_TYPE_EXT";
        case 0x8441: return "GL_BINORMAL_ARRAY_STRIDE_EXT";
        case 0x8442: return "GL_TANGENT_ARRAY_POINTER_EXT";
        case 0x8443: return "GL_BINORMAL_ARRAY_POINTER_EXT";
        case 0x8444: return "GL_MAP1_TANGENT_EXT";
        case 0x8445: return "GL_MAP2_TANGENT_EXT";
        case 0x8446: return "GL_MAP1_BINORMAL_EXT";
        case 0x8447: return "GL_MAP2_BINORMAL_EXT";
        case 0x8450: return "GL_FOG_COORD_SRC";
        case 0x8451: return "GL_FOG_COORD";
        case 0x8452: return "GL_FRAGMENT_DEPTH";
        case 0x8453: return "GL_CURRENT_FOG_COORD";
        case 0x8454: return "GL_FOG_COORD_ARRAY_TYPE";
        case 0x8455: return "GL_FOG_COORD_ARRAY_STRIDE";
        case 0x8456: return "GL_FOG_COORD_ARRAY_POINTER";
        case 0x8457: return "GL_FOG_COORD_ARRAY";
        case 0x8458: return "GL_COLOR_SUM";
        case 0x8459: return "GL_CURRENT_SECONDARY_COLOR";
        case 0x8490: return "GL_SCREEN_COORDINATES_REND";
        case 0x8491: return "GL_INVERTED_SCREEN_W_REND";
        case 0x8500: return "GL_TEXTURE_FILTER_CONTROL";
        case 0x8501: return "GL_TEXTURE_LOD_BIAS";
        case 0x8502: return "GL_MODELVIEW1_STACK_DEPTH_EXT";
        case 0x8506: return "GL_MODELVIEW1_MATRIX_EXT";
        case 0x8507: return "GL_INCR_WRAP";
        case 0x8508: return "GL_DECR_WRAP";
        case 0x8509: return "GL_VERTEX_WEIGHTING_EXT";
        case 0x8510: return "GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT";
        case 0x8511: return "GL_NORMAL_MAP";
        case 0x8512: return "GL_REFLECTION_MAP";
        case 0x8513: return "GL_TEXTURE_CUBE_MAP";
        case 0x8514: return "GL_TEXTURE_BINDING_CUBE_MAP";
        case 0x8515: return "GL_TEXTURE_CUBE_MAP_POSITIVE_X";
        case 0x8516: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_X";
        case 0x8517: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Y";
        case 0x8518: return "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y";
        case 0x8519: return "GL_TEXTURE_CUBE_MAP_POSITIVE_Z";
        case 0x8521: return "GL_VERTEX_ARRAY_RANGE_POINTER_APPLE";
        case 0x8560: return "GL_RED_MIN_CLAMP_INGR";
        case 0x8561: return "GL_GREEN_MIN_CLAMP_INGR";
        case 0x8562: return "GL_BLUE_MIN_CLAMP_INGR";
        case 0x8563: return "GL_ALPHA_MIN_CLAMP_INGR";
        case 0x8564: return "GL_RED_MAX_CLAMP_INGR";
        case 0x8565: return "GL_GREEN_MAX_CLAMP_INGR";
        case 0x8566: return "GL_BLUE_MAX_CLAMP_INGR";
        case 0x8567: return "GL_ALPHA_MAX_CLAMP_INGR";
        case 0x8568: return "GL_INTERLACE_READ_INGR";
        case 0x8570: return "GL_COMBINE";
        case 0x8571: return "GL_COMBINE_RGB";
        case 0x8572: return "GL_COMBINE_ALPHA";
        case 0x8573: return "GL_RGB_SCALE";
        case 0x8574: return "GL_ADD_SIGNED";
        case 0x8575: return "GL_INTERPOLATE";
        case 0x8576: return "GL_CONSTANT";
        case 0x8577: return "GL_PRIMARY_COLOR";
        case 0x8578: return "GL_PREVIOUS";
        case 0x8580: return "GL_SRC0_RGB";
        case 0x8581: return "GL_SRC1_RGB";
        case 0x8582: return "GL_SRC2_RGB";
        case 0x8588: return "GL_SRC0_ALPHA";
        case 0x8589: return "GL_SRC1_ALPHA";
        case 0x8590: return "GL_OPERAND0_RGB";
        case 0x8591: return "GL_OPERAND1_RGB";
        case 0x8592: return "GL_OPERAND2_RGB";
        case 0x8598: return "GL_OPERAND0_ALPHA";
        case 0x8599: return "GL_OPERAND1_ALPHA";
        case 0x8614: return "GL_QUAD_MESH_SUN";
        case 0x8615: return "GL_TRIANGLE_MESH_SUN";
        case 0x8620: return "GL_VERTEX_PROGRAM_ARB";
        case 0x8622: return "GL_VERTEX_ATTRIB_ARRAY_ENABLED";
        case 0x8623: return "GL_VERTEX_ATTRIB_ARRAY_SIZE";
        case 0x8624: return "GL_VERTEX_ATTRIB_ARRAY_STRIDE";
        case 0x8625: return "GL_VERTEX_ATTRIB_ARRAY_TYPE";
        case 0x8626: return "GL_CURRENT_VERTEX_ATTRIB";
        case 0x8627: return "GL_PROGRAM_LENGTH_ARB";
        case 0x8628: return "GL_PROGRAM_STRING_ARB";
        case 0x8640: return "GL_CURRENT_MATRIX_STACK_DEPTH_ARB";
        case 0x8641: return "GL_CURRENT_MATRIX_ARB";
        case 0x8642: return "GL_PROGRAM_POINT_SIZE";
        case 0x8643: return "GL_VERTEX_PROGRAM_TWO_SIDE";
        case 0x8645: return "GL_VERTEX_ATTRIB_ARRAY_POINTER";
        case 0x8677: return "GL_PROGRAM_BINDING_ARB";
        case 0x8722: return "GL_MODELVIEW2_ARB";
        case 0x8723: return "GL_MODELVIEW3_ARB";
        case 0x8724: return "GL_MODELVIEW4_ARB";
        case 0x8725: return "GL_MODELVIEW5_ARB";
        case 0x8726: return "GL_MODELVIEW6_ARB";
        case 0x8727: return "GL_MODELVIEW7_ARB";
        case 0x8728: return "GL_MODELVIEW8_ARB";
        case 0x8729: return "GL_MODELVIEW9_ARB";
        case 0x8730: return "GL_MODELVIEW16_ARB";
        case 0x8731: return "GL_MODELVIEW17_ARB";
        case 0x8732: return "GL_MODELVIEW18_ARB";
        case 0x8733: return "GL_MODELVIEW19_ARB";
        case 0x8734: return "GL_MODELVIEW20_ARB";
        case 0x8735: return "GL_MODELVIEW21_ARB";
        case 0x8736: return "GL_MODELVIEW22_ARB";
        case 0x8737: return "GL_MODELVIEW23_ARB";
        case 0x8738: return "GL_MODELVIEW24_ARB";
        case 0x8739: return "GL_MODELVIEW25_ARB";
        case 0x8740: return "GL_DOT3_RGB_EXT";
        // case 0x8741: return "GL_DOT3_RGBA_EXT";
        case 0x8741: return "GL_PROGRAM_BINARY_LENGTH";
        case 0x8742: return "GL_MIRROR_CLAMP_EXT";
        case 0x8743: return "GL_MIRROR_CLAMP_TO_EDGE_EXT";
        case 0x8750: return "GL_DEPTH_STENCIL_MESA";
        case 0x8751: return "GL_UNSIGNED_INT_24_8_MESA";
        case 0x8752: return "GL_UNSIGNED_INT_8_24_REV_MESA";
        case 0x8753: return "GL_UNSIGNED_SHORT_15_1_MESA";
        case 0x8754: return "GL_UNSIGNED_SHORT_1_15_REV_MESA";
        case 0x8757: return "GL_YCBCR_MESA";
        case 0x8758: return "GL_PACK_INVERT_MESA";
        case 0x8759: return "GL_DEBUG_OBJECT_MESA";
        // case 0x8759: return "GL_TEXTURE_1D_STACK_MESAX";
        case 0x8764: return "GL_BUFFER_SIZE";
        case 0x8765: return "GL_BUFFER_USAGE";
        case 0x8780: return "GL_VERTEX_SHADER_EXT";
        case 0x8781: return "GL_VERTEX_SHADER_BINDING_EXT";
        case 0x8782: return "GL_OP_INDEX_EXT";
        case 0x8783: return "GL_OP_NEGATE_EXT";
        case 0x8784: return "GL_OP_DOT3_EXT";
        case 0x8785: return "GL_OP_DOT4_EXT";
        case 0x8786: return "GL_OP_MUL_EXT";
        case 0x8787: return "GL_OP_ADD_EXT";
        case 0x8788: return "GL_OP_MADD_EXT";
        case 0x8789: return "GL_OP_FRAC_EXT";
        case 0x8790: return "GL_OP_ROUND_EXT";
        case 0x8791: return "GL_OP_EXP_BASE_2_EXT";
        case 0x8792: return "GL_OP_LOG_BASE_2_EXT";
        case 0x8793: return "GL_OP_POWER_EXT";
        case 0x8794: return "GL_OP_RECIP_EXT";
        case 0x8795: return "GL_OP_RECIP_SQRT_EXT";
        case 0x8796: return "GL_OP_SUB_EXT";
        case 0x8797: return "GL_OP_CROSS_PRODUCT_EXT";
        case 0x8798: return "GL_OP_MULTIPLY_MATRIX_EXT";
        case 0x8799: return "GL_OP_MOV_EXT";
        case 0x8800: return "GL_STENCIL_BACK_FUNC";
        case 0x8801: return "GL_STENCIL_BACK_FAIL";
        case 0x8802: return "GL_STENCIL_BACK_PASS_DEPTH_FAIL";
        case 0x8803: return "GL_STENCIL_BACK_PASS_DEPTH_PASS";
        case 0x8804: return "GL_FRAGMENT_PROGRAM_ARB";
        case 0x8805: return "GL_PROGRAM_ALU_INSTRUCTIONS_ARB";
        case 0x8806: return "GL_PROGRAM_TEX_INSTRUCTIONS_ARB";
        case 0x8807: return "GL_PROGRAM_TEX_INDIRECTIONS_ARB";
        case 0x8808: return "GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB";
        case 0x8809: return "GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB";
        case 0x8810: return "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB";
        case 0x8814: return "GL_RGBA32F";
        case 0x8815: return "GL_RGB32F";
        case 0x8816: return "GL_ALPHA32F_ARB";
        case 0x8817: return "GL_INTENSITY32F_ARB";
        case 0x8818: return "GL_LUMINANCE32F_ARB";
        case 0x8819: return "GL_LUMINANCE_ALPHA32F_ARB";
        case 0x8820: return "GL_RGBA_FLOAT_MODE_ARB";
        case 0x8824: return "GL_MAX_DRAW_BUFFERS";
        case 0x8825: return "GL_DRAW_BUFFER0";
        case 0x8826: return "GL_DRAW_BUFFER1";
        case 0x8827: return "GL_DRAW_BUFFER2";
        case 0x8828: return "GL_DRAW_BUFFER3";
        case 0x8829: return "GL_DRAW_BUFFER4";
        case 0x8830: return "GL_DRAW_BUFFER11";
        case 0x8831: return "GL_DRAW_BUFFER12";
        case 0x8832: return "GL_DRAW_BUFFER13";
        case 0x8833: return "GL_DRAW_BUFFER14";
        case 0x8834: return "GL_DRAW_BUFFER15";
        case 0x8840: return "GL_MATRIX_PALETTE_ARB";
        case 0x8841: return "GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB";
        case 0x8842: return "GL_MAX_PALETTE_MATRICES_ARB";
        case 0x8843: return "GL_CURRENT_PALETTE_MATRIX_ARB";
        case 0x8844: return "GL_MATRIX_INDEX_ARRAY_ARB";
        case 0x8845: return "GL_CURRENT_MATRIX_INDEX_ARB";
        case 0x8846: return "GL_MATRIX_INDEX_ARRAY_SIZE_ARB";
        case 0x8847: return "GL_MATRIX_INDEX_ARRAY_TYPE_ARB";
        case 0x8848: return "GL_MATRIX_INDEX_ARRAY_STRIDE_ARB";
        case 0x8849: return "GL_MATRIX_INDEX_ARRAY_POINTER_ARB";
        case 0x8861: return "GL_POINT_SPRITE";
        case 0x8862: return "GL_COORD_REPLACE";
        case 0x8864: return "GL_QUERY_COUNTER_BITS";
        case 0x8865: return "GL_CURRENT_QUERY";
        case 0x8866: return "GL_QUERY_RESULT";
        case 0x8867: return "GL_QUERY_RESULT_AVAILABLE";
        case 0x8869: return "GL_MAX_VERTEX_ATTRIBS";
        case 0x8871: return "GL_MAX_TEXTURE_COORDS";
        case 0x8872: return "GL_MAX_TEXTURE_IMAGE_UNITS";
        case 0x8874: return "GL_PROGRAM_ERROR_STRING_ARB";
        case 0x8875: return "GL_PROGRAM_FORMAT_ASCII_ARB";
        case 0x8876: return "GL_PROGRAM_FORMAT_ARB";
        case 0x8890: return "GL_DEPTH_BOUNDS_TEST_EXT";
        case 0x8891: return "GL_DEPTH_BOUNDS_EXT";
        case 0x8892: return "GL_ARRAY_BUFFER";
        case 0x8893: return "GL_ELEMENT_ARRAY_BUFFER";
        case 0x8894: return "GL_ARRAY_BUFFER_BINDING";
        case 0x8895: return "GL_ELEMENT_ARRAY_BUFFER_BINDING";
        case 0x8896: return "GL_VERTEX_ARRAY_BUFFER_BINDING";
        case 0x8897: return "GL_NORMAL_ARRAY_BUFFER_BINDING";
        case 0x8898: return "GL_COLOR_ARRAY_BUFFER_BINDING";
        case 0x8899: return "GL_INDEX_ARRAY_BUFFER_BINDING";
        case 0x8904: return "GL_MIN_PROGRAM_TEXEL_OFFSET";
        case 0x8905: return "GL_MAX_PROGRAM_TEXEL_OFFSET";
        case 0x8910: return "GL_STENCIL_TEST_TWO_SIDE_EXT";
        case 0x8911: return "GL_ACTIVE_STENCIL_FACE_EXT";
        case 0x8912: return "GL_MIRROR_CLAMP_TO_BORDER_EXT";
        case 0x8914: return "GL_SAMPLES_PASSED";
        case 0x8916: return "GL_GEOMETRY_VERTICES_OUT";
        case 0x8917: return "GL_GEOMETRY_INPUT_TYPE";
        case 0x8918: return "GL_GEOMETRY_OUTPUT_TYPE";
        case 0x8919: return "GL_SAMPLER_BINDING";
        case 0x8980: return "GL_INTERLACE_OML";
        case 0x8981: return "GL_INTERLACE_READ_OML";
        case 0x8982: return "GL_FORMAT_SUBSAMPLE_24_24_OML";
        case 0x8983: return "GL_FORMAT_SUBSAMPLE_244_244_OML";
        case 0x8984: return "GL_PACK_RESAMPLE_OML";
        case 0x8985: return "GL_UNPACK_RESAMPLE_OML";
        case 0x8986: return "GL_RESAMPLE_REPLICATE_OML";
        case 0x8987: return "GL_RESAMPLE_ZERO_FILL_OML";
        case 0x8988: return "GL_RESAMPLE_AVERAGE_OML";
        case 0x8989: return "GL_RESAMPLE_DECIMATE_OML";
        case 0x9001: return "GL_SAMPLER_BUFFER_AMD";
        case 0x9002: return "GL_INT_SAMPLER_BUFFER_AMD";
        case 0x9003: return "GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD";
        case 0x9004: return "GL_TESSELLATION_MODE_AMD";
        case 0x9005: return "GL_TESSELLATION_FACTOR_AMD";
        case 0x9006: return "GL_DISCRETE_AMD";
        case 0x9007: return "GL_CONTINUOUS_AMD";
        case 0x9009: return "GL_TEXTURE_CUBE_MAP_ARRAY";
        case 0x9010: return "GL_ALPHA_SNORM";
        case 0x9011: return "GL_LUMINANCE_SNORM";
        case 0x9012: return "GL_LUMINANCE_ALPHA_SNORM";
        case 0x9013: return "GL_INTENSITY_SNORM";
        case 0x9014: return "GL_ALPHA8_SNORM";
        case 0x9015: return "GL_LUMINANCE8_SNORM";
        case 0x9016: return "GL_LUMINANCE8_ALPHA8_SNORM";
        case 0x9017: return "GL_INTENSITY8_SNORM";
        case 0x9018: return "GL_ALPHA16_SNORM";
        case 0x9019: return "GL_LUMINANCE16_SNORM";
        case 0x9050: return "GL_IMAGE_CUBE_EXT";
        case 0x9051: return "GL_IMAGE_BUFFER_EXT";
        case 0x9052: return "GL_IMAGE_1D_ARRAY_EXT";
        case 0x9053: return "GL_IMAGE_2D_ARRAY_EXT";
        case 0x9054: return "GL_IMAGE_CUBE_MAP_ARRAY_EXT";
        case 0x9055: return "GL_IMAGE_2D_MULTISAMPLE_EXT";
        case 0x9056: return "GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT";
        case 0x9057: return "GL_INT_IMAGE_1D_EXT";
        case 0x9058: return "GL_INT_IMAGE_2D_EXT";
        case 0x9059: return "GL_INT_IMAGE_3D_EXT";
        case 0x9060: return "GL_INT_IMAGE_2D_MULTISAMPLE_EXT";
        case 0x9061: return "GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT";
        case 0x9062: return "GL_UNSIGNED_INT_IMAGE_1D_EXT";
        case 0x9063: return "GL_UNSIGNED_INT_IMAGE_2D_EXT";
        case 0x9064: return "GL_UNSIGNED_INT_IMAGE_3D_EXT";
        case 0x9065: return "GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT";
        case 0x9066: return "GL_UNSIGNED_INT_IMAGE_CUBE_EXT";
        case 0x9067: return "GL_UNSIGNED_INT_IMAGE_BUFFER_EXT";
        case 0x9068: return "GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT";
        case 0x9069: return "GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT";
        case 0x9100: return "GL_TEXTURE_2D_MULTISAMPLE";
        case 0x9101: return "GL_PROXY_TEXTURE_2D_MULTISAMPLE";
        case 0x9102: return "GL_TEXTURE_2D_MULTISAMPLE_ARRAY";
        case 0x9103: return "GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY";
        case 0x9104: return "GL_TEXTURE_BINDING_2D_MULTISAMPLE";
        case 0x9105: return "GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY";
        case 0x9106: return "GL_TEXTURE_SAMPLES";
        case 0x9107: return "GL_TEXTURE_FIXED_SAMPLE_LOCATIONS";
        case 0x9108: return "GL_SAMPLER_2D_MULTISAMPLE";
        case 0x9109: return "GL_INT_SAMPLER_2D_MULTISAMPLE";
        case 0x9110: return "GL_MAX_INTEGER_SAMPLES";
        case 0x9111: return "GL_MAX_SERVER_WAIT_TIMEOUT";
        case 0x9112: return "GL_OBJECT_TYPE";
        case 0x9113: return "GL_SYNC_CONDITION";
        case 0x9114: return "GL_SYNC_STATUS";
        case 0x9115: return "GL_SYNC_FLAGS";
        case 0x9116: return "GL_SYNC_FENCE";
        case 0x9117: return "GL_SYNC_GPU_COMMANDS_COMPLETE";
        case 0x9118: return "GL_UNSIGNALED";
        case 0x9119: return "GL_SIGNALED";
        case 0x9120: return "GL_BUFFER_MAP_LENGTH";
        case 0x9121: return "GL_BUFFER_MAP_OFFSET";
        case 0x9122: return "GL_MAX_VERTEX_OUTPUT_COMPONENTS";
        case 0x9123: return "GL_MAX_GEOMETRY_INPUT_COMPONENTS";
        case 0x9124: return "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS";
        case 0x9125: return "GL_MAX_FRAGMENT_INPUT_COMPONENTS";
        case 0x9126: return "GL_CONTEXT_PROFILE_MASK";
        case 0x9143: return "GL_MAX_DEBUG_MESSAGE_LENGTH_ARB";
        case 0x9144: return "GL_MAX_DEBUG_LOGGED_MESSAGES_ARB";
        case 0x9145: return "GL_DEBUG_LOGGED_MESSAGES_ARB";
        case 0x9146: return "GL_DEBUG_SEVERITY_HIGH_ARB";
        case 0x9147: return "GL_DEBUG_SEVERITY_MEDIUM_ARB";
        case 0x9148: return "GL_DEBUG_SEVERITY_LOW_ARB";
        case 0x9149: return "GL_DEBUG_CATEGORY_API_ERROR_AMD";
        case 0x9150: return "GL_DEBUG_CATEGORY_OTHER_AMD";
        case 0x9151: return "GL_DATA_BUFFER_AMD";
        case 0x9152: return "GL_PERFORMANCE_MONITOR_AMD";
        case 0x9153: return "GL_QUERY_OBJECT_AMD";
        case 0x9154: return "GL_VERTEX_ARRAY_OBJECT_AMD";
        case 0x9155: return "GL_SAMPLER_OBJECT_AMD";
    }
    return NULL;
}
Added jni/glshim/src/util/gl_str.h.
















>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
#include <GL/gl.h>

char *gl_bits_glPushAttrib(int value);
char *gl_bits_glPushClientAttrib(int value);
char *gl_bits_glCreateShader(int value);
const char *gl_str(int value);
const char *gl_str_glMap(int value);
const char *gl_str_primitive(int value);
Added jni/glshim/src/util/khash.h.
















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
/* The MIT License

   Copyright (c) 2008, 2009, 2011 by Attractive Chaos <attractor@live.co.uk>

   Permission is hereby granted, free of charge, to any person obtaining
   a copy of this software and associated documentation files (the
   "Software"), to deal in the Software without restriction, including
   without limitation the rights to use, copy, modify, merge, publish,
   distribute, sublicense, and/or sell copies of the Software, and to
   permit persons to whom the Software is furnished to do so, subject to
   the following conditions:

   The above copyright notice and this permission notice shall be
   included in all copies or substantial portions of the Software.

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
   SOFTWARE.
*/

/*
  An example:

#include "khash.h"
KHASH_MAP_INIT_INT(32, char)
int main() {
	int ret, is_missing;
	khiter_t k;
	khash_t(32) *h = kh_init(32);
	k = kh_put(32, h, 5, &ret);
	kh_value(h, k) = 10;
	k = kh_get(32, h, 10);
	is_missing = (k == kh_end(h));
	k = kh_get(32, h, 5);
	kh_del(32, h, k);
	for (k = kh_begin(h); k != kh_end(h); ++k)
		if (kh_exist(h, k)) kh_value(h, k) = 1;
	kh_destroy(32, h);
	return 0;
}
*/

/*
  2013-05-02 (0.2.8):

	* Use quadratic probing. When the capacity is power of 2, stepping function
	  i*(i+1)/2 guarantees to traverse each bucket. It is better than double
	  hashing on cache performance and is more robust than linear probing.

	  In theory, double hashing should be more robust than quadratic probing.
	  However, my implementation is probably not for large hash tables, because
	  the second hash function is closely tied to the first hash function,
	  which reduce the effectiveness of double hashing.

	Reference: http://research.cs.vt.edu/AVresearch/hashing/quadratic.php

  2011-12-29 (0.2.7):

    * Minor code clean up; no actual effect.

  2011-09-16 (0.2.6):

	* The capacity is a power of 2. This seems to dramatically improve the
	  speed for simple keys. Thank Zilong Tan for the suggestion. Reference:

	   - http://code.google.com/p/ulib/
	   - http://nothings.org/computer/judy/

	* Allow to optionally use linear probing which usually has better
	  performance for random input. Double hashing is still the default as it
	  is more robust to certain non-random input.

	* Added Wang's integer hash function (not used by default). This hash
	  function is more robust to certain non-random input.

  2011-02-14 (0.2.5):

    * Allow to declare global functions.

  2009-09-26 (0.2.4):

    * Improve portability

  2008-09-19 (0.2.3):

	* Corrected the example
	* Improved interfaces

  2008-09-11 (0.2.2):

	* Improved speed a little in kh_put()

  2008-09-10 (0.2.1):

	* Added kh_clear()
	* Fixed a compiling error

  2008-09-02 (0.2.0):

	* Changed to token concatenation which increases flexibility.

  2008-08-31 (0.1.2):

	* Fixed a bug in kh_get(), which has not been tested previously.

  2008-08-31 (0.1.1):

	* Added destructor
*/


#ifndef __AC_KHASH_H
#define __AC_KHASH_H

/*!
  @header

  Generic hash table library.
 */

#define AC_VERSION_KHASH_H "0.2.8"

#include <stdlib.h>
#include <string.h>
#include <limits.h>

/* compiler specific configuration */

#if UINT_MAX == 0xffffffffu
typedef unsigned int khint32_t;
#elif ULONG_MAX == 0xffffffffu
typedef unsigned long khint32_t;
#endif

#if ULONG_MAX == ULLONG_MAX
typedef unsigned long khint64_t;
#else
typedef unsigned long long khint64_t;
#endif

#ifdef _MSC_VER
#define kh_inline __inline
#else
#define kh_inline inline
#endif

typedef khint32_t khint_t;
typedef khint_t khiter_t;

#define __ac_isempty(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&2)
#define __ac_isdel(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&1)
#define __ac_iseither(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&3)
#define __ac_set_isdel_false(flag, i) (flag[i>>4]&=~(1ul<<((i&0xfU)<<1)))
#define __ac_set_isempty_false(flag, i) (flag[i>>4]&=~(2ul<<((i&0xfU)<<1)))
#define __ac_set_isboth_false(flag, i) (flag[i>>4]&=~(3ul<<((i&0xfU)<<1)))
#define __ac_set_isdel_true(flag, i) (flag[i>>4]|=1ul<<((i&0xfU)<<1))

#define __ac_fsize(m) ((m) < 16? 1 : (m)>>4)

#ifndef kroundup32
#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))
#endif

#ifndef kcalloc
#define kcalloc(N,Z) calloc(N,Z)
#endif
#ifndef kmalloc
#define kmalloc(Z) malloc(Z)
#endif
#ifndef krealloc
#define krealloc(P,Z) realloc(P,Z)
#endif
#ifndef kfree
#define kfree(P) free(P)
#endif

static const double __ac_HASH_UPPER = 0.77;

#define __KHASH_TYPE(name, khkey_t, khval_t) \
	typedef struct { \
		khint_t n_buckets, size, n_occupied, upper_bound; \
		khint32_t *flags; \
		khkey_t *keys; \
		khval_t *vals; \
	} kh_##name##_t;

#define __KHASH_PROTOTYPES(name, khkey_t, khval_t)	 					\
	extern kh_##name##_t *kh_init_##name(void);							\
	extern void kh_destroy_##name(kh_##name##_t *h);					\
	extern void kh_clear_##name(kh_##name##_t *h);						\
	extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); 	\
	extern int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \
	extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \
	extern void kh_del_##name(kh_##name##_t *h, khint_t x);

#define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
	SCOPE kh_##name##_t *kh_init_##name(void) {							\
		return (kh_##name##_t*)kcalloc(1, sizeof(kh_##name##_t));		\
	}																	\
	SCOPE void kh_destroy_##name(kh_##name##_t *h)						\
	{																	\
		if (h) {														\
			kfree((void *)h->keys); kfree(h->flags);					\
			kfree((void *)h->vals);										\
			kfree(h);													\
		}																\
	}																	\
	SCOPE void kh_clear_##name(kh_##name##_t *h)						\
	{																	\
		if (h && h->flags) {											\
			memset(h->flags, 0xaa, __ac_fsize(h->n_buckets) * sizeof(khint32_t)); \
			h->size = h->n_occupied = 0;								\
		}																\
	}																	\
	SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) 	\
	{																	\
		if (h->n_buckets) {												\
			khint_t k, i, last, mask, step = 0; \
			mask = h->n_buckets - 1;									\
			k = __hash_func(key); i = k & mask;							\
			last = i; \
			while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \
				i = (i + (++step)) & mask; \
				if (i == last) return h->n_buckets;						\
			}															\
			return __ac_iseither(h->flags, i)? h->n_buckets : i;		\
		} else return 0;												\
	}																	\
	SCOPE int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \
	{ /* This function uses 0.25*n_buckets bytes of working space instead of [sizeof(key_t+val_t)+.25]*n_buckets. */ \
		khint32_t *new_flags = 0;										\
		khint_t j = 1;													\
		{																\
			kroundup32(new_n_buckets); 									\
			if (new_n_buckets < 4) new_n_buckets = 4;					\
			if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0;	/* requested size is too small */ \
			else { /* hash table size to be changed (shrink or expand); rehash */ \
				new_flags = (khint32_t*)kmalloc(__ac_fsize(new_n_buckets) * sizeof(khint32_t));	\
				if (!new_flags) return -1;								\
				memset(new_flags, 0xaa, __ac_fsize(new_n_buckets) * sizeof(khint32_t)); \
				if (h->n_buckets < new_n_buckets) {	/* expand */		\
					khkey_t *new_keys = (khkey_t*)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \
					if (!new_keys) return -1;							\
					h->keys = new_keys;									\
					if (kh_is_map) {									\
						khval_t *new_vals = (khval_t*)krealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \
						if (!new_vals) return -1;						\
						h->vals = new_vals;								\
					}													\
				} /* otherwise shrink */								\
			}															\
		}																\
		if (j) { /* rehashing is needed */								\
			for (j = 0; j != h->n_buckets; ++j) {						\
				if (__ac_iseither(h->flags, j) == 0) {					\
					khkey_t key = h->keys[j];							\
					khval_t val;										\
					khint_t new_mask;									\
					new_mask = new_n_buckets - 1; 						\
					if (kh_is_map) val = h->vals[j];					\
					__ac_set_isdel_true(h->flags, j);					\
					while (1) { /* kick-out process; sort of like in Cuckoo hashing */ \
						khint_t k, i, step = 0; \
						k = __hash_func(key);							\
						i = k & new_mask;								\
						while (!__ac_isempty(new_flags, i)) i = (i + (++step)) & new_mask; \
						__ac_set_isempty_false(new_flags, i);			\
						if (i < h->n_buckets && __ac_iseither(h->flags, i) == 0) { /* kick out the existing element */ \
							{ khkey_t tmp = h->keys[i]; h->keys[i] = key; key = tmp; } \
							if (kh_is_map) { khval_t tmp = h->vals[i]; h->vals[i] = val; val = tmp; } \
							__ac_set_isdel_true(h->flags, i); /* mark it as deleted in the old hash table */ \
						} else { /* write the element and jump out of the loop */ \
							h->keys[i] = key;							\
							if (kh_is_map) h->vals[i] = val;			\
							break;										\
						}												\
					}													\
				}														\
			}															\
			if (h->n_buckets > new_n_buckets) { /* shrink the hash table */ \
				h->keys = (khkey_t*)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \
				if (kh_is_map) h->vals = (khval_t*)krealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \
			}															\
			kfree(h->flags); /* free the working space */				\
			h->flags = new_flags;										\
			h->n_buckets = new_n_buckets;								\
			h->n_occupied = h->size;									\
			h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \
		}																\
		return 0;														\
	}																	\
	SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) \
	{																	\
		khint_t x;														\
		if (h->n_occupied >= h->upper_bound) { /* update the hash table */ \
			if (h->n_buckets > (h->size<<1)) {							\
				if (kh_resize_##name(h, h->n_buckets - 1) < 0) { /* clear "deleted" elements */ \
					*ret = -1; return h->n_buckets;						\
				}														\
			} else if (kh_resize_##name(h, h->n_buckets + 1) < 0) { /* expand the hash table */ \
				*ret = -1; return h->n_buckets;							\
			}															\
		} /* TODO: to implement automatically shrinking; resize() already support shrinking */ \
		{																\
			khint_t k, i, site, last, mask = h->n_buckets - 1, step = 0; \
			x = site = h->n_buckets; k = __hash_func(key); i = k & mask; \
			if (__ac_isempty(h->flags, i)) x = i; /* for speed up */	\
			else {														\
				last = i; \
				while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \
					if (__ac_isdel(h->flags, i)) site = i;				\
					i = (i + (++step)) & mask; \
					if (i == last) { x = site; break; }					\
				}														\
				if (x == h->n_buckets) {								\
					if (__ac_isempty(h->flags, i) && site != h->n_buckets) x = site; \
					else x = i;											\
				}														\
			}															\
		}																\
		if (__ac_isempty(h->flags, x)) { /* not present at all */		\
			h->keys[x] = key;											\
			__ac_set_isboth_false(h->flags, x);							\
			++h->size; ++h->n_occupied;									\
			*ret = 1;													\
		} else if (__ac_isdel(h->flags, x)) { /* deleted */				\
			h->keys[x] = key;											\
			__ac_set_isboth_false(h->flags, x);							\
			++h->size;													\
			*ret = 2;													\
		} else *ret = 0; /* Don't touch h->keys[x] if present and not deleted */ \
		return x;														\
	}																	\
	SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x)				\
	{																	\
		if (x != h->n_buckets && !__ac_iseither(h->flags, x)) {			\
			__ac_set_isdel_true(h->flags, x);							\
			--h->size;													\
		}																\
	}

#define KHASH_DECLARE(name, khkey_t, khval_t)		 					\
	__KHASH_TYPE(name, khkey_t, khval_t) 								\
	__KHASH_PROTOTYPES(name, khkey_t, khval_t)

#define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
	__KHASH_TYPE(name, khkey_t, khval_t) 								\
	__KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal)

#define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \
	KHASH_INIT2(name, static kh_inline, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal)

/* --- BEGIN OF HASH FUNCTIONS --- */

/*! @function
  @abstract     Integer hash function
  @param  key   The integer [khint32_t]
  @return       The hash value [khint_t]
 */
#define kh_int_hash_func(key) (khint32_t)(key)
/*! @function
  @abstract     Integer comparison function
 */
#define kh_int_hash_equal(a, b) ((a) == (b))
/*! @function
  @abstract     64-bit integer hash function
  @param  key   The integer [khint64_t]
  @return       The hash value [khint_t]
 */
#define kh_int64_hash_func(key) (khint32_t)((key)>>33^(key)^(key)<<11)
/*! @function
  @abstract     64-bit integer comparison function
 */
#define kh_int64_hash_equal(a, b) ((a) == (b))
/*! @function
  @abstract     const char* hash function
  @param  s     Pointer to a null terminated string
  @return       The hash value
 */
static kh_inline khint_t __ac_X31_hash_string(const char *s)
{
	khint_t h = (khint_t)*s;
	if (h) for (++s ; *s; ++s) h = (h << 5) - h + (khint_t)*s;
	return h;
}
/*! @function
  @abstract     Another interface to const char* hash function
  @param  key   Pointer to a null terminated string [const char*]
  @return       The hash value [khint_t]
 */
#define kh_str_hash_func(key) __ac_X31_hash_string(key)
/*! @function
  @abstract     Const char* comparison function
 */
#define kh_str_hash_equal(a, b) (strcmp(a, b) == 0)

static kh_inline khint_t __ac_Wang_hash(khint_t key)
{
    key += ~(key << 15);
    key ^=  (key >> 10);
    key +=  (key << 3);
    key ^=  (key >> 6);
    key += ~(key << 11);
    key ^=  (key >> 16);
    return key;
}
#define kh_int_hash_func2(k) __ac_Wang_hash((khint_t)key)

/* --- END OF HASH FUNCTIONS --- */

/* Other convenient macros... */

/*!
  @abstract Type of the hash table.
  @param  name  Name of the hash table [symbol]
 */
#define khash_t(name) kh_##name##_t

/*! @function
  @abstract     Initiate a hash table.
  @param  name  Name of the hash table [symbol]
  @return       Pointer to the hash table [khash_t(name)*]
 */
#define kh_init(name) kh_init_##name()

/*! @function
  @abstract     Destroy a hash table.
  @param  name  Name of the hash table [symbol]
  @param  h     Pointer to the hash table [khash_t(name)*]
 */
#define kh_destroy(name, h) kh_destroy_##name(h)

/*! @function
  @abstract     Reset a hash table without deallocating memory.
  @param  name  Name of the hash table [symbol]
  @param  h     Pointer to the hash table [khash_t(name)*]
 */
#define kh_clear(name, h) kh_clear_##name(h)

/*! @function
  @abstract     Resize a hash table.
  @param  name  Name of the hash table [symbol]
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  s     New size [khint_t]
 */
#define kh_resize(name, h, s) kh_resize_##name(h, s)

/*! @function
  @abstract     Insert a key to the hash table.
  @param  name  Name of the hash table [symbol]
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  k     Key [type of keys]
  @param  r     Extra return code: 0 if the key is present in the hash table;
                1 if the bucket is empty (never used); 2 if the element in
				the bucket has been deleted [int*]
  @return       Iterator to the inserted element [khint_t]
 */
#define kh_put(name, h, k, r) kh_put_##name(h, k, r)

/*! @function
  @abstract     Retrieve a key from the hash table.
  @param  name  Name of the hash table [symbol]
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  k     Key [type of keys]
  @return       Iterator to the found element, or kh_end(h) if the element is absent [khint_t]
 */
#define kh_get(name, h, k) kh_get_##name(h, k)

/*! @function
  @abstract     Remove a key from the hash table.
  @param  name  Name of the hash table [symbol]
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  k     Iterator to the element to be deleted [khint_t]
 */
#define kh_del(name, h, k) kh_del_##name(h, k)

/*! @function
  @abstract     Test whether a bucket contains data.
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  x     Iterator to the bucket [khint_t]
  @return       1 if containing data; 0 otherwise [int]
 */
#define kh_exist(h, x) (!__ac_iseither((h)->flags, (x)))

/*! @function
  @abstract     Get key given an iterator
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  x     Iterator to the bucket [khint_t]
  @return       Key [type of keys]
 */
#define kh_key(h, x) ((h)->keys[x])

/*! @function
  @abstract     Get value given an iterator
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  x     Iterator to the bucket [khint_t]
  @return       Value [type of values]
  @discussion   For hash sets, calling this results in segfault.
 */
#define kh_val(h, x) ((h)->vals[x])

/*! @function
  @abstract     Alias of kh_val()
 */
#define kh_value(h, x) ((h)->vals[x])

/*! @function
  @abstract     Get the start iterator
  @param  h     Pointer to the hash table [khash_t(name)*]
  @return       The start iterator [khint_t]
 */
#define kh_begin(h) (khint_t)(0)

/*! @function
  @abstract     Get the end iterator
  @param  h     Pointer to the hash table [khash_t(name)*]
  @return       The end iterator [khint_t]
 */
#define kh_end(h) ((h)->n_buckets)

/*! @function
  @abstract     Get the number of elements in the hash table
  @param  h     Pointer to the hash table [khash_t(name)*]
  @return       Number of elements in the hash table [khint_t]
 */
#define kh_size(h) ((h)->size)

/*! @function
  @abstract     Get the number of buckets in the hash table
  @param  h     Pointer to the hash table [khash_t(name)*]
  @return       Number of buckets in the hash table [khint_t]
 */
#define kh_n_buckets(h) ((h)->n_buckets)

/*! @function
  @abstract     Iterate over the entries in the hash table
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  kvar  Variable to which key will be assigned
  @param  vvar  Variable to which value will be assigned
  @param  code  Block of code to execute
 */
#define kh_foreach(h, kvar, vvar, code) { khint_t __i;		\
	for (__i = kh_begin(h); __i != kh_end(h); ++__i) {		\
		if (!kh_exist(h,__i)) continue;						\
		(kvar) = kh_key(h,__i);								\
		(vvar) = kh_val(h,__i);								\
		code;												\
	} }

/*! @function
  @abstract     Iterate over the values in the hash table
  @param  h     Pointer to the hash table [khash_t(name)*]
  @param  vvar  Variable to which value will be assigned
  @param  code  Block of code to execute
 */
#define kh_foreach_value(h, vvar, code) { khint_t __i;		\
	for (__i = kh_begin(h); __i != kh_end(h); ++__i) {		\
		if (!kh_exist(h,__i)) continue;						\
		(vvar) = kh_val(h,__i);								\
		code;												\
	} }

/* More conenient interfaces */

/*! @function
  @abstract     Instantiate a hash set containing integer keys
  @param  name  Name of the hash table [symbol]
 */
#define KHASH_SET_INIT_INT(name)										\
	KHASH_INIT(name, khint32_t, char, 0, kh_int_hash_func, kh_int_hash_equal)

/*! @function
  @abstract     Instantiate a hash map containing integer keys
  @param  name  Name of the hash table [symbol]
  @param  khval_t  Type of values [type]
 */
#define KHASH_MAP_INIT_INT(name, khval_t)								\
	KHASH_INIT(name, khint32_t, khval_t, 1, kh_int_hash_func, kh_int_hash_equal)

/*! @function
  @abstract     Instantiate a hash map containing 64-bit integer keys
  @param  name  Name of the hash table [symbol]
 */
#define KHASH_SET_INIT_INT64(name)										\
	KHASH_INIT(name, khint64_t, char, 0, kh_int64_hash_func, kh_int64_hash_equal)

/*! @function
  @abstract     Instantiate a hash map containing 64-bit integer keys
  @param  name  Name of the hash table [symbol]
  @param  khval_t  Type of values [type]
 */
#define KHASH_MAP_INIT_INT64(name, khval_t)								\
	KHASH_INIT(name, khint64_t, khval_t, 1, kh_int64_hash_func, kh_int64_hash_equal)

typedef const char *kh_cstr_t;
/*! @function
  @abstract     Instantiate a hash map containing const char* keys
  @param  name  Name of the hash table [symbol]
 */
#define KHASH_SET_INIT_STR(name)										\
	KHASH_INIT(name, kh_cstr_t, char, 0, kh_str_hash_func, kh_str_hash_equal)

/*! @function
  @abstract     Instantiate a hash map containing const char* keys
  @param  name  Name of the hash table [symbol]
  @param  khval_t  Type of values [type]
 */
#define KHASH_MAP_INIT_STR(name, khval_t)								\
	KHASH_INIT(name, kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal)

#endif /* __AC_KHASH_H */
Added jni/glshim/src/util/math/eval.c.










































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453

/*
 * Mesa 3-D graphics library
 * Version:  3.5
 *
 * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */


/*
 * eval.c was written by
 * Bernd Barsuhn (bdbarsuh@cip.informatik.uni-erlangen.de) and
 * Volker Weiss (vrweiss@cip.informatik.uni-erlangen.de).
 *
 * My original implementation of evaluators was simplistic and didn't
 * compute surface normal vectors properly.  Bernd and Volker applied
 * used more sophisticated methods to get better results.
 *
 * Thanks guys!
 */

#include "eval.h"

static GLboolean init_done = false;
static GLfloat inv_tab[MAX_EVAL_ORDER];

/*
 * Horner scheme for Bezier curves
 *
 * Bezier curves can be computed via a Horner scheme.
 * Horner is numerically less stable than the de Casteljau
 * algorithm, but it is faster. For curves of degree n
 * the complexity of Horner is O(n) and de Casteljau is O(n^2).
 * Since stability is not important for displaying curve
 * points I decided to use the Horner scheme.
 *
 * A cubic Bezier curve with control points b0, b1, b2, b3 can be
 * written as
 *
 *        (([3]        [3]     )     [3]       )     [3]
 * c(t) = (([0]*s*b0 + [1]*t*b1)*s + [2]*t^2*b2)*s + [3]*t^2*b3
 *
 *                                           [n]
 * where s=1-t and the binomial coefficients [i]. These can
 * be computed iteratively using the identity:
 *
 * [n]               [n  ]             [n]
 * [i] = (n-i+1)/i * [i-1]     and     [0] = 1
 */


void
_math_horner_bezier_curve(const GLfloat * cp, GLfloat * out, GLfloat t,
                          GLuint dim, GLuint order) {
    if (! init_done)
        _math_init_eval();

    GLfloat s, powert, bincoeff;
    GLuint i, k;

    if (order >= 2) {
        bincoeff = (GLfloat) (order - 1);
        s = 1.0F - t;

        for (k = 0; k < dim; k++)
            out[k] = s * cp[k] + bincoeff * t * cp[dim + k];

        for (i = 2, cp += 2 * dim, powert = t * t; i < order;
             i++, powert *= t, cp += dim) {
            bincoeff *= (GLfloat) (order - i);
            bincoeff *= inv_tab[i];

            for (k = 0; k < dim; k++)
                out[k] = s * out[k] + bincoeff * powert * cp[k];
        }
    } else {  /* order=1 -> constant curve */
        for (k = 0; k < dim; k++)
            out[k] = cp[k];
    }
}

/*
 * Tensor product Bezier surfaces
 *
 * Again the Horner scheme is used to compute a point on a
 * TP Bezier surface. First a control polygon for a curve
 * on the surface in one parameter direction is computed,
 * then the point on the curve for the other parameter
 * direction is evaluated.
 *
 * To store the curve control polygon additional storage
 * for max(uorder,vorder) points is needed in the
 * control net cn.
 */

 void
 _math_horner_bezier_surf(GLfloat * cn, GLfloat * out, GLfloat u, GLfloat v,
                          GLuint dim, GLuint uorder, GLuint vorder) {
    if (! init_done)
        _math_init_eval();

    GLfloat *cp = cn + uorder * vorder * dim;
    GLuint i, uinc = vorder * dim;

    if (vorder > uorder) {
        if (uorder >= 2) {
            GLfloat s, poweru, bincoeff;
            GLuint j, k;

            /* Compute the control polygon for the surface-curve in u-direction */
            for (j = 0; j < vorder; j++) {
                GLfloat *ucp = &cn[j * dim];

                /* Each control point is the point for parameter u on a */
                /* curve defined by the control polygons in u-direction */
                bincoeff = (GLfloat) (uorder - 1);
                s = 1.0F - u;

                for (k = 0; k < dim; k++)
                    cp[j * dim + k] = s * ucp[k] + bincoeff * u * ucp[uinc + k];

                for (i = 2, ucp += 2 * uinc, poweru = u * u; i < uorder;
                     i++, poweru *= u, ucp += uinc) {
                    bincoeff *= (GLfloat) (uorder - i);
                    bincoeff *= inv_tab[i];

                    for (k = 0; k < dim; k++)
                        cp[j * dim + k] =
                            s * cp[j * dim + k] + bincoeff * poweru * ucp[k];
                }
            }

            /* Evaluate curve point in v */
            _math_horner_bezier_curve(cp, out, v, dim, vorder);
        } else  /* uorder=1 -> cn defines a curve in v */
            _math_horner_bezier_curve(cn, out, v, dim, vorder);
    } else {  /* vorder <= uorder */

        if (vorder > 1) {
            GLuint i;

            /* Compute the control polygon for the surface-curve in u-direction */
            for (i = 0; i < uorder; i++, cn += uinc) {
                /* For constant i all cn[i][j] (j=0..vorder) are located */
                /* on consecutive memory locations, so we can use        */
                /* horner_bezier_curve to compute the control points     */

                _math_horner_bezier_curve(cn, &cp[i * dim], v, dim, vorder);
            }

            /* Evaluate curve point in u */
            _math_horner_bezier_curve(cp, out, u, dim, uorder);
        } else  /* vorder=1 -> cn defines a curve in u */
            _math_horner_bezier_curve(cn, out, u, dim, uorder);
    }
}

/*
 * The direct de Casteljau algorithm is used when a point on the
 * surface and the tangent directions spanning the tangent plane
 * should be computed (this is needed to compute normals to the
 * surface). In this case the de Casteljau algorithm approach is
 * nicer because a point and the partial derivatives can be computed
 * at the same time. To get the correct tangent length du and dv
 * must be multiplied with the (u2-u1)/uorder-1 and (v2-v1)/vorder-1.
 * Since only the directions are needed, this scaling step is omitted.
 *
 * De Casteljau needs additional storage for uorder*vorder
 * values in the control net cn.
 */

void
_math_de_casteljau_surf(GLfloat * cn, GLfloat * out, GLfloat * du,
                        GLfloat * dv, GLfloat u, GLfloat v, GLuint dim,
                        GLuint uorder, GLuint vorder) {
    GLfloat *dcn = cn + uorder * vorder * dim;
    GLfloat us = 1.0F - u, vs = 1.0F - v;
    GLuint h, i, j, k;
    GLuint minorder = uorder < vorder ? uorder : vorder;
    GLuint uinc = vorder * dim;
    GLuint dcuinc = vorder;

    /* Each component is evaluated separately to save buffer space  */
    /* This does not drasticaly decrease the performance of the     */
    /* algorithm. If additional storage for (uorder-1)*(vorder-1)   */
    /* points would be available, the components could be accessed  */
    /* in the innermost loop which could lead to less cache misses. */

#define CN(I,J,K) cn[(I)*uinc+(J)*dim+(K)]
#define DCN(I, J) dcn[(I)*dcuinc+(J)]
    if (minorder < 3) {
        if (uorder == vorder) {
            for (k = 0; k < dim; k++) {
                /* Derivative direction in u */
                du[k] = vs * (CN(1, 0, k) - CN(0, 0, k)) +
                    v * (CN(1, 1, k) - CN(0, 1, k));

                /* Derivative direction in v */
                dv[k] = us * (CN(0, 1, k) - CN(0, 0, k)) +
                    u * (CN(1, 1, k) - CN(1, 0, k));

                /* bilinear de Casteljau step */
                out[k] = us * (vs * CN(0, 0, k) + v * CN(0, 1, k)) +
                    u * (vs * CN(1, 0, k) + v * CN(1, 1, k));
            }
    } else if (minorder == uorder) {
        for (k = 0; k < dim; k++) {
            /* bilinear de Casteljau step */
            DCN(1, 0) = CN(1, 0, k) - CN(0, 0, k);
            DCN(0, 0) = us * CN(0, 0, k) + u * CN(1, 0, k);

            for (j = 0; j < vorder - 1; j++) {
                /* for the derivative in u */
                DCN(1, j + 1) = CN(1, j + 1, k) - CN(0, j + 1, k);
                DCN(1, j) = vs * DCN(1, j) + v * DCN(1, j + 1);

                /* for the `point' */
                DCN(0, j + 1) = us * CN(0, j + 1, k) + u * CN(1, j + 1, k);
                DCN(0, j) = vs * DCN(0, j) + v * DCN(0, j + 1);
            }

            /* remaining linear de Casteljau steps until the second last step */
            for (h = minorder; h < vorder - 1; h++)
                for (j = 0; j < vorder - h; j++) {
                /* for the derivative in u */
                DCN(1, j) = vs * DCN(1, j) + v * DCN(1, j + 1);

                /* for the `point' */
                DCN(0, j) = vs * DCN(0, j) + v * DCN(0, j + 1);
            }

            /* derivative direction in v */
            dv[k] = DCN(0, 1) - DCN(0, 0);

            /* derivative direction in u */
            du[k] = vs * DCN(1, 0) + v * DCN(1, 1);

            /* last linear de Casteljau step */
            out[k] = vs * DCN(0, 0) + v * DCN(0, 1);
        }
    } else {  /* minorder == vorder */
        for (k = 0; k < dim; k++) {
            /* bilinear de Casteljau step */
            DCN(0, 1) = CN(0, 1, k) - CN(0, 0, k);
            DCN(0, 0) = vs * CN(0, 0, k) + v * CN(0, 1, k);
            for (i = 0; i < uorder - 1; i++) {
                /* for the derivative in v */
                DCN(i + 1, 1) = CN(i + 1, 1, k) - CN(i + 1, 0, k);
                DCN(i, 1) = us * DCN(i, 1) + u * DCN(i + 1, 1);

                /* for the `point' */
                DCN(i + 1, 0) = vs * CN(i + 1, 0, k) + v * CN(i + 1, 1, k);
                DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
            }

            /* remaining linear de Casteljau steps until the second last step */
            for (h = minorder; h < uorder - 1; h++)
                for (i = 0; i < uorder - h; i++) {
                /* for the derivative in v */
                DCN(i, 1) = us * DCN(i, 1) + u * DCN(i + 1, 1);

                /* for the `point' */
                DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
                }

                /* derivative direction in u */
                du[k] = DCN(1, 0) - DCN(0, 0);

                /* derivative direction in v */
                dv[k] = us * DCN(0, 1) + u * DCN(1, 1);

                /* last linear de Casteljau step */
                out[k] = us * DCN(0, 0) + u * DCN(1, 0);
            }
        }
    } else if (uorder == vorder) {
        for (k = 0; k < dim; k++) {
            /* first bilinear de Casteljau step */
            for (i = 0; i < uorder - 1; i++) {
                DCN(i, 0) = us * CN(i, 0, k) + u * CN(i + 1, 0, k);
                for (j = 0; j < vorder - 1; j++) {
                    DCN(i, j + 1) = us * CN(i, j + 1, k) + u * CN(i + 1, j + 1, k);
                    DCN(i, j) = vs * DCN(i, j) + v * DCN(i, j + 1);
                }
            }

            /* remaining bilinear de Casteljau steps until the second last step */
            for (h = 2; h < minorder - 1; h++) {
                for (i = 0; i < uorder - h; i++) {
                    DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
                    for (j = 0; j < vorder - h; j++) {
                        DCN(i, j + 1) = us * DCN(i, j + 1) + u * DCN(i + 1, j + 1);
                        DCN(i, j) = vs * DCN(i, j) + v * DCN(i, j + 1);
                    }
                }
            }

            /* derivative direction in u */
            du[k] = vs * (DCN(1, 0) - DCN(0, 0)) + v * (DCN(1, 1) - DCN(0, 1));

            /* derivative direction in v */
            dv[k] = us * (DCN(0, 1) - DCN(0, 0)) + u * (DCN(1, 1) - DCN(1, 0));

            /* last bilinear de Casteljau step */
            out[k] = us * (vs * DCN(0, 0) + v * DCN(0, 1)) +
                u * (vs * DCN(1, 0) + v * DCN(1, 1));
        }
    } else if (minorder == uorder) {
        for (k = 0; k < dim; k++) {
            /* first bilinear de Casteljau step */
            for (i = 0; i < uorder - 1; i++) {
                DCN(i, 0) = us * CN(i, 0, k) + u * CN(i + 1, 0, k);
                for (j = 0; j < vorder - 1; j++) {
                    DCN(i, j + 1) = us * CN(i, j + 1, k) + u * CN(i + 1, j + 1, k);
                    DCN(i, j) = vs * DCN(i, j) + v * DCN(i, j + 1);
                }
            }

            /* remaining bilinear de Casteljau steps until the second last step */
            for (h = 2; h < minorder - 1; h++) {
                for (i = 0; i < uorder - h; i++) {
                    DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
                    for (j = 0; j < vorder - h; j++) {
                        DCN(i, j + 1) = us * DCN(i, j + 1) + u * DCN(i + 1, j + 1);
                        DCN(i, j) = vs * DCN(i, j) + v * DCN(i, j + 1);
                    }
                }
            }

            /* last bilinear de Casteljau step */
            DCN(2, 0) = DCN(1, 0) - DCN(0, 0);
            DCN(0, 0) = us * DCN(0, 0) + u * DCN(1, 0);
            for (j = 0; j < vorder - 1; j++) {
                /* for the derivative in u */
                DCN(2, j + 1) = DCN(1, j + 1) - DCN(0, j + 1);
                DCN(2, j) = vs * DCN(2, j) + v * DCN(2, j + 1);

                /* for the `point' */
                DCN(0, j + 1) = us * DCN(0, j + 1) + u * DCN(1, j + 1);
                DCN(0, j) = vs * DCN(0, j) + v * DCN(0, j + 1);
            }

            /* remaining linear de Casteljau steps until the second last step */
            for (h = minorder; h < vorder - 1; h++) {
                for (j = 0; j < vorder - h; j++) {
                    /* for the derivative in u */
                    DCN(2, j) = vs * DCN(2, j) + v * DCN(2, j + 1);
        
                    /* for the `point' */
                    DCN(0, j) = vs * DCN(0, j) + v * DCN(0, j + 1);
                }
            }

            /* derivative direction in v */
            dv[k] = DCN(0, 1) - DCN(0, 0);

            /* derivative direction in u */
            du[k] = vs * DCN(2, 0) + v * DCN(2, 1);

            /* last linear de Casteljau step */
            out[k] = vs * DCN(0, 0) + v * DCN(0, 1);
        }
    } else {  /* minorder == vorder */

        for (k = 0; k < dim; k++) {
            /* first bilinear de Casteljau step */
            for (i = 0; i < uorder - 1; i++) {
                DCN(i, 0) = us * CN(i, 0, k) + u * CN(i + 1, 0, k);
                for (j = 0; j < vorder - 1; j++) {
                    DCN(i, j + 1) = us * CN(i, j + 1, k) + u * CN(i + 1, j + 1, k);
                    DCN(i, j) = vs * DCN(i, j) + v * DCN(i, j + 1);
                }
            }

            /* remaining bilinear de Casteljau steps until the second last step */
            for (h = 2; h < minorder - 1; h++) {
                for (i = 0; i < uorder - h; i++) {
                    DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
                    for (j = 0; j < vorder - h; j++) {
                        DCN(i, j + 1) = us * DCN(i, j + 1) + u * DCN(i + 1, j + 1);
                        DCN(i, j) = vs * DCN(i, j) + v * DCN(i, j + 1);
                    }
                }
            }

            /* last bilinear de Casteljau step */
            DCN(0, 2) = DCN(0, 1) - DCN(0, 0);
            DCN(0, 0) = vs * DCN(0, 0) + v * DCN(0, 1);
            for (i = 0; i < uorder - 1; i++) {
                /* for the derivative in v */
                DCN(i + 1, 2) = DCN(i + 1, 1) - DCN(i + 1, 0);
                DCN(i, 2) = us * DCN(i, 2) + u * DCN(i + 1, 2);

                /* for the `point' */
                DCN(i + 1, 0) = vs * DCN(i + 1, 0) + v * DCN(i + 1, 1);
                DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
            }

            /* remaining linear de Casteljau steps until the second last step */
            for (h = minorder; h < uorder - 1; h++) {
                for (i = 0; i < uorder - h; i++) {
                    /* for the derivative in v */
                    DCN(i, 2) = us * DCN(i, 2) + u * DCN(i + 1, 2);

                    /* for the `point' */
                    DCN(i, 0) = us * DCN(i, 0) + u * DCN(i + 1, 0);
                }
            }

            /* derivative direction in u */
            du[k] = DCN(1, 0) - DCN(0, 0);

            /* derivative direction in v */
            dv[k] = us * DCN(0, 2) + u * DCN(1, 2);

            /* last linear de Casteljau step */
            out[k] = us * DCN(0, 0) + u * DCN(1, 0);
        }
    }
#undef DCN
#undef CN
}

/*
 * Do one-time initialization for evaluators.
 */
void _math_init_eval() {
   GLuint i;

   /* KW: precompute 1/x for useful x.
    */
   for (i = 1; i < MAX_EVAL_ORDER; i++)
      inv_tab[i] = 1.0F / i;

   init_done = true;
}
Added jni/glshim/src/util/math/eval.h.














































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

/*
 * Mesa 3-D graphics library
 * Version:  3.5
 *
 * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

#ifndef _M_EVAL_H
#define _M_EVAL_H

#include "../../gl/gl.h"

void _math_init_eval( void );


/*
 * Horner scheme for Bezier curves
 *
 * Bezier curves can be computed via a Horner scheme.
 * Horner is numerically less stable than the de Casteljau
 * algorithm, but it is faster. For curves of degree n
 * the complexity of Horner is O(n) and de Casteljau is O(n^2).
 * Since stability is not important for displaying curve
 * points I decided to use the Horner scheme.
 *
 * A cubic Bezier curve with control points b0, b1, b2, b3 can be
 * written as
 *
 *        (([3]        [3]     )     [3]       )     [3]
 * c(t) = (([0]*s*b0 + [1]*t*b1)*s + [2]*t^2*b2)*s + [3]*t^2*b3
 *
 *                                           [n]
 * where s=1-t and the binomial coefficients [i]. These can
 * be computed iteratively using the identity:
 *
 * [n]               [n  ]             [n]
 * [i] = (n-i+1)/i * [i-1]     and     [0] = 1
 */


void
_math_horner_bezier_curve(const GLfloat *cp, GLfloat *out, GLfloat t,
			  GLuint dim, GLuint order);


/*
 * Tensor product Bezier surfaces
 *
 * Again the Horner scheme is used to compute a point on a
 * TP Bezier surface. First a control polygon for a curve
 * on the surface in one parameter direction is computed,
 * then the point on the curve for the other parameter
 * direction is evaluated.
 *
 * To store the curve control polygon additional storage
 * for max(uorder,vorder) points is needed in the
 * control net cn.
 */

void
_math_horner_bezier_surf(GLfloat *cn, GLfloat *out, GLfloat u, GLfloat v,
			 GLuint dim, GLuint uorder, GLuint vorder);


/*
 * The direct de Casteljau algorithm is used when a point on the
 * surface and the tangent directions spanning the tangent plane
 * should be computed (this is needed to compute normals to the
 * surface). In this case the de Casteljau algorithm approach is
 * nicer because a point and the partial derivatives can be computed
 * at the same time. To get the correct tangent length du and dv
 * must be multiplied with the (u2-u1)/uorder-1 and (v2-v1)/vorder-1.
 * Since only the directions are needed, this scaling step is omitted.
 *
 * De Casteljau needs additional storage for uorder*vorder
 * values in the control net cn.
 */

void
_math_de_casteljau_surf(GLfloat *cn, GLfloat *out, GLfloat *du, GLfloat *dv,
			GLfloat u, GLfloat v, GLuint dim,
			GLuint uorder, GLuint vorder);


#endif
Added jni/glshim/src/util/tack.c.




















































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "tack.h"

#ifndef MAX
# define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif

#define TACK_DEFAULT_SIZE 8

static bool tack_pop_bad(tack_t *stack) {
    return (stack == NULL || stack->len <= 0);
}

static bool tack_shift_bad(tack_t *stack) {
    return (stack == NULL || stack->pos >= stack->len);
}

static bool tack_grow(tack_t *stack, int idx) {
    if (stack->data == NULL) {
        stack->cap = TACK_DEFAULT_SIZE;
        stack->data = malloc(sizeof(void *) * stack->cap);
        if (stack->data != NULL) {
            return true;
        }
    } else if (MAX(stack->len, idx) >= stack->cap) {
        if (stack->cap > INT_MAX >> 1) {
            stack->cap = INT_MAX;
            if (stack->len == INT_MAX) {
                return false;
            }
        } else {
            stack->cap = MAX(stack->cap * 2, stack->len + idx);
        }
        void **new = realloc(stack->data, sizeof(void *) * stack->cap);
        if (new != NULL) {
            stack->data = new;
            return true;
        }
    } else {
        return true;
    }
    fprintf(stderr, "warning: tack_grow() to %d failed\n", stack->cap);
    return false;
}

void tack_clear(tack_t *stack) {
    free(stack->data);
    stack->data = NULL;
    stack->cap = 0;
    stack->len = 0;
}

int tack_len(tack_t *stack) {
    return stack->len;
}

void **tack_raw(tack_t *stack) {
    return stack->data;
}

void tack_push(tack_t *stack, void *data) {
    if (tack_grow(stack, 0)) {
        stack->data[stack->len++] = data;
    }
}

void *tack_pop(tack_t *stack) { 
    if (tack_pop_bad(stack))
        return NULL;
    return stack->data[--stack->len];
}

void *tack_peek(tack_t *stack) {
    if (tack_pop_bad(stack))
        return NULL;
    return stack->data[stack->len - 1];
}

void *tack_peek_n(tack_t *stack, int idx) {
    if (tack_pop_bad(stack))
        return NULL;
    idx = stack->len - 1 - idx;
    if (idx < 0 || idx > stack->len - 1)
        return NULL;
    return stack->data[idx];
}

void *tack_get(tack_t *stack, int idx) {
    if (stack == NULL || idx < 0 || idx >= stack->len)
        return NULL;
    return stack->data[idx];
}

void tack_set(tack_t *stack, int idx, void *data) {
    if (tack_grow(stack, idx)) {
        int len = MAX(stack->len, idx + 1);
        for (int i = stack->len; i < len; i++) {
            stack->data[i] = NULL;
        }
        stack->data[idx] = data;
        stack->len = MAX(stack->len, idx + 1);
    }
}

void *tack_cur(tack_t *stack) {
    if (tack_shift_bad(stack))
        return NULL;
    return stack->data[stack->pos];
}

void *tack_shift(tack_t *stack) {
    if (tack_shift_bad(stack))
        return NULL;
    return stack->data[stack->pos++];
}

char *tack_str_join(tack_t *stack, const char *sep) {
    if (stack->len == 0) {
        return NULL;
    }
    size_t sep_len = strlen(sep);
    size_t len = 0;
    char * const*array = (char **)stack->data;
    // a length-encoded string library would be really nice here
    for (int i = 0; i < stack->len; i++) {
        if (array[i] != NULL) {
            len += strlen(array[i]);
            if (i < stack->len - 1) {
                len += sep_len;
            }
        }
    }
    len -= sep_len;
    char *out = malloc(len * sizeof(char) + 1);
    out[len] = '\0';
    char *pos = out;
    for (int i = 0; i < stack->len; i++) {
        if (array[i] != NULL) {
            int slen = strlen(array[i]);
            memcpy(pos, array[i], slen);
            pos += slen;
            if (i < stack->len - 1) {
                memcpy(pos, sep, sep_len);
                pos += sep_len;
            }
        }
    }
    return out;
}
Added jni/glshim/src/util/tack.h.














































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef TACK_H
#define TACK_H

typedef struct {
    void **data;
    int len, cap, pos;
} tack_t;

extern char *tack_str_join(tack_t *stack, const char *sep);
extern int tack_len(tack_t *stack);
extern void **tack_raw(tack_t *stack);
extern void *tack_cur(tack_t *stack);
extern void *tack_first(tack_t *stack);
extern void *tack_get(tack_t *stack, int idx);
extern void *tack_peek(tack_t *stack);
extern void *tack_peek_n(tack_t *stack, int idx);
extern void *tack_pop(tack_t *stack);
extern void *tack_shift(tack_t *stack);
extern void tack_clear(tack_t *stack);
extern void tack_push(tack_t *stack, void *data);
extern void tack_set(tack_t *stack, int idx, void *data);

#endif
Added jni/glshim/src/util/vectorial/LICENSE.












































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Copyright 2010 Mikko Lehtonen. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:

   1. Redistributions of source code must retain the above copyright notice, this list of
      conditions and the following disclaimer.

   2. Redistributions in binary form must reproduce the above copyright notice, this list
      of conditions and the following disclaimer in the documentation and/or other materials
      provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Added jni/glshim/src/util/vectorial/config.h.






































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_CONFIG_H
#define VECTORIAL_CONFIG_H


#ifndef VECTORIAL_FORCED
    #if defined(__SSE__) || (_M_IX86_FP > 0) || (_M_X64 > 0)

        #define VECTORIAL_SSE

    #elif defined(__ARM_NEON__) 

        #define VECTORIAL_NEON

    // Don't use gnu extension for arm, buggy with some gccs with armv6 and -Os,
    // Also doesn't seem perform as well
    #elif defined(__GNUC__) && !defined(__arm__)

        #define VECTORIAL_GNU

    #else

        #define VECTORIAL_SCALAR

    #endif
#endif



#ifdef VECTORIAL_SCALAR
    #define VECTORIAL_SIMD_TYPE "scalar"
#endif

#ifdef VECTORIAL_SSE
    #define VECTORIAL_SIMD_TYPE "sse"
#endif

#ifdef VECTORIAL_NEON
    #define VECTORIAL_SIMD_TYPE "neon"
#endif

#ifdef VECTORIAL_GNU
    #define VECTORIAL_SIMD_TYPE "gnu"
#endif



#if defined(VECTORIAL_FORCED) && !defined(VECTORIAL_SIMD_TYPE)
    #error VECTORIAL_FORCED set but no simd-type found, try f.ex. VECTORIAL_SCALAR
#endif


#define vectorial_inline    static inline

#if defined(__GNUC__) 
  #if defined(__cplusplus)
    #define vectorial_restrict  __restrict
  #endif
  #define simd4f_aligned16  __attribute__ ((aligned (16)))
#elif defined(_WIN32)
  #define vectorial_restrict  
  #define simd4f_aligned16   __declspec(align(16))
#else
  #define vectorial_restrict  restrict
  #define simd4f_aligned16   
#endif
// #define vectorial_restrict

#ifdef __GNUC__
    #define vectorial_pure __attribute__((pure))
#else
    #define vectorial_pure
#endif

#ifdef _WIN32
  #if defined(min) || defined(max)
#pragma message ( "set NOMINMAX as preprocessor macro, undefining min/max " )
#undef min
#undef max
  #endif
#endif

#ifdef __cplusplus
    // Hack around msvc badness
    #define SIMD_PARAM(t, p) const t& p
#else
    #define SIMD_PARAM(t, p) t p
#endif
                    
#define VECTORIAL_PI      3.14159265f
#define VECTORIAL_HALFPI  1.57079633f



#endif
Added jni/glshim/src/util/vectorial/mat4f.h.










































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_MAT4F_H
#define VECTORIAL_MAT4F_H

#ifndef VECTORIAL_SIMD4X4F_H
  #include "vectorial/simd4x4f.h"
#endif

#ifndef VECTORIAL_VEC4F_H
  #include "vectorial/vec4f.h"
#endif


namespace vectorial {
    

    class mat4f {
    public:

        simd4x4f value;
    
        inline mat4f() {}
        inline mat4f(const mat4f& m) : value(m.value) {}
        inline mat4f(const simd4x4f& v) : value(v) {}
        inline mat4f(const vec4f& v0, const vec4f& v1, const vec4f& v2, const vec4f& v3) : value(simd4x4f_create(v0.value, v1.value, v2.value, v3.value)) {}
        explicit inline mat4f(const float *ary) { simd4x4f_uload(&value, ary); }

        inline void load(const float *ary) { 
            value.x = simd4f_uload4(ary);
            value.y = simd4f_uload4(ary+4); 
            value.z = simd4f_uload4(ary+8); 
            value.w = simd4f_uload4(ary+12); 
        }

        inline void store(float *ary) const { 
            simd4f_ustore4(value.x, ary);
            simd4f_ustore4(value.y, ary+4);
            simd4f_ustore4(value.z, ary+8);
            simd4f_ustore4(value.w, ary+12);
        }

        static mat4f identity() { mat4f m; simd4x4f_identity(&m.value); return m; }

        static mat4f perspective(float fovy, float aspect, float znear, float zfar) {
            simd4x4f m;
            simd4x4f_perspective(&m, fovy, aspect, znear, zfar);
            return m;
        }
        
        static mat4f ortho(float left, float right, float bottom, float top, float znear, float zfar) {
            simd4x4f m;
            simd4x4f_ortho(&m, left, right, bottom, top, znear, zfar);
            return m;
        }
        
        static mat4f lookAt(const vec3f& eye, const vec3f& center, const vec3f& up) {
            simd4x4f m;
            simd4x4f_lookat(&m, eye.value, center.value, up.value);
            return m;            
        }

        static mat4f translation(const vec3f& pos) {
            simd4x4f m;
            simd4x4f_translation(&m, pos.x(), pos.y(), pos.z());
            return m;            
        }

        static mat4f axisRotation(float angle, const vec3f& axis) {
            simd4x4f m;
            simd4x4f_axis_rotation(&m, angle, axis.value);
            return m;            
        }

        static mat4f scale(float scale) {
            return simd4x4f_create( simd4f_create(scale,0,0,0),
                                    simd4f_create(0,scale,0,0),
                                    simd4f_create(0,0,scale,0),
                                    simd4f_create(0,0,0,1) );
        }

        static mat4f scale(const vec3f& scale) {
            return simd4x4f_create( simd4f_create(scale.x(),0,0,0),
                                   simd4f_create(0,scale.y(),0,0),
                                   simd4f_create(0,0,scale.z(),0),
                                   simd4f_create(0,0,0,1) );
        }

    };
    
    
    vectorial_inline mat4f operator*(const mat4f& lhs, const mat4f& rhs) {
        mat4f ret;
        simd4x4f_matrix_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }

    vectorial_inline mat4f operator*=(mat4f& lhs, const mat4f& rhs) {
        const simd4x4f tmp = lhs.value;
        simd4x4f_matrix_mul(&tmp, &rhs.value, &lhs.value);
        return lhs;
    }


    vectorial_inline vec4f operator*(const mat4f& lhs, const vec4f& rhs) {
        vec4f ret;
        simd4x4f_matrix_vector_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }

    vectorial_inline vec3f transformVector(const mat4f& lhs, const vec3f& rhs) {
        vec3f ret;
        simd4x4f_matrix_vector3_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }

    vectorial_inline vec4f transformVector(const mat4f& lhs, const vec4f& rhs) {
        vec4f ret;
        simd4x4f_matrix_vector_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }
    
    vectorial_inline vec3f transformPoint(const mat4f& lhs, const vec3f& rhs) {
        vec3f ret;
        simd4x4f_matrix_point3_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }

    vectorial_inline vec3f orthoInverseTransformPoint(const mat4f& lhs, const vec3f& rhs) {
        vec3f ret;
        simd4x4f_inv_ortho_matrix_point3_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }

    vectorial_inline vec3f orthoInverseTransformVector(const mat4f& lhs, const vec3f& rhs) {
        vec3f ret;
        simd4x4f_inv_ortho_matrix_vector3_mul(&lhs.value, &rhs.value, &ret.value);
        return ret;
    }

    
    vectorial_inline mat4f transpose(const mat4f& m) {
        mat4f ret;
        simd4x4f_transpose(&m.value, &ret.value);
        return ret;
    }


    vectorial_inline mat4f inverse(const mat4f& m) {
        mat4f ret;
        simd4x4f_inverse(&m.value, &ret.value);
        return ret;
    }



}



#ifdef VECTORIAL_OSTREAM
//#include <ostream>

vectorial_inline std::ostream& operator<<(std::ostream& os, const vectorial::mat4f& v) {

    os << "[ ";
    os << simd4f_get_x(v.value.x) << ", ";
    os << simd4f_get_x(v.value.y) << ", ";
    os << simd4f_get_x(v.value.z) << ", ";
    os << simd4f_get_x(v.value.w) << " ; ";

    os << simd4f_get_y(v.value.x) << ", ";
    os << simd4f_get_y(v.value.y) << ", ";
    os << simd4f_get_y(v.value.z) << ", ";
    os << simd4f_get_y(v.value.w) << " ; ";

    os << simd4f_get_z(v.value.x) << ", ";
    os << simd4f_get_z(v.value.y) << ", ";
    os << simd4f_get_z(v.value.z) << ", ";
    os << simd4f_get_z(v.value.w) << " ; ";

    os << simd4f_get_w(v.value.x) << ", ";
    os << simd4f_get_w(v.value.y) << ", ";
    os << simd4f_get_w(v.value.z) << ", ";
    os << simd4f_get_w(v.value.w) << " ]";

    return os;
}
#endif




#endif
Added jni/glshim/src/util/vectorial/simd4f.h.






































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/

#ifndef VECTORIAL_SIMD4F_H
#define VECTORIAL_SIMD4F_H

#ifndef VECTORIAL_CONFIG_H
  #include "vectorial/config.h"
#endif


#ifdef VECTORIAL_SCALAR
    #include "simd4f_scalar.h"
#elif defined(VECTORIAL_SSE)
    #include "simd4f_sse.h"
#elif defined(VECTORIAL_GNU)
    #include "simd4f_gnu.h"
#elif defined(VECTORIAL_NEON)
    #include "simd4f_neon.h"
#else
    #error No implementation defined
#endif

#include "simd4f_common.h"



#ifdef __cplusplus

    #ifdef VECTORIAL_OSTREAM
        #include <ostream>

        vectorial_inline std::ostream& operator<<(std::ostream& os, const simd4f& v) {
            os << "simd4f(" << simd4f_get_x(v) << ", "
                       << simd4f_get_y(v) << ", "
                       << simd4f_get_z(v) << ", "
                       << simd4f_get_w(v) << ")";
            return os;
        }
    #endif

#endif




#endif

Added jni/glshim/src/util/vectorial/simd4f_common.h.
























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4F_COMMON_H
#define VECTORIAL_SIMD4F_COMMON_H


vectorial_inline simd4f simd4f_sum(simd4f v) { 
    const simd4f s1 = simd4f_add(simd4f_splat_x(v), simd4f_splat_y(v));
    const simd4f s2 = simd4f_add(s1, simd4f_splat_z(v));
    const simd4f s3 = simd4f_add(s2, simd4f_splat_w(v));
    return s3;
}

vectorial_inline simd4f simd4f_dot4(simd4f lhs, simd4f rhs) {
    return simd4f_sum( simd4f_mul(lhs, rhs) );
}

vectorial_inline simd4f simd4f_dot3(simd4f lhs, simd4f rhs) {
    const simd4f m = simd4f_mul(lhs, rhs);
    const simd4f s1 = simd4f_add(simd4f_splat_x(m), simd4f_splat_y(m));
    const simd4f s2 = simd4f_add(s1, simd4f_splat_z(m));
    return s2;
}

vectorial_inline simd4f simd4f_dot2(simd4f lhs, simd4f rhs) {
    const simd4f m = simd4f_mul(lhs, rhs);
    const simd4f s1 = simd4f_add(simd4f_splat_x(m), simd4f_splat_y(m));
    return s1;
}


vectorial_inline simd4f simd4f_length4(simd4f v) {
    return simd4f_sqrt( simd4f_dot4(v,v) );
}

vectorial_inline simd4f simd4f_length3(simd4f v) {
    return simd4f_sqrt( simd4f_dot3(v,v) );
}

vectorial_inline simd4f simd4f_length2(simd4f v) {
    return simd4f_sqrt( simd4f_dot2(v,v) );
}

vectorial_inline simd4f simd4f_length4_squared(simd4f v) {
    return simd4f_dot4(v,v);
}

vectorial_inline simd4f simd4f_length3_squared(simd4f v) {
    return simd4f_dot3(v,v);
}

vectorial_inline simd4f simd4f_length2_squared(simd4f v) {
    return simd4f_dot2(v,v);
}


vectorial_inline simd4f simd4f_normalize4(simd4f a) {
    simd4f invlen = simd4f_rsqrt( simd4f_dot4(a,a) );
    return simd4f_mul(a, invlen);    
}

vectorial_inline simd4f simd4f_normalize3(simd4f a) {
    simd4f invlen = simd4f_rsqrt( simd4f_dot3(a,a) );
    return simd4f_mul(a, invlen);    
}

vectorial_inline simd4f simd4f_normalize2(simd4f a) {
    simd4f invlen = simd4f_rsqrt( simd4f_dot2(a,a) );
    return simd4f_mul(a, invlen);    
}


#endif
Added jni/glshim/src/util/vectorial/simd4f_gnu.h.
















































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4F_GNU_H
#define VECTORIAL_SIMD4F_GNU_H

#include <math.h>
#include <string.h>  // memcpy


#ifdef __cplusplus
extern "C" {
#endif


typedef float simd4f __attribute__ ((vector_size (16)));

typedef union {
    simd4f s ;
    float f[4];
} _simd4f_union;

vectorial_inline float simd4f_get_x(simd4f s) { _simd4f_union u={s}; return u.f[0]; }
vectorial_inline float simd4f_get_y(simd4f s) { _simd4f_union u={s}; return u.f[1]; }
vectorial_inline float simd4f_get_z(simd4f s) { _simd4f_union u={s}; return u.f[2]; }
vectorial_inline float simd4f_get_w(simd4f s) { _simd4f_union u={s}; return u.f[3]; }


vectorial_inline simd4f simd4f_create(float x, float y, float z, float w) {
    simd4f s = { x, y, z, w };
    return s;
}

vectorial_inline simd4f simd4f_zero() { return simd4f_create(0.0f, 0.0f, 0.0f, 0.0f); }

vectorial_inline simd4f simd4f_uload4(const float *ary) {
    simd4f s = { ary[0], ary[1], ary[2], ary[3] };
    return s;
}

vectorial_inline simd4f simd4f_uload3(const float *ary) {
    simd4f s = { ary[0], ary[1], ary[2], 0 };
    return s;
}

vectorial_inline simd4f simd4f_uload2(const float *ary) {
    simd4f s = { ary[0], ary[1], 0, 0 };
    return s;
}


vectorial_inline void simd4f_ustore4(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 4);
}

vectorial_inline void simd4f_ustore3(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 3);
}

vectorial_inline void simd4f_ustore2(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 2);
}


vectorial_inline simd4f simd4f_splat(float v) { 
    simd4f s = { v, v, v, v }; 
    return s;
}

vectorial_inline simd4f simd4f_splat_x(simd4f v) { 
    float s = simd4f_get_x(v);
    simd4f ret = { s, s, s, s }; 
    return ret;
}

vectorial_inline simd4f simd4f_splat_y(simd4f v) { 
    float s = simd4f_get_y(v);
    simd4f ret = { s, s, s, s }; 
    return ret;
}

vectorial_inline simd4f simd4f_splat_z(simd4f v) { 
    float s = simd4f_get_z(v);
    simd4f ret = { s, s, s, s }; 
    return ret;
}

vectorial_inline simd4f simd4f_splat_w(simd4f v) { 
    float s = simd4f_get_w(v);
    simd4f ret = { s, s, s, s }; 
    return ret;
}

vectorial_inline simd4f simd4f_reciprocal(simd4f v) { 
    return simd4f_splat(1.0f) / v;
}

vectorial_inline simd4f simd4f_sqrt(simd4f v) { 
    simd4f ret = { sqrtf(simd4f_get_x(v)), sqrtf(simd4f_get_y(v)), sqrtf(simd4f_get_z(v)), sqrtf(simd4f_get_w(v)) };
    return ret;
}

vectorial_inline simd4f simd4f_rsqrt(simd4f v) { 
    return simd4f_splat(1.0f) / simd4f_sqrt(v);
}



vectorial_inline simd4f simd4f_add(simd4f lhs, simd4f rhs) {
    simd4f ret = lhs + rhs;
    return ret;
}

vectorial_inline simd4f simd4f_sub(simd4f lhs, simd4f rhs) {
    simd4f ret = lhs - rhs;
    return ret;
}

vectorial_inline simd4f simd4f_mul(simd4f lhs, simd4f rhs) {
    simd4f ret = lhs * rhs;
    return ret;
}

vectorial_inline simd4f simd4f_div(simd4f lhs, simd4f rhs) {
    simd4f ret = lhs / rhs;
    return ret;
}

vectorial_inline simd4f simd4f_madd(simd4f m1, simd4f m2, simd4f a) {
    return simd4f_add( simd4f_mul(m1, m2), a );
}


vectorial_inline simd4f simd4f_cross3(simd4f l, simd4f r) {
    _simd4f_union lhs = {l};
    _simd4f_union rhs = {r};
    
    return simd4f_create( lhs.f[1] * rhs.f[2] - lhs.f[2] * rhs.f[1],
                          lhs.f[2] * rhs.f[0] - lhs.f[0] * rhs.f[2],
                          lhs.f[0] * rhs.f[1] - lhs.f[1] * rhs.f[0], 0);
}


vectorial_inline simd4f simd4f_shuffle_wxyz(simd4f s) { 
    _simd4f_union u = {s};
    return simd4f_create(u.f[3], u.f[0], u.f[1], u.f[2]); 
}

vectorial_inline simd4f simd4f_shuffle_zwxy(simd4f s) { 
    _simd4f_union u = {s};
    return simd4f_create(u.f[2], u.f[3], u.f[0], u.f[1]); 
}

vectorial_inline simd4f simd4f_shuffle_yzwx(simd4f s) { 
    _simd4f_union u = {s};
    return simd4f_create(u.f[1], u.f[2], u.f[3], u.f[0]); 
}


vectorial_inline simd4f simd4f_zero_w(simd4f s) {
    _simd4f_union u = {s};
    return simd4f_create(u.f[0], u.f[1], u.f[2], 0.0f);
}

vectorial_inline simd4f simd4f_zero_zw(simd4f s) {
    _simd4f_union u = {s};
    return simd4f_create(u.f[0], u.f[1], 0.0f, 0.0f);
}


vectorial_inline simd4f simd4f_merge_high(simd4f abcd, simd4f xyzw) { 
    _simd4f_union u1 = {abcd};
    _simd4f_union u2 = {xyzw};
    return simd4f_create(u1.f[2], u1.f[3], u2.f[2], u2.f[3]);
}

vectorial_inline simd4f simd4f_flip_sign_0101(simd4f s) {
    _simd4f_union u = {s};
    return simd4f_create(u.f[0], -u.f[1], u.f[2], -u.f[3]);
}

vectorial_inline simd4f simd4f_flip_sign_1010(simd4f s) {
    _simd4f_union u = {s};
    return simd4f_create(-u.f[0], u.f[1], -u.f[2], u.f[3]);
}


vectorial_inline simd4f simd4f_min(simd4f a, simd4f b) {
    _simd4f_union ua = {a};
    _simd4f_union ub = {b};
    return simd4f_create( ua.f[0] < ub.f[0] ? ua.f[0] : ub.f[0], 
                          ua.f[1] < ub.f[1] ? ua.f[1] : ub.f[1], 
                          ua.f[2] < ub.f[2] ? ua.f[2] : ub.f[2], 
                          ua.f[3] < ub.f[3] ? ua.f[3] : ub.f[3] );
}

vectorial_inline simd4f simd4f_max(simd4f a, simd4f b) {
    _simd4f_union ua = {a};
    _simd4f_union ub = {b};
    return simd4f_create( ua.f[0] > ub.f[0] ? ua.f[0] : ub.f[0], 
                          ua.f[1] > ub.f[1] ? ua.f[1] : ub.f[1], 
                          ua.f[2] > ub.f[2] ? ua.f[2] : ub.f[2], 
                          ua.f[3] > ub.f[3] ? ua.f[3] : ub.f[3] );
}



#ifdef __cplusplus
}
#endif


#endif

Added jni/glshim/src/util/vectorial/simd4f_neon.h.




































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4F_NEON_H
#define VECTORIAL_SIMD4F_NEON_H

#include <arm_neon.h>

#ifdef __cplusplus
extern "C" {
#endif


typedef float32x4_t simd4f;

typedef union {
    simd4f s ;
    float f[4];
} _simd4f_union;



vectorial_inline simd4f simd4f_create(float x, float y, float z, float w) {
    const float32_t d[4] = { x,y,z,w };
    simd4f s = vld1q_f32(d);
    return s;
}

vectorial_inline simd4f simd4f_zero() { return vdupq_n_f32(0.0f); }

vectorial_inline simd4f simd4f_uload4(const float *ary) {
    const float32_t* ary32 = (const float32_t*)ary;
    simd4f s = vld1q_f32(ary32);    
    return s;
}

vectorial_inline simd4f simd4f_uload3(const float *ary) {
    simd4f s = simd4f_create(ary[0], ary[1], ary[2], 0);
    return s;
}

vectorial_inline simd4f simd4f_uload2(const float *ary) {
    const float32_t* ary32 = (const float32_t*)ary;
    float32x2_t low = vld1_f32(ary32);
    const float32_t zero = 0;
    float32x2_t high = vld1_dup_f32(&zero); // { 0,0 } but stupid warnings from llvm-gcc
    return vcombine_f32(low, high);
}


vectorial_inline void simd4f_ustore4(const simd4f val, float *ary) {
    vst1q_f32( (float32_t*)ary, val);
}

vectorial_inline void simd4f_ustore3(const simd4f val, float *ary) {
    _simd4f_union u = { val };
    ary[0] = u.f[0];
    ary[1] = u.f[1];
    ary[2] = u.f[2];
}

vectorial_inline void simd4f_ustore2(const simd4f val, float *ary) {
    const float32x2_t low = vget_low_f32(val);
    vst1_f32( (float32_t*)ary, low);
}




vectorial_inline simd4f simd4f_splat(float v) { 
    simd4f s = vdupq_n_f32(v);
    return s;
}

// todo: or is simd4f_splat(simd4f_get_x(v))  better?

vectorial_inline simd4f simd4f_splat_x(simd4f v) {
    float32x2_t o = vget_low_f32(v);
    simd4f ret = vdupq_lane_f32(o, 0);
    return ret;
}

vectorial_inline simd4f simd4f_splat_y(simd4f v) { 
    float32x2_t o = vget_low_f32(v);
    simd4f ret = vdupq_lane_f32(o, 1);
    return ret;
}

vectorial_inline simd4f simd4f_splat_z(simd4f v) { 
    float32x2_t o = vget_high_f32(v);
    simd4f ret = vdupq_lane_f32(o, 0);
    return ret;
}

vectorial_inline simd4f simd4f_splat_w(simd4f v) { 
    float32x2_t o = vget_high_f32(v);
    simd4f ret = vdupq_lane_f32(o, 1);
    return ret;
}

vectorial_inline simd4f simd4f_reciprocal(simd4f v) { 
    simd4f estimate = vrecpeq_f32(v);
    estimate = vmulq_f32(vrecpsq_f32(estimate, v), estimate);
    estimate = vmulq_f32(vrecpsq_f32(estimate, v), estimate);
    return estimate;
}

vectorial_inline simd4f simd4f_rsqrt(simd4f v) { 
    simd4f estimate = vrsqrteq_f32(v);
    simd4f estimate2 = vmulq_f32(estimate, v);
    estimate = vmulq_f32(estimate, vrsqrtsq_f32(estimate2, estimate));
    estimate2 = vmulq_f32(estimate, v);
    estimate = vmulq_f32(estimate, vrsqrtsq_f32(estimate2, estimate));
    estimate2 = vmulq_f32(estimate, v);
    estimate = vmulq_f32(estimate, vrsqrtsq_f32(estimate2, estimate));
    return estimate;
}

vectorial_inline simd4f simd4f_sqrt(simd4f v) { 

    return vreinterpretq_f32_u32(vandq_u32( vtstq_u32(vreinterpretq_u32_f32(v),  
                                                      vreinterpretq_u32_f32(v)), 
                                            vreinterpretq_u32_f32(
                                              simd4f_reciprocal(simd4f_rsqrt(v)))
                                          )
                                );

}



// arithmetics

vectorial_inline simd4f simd4f_add(simd4f lhs, simd4f rhs) {
    simd4f ret = vaddq_f32(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_sub(simd4f lhs, simd4f rhs) {
    simd4f ret = vsubq_f32(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_mul(simd4f lhs, simd4f rhs) {
    simd4f ret = vmulq_f32(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_div(simd4f lhs, simd4f rhs) {
    simd4f recip = simd4f_reciprocal( rhs );
    simd4f ret = vmulq_f32(lhs, recip);
    return ret;
}

vectorial_inline simd4f simd4f_madd(simd4f m1, simd4f m2, simd4f a) {
    return vmlaq_f32( a, m1, m2 );
}



vectorial_inline float simd4f_get_x(simd4f s) { return vgetq_lane_f32(s, 0); }
vectorial_inline float simd4f_get_y(simd4f s) { return vgetq_lane_f32(s, 1); }
vectorial_inline float simd4f_get_z(simd4f s) { return vgetq_lane_f32(s, 2); }
vectorial_inline float simd4f_get_w(simd4f s) { return vgetq_lane_f32(s, 3); }


vectorial_inline simd4f simd4f_cross3(simd4f lhs, simd4f rhs) {
    
    const simd4f lyzx = simd4f_create(simd4f_get_y(lhs), simd4f_get_z(lhs), simd4f_get_x(lhs), simd4f_get_w(lhs));
    const simd4f lzxy = simd4f_create(simd4f_get_z(lhs), simd4f_get_x(lhs), simd4f_get_y(lhs), simd4f_get_w(lhs));

    const simd4f ryzx = simd4f_create(simd4f_get_y(rhs), simd4f_get_z(rhs), simd4f_get_x(rhs), simd4f_get_w(rhs));
    const simd4f rzxy = simd4f_create(simd4f_get_z(rhs), simd4f_get_x(rhs), simd4f_get_y(rhs), simd4f_get_w(rhs));

    return vmlsq_f32(vmulq_f32(lyzx, rzxy), lzxy, ryzx);

}

vectorial_inline simd4f simd4f_shuffle_wxyz(simd4f s) { 
    _simd4f_union u = {s};
    return simd4f_create( u.f[3], u.f[0], u.f[1], u.f[2]); 
}

vectorial_inline simd4f simd4f_shuffle_zwxy(simd4f s) { 
    _simd4f_union u = {s};
    return simd4f_create(u.f[2], u.f[3], u.f[0], u.f[1]); 
}

vectorial_inline simd4f simd4f_shuffle_yzwx(simd4f s) { 
    _simd4f_union u = {s};
    return simd4f_create(u.f[1], u.f[2], u.f[3], u.f[0]); 
}


vectorial_inline simd4f simd4f_zero_w(simd4f s) {
    _simd4f_union u = {s};
    return simd4f_create(u.f[0], u.f[1], u.f[2], 0.0f);
}

vectorial_inline simd4f simd4f_zero_zw(simd4f s) {
    _simd4f_union u = {s};
    return simd4f_create(u.f[0], u.f[1], 0.0f, 0.0f);
}


vectorial_inline simd4f simd4f_merge_high(simd4f xyzw, simd4f abcd) { 
    _simd4f_union u1 = {xyzw};
    _simd4f_union u2 = {abcd};
    return simd4f_create(u1.f[2], u1.f[3], u2.f[2], u2.f[3]); 
}

vectorial_inline simd4f simd4f_flip_sign_0101(simd4f s) {
    const unsigned int upnpn[4] = { 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
    const uint32x4_t pnpn = vld1q_u32( upnpn );
    return vreinterpretq_f32_u32( veorq_u32( vreinterpretq_u32_f32(s), pnpn ) ); 
}

vectorial_inline simd4f simd4f_flip_sign_1010(simd4f s) {
    const unsigned int unpnp[4] = { 0x80000000, 0x00000000, 0x80000000, 0x00000000 };
    const uint32x4_t npnp = vld1q_u32( unpnp );
    return vreinterpretq_f32_u32( veorq_u32( vreinterpretq_u32_f32(s), npnp ) ); 
}


vectorial_inline simd4f simd4f_min(simd4f a, simd4f b) {
    return vminq_f32( a, b ); 
}

vectorial_inline simd4f simd4f_max(simd4f a, simd4f b) {
    return vmaxq_f32( a, b ); 
}


#ifdef __cplusplus
}
#endif


#endif

Added jni/glshim/src/util/vectorial/simd4f_scalar.h.






























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4F_SCALAR_H
#define VECTORIAL_SIMD4F_SCALAR_H

#include <math.h>
#include <string.h>  // memcpy

#ifdef __cplusplus
extern "C" {
#endif


typedef struct { 
    float x;
    float y; 
    float z; 
    float w;
} simd4f;



vectorial_inline simd4f simd4f_create(float x, float y, float z, float w) {
    simd4f s = { x, y, z, w };
    return s;
}

vectorial_inline simd4f simd4f_zero() { return simd4f_create(0.0f, 0.0f, 0.0f, 0.0f); }

vectorial_inline simd4f simd4f_uload4(const float *ary) {
    simd4f s = { ary[0], ary[1], ary[2], ary[3] };
    return s;
}

vectorial_inline simd4f simd4f_uload3(const float *ary) {
    simd4f s = { ary[0], ary[1], ary[2], 0 };
    return s;
}

vectorial_inline simd4f simd4f_uload2(const float *ary) {
    simd4f s = { ary[0], ary[1], 0, 0 };
    return s;
}


vectorial_inline void simd4f_ustore4(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 4);
}

vectorial_inline void simd4f_ustore3(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 3);
}

vectorial_inline void simd4f_ustore2(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 2);
}



// utilities
vectorial_inline simd4f simd4f_splat(float v) { 
    simd4f s = { v, v, v, v }; 
    return s;
}

vectorial_inline simd4f simd4f_splat_x(simd4f v) { 
    simd4f s = { v.x, v.x, v.x, v.x }; 
    return s;
}

vectorial_inline simd4f simd4f_splat_y(simd4f v) { 
    simd4f s = { v.y, v.y, v.y, v.y }; 
    return s;
}

vectorial_inline simd4f simd4f_splat_z(simd4f v) { 
    simd4f s = { v.z, v.z, v.z, v.z }; 
    return s;
}

vectorial_inline simd4f simd4f_splat_w(simd4f v) { 
    simd4f s = { v.w, v.w, v.w, v.w }; 
    return s;
}

vectorial_inline simd4f simd4f_reciprocal(simd4f v) { 
    simd4f s = { 1.0f/v.x, 1.0f/v.y, 1.0f/v.z, 1.0f/v.w }; 
    return s;
}

vectorial_inline simd4f simd4f_sqrt(simd4f v) { 
    simd4f s = { sqrtf(v.x), sqrtf(v.y), sqrtf(v.z), sqrtf(v.w) }; 
    return s;
}

vectorial_inline simd4f simd4f_rsqrt(simd4f v) { 
    simd4f s = { 1.0f/sqrtf(v.x), 1.0f/sqrtf(v.y), 1.0f/sqrtf(v.z), 1.0f/sqrtf(v.w) }; 
    return s;
}


// arithmetic

vectorial_inline simd4f simd4f_add(simd4f lhs, simd4f rhs) {
    simd4f ret = { lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z, lhs.w + rhs.w };
    return ret;
}

vectorial_inline simd4f simd4f_sub(simd4f lhs, simd4f rhs) {
    simd4f ret = { lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z, lhs.w - rhs.w };
    return ret;
}

vectorial_inline simd4f simd4f_mul(simd4f lhs, simd4f rhs) {
    simd4f ret = { lhs.x * rhs.x, lhs.y * rhs.y, lhs.z * rhs.z, lhs.w * rhs.w };
    return ret;
}

vectorial_inline simd4f simd4f_div(simd4f lhs, simd4f rhs) {
    simd4f ret = { lhs.x / rhs.x, lhs.y / rhs.y, lhs.z / rhs.z, lhs.w / rhs.w };
    return ret;
}

vectorial_inline simd4f simd4f_madd(simd4f m1, simd4f m2, simd4f a) {
    return simd4f_add( simd4f_mul(m1, m2), a );
}

vectorial_inline simd4f simd4f_cross3(simd4f lhs, simd4f rhs) {
    return simd4f_create( lhs.y * rhs.z - lhs.z * rhs.y,
                          lhs.z * rhs.x - lhs.x * rhs.z,
                          lhs.x * rhs.y - lhs.y * rhs.x, 0);
}


vectorial_inline float simd4f_get_x(simd4f s) { return s.x; }
vectorial_inline float simd4f_get_y(simd4f s) { return s.y; }
vectorial_inline float simd4f_get_z(simd4f s) { return s.z; }
vectorial_inline float simd4f_get_w(simd4f s) { return s.w; }


vectorial_inline simd4f simd4f_shuffle_wxyz(simd4f s) { return simd4f_create(s.w, s.x, s.y, s.z); }
vectorial_inline simd4f simd4f_shuffle_zwxy(simd4f s) { return simd4f_create(s.z, s.w, s.x, s.y); }
vectorial_inline simd4f simd4f_shuffle_yzwx(simd4f s) { return simd4f_create(s.y, s.z, s.w, s.x); }


vectorial_inline simd4f simd4f_zero_w(simd4f s) {
    return simd4f_create(s.x, s.y, s.z, 0.0f);
}

vectorial_inline simd4f simd4f_zero_zw(simd4f s) {
    return simd4f_create(s.x, s.y, 0.0f, 0.0f);
}


vectorial_inline simd4f simd4f_merge_high(simd4f abcd, simd4f xyzw) { 
    return simd4f_create(abcd.z, abcd.w, xyzw.z, xyzw.w);
}

vectorial_inline simd4f simd4f_flip_sign_0101(simd4f s) {
    return simd4f_create(s.x, -s.y, s.z, -s.w);
}

vectorial_inline simd4f simd4f_flip_sign_1010(simd4f s) {
    return simd4f_create(-s.x, s.y, -s.z, s.w);
}

vectorial_inline simd4f simd4f_min(simd4f a, simd4f b) {
    return simd4f_create( a.x < b.x ? a.x : b.x, 
                          a.y < b.y ? a.y : b.y, 
                          a.z < b.z ? a.z : b.z, 
                          a.w < b.w ? a.w : b.w );
}

vectorial_inline simd4f simd4f_max(simd4f a, simd4f b) {
    return simd4f_create( a.x > b.x ? a.x : b.x, 
                          a.y > b.y ? a.y : b.y, 
                          a.z > b.z ? a.z : b.z, 
                          a.w > b.w ? a.w : b.w );
}


#ifdef __cplusplus
}
#endif


#endif

Added jni/glshim/src/util/vectorial/simd4f_sse.h.








































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4F_SSE_H
#define VECTORIAL_SIMD4F_SSE_H

#include <xmmintrin.h>
#include <string.h>  // memcpy

#ifdef __cplusplus
extern "C" {
#endif


typedef __m128 simd4f; 

typedef union {
    simd4f s ;
    float f[4];
    unsigned int ui[4];
} _simd4f_union;

// creating

vectorial_inline simd4f simd4f_create(float x, float y, float z, float w) {
    simd4f s = { x, y, z, w };
    return s;
}

vectorial_inline simd4f simd4f_zero() { return _mm_setzero_ps(); }

vectorial_inline simd4f simd4f_uload4(const float *ary) {
    simd4f s = _mm_loadu_ps(ary);
    return s;
}

vectorial_inline simd4f simd4f_uload3(const float *ary) {
    simd4f s = simd4f_create(ary[0], ary[1], ary[2], 0);
    return s;
}

vectorial_inline simd4f simd4f_uload2(const float *ary) {
    simd4f s = simd4f_create(ary[0], ary[1], 0, 0);
    return s;
}


vectorial_inline void simd4f_ustore4(const simd4f val, float *ary) {
    _mm_storeu_ps(ary, val);
}

vectorial_inline void simd4f_ustore3(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 3);
}

vectorial_inline void simd4f_ustore2(const simd4f val, float *ary) {
    memcpy(ary, &val, sizeof(float) * 2);
}


// utilites

vectorial_inline simd4f simd4f_splat(float v) { 
    simd4f s = _mm_set1_ps(v); 
    return s;
}

vectorial_inline simd4f simd4f_splat_x(simd4f v) { 
    simd4f s = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0,0,0,0)); 
    return s;
}

vectorial_inline simd4f simd4f_splat_y(simd4f v) { 
    simd4f s = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1,1,1,1)); 
    return s;
}

vectorial_inline simd4f simd4f_splat_z(simd4f v) { 
    simd4f s = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2,2,2,2)); 
    return s;
}

vectorial_inline simd4f simd4f_splat_w(simd4f v) { 
    simd4f s = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3,3,3,3)); 
    return s;
}


// arithmetic

vectorial_inline simd4f simd4f_add(simd4f lhs, simd4f rhs) {
    simd4f ret = _mm_add_ps(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_sub(simd4f lhs, simd4f rhs) {
    simd4f ret = _mm_sub_ps(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_mul(simd4f lhs, simd4f rhs) {
    simd4f ret = _mm_mul_ps(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_div(simd4f lhs, simd4f rhs) {
    simd4f ret = _mm_div_ps(lhs, rhs);
    return ret;
}

vectorial_inline simd4f simd4f_madd(simd4f m1, simd4f m2, simd4f a) {
    return simd4f_add( simd4f_mul(m1, m2), a );
}




vectorial_inline simd4f simd4f_reciprocal(simd4f v) { 
    simd4f s = _mm_rcp_ps(v); 
    const simd4f two = simd4f_create(2.0f, 2.0f, 2.0f, 2.0f);
    s = simd4f_mul(s, simd4f_sub(two, simd4f_mul(v, s)));
    return s;
}

vectorial_inline simd4f simd4f_sqrt(simd4f v) { 
    simd4f s = _mm_sqrt_ps(v); 
    return s;
}

vectorial_inline simd4f simd4f_rsqrt(simd4f v) { 
    simd4f s = _mm_rsqrt_ps(v); 
    const simd4f half = simd4f_create(0.5f, 0.5f, 0.5f, 0.5f);
    const simd4f three = simd4f_create(3.0f, 3.0f, 3.0f, 3.0f);
    s = simd4f_mul(simd4f_mul(s, half), simd4f_sub(three, simd4f_mul(s, simd4f_mul(v,s))));
    return s;
}




vectorial_inline simd4f simd4f_cross3(simd4f lhs, simd4f rhs) {
    
    const simd4f lyzx = _mm_shuffle_ps(lhs, lhs, _MM_SHUFFLE(3,0,2,1));
    const simd4f lzxy = _mm_shuffle_ps(lhs, lhs, _MM_SHUFFLE(3,1,0,2));

    const simd4f ryzx = _mm_shuffle_ps(rhs, rhs, _MM_SHUFFLE(3,0,2,1));
    const simd4f rzxy = _mm_shuffle_ps(rhs, rhs, _MM_SHUFFLE(3,1,0,2));

    return _mm_sub_ps(_mm_mul_ps(lyzx, rzxy), _mm_mul_ps(lzxy, ryzx));

}



vectorial_inline float simd4f_get_x(simd4f s) { _simd4f_union u={s}; return u.f[0]; }
vectorial_inline float simd4f_get_y(simd4f s) { _simd4f_union u={s}; return u.f[1]; }
vectorial_inline float simd4f_get_z(simd4f s) { _simd4f_union u={s}; return u.f[2]; }
vectorial_inline float simd4f_get_w(simd4f s) { _simd4f_union u={s}; return u.f[3]; }


vectorial_inline simd4f simd4f_shuffle_wxyz(simd4f s) { return _mm_shuffle_ps(s,s, _MM_SHUFFLE(2,1,0,3) ); }
vectorial_inline simd4f simd4f_shuffle_zwxy(simd4f s) { return _mm_shuffle_ps(s,s, _MM_SHUFFLE(1,0,3,2) ); }
vectorial_inline simd4f simd4f_shuffle_yzwx(simd4f s) { return _mm_shuffle_ps(s,s, _MM_SHUFFLE(0,3,2,1) ); }

vectorial_inline simd4f simd4f_zero_w(simd4f s) {
    simd4f r = _mm_unpackhi_ps(s, _mm_setzero_ps());
    return _mm_movelh_ps(s, r);
}

vectorial_inline simd4f simd4f_zero_zw(simd4f s) {
    return _mm_movelh_ps(s, _mm_setzero_ps());
}

vectorial_inline simd4f simd4f_merge_high(simd4f xyzw, simd4f abcd) { 
    return _mm_movehl_ps(abcd, xyzw);
}


typedef simd4f_aligned16 union {
    unsigned int ui[4];
    float f[4];
} _simd4f_uif;

vectorial_inline simd4f simd4f_flip_sign_0101(simd4f s) {
    const _simd4f_uif upnpn = { { 0x00000000, 0x80000000, 0x00000000, 0x80000000 } };
    return _mm_xor_ps( s, _mm_load_ps(upnpn.f) ); 
}

vectorial_inline simd4f simd4f_flip_sign_1010(simd4f s) {
    const _simd4f_uif unpnp = { { 0x80000000, 0x00000000, 0x80000000, 0x00000000 } };
    return _mm_xor_ps( s, _mm_load_ps(unpnp.f) ); 
}

vectorial_inline simd4f simd4f_min(simd4f a, simd4f b) {
    return _mm_min_ps( a, b ); 
}

vectorial_inline simd4f simd4f_max(simd4f a, simd4f b) {
    return _mm_max_ps( a, b ); 
}



#ifdef __cplusplus
}
#endif


#endif

Added jni/glshim/src/util/vectorial/simd4x4f.h.




























































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4X4F_H
#define VECTORIAL_SIMD4X4F_H


#include "simd4f.h"

#include <math.h>

/*
  Note, x,y,z,w are conceptually columns with matrix math.
*/

typedef struct {
    simd4f x,y,z,w;
} simd4x4f;



vectorial_inline simd4x4f simd4x4f_create(simd4f x, simd4f y, simd4f z, SIMD_PARAM(simd4f, w)) {
    simd4x4f s = { x, y, z, w };
    return s;
}


vectorial_inline void simd4x4f_identity(simd4x4f* m) {
    *m = simd4x4f_create( simd4f_create(1.0f, 0.0f, 0.0f, 0.0f),
                          simd4f_create(0.0f, 1.0f, 0.0f, 0.0f),
                          simd4f_create(0.0f, 0.0f, 1.0f, 0.0f),
                          simd4f_create(0.0f, 0.0f, 0.0f, 1.0f));
}



vectorial_inline void simd4x4f_uload(simd4x4f* m, const float *f) {

    m->x = simd4f_uload4(f + 0);
    m->y = simd4f_uload4(f + 4);
    m->z = simd4f_uload4(f + 8);
    m->w = simd4f_uload4(f + 12);

}


vectorial_inline void simd4x4f_ustore(simd4x4f* m, float *f) {

    simd4f_ustore4(m->x, f + 0);
    simd4f_ustore4(m->y, f + 4);
    simd4f_ustore4(m->z, f + 8);
    simd4f_ustore4(m->w, f + 12);

}



#ifdef VECTORIAL_SCALAR
    #include "simd4x4f_scalar.h"
#elif defined(VECTORIAL_SSE)
    #include "simd4x4f_sse.h"
#elif defined(VECTORIAL_GNU)
    #include "simd4x4f_gnu.h"
#elif defined(VECTORIAL_NEON)
    #include "simd4x4f_neon.h"
#else
    #error No implementation defined
#endif

vectorial_inline void simd4x4f_sum(const simd4x4f* a, simd4f* out) {
    simd4f t;
    t = simd4f_add(a->x, a->y);
    t = simd4f_add(t, a->z);
    t = simd4f_add(t, a->w);
    *out = t;
}

vectorial_inline void simd4x4f_matrix_vector_mul(const simd4x4f* a, const simd4f * b, simd4f* out) {

    const simd4f x = a->x;
    const simd4f y = a->y;
    const simd4f z = a->z;
    const simd4f w = a->w;
    const simd4f v = *b;
    const simd4f vx = simd4f_splat_x(v);
    const simd4f vy = simd4f_splat_y(v);
    const simd4f vz = simd4f_splat_z(v);
    const simd4f vw = simd4f_splat_w(v);

    #if 0
    // In a hasty benchmark, this actually performed worse on neon
    // TODO: revisit and conditionalize accordingly

    *out = simd4f_madd(x, vx, 
             simd4f_madd(y, vy, 
               simd4f_madd(z, vz, 
                 simd4f_mul(w, vw) ) ) );

    #else    

     *out = simd4f_add(simd4f_mul(x, vx), 
              simd4f_add(simd4f_mul(y, vy), 
                simd4f_add(simd4f_mul(z, vz), 
                  simd4f_mul(w, vw) ) ) );

    #endif
}

vectorial_inline void simd4x4f_matrix_vector3_mul(const simd4x4f* a, const simd4f * b, simd4f* out) {

    #if 0
    *out = simd4f_madd( a->x, simd4f_splat_x(*b), 
             simd4f_madd( a->y, simd4f_splat_y(*b), 
               simd4f_mul(a->z, simd4f_splat_z(*b)) ) );
    #else
    *out = simd4f_add( simd4f_mul(a->x, simd4f_splat_x(*b)), 
             simd4f_add( simd4f_mul(a->y, simd4f_splat_y(*b)), 
               simd4f_mul(a->z, simd4f_splat_z(*b)) ) );
    #endif

}

vectorial_inline void simd4x4f_matrix_point3_mul(const simd4x4f* a, const simd4f * b, simd4f* out) {

    #if 0
    *out = simd4f_madd( a->x, simd4f_splat_x(*b),
             simd4f_madd( a->y, simd4f_splat_y(*b),
               simd4f_madd( a->z, simd4f_splat_z(*b),
                 a->w ) ) );
    #else
    *out = simd4f_add( simd4f_mul(a->x, simd4f_splat_x(*b)),
             simd4f_add( simd4f_mul(a->y, simd4f_splat_y(*b)),
               simd4f_add( simd4f_mul(a->z, simd4f_splat_z(*b)),
                 a->w ) ) );
    #endif

}

vectorial_inline void simd4x4f_inv_ortho_matrix_point3_mul(const simd4x4f* a, const simd4f * b, simd4f* out) {
    simd4f translation = simd4f_sub(*b, a->w);

    simd4x4f transpose = *a;

    transpose.w = simd4f_create(0,0,0,0);
    simd4x4f_transpose_inplace(&transpose);

    simd4x4f_matrix_point3_mul(&transpose, &translation, out);
}

vectorial_inline void simd4x4f_inv_ortho_matrix_vector3_mul(const simd4x4f* a, const simd4f * b, simd4f* out) {
    simd4f translation = *b;

    simd4x4f transpose = *a;

    transpose.w = simd4f_create(0,0,0,0);
    simd4x4f_transpose_inplace(&transpose);

    simd4x4f_matrix_vector3_mul(&transpose, &translation, out);
}


vectorial_inline void simd4x4f_matrix_mul(const simd4x4f* a, const simd4x4f* b, simd4x4f* out) {

    simd4x4f_matrix_vector_mul(a, &b->x, &out->x);
    simd4x4f_matrix_vector_mul(a, &b->y, &out->y);
    simd4x4f_matrix_vector_mul(a, &b->z, &out->z);
    simd4x4f_matrix_vector_mul(a, &b->w, &out->w);

}




vectorial_inline void simd4x4f_perspective(simd4x4f *m, float fovy_radians, float aspect, float znear, float zfar) {
    
    float deltaz = zfar - znear;
    float cotangent = tanf( VECTORIAL_HALFPI - fovy_radians * 0.5f );
    
    float a = cotangent / aspect;
    float b = cotangent;
    float c = -(zfar + znear) / deltaz;
    float d = -2 * znear * zfar / deltaz;
    
    m->x = simd4f_create( a, 0, 0,  0);
    m->y = simd4f_create( 0, b, 0,  0);
    m->z = simd4f_create( 0, 0, c, -1);
    m->w = simd4f_create( 0, 0, d,  0);

}

vectorial_inline void simd4x4f_ortho(simd4x4f *m, float left, float right, float bottom, float top, float znear, float zfar) {
    
    float deltax = right - left;
    float deltay = top - bottom;
    float deltaz = zfar - znear;

    float a = 2.0f / deltax;
    float b = -(right + left) / deltax;
    float c = 2.0f / deltay;
    float d = -(top + bottom) / deltay;
    float e =  -2.0f / deltaz;
    float f = -(zfar + znear) / deltaz;
    
    m->x = simd4f_create( a, 0, 0, 0);
    m->y = simd4f_create( 0, c, 0, 0);
    m->z = simd4f_create( 0, 0, e, 0);
    m->w = simd4f_create( b, d, f, 1);
    
}


vectorial_inline void simd4x4f_frustum(simd4x4f *m, float left, float right, float bottom, float top, float znear, float zfar) {

    float x = (2 * znear) / (right - left);
    float y = (2 * znear) / (top - bottom);

    float A = (right + left) / (right - left);
    float B = (top + bottom) / (top - bottom);
    float C = -(zfar + znear) / (zfar - znear);
    float D = -(2 * zfar * znear) / (zfar - znear);

    m->x = simd4f_create( x, 0, 0, 0);
    m->y = simd4f_create( 0, y, 0, 0);
    m->z = simd4f_create( A, B, C, -1);
    m->w = simd4f_create( 0, 0, D, 0);

}


vectorial_inline void simd4x4f_lookat(simd4x4f *m, simd4f eye, simd4f center, simd4f up) {
    
    simd4f zaxis = simd4f_normalize3( simd4f_sub(center, eye) );
    simd4f xaxis = simd4f_normalize3( simd4f_cross3( zaxis, up ) );
    simd4f yaxis = simd4f_cross3(xaxis, zaxis);

    zaxis = simd4f_sub( simd4f_zero(), zaxis);

    float x = -simd4f_get_x( simd4f_dot3(xaxis, eye) );
    float y = -simd4f_get_x( simd4f_dot3(yaxis, eye) );
    float z = -simd4f_get_x( simd4f_dot3(zaxis, eye) );

    m->x = xaxis;
    m->y = yaxis;
    m->z = zaxis;

    m->w = simd4f_create( 0,0,0, 1);
    simd4x4f_transpose_inplace(m);
    m->w = simd4f_create( x,y,z,1);

}


vectorial_inline void simd4x4f_scaling(simd4x4f* m, float x, float y, float z) {
    *m = simd4x4f_create( simd4f_create(   x, 0.0f, 0.0f, 0.0f),
                          simd4f_create(0.0f,    y, 0.0f, 0.0f),
                          simd4f_create(0.0f, 0.0f,    z, 0.0f),
                          simd4f_create(0.0f, 0.0f, 0.0f, 1.0f));
}


vectorial_inline void simd4x4f_translation(simd4x4f* m, float x, float y, float z) {
    *m = simd4x4f_create( simd4f_create(1.0f, 0.0f, 0.0f, 0.0f),
                          simd4f_create(0.0f, 1.0f, 0.0f, 0.0f),
                          simd4f_create(0.0f, 0.0f, 1.0f, 0.0f),
                          simd4f_create(   x,    y,    z, 1.0f));
}


vectorial_inline void simd4x4f_axis_rotation(simd4x4f* m, float radians, simd4f axis) {

    radians = -radians;

    axis = simd4f_normalize3(axis);

    const float sine = sinf(radians);
    const float cosine = cosf(radians);

    const float x = simd4f_get_x(axis);
    const float y = simd4f_get_y(axis);
    const float z = simd4f_get_z(axis);

    const float ab = x * y * (1 - cosine);
    const float bc = y * z * (1 - cosine);
    const float ca = z * x * (1 - cosine);

    const float tx = x * x;
    const float ty = y * y;
    const float tz = z * z;

    const simd4f i = simd4f_create( tx + cosine * (1 - tx), ab - z * sine,          ca + y * sine,          0);
    const simd4f j = simd4f_create( ab + z * sine,          ty + cosine * (1 - ty), bc - x * sine,          0);
    const simd4f k = simd4f_create( ca - y * sine,          bc + x * sine,          tz + cosine * (1 - tz), 0);
    
    *m = simd4x4f_create( i,j,k, simd4f_create(0, 0, 0, 1) );
        
}



vectorial_inline void simd4x4f_add(simd4x4f* a, simd4x4f* b, simd4x4f* out) {
    
    out->x = simd4f_add(a->x, b->x);
    out->y = simd4f_add(a->y, b->y);
    out->z = simd4f_add(a->z, b->z);
    out->w = simd4f_add(a->w, b->w);
    
}

vectorial_inline void simd4x4f_sub(simd4x4f* a, simd4x4f* b, simd4x4f* out) {
    
    out->x = simd4f_sub(a->x, b->x);
    out->y = simd4f_sub(a->y, b->y);
    out->z = simd4f_sub(a->z, b->z);
    out->w = simd4f_sub(a->w, b->w);
    
}

vectorial_inline void simd4x4f_mul(simd4x4f* a, simd4x4f* b, simd4x4f* out) {
    
    out->x = simd4f_mul(a->x, b->x);
    out->y = simd4f_mul(a->y, b->y);
    out->z = simd4f_mul(a->z, b->z);
    out->w = simd4f_mul(a->w, b->w);
    
}

vectorial_inline void simd4x4f_div(simd4x4f* a, simd4x4f* b, simd4x4f* out) {
    
    out->x = simd4f_div(a->x, b->x);
    out->y = simd4f_div(a->y, b->y);
    out->z = simd4f_div(a->z, b->z);
    out->w = simd4f_div(a->w, b->w);
    
}

vectorial_inline void simd4x4f_inverse(const simd4x4f* a, simd4x4f* out) {

    const simd4f c0 = a->x;
    const simd4f c1 = a->y;
    const simd4f c2 = a->z;
    const simd4f c3 = a->w;

    const simd4f c0_wxyz = simd4f_shuffle_wxyz(c0);
    const simd4f c0_zwxy = simd4f_shuffle_zwxy(c0);
    const simd4f c0_yzwx = simd4f_shuffle_yzwx(c0);

    const simd4f c1_wxyz = simd4f_shuffle_wxyz(c1);
    const simd4f c1_zwxy = simd4f_shuffle_zwxy(c1);
    const simd4f c1_yzwx = simd4f_shuffle_yzwx(c1);

    const simd4f c2_wxyz = simd4f_shuffle_wxyz(c2);
    const simd4f c2_zwxy = simd4f_shuffle_zwxy(c2);
    const simd4f c2_yzwx = simd4f_shuffle_yzwx(c2);

    const simd4f c3_wxyz = simd4f_shuffle_wxyz(c3);
    const simd4f c3_zwxy = simd4f_shuffle_zwxy(c3);
    const simd4f c3_yzwx = simd4f_shuffle_yzwx(c3);

    const simd4f c0_wxyz_x_c1 = simd4f_mul(c0_wxyz, c1);
    const simd4f c0_wxyz_x_c1_yzwx = simd4f_mul(c0_wxyz, c1_yzwx);
    const simd4f c0_wxyz_x_c1_zwxy = simd4f_mul(c0_wxyz, c1_zwxy);

    const simd4f c2_wxyz_x_c3 = simd4f_mul(c2_wxyz, c3);
    const simd4f c2_wxyz_x_c3_yzwx = simd4f_mul(c2_wxyz, c3_yzwx);
    const simd4f c2_wxyz_x_c3_zwxy = simd4f_mul(c2_wxyz, c3_zwxy);

    const simd4f ar1 = simd4f_sub( simd4f_shuffle_wxyz(c2_wxyz_x_c3_zwxy), simd4f_shuffle_zwxy(c2_wxyz_x_c3) );
    const simd4f ar2 = simd4f_sub( simd4f_shuffle_zwxy(c2_wxyz_x_c3_yzwx), c2_wxyz_x_c3_yzwx );
    const simd4f ar3 = simd4f_sub( c2_wxyz_x_c3_zwxy, simd4f_shuffle_wxyz(c2_wxyz_x_c3) );

    const simd4f br1 = simd4f_sub( simd4f_shuffle_wxyz(c0_wxyz_x_c1_zwxy), simd4f_shuffle_zwxy(c0_wxyz_x_c1) );
    const simd4f br2 = simd4f_sub( simd4f_shuffle_zwxy(c0_wxyz_x_c1_yzwx), c0_wxyz_x_c1_yzwx );
    const simd4f br3 = simd4f_sub( c0_wxyz_x_c1_zwxy, simd4f_shuffle_wxyz(c0_wxyz_x_c1) );


    const simd4f c0_sum = simd4f_madd(c0_yzwx, ar3,
                            simd4f_madd(c0_zwxy, ar2,
                              simd4f_mul(c0_wxyz, ar1)));

    const simd4f c1_sum = simd4f_madd(c1_wxyz,  ar1, 
                            simd4f_madd(c1_zwxy,  ar2, 
                              simd4f_mul(c1_yzwx, ar3)));

    const simd4f c2_sum = simd4f_madd(c2_yzwx, br3,
                            simd4f_madd(c2_zwxy, br2,
                              simd4f_mul(c2_wxyz, br1)));

    const simd4f c3_sum = simd4f_madd(c3_yzwx, br3,
                            simd4f_madd(c3_zwxy, br2,
                              simd4f_mul(c3_wxyz, br1)));


    const simd4f d0 = simd4f_mul(c1_sum, c0);
    const simd4f d1 = simd4f_add(d0, simd4f_merge_high(d0, d0));
    const simd4f det = simd4f_sub(d1, simd4f_splat_y(d1));

    const simd4f invdet = simd4f_splat_x( simd4f_div(simd4f_splat(1.0f), det) );

    const simd4f o0 = simd4f_mul( simd4f_flip_sign_0101(c1_sum), invdet );
    const simd4f o1 = simd4f_mul( simd4f_flip_sign_1010(c0_sum), invdet );
    const simd4f o2 = simd4f_mul( simd4f_flip_sign_0101(c3_sum), invdet );
    const simd4f o3 = simd4f_mul( simd4f_flip_sign_1010(c2_sum), invdet );

    const simd4x4f mt = simd4x4f_create(o0, o1, o2, o3);
    
    simd4x4f_transpose( &mt, out);


}


#ifdef __cplusplus

    #ifdef VECTORIAL_OSTREAM
        #include <ostream>

        vectorial_inline std::ostream& operator<<(std::ostream& os, const simd4x4f& v) {
            os << "simd4x4f(simd4f(" << simd4f_get_x(v.x) << ", "
                       << simd4f_get_y(v.x) << ", "
                       << simd4f_get_z(v.x) << ", "
                       << simd4f_get_w(v.x) << "),\n"
                       << "         simd4f(" << simd4f_get_x(v.y) << ", "
                       << simd4f_get_y(v.y) << ", "
                       << simd4f_get_z(v.y) << ", "
                       << simd4f_get_w(v.y) << "),\n"
                       << "         simd4f(" << simd4f_get_x(v.z) << ", "
                       << simd4f_get_y(v.z) << ", "
                       << simd4f_get_z(v.z) << ", "
                       << simd4f_get_w(v.z) << "),\n"
                       << "         simd4f(" << simd4f_get_x(v.w) << ", "
                       << simd4f_get_y(v.w) << ", "
                       << simd4f_get_z(v.w) << ", "
                       << simd4f_get_w(v.w) << "))";
            return os;
        }
    #endif

#endif





#endif 
Added jni/glshim/src/util/vectorial/simd4x4f_gnu.h.








































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4X4F_GNU_H
#define VECTORIAL_SIMD4X4F_GNU_H



vectorial_inline void simd4x4f_transpose_inplace(simd4x4f* s) {
    const _simd4f_union sx = { s->x };
    const _simd4f_union sy = { s->y };
    const _simd4f_union sz = { s->z };
    const _simd4f_union sw = { s->w };
    
    const simd4f dx = { sx.f[0], sy.f[0], sz.f[0], sw.f[0] };
    const simd4f dy = { sx.f[1], sy.f[1], sz.f[1], sw.f[1] };
    const simd4f dz = { sx.f[2], sy.f[2], sz.f[2], sw.f[2] };
    const simd4f dw = { sx.f[3], sy.f[3], sz.f[3], sw.f[3] };

    s->x = dx;
    s->y = dy;
    s->z = dz;
    s->w = dw;

}

vectorial_inline void simd4x4f_transpose(const simd4x4f *s, simd4x4f *out) {
    *out=*s;
    simd4x4f_transpose_inplace(out);
}



#endif
Added jni/glshim/src/util/vectorial/simd4x4f_neon.h.






































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4X4F_NEON_H
#define VECTORIAL_SIMD4X4F_NEON_H


vectorial_inline void simd4x4f_transpose_inplace(simd4x4f* s) {
    const _simd4f_union sx = { s->x };
    const _simd4f_union sy = { s->y };
    const _simd4f_union sz = { s->z };
    const _simd4f_union sw = { s->w };
    
    const simd4f dx = simd4f_create( sx.f[0], sy.f[0], sz.f[0], sw.f[0] );
    const simd4f dy = simd4f_create( sx.f[1], sy.f[1], sz.f[1], sw.f[1] );
    const simd4f dz = simd4f_create( sx.f[2], sy.f[2], sz.f[2], sw.f[2] );
    const simd4f dw = simd4f_create( sx.f[3], sy.f[3], sz.f[3], sw.f[3] );

    s->x = dx;
    s->y = dy;
    s->z = dz;
    s->w = dw;

}

vectorial_inline void simd4x4f_transpose(const simd4x4f *s, simd4x4f *out) {
    *out=*s;
    simd4x4f_transpose_inplace(out);
}



#endif
Added jni/glshim/src/util/vectorial/simd4x4f_scalar.h.


















































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4X4F_SCALAR_H
#define VECTORIAL_SIMD4X4F_SCALAR_H


vectorial_inline void simd4x4f_transpose_inplace(simd4x4f *s) {
    simd4x4f d=*s;
    s->x.x = d.x.x;
    s->x.y = d.y.x;
    s->x.z = d.z.x;
    s->x.w = d.w.x;

    s->y.x = d.x.y;
    s->y.y = d.y.y;
    s->y.z = d.z.y;
    s->y.w = d.w.y;

    s->z.x = d.x.z;
    s->z.y = d.y.z;
    s->z.z = d.z.z;
    s->z.w = d.w.z;

    s->w.x = d.x.w;
    s->w.y = d.y.w;
    s->w.z = d.z.w;
    s->w.w = d.w.w;

}

vectorial_inline void simd4x4f_transpose(const simd4x4f *s, simd4x4f *out) {
    *out=*s;
    simd4x4f_transpose_inplace(out);
}



#endif
Added jni/glshim/src/util/vectorial/simd4x4f_sse.h.














































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_SIMD4X4F_SSE_H
#define VECTORIAL_SIMD4X4F_SSE_H



vectorial_inline void simd4x4f_transpose_inplace(simd4x4f *s) {
    _MM_TRANSPOSE4_PS(s->x, s->y, s->z, s->w);
}

vectorial_inline void simd4x4f_transpose(const simd4x4f *s, simd4x4f *out) {
    *out=*s;
    simd4x4f_transpose_inplace(out);
}




#endif
Added jni/glshim/src/util/vectorial/vec2f.h.






























































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_VEC2F_H

#ifndef VECTORIAL_SIMD4F_H
  #include "vectorial/simd4f.h"
#endif



namespace vectorial {
    
    class vec4f;
    class vec3f;

    class vec2f {
    public:

        simd4f value;
    
        inline vec2f() {}
        inline vec2f(const vec2f& v) : value(v.value) {}
        inline vec2f(const simd4f& v) : value(v) {}
        explicit inline vec2f(float xy) : value( simd4f_splat(xy) ) {}
        inline vec2f(float x, float y) : value( simd4f_create(x,y,0,0) ) {}
        explicit inline vec2f(const float *ary) : value( simd4f_uload2(ary) ) { }
            
        inline float x() const { return simd4f_get_x(value); }
        inline float y() const { return simd4f_get_y(value); }

        inline void load(const float *ary) { value = simd4f_uload2(ary); }
        inline void store(float *ary) const { simd4f_ustore2(value, ary); }
    
        enum { elements = 2 };

        static vec2f zero() { return vec2f(simd4f_zero()); }
        static vec2f one() { return vec2f(1.0f); }
        static vec2f xAxis() { return vec2f(1.0f, 0.0f); }
        static vec2f yAxis() { return vec2f(0.0f, 1.0f); }

        inline vec4f xyzw(float z, float w) const;
        inline vec4f xy00() const;
        inline vec4f xy01() const;
        inline vec3f xyz(float z) const;
        inline vec3f xy0() const;
        inline vec2f xy() const;

    };

    vectorial_inline vec2f operator-(const vec2f& lhs) {
        return vec2f( simd4f_sub(simd4f_zero(), lhs.value) );
    }


    vectorial_inline vec2f operator+(const vec2f& lhs, const vec2f& rhs) {
        return vec2f( simd4f_add(lhs.value, rhs.value) );
    }

    vectorial_inline vec2f operator-(const vec2f& lhs, const vec2f& rhs) {
        return vec2f( simd4f_sub(lhs.value, rhs.value) );
    }

    vectorial_inline vec2f operator*(const vec2f& lhs, const vec2f& rhs) {
        return vec2f( simd4f_mul(lhs.value, rhs.value) );
    }

    vectorial_inline vec2f operator/(const vec2f& lhs, const vec2f& rhs) {
        return vec2f( simd4f_div(lhs.value, rhs.value) );
    }


    vectorial_inline vec2f operator+=(vec2f& lhs, const vec2f& rhs) {
        return lhs = vec2f( simd4f_add(lhs.value, rhs.value) );
    }

    vectorial_inline vec2f operator-=(vec2f& lhs, const vec2f& rhs) {
        return lhs = vec2f( simd4f_sub(lhs.value, rhs.value) );
    }

    vectorial_inline vec2f operator*=(vec2f& lhs, const vec2f& rhs) {
        return lhs = vec2f( simd4f_mul(lhs.value, rhs.value) );
    }

    vectorial_inline vec2f operator/=(vec2f& lhs, const vec2f& rhs) {
        return lhs = vec2f( simd4f_div(lhs.value, rhs.value) );
    }



    vectorial_inline vec2f operator+(const vec2f& lhs, float rhs) {
        return vec2f( simd4f_add(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator-(const vec2f& lhs, float rhs) {
        return vec2f( simd4f_sub(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator*(const vec2f& lhs, float rhs) {
        return vec2f( simd4f_mul(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator/(const vec2f& lhs, float rhs) {
        return vec2f( simd4f_div(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator+(float lhs, const vec2f& rhs) {
        return vec2f( simd4f_add(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec2f operator-(float lhs, const vec2f& rhs) {
        return vec2f( simd4f_sub(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec2f operator*(float lhs, const vec2f& rhs) {
        return vec2f( simd4f_mul(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec2f operator/(float lhs, const vec2f& rhs) {
        return vec2f( simd4f_div(simd4f_splat(lhs), rhs.value) );
    }


    vectorial_inline vec2f operator+=(vec2f& lhs, float rhs) {
        return lhs = vec2f( simd4f_add(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator-=(vec2f& lhs, float rhs) {
        return lhs = vec2f( simd4f_sub(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator*=(vec2f& lhs, float rhs) {
        return lhs = vec2f( simd4f_mul(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec2f operator/=(vec2f& lhs, float rhs) {
        return lhs = vec2f( simd4f_div(lhs.value, simd4f_splat(rhs)) );
    }


    vectorial_inline float dot(const vec2f& lhs, const vec2f& rhs) {
        return simd4f_get_x( simd4f_dot2(lhs.value, rhs.value) );
    }

    
    vectorial_inline float length(const vec2f& v) {
        return simd4f_get_x( simd4f_length2(v.value) );
    }

    vectorial_inline float length_squared(const vec2f& v) {
        return simd4f_get_x( simd4f_length2_squared(v.value) );
    }

    vectorial_inline vec2f normalize(const vec2f& v) {
        return vec2f( simd4f_normalize2(v.value) );
    }

    vectorial_inline vec2f min(const vec2f& a, const vec2f& b) {
        return vec2f( simd4f_min(a.value, b.value) );
    }

    vectorial_inline vec2f max(const vec2f& a, const vec2f& b) {
        return vec2f( simd4f_max(a.value, b.value) );
    }


}


namespace std {
    inline ::vectorial::vec2f min(const ::vectorial::vec2f& a, const ::vectorial::vec2f& b) { return ::vectorial::min(a,b); }
    inline ::vectorial::vec2f max(const ::vectorial::vec2f& a, const ::vectorial::vec2f& b) { return ::vectorial::max(a,b); }
}


#ifdef VECTORIAL_OSTREAM
#include <ostream>

vectorial_inline std::ostream& operator<<(std::ostream& os, const vectorial::vec2f& v) {
    os << "[ " << v.x() << ", "
               << v.y() << " ]";
    return os;
}
#endif




#endif
Added jni/glshim/src/util/vectorial/vec3f.h.








































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_VEC3F_H

#ifndef VECTORIAL_SIMD4F_H
  #include "vectorial/simd4f.h"
#endif



namespace vectorial {
    
    class vec4f;
    class vec2f;

    class vec3f {
    public:

        simd4f value;
    
        inline vec3f() {}
        inline vec3f(const vec3f& v) : value(v.value) {}
        inline vec3f(const simd4f& v) : value(v) {}
        explicit inline vec3f(float xyz) : value( simd4f_splat(xyz) ) {}
        inline vec3f(float x, float y, float z) : value( simd4f_create(x,y,z,0) ) {}
        explicit inline vec3f(const float *ary) : value( simd4f_uload3(ary) ) { }
            
        inline float x() const { return simd4f_get_x(value); }
        inline float y() const { return simd4f_get_y(value); }
        inline float z() const { return simd4f_get_z(value); }

        inline void load(const float *ary) { value = simd4f_uload3(ary); }
        inline void store(float *ary) const { simd4f_ustore3(value, ary); }
    
        enum { elements = 3 };

        static vec3f zero() { return vec3f(simd4f_zero()); }
        static vec3f one() { return vec3f(1.0f); }
        static vec3f xAxis() { return vec3f(1.0f, 0.0f, 0.0f); }
        static vec3f yAxis() { return vec3f(0.0f, 1.0f, 0.0f); }
        static vec3f zAxis() { return vec3f(0.0f, 0.0f, 1.0f); }

        inline vec4f xyz0() const;
        inline vec4f xyz1() const;
        inline vec4f xyzw(float w) const;
        inline vec3f xyz() const;
        inline vec3f xy0() const;
        inline vec2f xy() const;
    };

    vectorial_inline vec3f operator-(const vec3f& lhs) {
        return vec3f( simd4f_sub(simd4f_zero(), lhs.value) );
    }
    

    vectorial_inline vec3f operator+(const vec3f& lhs, const vec3f& rhs) {
        return vec3f( simd4f_add(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f operator-(const vec3f& lhs, const vec3f& rhs) {
        return vec3f( simd4f_sub(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f operator*(const vec3f& lhs, const vec3f& rhs) {
        return vec3f( simd4f_mul(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f operator/(const vec3f& lhs, const vec3f& rhs) {
        return vec3f( simd4f_div(lhs.value, rhs.value) );
    }


    vectorial_inline vec3f operator+=(vec3f& lhs, const vec3f& rhs) {
        return lhs = vec3f( simd4f_add(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f operator-=(vec3f& lhs, const vec3f& rhs) {
        return lhs = vec3f( simd4f_sub(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f operator*=(vec3f& lhs, const vec3f& rhs) {
        return lhs = vec3f( simd4f_mul(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f operator/=(vec3f& lhs, const vec3f& rhs) {
        return lhs = vec3f( simd4f_div(lhs.value, rhs.value) );
    }



    vectorial_inline vec3f operator+(const vec3f& lhs, float rhs) {
        return vec3f( simd4f_add(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator-(const vec3f& lhs, float rhs) {
        return vec3f( simd4f_sub(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator*(const vec3f& lhs, float rhs) {
        return vec3f( simd4f_mul(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator/(const vec3f& lhs, float rhs) {
        return vec3f( simd4f_div(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator+(float lhs, const vec3f& rhs) {
        return vec3f( simd4f_add(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec3f operator-(float lhs, const vec3f& rhs) {
        return vec3f( simd4f_sub(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec3f operator*(float lhs, const vec3f& rhs) {
        return vec3f( simd4f_mul(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec3f operator/(float lhs, const vec3f& rhs) {
        return vec3f( simd4f_div(simd4f_splat(lhs), rhs.value) );
    }


    vectorial_inline vec3f operator+=(vec3f& lhs, float rhs) {
        return lhs = vec3f( simd4f_add(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator-=(vec3f& lhs, float rhs) {
        return lhs = vec3f( simd4f_sub(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator*=(vec3f& lhs, float rhs) {
        return lhs = vec3f( simd4f_mul(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec3f operator/=(vec3f& lhs, float rhs) {
        return lhs = vec3f( simd4f_div(lhs.value, simd4f_splat(rhs)) );
    }


    vectorial_inline float dot(const vec3f& lhs, const vec3f& rhs) {
        return simd4f_get_x( simd4f_dot3(lhs.value, rhs.value) );
    }

    vectorial_inline vec3f cross(const vec3f& lhs, const vec3f& rhs) {
        return simd4f_cross3(lhs.value, rhs.value);
    }
    
    
    vectorial_inline float length(const vec3f& v) {
        return simd4f_get_x( simd4f_length3(v.value) );
    }

    vectorial_inline float length_squared(const vec3f& v) {
        return simd4f_get_x( simd4f_length3_squared(v.value) );
    }

    vectorial_inline vec3f normalize(const vec3f& v) {
        return vec3f( simd4f_normalize3(v.value) );
    }

    vectorial_inline vec3f min(const vec3f& a, const vec3f& b) {
        return vec3f( simd4f_min(a.value, b.value) );
    }

    vectorial_inline vec3f max(const vec3f& a, const vec3f& b) {
        return vec3f( simd4f_max(a.value, b.value) );
    }

}


namespace std {
    inline ::vectorial::vec3f min(const ::vectorial::vec3f& a, const ::vectorial::vec3f& b) { return ::vectorial::min(a,b); }
    inline ::vectorial::vec3f max(const ::vectorial::vec3f& a, const ::vectorial::vec3f& b) { return ::vectorial::max(a,b); }
}


#ifdef VECTORIAL_OSTREAM
#include <ostream>

vectorial_inline std::ostream& operator<<(std::ostream& os, const vectorial::vec3f& v) {
    os << "[ " << v.x() << ", "
               << v.y() << ", "
               << v.z() << " ]";
    return os;
}
#endif




#endif
Added jni/glshim/src/util/vectorial/vec4f.h.






































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_VEC4F_H
#define VECTORIAL_VEC4F_H

#ifndef VECTORIAL_SIMD4F_H
  #include "vectorial/simd4f.h"
#endif



namespace vectorial {
    
    class vec3f;
    class vec2f;

    class vec4f {
    public:

        simd4f value;
    
        inline vec4f() {}
        inline vec4f(const vec4f& v) : value(v.value) {}
        inline vec4f(const simd4f& v) : value(v) {}
        explicit inline vec4f(float xyzw) : value( simd4f_splat(xyzw) ) {}
        inline vec4f(float x, float y, float z, float w) : value( simd4f_create(x,y,z,w) ) {}
        explicit inline vec4f(const float *ary) : value( simd4f_uload4(ary) ) { }
            
        inline float x() const { return simd4f_get_x(value); }
        inline float y() const { return simd4f_get_y(value); }
        inline float z() const { return simd4f_get_z(value); }
        inline float w() const { return simd4f_get_w(value); }

        inline void load(const float *ary) { value = simd4f_uload4(ary); }
        inline void store(float *ary) const { simd4f_ustore4(value, ary); }
        
        enum { elements = 4 };


        static vec4f zero() { return vec4f(simd4f_zero()); }
        static vec4f one() { return vec4f(1.0f); }
        static vec4f xAxis() { return vec4f(1.0f, 0.0f, 0.0f, 0.0f); }
        static vec4f yAxis() { return vec4f(0.0f, 1.0f, 0.0f, 0.0f); }
        static vec4f zAxis() { return vec4f(0.0f, 0.0f, 1.0f, 0.0f); }
        static vec4f wAxis() { return vec4f(0.0f, 0.0f, 0.0f, 1.0f); }


        inline vec3f xyz() const;
        inline vec2f xy() const;

    };


    vectorial_inline vec4f operator-(const vec4f& lhs) {
        return vec4f( simd4f_sub(simd4f_zero(), lhs.value) );
    }


    vectorial_inline vec4f operator+(const vec4f& lhs, const vec4f& rhs) {
        return vec4f( simd4f_add(lhs.value, rhs.value) );
    }

    vectorial_inline vec4f operator-(const vec4f& lhs, const vec4f& rhs) {
        return vec4f( simd4f_sub(lhs.value, rhs.value) );
    }

    vectorial_inline vec4f operator*(const vec4f& lhs, const vec4f& rhs) {
        return vec4f( simd4f_mul(lhs.value, rhs.value) );
    }

    vectorial_inline vec4f operator/(const vec4f& lhs, const vec4f& rhs) {
        return vec4f( simd4f_div(lhs.value, rhs.value) );
    }


    vectorial_inline vec4f operator+=(vec4f& lhs, const vec4f& rhs) {
        return lhs = vec4f( simd4f_add(lhs.value, rhs.value) );
    }

    vectorial_inline vec4f operator-=(vec4f& lhs, const vec4f& rhs) {
        return lhs = vec4f( simd4f_sub(lhs.value, rhs.value) );
    }

    vectorial_inline vec4f operator*=(vec4f& lhs, const vec4f& rhs) {
        return lhs = vec4f( simd4f_mul(lhs.value, rhs.value) );
    }

    vectorial_inline vec4f operator/=(vec4f& lhs, const vec4f& rhs) {
        return lhs = vec4f( simd4f_div(lhs.value, rhs.value) );
    }



    vectorial_inline vec4f operator+(const vec4f& lhs, float rhs) {
        return vec4f( simd4f_add(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator-(const vec4f& lhs, float rhs) {
        return vec4f( simd4f_sub(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator*(const vec4f& lhs, float rhs) {
        return vec4f( simd4f_mul(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator/(const vec4f& lhs, float rhs) {
        return vec4f( simd4f_div(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator+(float lhs, const vec4f& rhs) {
        return vec4f( simd4f_add(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec4f operator-(float lhs, const vec4f& rhs) {
        return vec4f( simd4f_sub(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec4f operator*(float lhs, const vec4f& rhs) {
        return vec4f( simd4f_mul(simd4f_splat(lhs), rhs.value) );
    }

    vectorial_inline vec4f operator/(float lhs, const vec4f& rhs) {
        return vec4f( simd4f_div(simd4f_splat(lhs), rhs.value) );
    }


    vectorial_inline vec4f operator+=(vec4f& lhs, float rhs) {
        return lhs = vec4f( simd4f_add(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator-=(vec4f& lhs, float rhs) {
        return lhs = vec4f( simd4f_sub(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator*=(vec4f& lhs, float rhs) {
        return lhs = vec4f( simd4f_mul(lhs.value, simd4f_splat(rhs)) );
    }

    vectorial_inline vec4f operator/=(vec4f& lhs, float rhs) {
        return lhs = vec4f( simd4f_div(lhs.value, simd4f_splat(rhs)) );
    }


    vectorial_inline float dot(const vec4f& lhs, const vec4f& rhs) {
        return simd4f_get_x( simd4f_dot4(lhs.value, rhs.value) );
    }
    
    
    vectorial_inline float length(const vec4f& v) {
        return simd4f_get_x( simd4f_length4(v.value) );
    }

    vectorial_inline float length_squared(const vec4f& v) {
        return simd4f_get_x( simd4f_length4_squared(v.value) );
    }

    vectorial_inline vec4f normalize(const vec4f& v) {
        return vec4f( simd4f_normalize4(v.value) );
    }

    vectorial_inline vec4f min(const vec4f& a, const vec4f& b) {
        return vec4f( simd4f_min(a.value, b.value) );
    }

    vectorial_inline vec4f max(const vec4f& a, const vec4f& b) {
        return vec4f( simd4f_max(a.value, b.value) );
    }


}


namespace std {
    inline ::vectorial::vec4f min(const ::vectorial::vec4f& a, const ::vectorial::vec4f& b) { return ::vectorial::min(a,b); }
    inline ::vectorial::vec4f max(const ::vectorial::vec4f& a, const ::vectorial::vec4f& b) { return ::vectorial::max(a,b); }
}


#ifdef VECTORIAL_OSTREAM
#include <ostream>

vectorial_inline std::ostream& operator<<(std::ostream& os, const vectorial::vec4f& v) {
    os << "[ " << v.x() << ", "
               << v.y() << ", "
               << v.z() << ", "
               << v.w() << " ]";
    return os;
}
#endif


#endif
Added jni/glshim/src/util/vectorial/vec_convert.h.






























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_VEC_CONVERT_H
#define VECTORIAL_VEC_CONVERT_H


namespace vectorial {
    
    inline vec3f vec4f::xyz() const { return vec3f(value); }
    inline vec2f vec4f::xy() const { return vec2f(value); }

    inline vec4f vec3f::xyz0() const { return vec4f(simd4f_zero_w(value)); }
    inline vec4f vec3f::xyz1() const { return xyz0() + vec4f(0.0f, 0.0f, 0.0f, 1.0f); }
    inline vec4f vec3f::xyzw(float w) const { return xyz0() + vec4f(0.0f, 0.0f, 0.0f, w); }
    inline vec3f vec3f::xyz() const { return vec3f(value); }
    inline vec3f vec3f::xy0() const { return vec3f(value) * vec3f(1.0f, 1.0f, 0.0f); }
    inline vec2f vec3f::xy() const { return vec2f(value); }

    inline vec4f vec2f::xy00() const { return vec4f(simd4f_zero_zw(value)); }
    inline vec4f vec2f::xy01() const { return xy00() + vec4f(0.0f, 0.0f, 0.0f, 1.0f); }
    inline vec4f vec2f::xyzw(float z, float w) const { return xy00() + vec4f(0.0f, 0.0f, z, w); }
    inline vec3f vec2f::xy0() const { return vec3f(simd4f_zero_zw(value)); }
    inline vec2f vec2f::xy() const { return vec2f(value); }

}


#endif
Added jni/glshim/src/util/vectorial/vectorial.h.






































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
  Vectorial
  Copyright (c) 2010 Mikko Lehtonen
  Licensed under the terms of the two-clause BSD License (see LICENSE)
*/
#ifndef VECTORIAL_VECTORIAL_H
#define VECTORIAL_VECTORIAL_H


#include "vectorial/vec2f.h"
#include "vectorial/vec3f.h"
#include "vectorial/vec4f.h"

#include "vectorial/vec_convert.h"

#include "vectorial/mat4f.h"


#endif
Added jni/glshim/test/requirements.txt.




>
>
1
2
Jinja2
blessings
Added jni/glshim/test/run.








>
>
>
>
1
2
3
4
#!/bin/bash -u

cd $(dirname "$0")
python util/run.py --project="$(pwd)/.." --base "$(pwd)/tests" "$@"
Added jni/glshim/test/tests/array/skip.c.






















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int main() {
#define STRIDE 0, 0, 0, 0, 0, 0, 0, 0, 0
    GLfloat vert[] = {
        0, 0, 0, STRIDE,
        1, 1, 1, STRIDE,
        2, 2, 2, STRIDE,
        3, 3, 3, STRIDE,
        4, 4, 4, STRIDE,
        5, 5, 5, STRIDE,
    };
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 12 * sizeof(GLfloat), vert);
    glDrawArrays(GL_QUADS, 2, 4);

    GLfloat vert_out[] = {
        2, 2, 2,
        3, 3, 3,
        4, 4, 4,
        5, 5, 5,
    };
    GLushort indices[] = {0, 1, 3, 1, 2, 3};
    test_glEnableClientState(GL_VERTEX_ARRAY);
    test_glVertexPointer(3, GL_FLOAT, 12 * 4, vert);
    test_glVertexPointer(3, GL_FLOAT, 0, vert_out);
    test_glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
    mock_return;
}
Added jni/glshim/test/tests/block/quads.c.








































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
int main() {
    glBegin(GL_QUADS);
    glColor4f(0, 0.1, 0.2, 0.3);
    glTexCoord2f(0.4, 0.5);
    glVertex3f(0, 1, 2);
    glVertex3f(3, 4, 5);
    glVertex3f(6, 7, 8);
    glVertex3f(9, 10, 11);
    glEnd();

    GLfloat verts[] = {
        0, 1, 2,
        3, 4, 5,
        6, 7, 8,
        9, 10, 11,
    };

    GLfloat color[] = {
        0, 0.1, 0.2, 0.3,
        0, 0.1, 0.2, 0.3,
        0, 0.1, 0.2, 0.3,
        0, 0.1, 0.2, 0.3,
    };

    GLfloat tex[] = {
        0.4, 0.5,
        0.4, 0.5,
        0.4, 0.5,
        0.4, 0.5,
    };

    GLushort indices[] = {
        0, 1, 3,
        1, 2, 3,
    };

    // TODO: out of order glEnableClientState?
    test_glColor4f(0.0, 0.1, 0.2, 0.3);

    test_glEnableClientState(GL_VERTEX_ARRAY);
    test_glVertexPointer(3, GL_FLOAT, 0, verts);
    test_glEnableClientState(GL_COLOR_ARRAY);
    test_glColorPointer(4, GL_FLOAT, 0, color);
    test_glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    test_glTexCoordPointer(2, GL_FLOAT, 0, tex);
    test_glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);

    test_glDisableClientState(GL_VERTEX_ARRAY);
    test_glDisableClientState(GL_COLOR_ARRAY);
    test_glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    mock_return;
}
Added jni/glshim/test/tests/block/rect.c.




































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main() {
    for (int i = 0; i < 3; i++) {
        glRectf(0, 0, 1, 1);

        test_glEnableClientState(GL_VERTEX_ARRAY);
        // TODO: pointers are skipped in verification
        GLfloat verts[] = {
            0, 0, 0,
            1, 0, 0,
            1, 1, 0,
            0, 1, 0,
        };
        test_glVertexPointer(3, GL_FLOAT, 0, verts);
        test_glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
        test_glDisableClientState(GL_VERTEX_ARRAY);
    }
    mock_return;
}
Added jni/glshim/test/tests/block/tri.c.




































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main() {
    glBegin(GL_TRIANGLES);
    glVertex3f(0, 1, 2);
    glVertex3f(3, 4, 5);
    glVertex3f(6, 7, 8);
    glEnd();

    test_glEnableClientState(GL_VERTEX_ARRAY);
    GLfloat verts[] = {
        0, 1, 2,
        3, 4, 5,
        6, 7, 8,
    };
    test_glVertexPointer(3, GL_FLOAT, 0, verts);
    test_glDrawArrays(GL_TRIANGLES, 0, 3);
    test_glDisableClientState(GL_VERTEX_ARRAY);
    mock_return;
}
Added jni/glshim/test/tests/list/nested.c.




























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int main() {
    GLuint list = glGenLists(3);
    glNewList(list, GL_COMPILE);
    glRectf(0, 0, 1, 1);
    glEndList();

    glNewList(list + 1, GL_COMPILE);
    glCallList(list);
    glEndList();

    glNewList(list + 2, GL_COMPILE);
    glCallList(list + 1);
    glEndList();

    glCallList(list + 2);

    GLfloat verts[] = {
        0, 0, 0,
        1, 0, 0,
        1, 1, 0,
        0, 1, 0,
    };

    test_glEnableClientState(GL_VERTEX_ARRAY);
    test_glVertexPointer(3, GL_FLOAT, 0, verts);
    test_glDrawArrays(6, 0, 4);
    test_glDisableClientState(GL_VERTEX_ARRAY);

    mock_return;
}
Added jni/glshim/test/tests/list/new.c.












>
>
>
>
>
>
1
2
3
4
5
6
int main() {
    int list = glGenLists(1);
    glNewList(list, GL_COMPILE);
    mock_assert(state.list.active, "glNewList failed\n");
    mock_return;
}
Added jni/glshim/test/tests/meta/test.py.








































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os
import sys

def walk(base):
    for root, _, files in os.walk(base):
        for name in files:
            yield os.path.join(root, name)

if __name__ == '__main__':
    failed = False
    for name in walk('tests'):
        if name.endswith('.c'):
            with open(name, 'r') as f:
                data = f.read()
            if not 'mock_return;' in data:
                print 'ERROR: "{}" has no mock_return;'.format(name)
                failed = True

    if failed:
        sys.exit(1)
Added jni/glshim/test/tests/render/feedback.c.






































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "tack.h"

int main() {
    GLfloat buffer[4096];
    glFeedbackBuffer(4096, GL_2D, buffer);
    glRenderMode(GL_FEEDBACK);

    glPassThrough(7);
    glRectf(0, 0, 1, 1);

    int size = glRenderMode(GL_RENDER);
    assert(size == 15);

    GLfloat *pos = buffer;
#define _(val) assert(*pos++ == val)
    _(GL_PASS_THROUGH_TOKEN);
    _(7.0f);
    _(GL_POLYGON_TOKEN);
    _(3.0f);
    _(1.0f);
    _(0.0f);
    _(1.0f);
    _(1.0f);
    _(0.0f);
    _(0.0f);
    _(GL_POLYGON_TOKEN);
    _(3.0f);
    _(1.0f);
    _(1.0f);
    _(0.0f);
    _(1.0f);
    _(0.0f);
    _(0.0f);
    mock_return;
}
Added jni/glshim/test/tests/state/default.c.


































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define check(name, ...) { \
    GLfloat tmp[] = __VA_ARGS__; \
    assert(memcmp(state.name, tmp, sizeof(tmp)) == 0);}

int main() {
    check(current.color, {1.0f, 1.0f, 1.0f, 1.0f});
    check(current.normal, {0.0f, 0.0f, 1.0f});
    for (int i = 0; i < MAX_TEX; i++) {
        check(current.tex[i], {0, 0});
        texgen_state_t *t = &state.texgen[i];
        assert(t->R == GL_EYE_LINEAR);
        assert(t->Q == GL_EYE_LINEAR);
        assert(t->S == GL_EYE_LINEAR);
        assert(t->T == GL_EYE_LINEAR);
    }
    mock_return;
}
Added jni/glshim/test/tests/util/gl_str.c.




















>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
#include "gl_str.h"

int main() {
#define check(func, name) assert(strcmp(func(name), #name) == 0);
    check(gl_str_primitive, GL_QUADS);
    check(gl_str, GL_FLOAT);
    check(gl_bits_glPushClientAttrib, GL_CLIENT_ALL_ATTRIB_BITS);
    check(gl_bits_glPushAttrib, GL_CURRENT_BIT | GL_POINT_BIT);
    mock_return;
}
Added jni/glshim/test/tests/util/tack.c.




























































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int main() {
    tack_t stack = {0};
    tack_push(&stack, 1);
    assert(tack_peek(&stack) == 1);
    assert(tack_len(&stack) == 1);

    tack_push(&stack, 2);
    tack_push(&stack, 3);
    assert(tack_get(&stack, 0) == 1);
    assert(tack_peek(&stack) == 3);
    assert(tack_pop(&stack) == 3);
    assert(tack_peek(&stack) == 2);

    tack_clear(&stack);
    assert(tack_len(&stack) == 0);

    for (int i = 0; i < 10000; i++) {
        tack_push(&stack, i);
        assert(tack_peek(&stack) == i);
    }
    for (int i = 0; i < 10000; i++) {
        assert(tack_shift(&stack) == i);
    }

    tack_clear(&stack);
    tack_set(&stack, 1, "test");
    assert(tack_get(&stack, 0) == NULL);
    assert(strcmp(tack_get(&stack, 1), "test") == 0);
    mock_return;
}
Added jni/glshim/test/util/mock.c.
























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
#include "mock.h"

#include <stdio.h>
#include "tack.h"

static tack_t mock = {0};

const char *mock_name(int func) {
    switch (func) {
                case glActiveTexture_INDEX: return "glActiveTexture";
                case glAlphaFunc_INDEX: return "glAlphaFunc";
                case glAlphaFuncx_INDEX: return "glAlphaFuncx";
                case glBindBuffer_INDEX: return "glBindBuffer";
                case glBindTexture_INDEX: return "glBindTexture";
                case glBlendColorOES_INDEX: return "glBlendColorOES";
                case glBlendEquationOES_INDEX: return "glBlendEquationOES";
                case glBlendEquationSeparateOES_INDEX: return "glBlendEquationSeparateOES";
                case glBlendFunc_INDEX: return "glBlendFunc";
                case glBlendFuncSeparateOES_INDEX: return "glBlendFuncSeparateOES";
                case glBufferData_INDEX: return "glBufferData";
                case glBufferSubData_INDEX: return "glBufferSubData";
                case glClear_INDEX: return "glClear";
                case glClearColor_INDEX: return "glClearColor";
                case glClearColorx_INDEX: return "glClearColorx";
                case glClearDepthf_INDEX: return "glClearDepthf";
                case glClearDepthx_INDEX: return "glClearDepthx";
                case glClearStencil_INDEX: return "glClearStencil";
                case glClientActiveTexture_INDEX: return "glClientActiveTexture";
                case glClipPlanef_INDEX: return "glClipPlanef";
                case glClipPlanex_INDEX: return "glClipPlanex";
                case glColor4f_INDEX: return "glColor4f";
                case glColor4ub_INDEX: return "glColor4ub";
                case glColor4x_INDEX: return "glColor4x";
                case glColorMask_INDEX: return "glColorMask";
                case glColorPointer_INDEX: return "glColorPointer";
                case glCompressedTexImage2D_INDEX: return "glCompressedTexImage2D";
                case glCompressedTexSubImage2D_INDEX: return "glCompressedTexSubImage2D";
                case glCopyTexImage2D_INDEX: return "glCopyTexImage2D";
                case glCopyTexSubImage2D_INDEX: return "glCopyTexSubImage2D";
                case glCullFace_INDEX: return "glCullFace";
                case glDeleteBuffers_INDEX: return "glDeleteBuffers";
                case glDeleteTextures_INDEX: return "glDeleteTextures";
                case glDepthFunc_INDEX: return "glDepthFunc";
                case glDepthMask_INDEX: return "glDepthMask";
                case glDepthRangef_INDEX: return "glDepthRangef";
                case glDepthRangex_INDEX: return "glDepthRangex";
                case glDisable_INDEX: return "glDisable";
                case glDisableClientState_INDEX: return "glDisableClientState";
                case glDrawArrays_INDEX: return "glDrawArrays";
                case glDrawElements_INDEX: return "glDrawElements";
                case glEnable_INDEX: return "glEnable";
                case glEnableClientState_INDEX: return "glEnableClientState";
                case glFinish_INDEX: return "glFinish";
                case glFlush_INDEX: return "glFlush";
                case glFogf_INDEX: return "glFogf";
                case glFogfv_INDEX: return "glFogfv";
                case glFogx_INDEX: return "glFogx";
                case glFogxv_INDEX: return "glFogxv";
                case glFrontFace_INDEX: return "glFrontFace";
                case glFrustumf_INDEX: return "glFrustumf";
                case glFrustumx_INDEX: return "glFrustumx";
                case glGenBuffers_INDEX: return "glGenBuffers";
                case glGenTextures_INDEX: return "glGenTextures";
                case glGetBooleanv_INDEX: return "glGetBooleanv";
                case glGetBufferParameteriv_INDEX: return "glGetBufferParameteriv";
                case glGetClipPlanef_INDEX: return "glGetClipPlanef";
                case glGetClipPlanex_INDEX: return "glGetClipPlanex";
                case glGetError_INDEX: return "glGetError";
                case glGetFixedv_INDEX: return "glGetFixedv";
                case glGetFloatv_INDEX: return "glGetFloatv";
                case glGetIntegerv_INDEX: return "glGetIntegerv";
                case glGetLightfv_INDEX: return "glGetLightfv";
                case glGetLightxv_INDEX: return "glGetLightxv";
                case glGetMaterialfv_INDEX: return "glGetMaterialfv";
                case glGetMaterialxv_INDEX: return "glGetMaterialxv";
                case glGetPointerv_INDEX: return "glGetPointerv";
                case glGetString_INDEX: return "glGetString";
                case glGetTexEnvfv_INDEX: return "glGetTexEnvfv";
                case glGetTexEnviv_INDEX: return "glGetTexEnviv";
                case glGetTexEnvxv_INDEX: return "glGetTexEnvxv";
                case glGetTexParameterfv_INDEX: return "glGetTexParameterfv";
                case glGetTexParameteriv_INDEX: return "glGetTexParameteriv";
                case glGetTexParameterxv_INDEX: return "glGetTexParameterxv";
                case glHint_INDEX: return "glHint";
                case glIsBuffer_INDEX: return "glIsBuffer";
                case glIsEnabled_INDEX: return "glIsEnabled";
                case glIsTexture_INDEX: return "glIsTexture";
                case glLightModelf_INDEX: return "glLightModelf";
                case glLightModelfv_INDEX: return "glLightModelfv";
                case glLightModelx_INDEX: return "glLightModelx";
                case glLightModelxv_INDEX: return "glLightModelxv";
                case glLightf_INDEX: return "glLightf";
                case glLightfv_INDEX: return "glLightfv";
                case glLightx_INDEX: return "glLightx";
                case glLightxv_INDEX: return "glLightxv";
                case glLineWidth_INDEX: return "glLineWidth";
                case glLineWidthx_INDEX: return "glLineWidthx";
                case glLoadIdentity_INDEX: return "glLoadIdentity";
                case glLoadMatrixf_INDEX: return "glLoadMatrixf";
                case glLoadMatrixx_INDEX: return "glLoadMatrixx";
                case glLogicOp_INDEX: return "glLogicOp";
                case glMaterialf_INDEX: return "glMaterialf";
                case glMaterialfv_INDEX: return "glMaterialfv";
                case glMaterialx_INDEX: return "glMaterialx";
                case glMaterialxv_INDEX: return "glMaterialxv";
                case glMatrixMode_INDEX: return "glMatrixMode";
                case glMultMatrixf_INDEX: return "glMultMatrixf";
                case glMultMatrixx_INDEX: return "glMultMatrixx";
                case glMultiTexCoord4f_INDEX: return "glMultiTexCoord4f";
                case glMultiTexCoord4x_INDEX: return "glMultiTexCoord4x";
                case glNormal3f_INDEX: return "glNormal3f";
                case glNormal3x_INDEX: return "glNormal3x";
                case glNormalPointer_INDEX: return "glNormalPointer";
                case glOrthof_INDEX: return "glOrthof";
                case glOrthox_INDEX: return "glOrthox";
                case glPixelStorei_INDEX: return "glPixelStorei";
                case glPointParameterf_INDEX: return "glPointParameterf";
                case glPointParameterfv_INDEX: return "glPointParameterfv";
                case glPointParameterx_INDEX: return "glPointParameterx";
                case glPointParameterxv_INDEX: return "glPointParameterxv";
                case glPointSize_INDEX: return "glPointSize";
                case glPointSizePointerOES_INDEX: return "glPointSizePointerOES";
                case glPointSizex_INDEX: return "glPointSizex";
                case glPolygonOffset_INDEX: return "glPolygonOffset";
                case glPolygonOffsetx_INDEX: return "glPolygonOffsetx";
                case glPopMatrix_INDEX: return "glPopMatrix";
                case glPushMatrix_INDEX: return "glPushMatrix";
                case glReadPixels_INDEX: return "glReadPixels";
                case glRotatef_INDEX: return "glRotatef";
                case glRotatex_INDEX: return "glRotatex";
                case glSampleCoverage_INDEX: return "glSampleCoverage";
                case glSampleCoveragex_INDEX: return "glSampleCoveragex";
                case glScalef_INDEX: return "glScalef";
                case glScalex_INDEX: return "glScalex";
                case glScissor_INDEX: return "glScissor";
                case glShadeModel_INDEX: return "glShadeModel";
                case glStencilFunc_INDEX: return "glStencilFunc";
                case glStencilMask_INDEX: return "glStencilMask";
                case glStencilOp_INDEX: return "glStencilOp";
                case glTexCoordPointer_INDEX: return "glTexCoordPointer";
                case glTexEnvf_INDEX: return "glTexEnvf";
                case glTexEnvfv_INDEX: return "glTexEnvfv";
                case glTexEnvi_INDEX: return "glTexEnvi";
                case glTexEnviv_INDEX: return "glTexEnviv";
                case glTexEnvx_INDEX: return "glTexEnvx";
                case glTexEnvxv_INDEX: return "glTexEnvxv";
                case glTexImage2D_INDEX: return "glTexImage2D";
                case glTexParameterf_INDEX: return "glTexParameterf";
                case glTexParameterfv_INDEX: return "glTexParameterfv";
                case glTexParameteri_INDEX: return "glTexParameteri";
                case glTexParameteriv_INDEX: return "glTexParameteriv";
                case glTexParameterx_INDEX: return "glTexParameterx";
                case glTexParameterxv_INDEX: return "glTexParameterxv";
                case glTexSubImage2D_INDEX: return "glTexSubImage2D";
                case glTranslatef_INDEX: return "glTranslatef";
                case glTranslatex_INDEX: return "glTranslatex";
                case glVertexPointer_INDEX: return "glVertexPointer";
                case glViewport_INDEX: return "glViewport";
            }
}

void mock_print(const indexed_call_t *packed) {
    if (packed == NULL) {
        printf("NULL()\n");
        return;
    }
    switch (packed->func) {
                case glActiveTexture_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glActiveTexture(0x%04X);\n", args.a1);
            break;
        }
                case glAlphaFunc_INDEX: {
            INDEXED_void_GLenum_GLclampf *unpacked = (INDEXED_void_GLenum_GLclampf *)packed;
                        ARGS_void_GLenum_GLclampf args = unpacked->args;
                        printf("glAlphaFunc(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glAlphaFuncx_INDEX: {
            INDEXED_void_GLenum_GLclampx *unpacked = (INDEXED_void_GLenum_GLclampx *)packed;
                        ARGS_void_GLenum_GLclampx args = unpacked->args;
                        printf("glAlphaFuncx(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glBindBuffer_INDEX: {
            INDEXED_void_GLenum_GLuint *unpacked = (INDEXED_void_GLenum_GLuint *)packed;
                        ARGS_void_GLenum_GLuint args = unpacked->args;
                        printf("glBindBuffer(0x%04X, %u);\n", args.a1, args.a2);
            break;
        }
                case glBindTexture_INDEX: {
            INDEXED_void_GLenum_GLuint *unpacked = (INDEXED_void_GLenum_GLuint *)packed;
                        ARGS_void_GLenum_GLuint args = unpacked->args;
                        printf("glBindTexture(0x%04X, %u);\n", args.a1, args.a2);
            break;
        }
                case glBlendColorOES_INDEX: {
            INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf *unpacked = (INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf args = unpacked->args;
                        printf("glBlendColorOES(%p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glBlendEquationOES_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glBlendEquationOES(0x%04X);\n", args.a1);
            break;
        }
                case glBlendEquationSeparateOES_INDEX: {
            INDEXED_void_GLenum_GLenum *unpacked = (INDEXED_void_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum args = unpacked->args;
                        printf("glBlendEquationSeparateOES(0x%04X, 0x%04X);\n", args.a1, args.a2);
            break;
        }
                case glBlendFunc_INDEX: {
            INDEXED_void_GLenum_GLenum *unpacked = (INDEXED_void_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum args = unpacked->args;
                        printf("glBlendFunc(0x%04X, 0x%04X);\n", args.a1, args.a2);
            break;
        }
                case glBlendFuncSeparateOES_INDEX: {
            INDEXED_void_GLenum_GLenum_GLenum_GLenum *unpacked = (INDEXED_void_GLenum_GLenum_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum_GLenum_GLenum args = unpacked->args;
                        printf("glBlendFuncSeparateOES(0x%04X, 0x%04X, 0x%04X, 0x%04X);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glBufferData_INDEX: {
            INDEXED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum *unpacked = (INDEXED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum *)packed;
                        ARGS_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum args = unpacked->args;
                        printf("glBufferData(0x%04X, %d, %p, 0x%04X);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glBufferSubData_INDEX: {
            INDEXED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glBufferSubData(0x%04X, %d, %d, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glClear_INDEX: {
            INDEXED_void_GLbitfield *unpacked = (INDEXED_void_GLbitfield *)packed;
                        ARGS_void_GLbitfield args = unpacked->args;
                        printf("glClear(%d);\n", args.a1);
            break;
        }
                case glClearColor_INDEX: {
            INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf *unpacked = (INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf_GLclampf_GLclampf args = unpacked->args;
                        printf("glClearColor(%p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glClearColorx_INDEX: {
            INDEXED_void_GLclampx_GLclampx_GLclampx_GLclampx *unpacked = (INDEXED_void_GLclampx_GLclampx_GLclampx_GLclampx *)packed;
                        ARGS_void_GLclampx_GLclampx_GLclampx_GLclampx args = unpacked->args;
                        printf("glClearColorx(%p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glClearDepthf_INDEX: {
            INDEXED_void_GLclampf *unpacked = (INDEXED_void_GLclampf *)packed;
                        ARGS_void_GLclampf args = unpacked->args;
                        printf("glClearDepthf(%p);\n", args.a1);
            break;
        }
                case glClearDepthx_INDEX: {
            INDEXED_void_GLclampx *unpacked = (INDEXED_void_GLclampx *)packed;
                        ARGS_void_GLclampx args = unpacked->args;
                        printf("glClearDepthx(%p);\n", args.a1);
            break;
        }
                case glClearStencil_INDEX: {
            INDEXED_void_GLint *unpacked = (INDEXED_void_GLint *)packed;
                        ARGS_void_GLint args = unpacked->args;
                        printf("glClearStencil(%d);\n", args.a1);
            break;
        }
                case glClientActiveTexture_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glClientActiveTexture(0x%04X);\n", args.a1);
            break;
        }
                case glClipPlanef_INDEX: {
            INDEXED_void_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glClipPlanef(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glClipPlanex_INDEX: {
            INDEXED_void_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glClipPlanex(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glColor4f_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glColor4f(%0.2f, %0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glColor4ub_INDEX: {
            INDEXED_void_GLubyte_GLubyte_GLubyte_GLubyte *unpacked = (INDEXED_void_GLubyte_GLubyte_GLubyte_GLubyte *)packed;
                        ARGS_void_GLubyte_GLubyte_GLubyte_GLubyte args = unpacked->args;
                        printf("glColor4ub(%c, %c, %c, %c);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glColor4x_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glColor4x(%p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glColorMask_INDEX: {
            INDEXED_void_GLboolean_GLboolean_GLboolean_GLboolean *unpacked = (INDEXED_void_GLboolean_GLboolean_GLboolean_GLboolean *)packed;
                        ARGS_void_GLboolean_GLboolean_GLboolean_GLboolean args = unpacked->args;
                        printf("glColorMask(%d, %d, %d, %d);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glColorPointer_INDEX: {
            INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glColorPointer(%d, 0x%04X, %d, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glCompressedTexImage2D_INDEX: {
            INDEXED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glCompressedTexImage2D(0x%04X, %d, 0x%04X, %d, %d, %d, %d, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7, args.a8);
            break;
        }
                case glCompressedTexSubImage2D_INDEX: {
            INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glCompressedTexSubImage2D(0x%04X, %d, %d, %d, %d, %d, 0x%04X, %d, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7, args.a8, args.a9);
            break;
        }
                case glCopyTexImage2D_INDEX: {
            INDEXED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint *unpacked = (INDEXED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint *)packed;
                        ARGS_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint args = unpacked->args;
                        printf("glCopyTexImage2D(0x%04X, %d, 0x%04X, %d, %d, %d, %d, %d);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7, args.a8);
            break;
        }
                case glCopyTexSubImage2D_INDEX: {
            INDEXED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei *unpacked = (INDEXED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        printf("glCopyTexSubImage2D(0x%04X, %d, %d, %d, %d, %d, %d, %d);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7, args.a8);
            break;
        }
                case glCullFace_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glCullFace(0x%04X);\n", args.a1);
            break;
        }
                case glDeleteBuffers_INDEX: {
            INDEXED_void_GLsizei_const_GLuint___GENPT__ *unpacked = (INDEXED_void_GLsizei_const_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_const_GLuint___GENPT__ args = unpacked->args;
                        printf("glDeleteBuffers(%d, %p);\n", args.a1, args.a2);
            break;
        }
                case glDeleteTextures_INDEX: {
            INDEXED_void_GLsizei_const_GLuint___GENPT__ *unpacked = (INDEXED_void_GLsizei_const_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_const_GLuint___GENPT__ args = unpacked->args;
                        printf("glDeleteTextures(%d, %p);\n", args.a1, args.a2);
            break;
        }
                case glDepthFunc_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glDepthFunc(0x%04X);\n", args.a1);
            break;
        }
                case glDepthMask_INDEX: {
            INDEXED_void_GLboolean *unpacked = (INDEXED_void_GLboolean *)packed;
                        ARGS_void_GLboolean args = unpacked->args;
                        printf("glDepthMask(%d);\n", args.a1);
            break;
        }
                case glDepthRangef_INDEX: {
            INDEXED_void_GLclampf_GLclampf *unpacked = (INDEXED_void_GLclampf_GLclampf *)packed;
                        ARGS_void_GLclampf_GLclampf args = unpacked->args;
                        printf("glDepthRangef(%p, %p);\n", args.a1, args.a2);
            break;
        }
                case glDepthRangex_INDEX: {
            INDEXED_void_GLclampx_GLclampx *unpacked = (INDEXED_void_GLclampx_GLclampx *)packed;
                        ARGS_void_GLclampx_GLclampx args = unpacked->args;
                        printf("glDepthRangex(%p, %p);\n", args.a1, args.a2);
            break;
        }
                case glDisable_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glDisable(0x%04X);\n", args.a1);
            break;
        }
                case glDisableClientState_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glDisableClientState(0x%04X);\n", args.a1);
            break;
        }
                case glDrawArrays_INDEX: {
            INDEXED_void_GLenum_GLint_GLsizei *unpacked = (INDEXED_void_GLenum_GLint_GLsizei *)packed;
                        ARGS_void_GLenum_GLint_GLsizei args = unpacked->args;
                        printf("glDrawArrays(0x%04X, %d, %d);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glDrawElements_INDEX: {
            INDEXED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glDrawElements(0x%04X, %d, 0x%04X, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glEnable_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glEnable(0x%04X);\n", args.a1);
            break;
        }
                case glEnableClientState_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glEnableClientState(0x%04X);\n", args.a1);
            break;
        }
                case glFinish_INDEX: {
            INDEXED_void *unpacked = (INDEXED_void *)packed;
                        printf("glFinish();\n");
            break;
        }
                case glFlush_INDEX: {
            INDEXED_void *unpacked = (INDEXED_void *)packed;
                        printf("glFlush();\n");
            break;
        }
                case glFogf_INDEX: {
            INDEXED_void_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLfloat args = unpacked->args;
                        printf("glFogf(0x%04X, %0.2f);\n", args.a1, args.a2);
            break;
        }
                case glFogfv_INDEX: {
            INDEXED_void_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glFogfv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glFogx_INDEX: {
            INDEXED_void_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLfixed args = unpacked->args;
                        printf("glFogx(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glFogxv_INDEX: {
            INDEXED_void_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glFogxv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glFrontFace_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glFrontFace(0x%04X);\n", args.a1);
            break;
        }
                case glFrustumf_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glFrustumf(%0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6);
            break;
        }
                case glFrustumx_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glFrustumx(%p, %p, %p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6);
            break;
        }
                case glGenBuffers_INDEX: {
            INDEXED_void_GLsizei_GLuint___GENPT__ *unpacked = (INDEXED_void_GLsizei_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_GLuint___GENPT__ args = unpacked->args;
                        printf("glGenBuffers(%d, %p);\n", args.a1, args.a2);
            break;
        }
                case glGenTextures_INDEX: {
            INDEXED_void_GLsizei_GLuint___GENPT__ *unpacked = (INDEXED_void_GLsizei_GLuint___GENPT__ *)packed;
                        ARGS_void_GLsizei_GLuint___GENPT__ args = unpacked->args;
                        printf("glGenTextures(%d, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetBooleanv_INDEX: {
            INDEXED_void_GLenum_GLboolean___GENPT__ *unpacked = (INDEXED_void_GLenum_GLboolean___GENPT__ *)packed;
                        ARGS_void_GLenum_GLboolean___GENPT__ args = unpacked->args;
                        printf("glGetBooleanv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetBufferParameteriv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLint___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLint___GENPT__ args = unpacked->args;
                        printf("glGetBufferParameteriv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetClipPlanef_INDEX: {
            INDEXED_void_GLenum_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        printf("glGetClipPlanef(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetClipPlanex_INDEX: {
            INDEXED_void_GLenum_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        printf("glGetClipPlanex(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetError_INDEX: {
            INDEXED_GLenum *unpacked = (INDEXED_GLenum *)packed;
                        printf("glGetError();\n");
            break;
        }
                case glGetFixedv_INDEX: {
            INDEXED_void_GLenum_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        printf("glGetFixedv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetFloatv_INDEX: {
            INDEXED_void_GLenum_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        printf("glGetFloatv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetIntegerv_INDEX: {
            INDEXED_void_GLenum_GLint___GENPT__ *unpacked = (INDEXED_void_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint___GENPT__ args = unpacked->args;
                        printf("glGetIntegerv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetLightfv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        printf("glGetLightfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetLightxv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        printf("glGetLightxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetMaterialfv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        printf("glGetMaterialfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetMaterialxv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        printf("glGetMaterialxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetPointerv_INDEX: {
            INDEXED_void_GLenum_GLvoid___GENPT____GENPT__ *unpacked = (INDEXED_void_GLenum_GLvoid___GENPT____GENPT__ *)packed;
                        ARGS_void_GLenum_GLvoid___GENPT____GENPT__ args = unpacked->args;
                        printf("glGetPointerv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glGetString_INDEX: {
            INDEXED_const_GLubyte___GENPT___GLenum *unpacked = (INDEXED_const_GLubyte___GENPT___GLenum *)packed;
                        ARGS_const_GLubyte___GENPT___GLenum args = unpacked->args;
                        printf("glGetString(0x%04X);\n", args.a1);
            break;
        }
                case glGetTexEnvfv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        printf("glGetTexEnvfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetTexEnviv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLint___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLint___GENPT__ args = unpacked->args;
                        printf("glGetTexEnviv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetTexEnvxv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        printf("glGetTexEnvxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetTexParameterfv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat___GENPT__ args = unpacked->args;
                        printf("glGetTexParameterfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetTexParameteriv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLint___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLint___GENPT__ args = unpacked->args;
                        printf("glGetTexParameteriv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glGetTexParameterxv_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed___GENPT__ args = unpacked->args;
                        printf("glGetTexParameterxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glHint_INDEX: {
            INDEXED_void_GLenum_GLenum *unpacked = (INDEXED_void_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum args = unpacked->args;
                        printf("glHint(0x%04X, 0x%04X);\n", args.a1, args.a2);
            break;
        }
                case glIsBuffer_INDEX: {
            INDEXED_GLboolean_GLuint *unpacked = (INDEXED_GLboolean_GLuint *)packed;
                        ARGS_GLboolean_GLuint args = unpacked->args;
                        printf("glIsBuffer(%u);\n", args.a1);
            break;
        }
                case glIsEnabled_INDEX: {
            INDEXED_GLboolean_GLenum *unpacked = (INDEXED_GLboolean_GLenum *)packed;
                        ARGS_GLboolean_GLenum args = unpacked->args;
                        printf("glIsEnabled(0x%04X);\n", args.a1);
            break;
        }
                case glIsTexture_INDEX: {
            INDEXED_GLboolean_GLuint *unpacked = (INDEXED_GLboolean_GLuint *)packed;
                        ARGS_GLboolean_GLuint args = unpacked->args;
                        printf("glIsTexture(%u);\n", args.a1);
            break;
        }
                case glLightModelf_INDEX: {
            INDEXED_void_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLfloat args = unpacked->args;
                        printf("glLightModelf(0x%04X, %0.2f);\n", args.a1, args.a2);
            break;
        }
                case glLightModelfv_INDEX: {
            INDEXED_void_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glLightModelfv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glLightModelx_INDEX: {
            INDEXED_void_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLfixed args = unpacked->args;
                        printf("glLightModelx(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glLightModelxv_INDEX: {
            INDEXED_void_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glLightModelxv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glLightf_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat args = unpacked->args;
                        printf("glLightf(0x%04X, 0x%04X, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glLightfv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glLightfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glLightx_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed args = unpacked->args;
                        printf("glLightx(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glLightxv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glLightxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glLineWidth_INDEX: {
            INDEXED_void_GLfloat *unpacked = (INDEXED_void_GLfloat *)packed;
                        ARGS_void_GLfloat args = unpacked->args;
                        printf("glLineWidth(%0.2f);\n", args.a1);
            break;
        }
                case glLineWidthx_INDEX: {
            INDEXED_void_GLfixed *unpacked = (INDEXED_void_GLfixed *)packed;
                        ARGS_void_GLfixed args = unpacked->args;
                        printf("glLineWidthx(%p);\n", args.a1);
            break;
        }
                case glLoadIdentity_INDEX: {
            INDEXED_void *unpacked = (INDEXED_void *)packed;
                        printf("glLoadIdentity();\n");
            break;
        }
                case glLoadMatrixf_INDEX: {
            INDEXED_void_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glLoadMatrixf(%p);\n", args.a1);
            break;
        }
                case glLoadMatrixx_INDEX: {
            INDEXED_void_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glLoadMatrixx(%p);\n", args.a1);
            break;
        }
                case glLogicOp_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glLogicOp(0x%04X);\n", args.a1);
            break;
        }
                case glMaterialf_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat args = unpacked->args;
                        printf("glMaterialf(0x%04X, 0x%04X, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glMaterialfv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glMaterialfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glMaterialx_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed args = unpacked->args;
                        printf("glMaterialx(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glMaterialxv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glMaterialxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glMatrixMode_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glMatrixMode(0x%04X);\n", args.a1);
            break;
        }
                case glMultMatrixf_INDEX: {
            INDEXED_void_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glMultMatrixf(%p);\n", args.a1);
            break;
        }
                case glMultMatrixx_INDEX: {
            INDEXED_void_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glMultMatrixx(%p);\n", args.a1);
            break;
        }
                case glMultiTexCoord4f_INDEX: {
            INDEXED_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glMultiTexCoord4f(0x%04X, %0.2f, %0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3, args.a4, args.a5);
            break;
        }
                case glMultiTexCoord4x_INDEX: {
            INDEXED_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glMultiTexCoord4x(0x%04X, %p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5);
            break;
        }
                case glNormal3f_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glNormal3f(%0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glNormal3x_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glNormal3x(%p, %p, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glNormalPointer_INDEX: {
            INDEXED_void_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glNormalPointer(0x%04X, %d, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glOrthof_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glOrthof(%0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6);
            break;
        }
                case glOrthox_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glOrthox(%p, %p, %p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6);
            break;
        }
                case glPixelStorei_INDEX: {
            INDEXED_void_GLenum_GLint *unpacked = (INDEXED_void_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLint args = unpacked->args;
                        printf("glPixelStorei(0x%04X, %d);\n", args.a1, args.a2);
            break;
        }
                case glPointParameterf_INDEX: {
            INDEXED_void_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLfloat args = unpacked->args;
                        printf("glPointParameterf(0x%04X, %0.2f);\n", args.a1, args.a2);
            break;
        }
                case glPointParameterfv_INDEX: {
            INDEXED_void_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glPointParameterfv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glPointParameterx_INDEX: {
            INDEXED_void_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLfixed args = unpacked->args;
                        printf("glPointParameterx(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glPointParameterxv_INDEX: {
            INDEXED_void_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glPointParameterxv(0x%04X, %p);\n", args.a1, args.a2);
            break;
        }
                case glPointSize_INDEX: {
            INDEXED_void_GLfloat *unpacked = (INDEXED_void_GLfloat *)packed;
                        ARGS_void_GLfloat args = unpacked->args;
                        printf("glPointSize(%0.2f);\n", args.a1);
            break;
        }
                case glPointSizePointerOES_INDEX: {
            INDEXED_void_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glPointSizePointerOES(0x%04X, %d, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glPointSizex_INDEX: {
            INDEXED_void_GLfixed *unpacked = (INDEXED_void_GLfixed *)packed;
                        ARGS_void_GLfixed args = unpacked->args;
                        printf("glPointSizex(%p);\n", args.a1);
            break;
        }
                case glPolygonOffset_INDEX: {
            INDEXED_void_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat args = unpacked->args;
                        printf("glPolygonOffset(%0.2f, %0.2f);\n", args.a1, args.a2);
            break;
        }
                case glPolygonOffsetx_INDEX: {
            INDEXED_void_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed args = unpacked->args;
                        printf("glPolygonOffsetx(%p, %p);\n", args.a1, args.a2);
            break;
        }
                case glPopMatrix_INDEX: {
            INDEXED_void *unpacked = (INDEXED_void *)packed;
                        printf("glPopMatrix();\n");
            break;
        }
                case glPushMatrix_INDEX: {
            INDEXED_void *unpacked = (INDEXED_void *)packed;
                        printf("glPushMatrix();\n");
            break;
        }
                case glReadPixels_INDEX: {
            INDEXED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__ args = unpacked->args;
                        printf("glReadPixels(%d, %d, %d, %d, 0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7);
            break;
        }
                case glRotatef_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glRotatef(%0.2f, %0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glRotatex_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glRotatex(%p, %p, %p, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glSampleCoverage_INDEX: {
            INDEXED_void_GLclampf_GLboolean *unpacked = (INDEXED_void_GLclampf_GLboolean *)packed;
                        ARGS_void_GLclampf_GLboolean args = unpacked->args;
                        printf("glSampleCoverage(%p, %d);\n", args.a1, args.a2);
            break;
        }
                case glSampleCoveragex_INDEX: {
            INDEXED_void_GLclampx_GLboolean *unpacked = (INDEXED_void_GLclampx_GLboolean *)packed;
                        ARGS_void_GLclampx_GLboolean args = unpacked->args;
                        printf("glSampleCoveragex(%p, %d);\n", args.a1, args.a2);
            break;
        }
                case glScalef_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glScalef(%0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glScalex_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glScalex(%p, %p, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glScissor_INDEX: {
            INDEXED_void_GLint_GLint_GLsizei_GLsizei *unpacked = (INDEXED_void_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        printf("glScissor(%d, %d, %d, %d);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glShadeModel_INDEX: {
            INDEXED_void_GLenum *unpacked = (INDEXED_void_GLenum *)packed;
                        ARGS_void_GLenum args = unpacked->args;
                        printf("glShadeModel(0x%04X);\n", args.a1);
            break;
        }
                case glStencilFunc_INDEX: {
            INDEXED_void_GLenum_GLint_GLuint *unpacked = (INDEXED_void_GLenum_GLint_GLuint *)packed;
                        ARGS_void_GLenum_GLint_GLuint args = unpacked->args;
                        printf("glStencilFunc(0x%04X, %d, %u);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glStencilMask_INDEX: {
            INDEXED_void_GLuint *unpacked = (INDEXED_void_GLuint *)packed;
                        ARGS_void_GLuint args = unpacked->args;
                        printf("glStencilMask(%u);\n", args.a1);
            break;
        }
                case glStencilOp_INDEX: {
            INDEXED_void_GLenum_GLenum_GLenum *unpacked = (INDEXED_void_GLenum_GLenum_GLenum *)packed;
                        ARGS_void_GLenum_GLenum_GLenum args = unpacked->args;
                        printf("glStencilOp(0x%04X, 0x%04X, 0x%04X);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexCoordPointer_INDEX: {
            INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glTexCoordPointer(%d, 0x%04X, %d, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glTexEnvf_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat args = unpacked->args;
                        printf("glTexEnvf(0x%04X, 0x%04X, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexEnvfv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glTexEnvfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexEnvi_INDEX: {
            INDEXED_void_GLenum_GLenum_GLint *unpacked = (INDEXED_void_GLenum_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLenum_GLint args = unpacked->args;
                        printf("glTexEnvi(0x%04X, 0x%04X, %d);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexEnviv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLint___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLint___GENPT__ args = unpacked->args;
                        printf("glTexEnviv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexEnvx_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed args = unpacked->args;
                        printf("glTexEnvx(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexEnvxv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glTexEnvxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexImage2D_INDEX: {
            INDEXED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glTexImage2D(0x%04X, %d, %d, %d, %d, %d, 0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7, args.a8, args.a9);
            break;
        }
                case glTexParameterf_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfloat *unpacked = (INDEXED_void_GLenum_GLenum_GLfloat *)packed;
                        ARGS_void_GLenum_GLenum_GLfloat args = unpacked->args;
                        printf("glTexParameterf(0x%04X, 0x%04X, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexParameterfv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfloat___GENPT__ args = unpacked->args;
                        printf("glTexParameterfv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexParameteri_INDEX: {
            INDEXED_void_GLenum_GLenum_GLint *unpacked = (INDEXED_void_GLenum_GLenum_GLint *)packed;
                        ARGS_void_GLenum_GLenum_GLint args = unpacked->args;
                        printf("glTexParameteri(0x%04X, 0x%04X, %d);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexParameteriv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLint___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLint___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLint___GENPT__ args = unpacked->args;
                        printf("glTexParameteriv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexParameterx_INDEX: {
            INDEXED_void_GLenum_GLenum_GLfixed *unpacked = (INDEXED_void_GLenum_GLenum_GLfixed *)packed;
                        ARGS_void_GLenum_GLenum_GLfixed args = unpacked->args;
                        printf("glTexParameterx(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexParameterxv_INDEX: {
            INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *unpacked = (INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__ *)packed;
                        ARGS_void_GLenum_GLenum_const_GLfixed___GENPT__ args = unpacked->args;
                        printf("glTexParameterxv(0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTexSubImage2D_INDEX: {
            INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glTexSubImage2D(0x%04X, %d, %d, %d, %d, %d, 0x%04X, 0x%04X, %p);\n", args.a1, args.a2, args.a3, args.a4, args.a5, args.a6, args.a7, args.a8, args.a9);
            break;
        }
                case glTranslatef_INDEX: {
            INDEXED_void_GLfloat_GLfloat_GLfloat *unpacked = (INDEXED_void_GLfloat_GLfloat_GLfloat *)packed;
                        ARGS_void_GLfloat_GLfloat_GLfloat args = unpacked->args;
                        printf("glTranslatef(%0.2f, %0.2f, %0.2f);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glTranslatex_INDEX: {
            INDEXED_void_GLfixed_GLfixed_GLfixed *unpacked = (INDEXED_void_GLfixed_GLfixed_GLfixed *)packed;
                        ARGS_void_GLfixed_GLfixed_GLfixed args = unpacked->args;
                        printf("glTranslatex(%p, %p, %p);\n", args.a1, args.a2, args.a3);
            break;
        }
                case glVertexPointer_INDEX: {
            INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *unpacked = (INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ *)packed;
                        ARGS_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__ args = unpacked->args;
                        printf("glVertexPointer(%d, 0x%04X, %d, %p);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
                case glViewport_INDEX: {
            INDEXED_void_GLint_GLint_GLsizei_GLsizei *unpacked = (INDEXED_void_GLint_GLint_GLsizei_GLsizei *)packed;
                        ARGS_void_GLint_GLint_GLsizei_GLsizei args = unpacked->args;
                        printf("glViewport(%d, %d, %d, %d);\n", args.a1, args.a2, args.a3, args.a4);
            break;
        }
            }
}

void *mock_get(int idx) {
    return tack_get(&mock, idx);
}

void *mock_peek() {
    return tack_peek(&mock);
}

void *mock_cur() {
    return tack_cur(&mock);
}

void *mock_shift() {
    return tack_shift(&mock);
}

void *mock_slide(int func) {
    if (mock.pos >= mock.len) {
        return NULL;
    }
    indexed_call_t **stack = (indexed_call_t **)mock.data;
    for (int i = mock.pos; i < mock.len; i++) {
        if (stack[i]->func == func) {
            mock.pos = i + 1;
            return stack[i];
        }
    }
    return NULL;
}

void mock_push(void *call) {
    tack_push(&mock, call);
}

void *mock_pop() {
    return tack_pop(&mock);
}

void gles_glActiveTexture(GLenum texture) {
            emit_glActiveTexture(texture);
    }
void gles_glAlphaFunc(GLenum func, GLclampf ref) {
            emit_glAlphaFunc(func, ref);
    }
void gles_glAlphaFuncx(GLenum func, GLclampx ref) {
            emit_glAlphaFuncx(func, ref);
    }
void gles_glBindBuffer(GLenum target, GLuint buffer) {
            emit_glBindBuffer(target, buffer);
    }
void gles_glBindTexture(GLenum target, GLuint texture) {
            emit_glBindTexture(target, texture);
    }
void gles_glBlendColorOES(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
            emit_glBlendColorOES(red, green, blue, alpha);
    }
void gles_glBlendEquationOES(GLenum mode) {
            emit_glBlendEquationOES(mode);
    }
void gles_glBlendEquationSeparateOES(GLenum modeRGB, GLenum modeAlpha) {
            emit_glBlendEquationSeparateOES(modeRGB, modeAlpha);
    }
void gles_glBlendFunc(GLenum sfactor, GLenum dfactor) {
            emit_glBlendFunc(sfactor, dfactor);
    }
void gles_glBlendFuncSeparateOES(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {
            emit_glBlendFuncSeparateOES(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
    }
void gles_glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) {
            emit_glBufferData(target, size, data, usage);
    }
void gles_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) {
            emit_glBufferSubData(target, offset, size, data);
    }
void gles_glClear(GLbitfield mask) {
            emit_glClear(mask);
    }
void gles_glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
            emit_glClearColor(red, green, blue, alpha);
    }
void gles_glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) {
            emit_glClearColorx(red, green, blue, alpha);
    }
void gles_glClearDepthf(GLclampf depth) {
            emit_glClearDepthf(depth);
    }
void gles_glClearDepthx(GLclampx depth) {
            emit_glClearDepthx(depth);
    }
void gles_glClearStencil(GLint s) {
            emit_glClearStencil(s);
    }
void gles_glClientActiveTexture(GLenum texture) {
            emit_glClientActiveTexture(texture);
    }
void gles_glClipPlanef(GLenum plane, const GLfloat * equation) {
            emit_glClipPlanef(plane, equation);
    }
void gles_glClipPlanex(GLenum plane, const GLfixed * equation) {
            emit_glClipPlanex(plane, equation);
    }
void gles_glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {
            emit_glColor4f(red, green, blue, alpha);
    }
void gles_glColor4ub(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) {
            emit_glColor4ub(red, green, blue, alpha);
    }
void gles_glColor4x(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
            emit_glColor4x(red, green, blue, alpha);
    }
void gles_glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
            emit_glColorMask(red, green, blue, alpha);
    }
void gles_glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {
            emit_glColorPointer(size, type, stride, pointer);
    }
void gles_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {
            emit_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
    }
void gles_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {
            emit_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
    }
void gles_glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
            emit_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
    }
void gles_glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
            emit_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
    }
void gles_glCullFace(GLenum mode) {
            emit_glCullFace(mode);
    }
void gles_glDeleteBuffers(GLsizei n, const GLuint * buffers) {
            emit_glDeleteBuffers(n, buffers);
    }
void gles_glDeleteTextures(GLsizei n, const GLuint * textures) {
            emit_glDeleteTextures(n, textures);
    }
void gles_glDepthFunc(GLenum func) {
            emit_glDepthFunc(func);
    }
void gles_glDepthMask(GLboolean flag) {
            emit_glDepthMask(flag);
    }
void gles_glDepthRangef(GLclampf near, GLclampf far) {
            emit_glDepthRangef(near, far);
    }
void gles_glDepthRangex(GLclampx near, GLclampx far) {
            emit_glDepthRangex(near, far);
    }
void gles_glDisable(GLenum cap) {
            emit_glDisable(cap);
    }
void gles_glDisableClientState(GLenum array) {
            emit_glDisableClientState(array);
    }
void gles_glDrawArrays(GLenum mode, GLint first, GLsizei count) {
            emit_glDrawArrays(mode, first, count);
    }
void gles_glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices) {
            emit_glDrawElements(mode, count, type, indices);
    }
void gles_glEnable(GLenum cap) {
            emit_glEnable(cap);
    }
void gles_glEnableClientState(GLenum array) {
            emit_glEnableClientState(array);
    }
void gles_glFinish() {
            emit_glFinish();
    }
void gles_glFlush() {
            emit_glFlush();
    }
void gles_glFogf(GLenum pname, GLfloat param) {
            emit_glFogf(pname, param);
    }
void gles_glFogfv(GLenum pname, const GLfloat * params) {
            emit_glFogfv(pname, params);
    }
void gles_glFogx(GLenum pname, GLfixed param) {
            emit_glFogx(pname, param);
    }
void gles_glFogxv(GLenum pname, const GLfixed * params) {
            emit_glFogxv(pname, params);
    }
void gles_glFrontFace(GLenum mode) {
            emit_glFrontFace(mode);
    }
void gles_glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) {
            emit_glFrustumf(left, right, bottom, top, near, far);
    }
void gles_glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far) {
            emit_glFrustumx(left, right, bottom, top, near, far);
    }
void gles_glGenBuffers(GLsizei n, GLuint * buffers) {
            emit_glGenBuffers(n, buffers);
    }
void gles_glGenTextures(GLsizei n, GLuint * textures) {
            emit_glGenTextures(n, textures);
    }
void gles_glGetBooleanv(GLenum pname, GLboolean * params) {
            emit_glGetBooleanv(pname, params);
    }
void gles_glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) {
            emit_glGetBufferParameteriv(target, pname, params);
    }
void gles_glGetClipPlanef(GLenum plane, GLfloat * equation) {
            emit_glGetClipPlanef(plane, equation);
    }
void gles_glGetClipPlanex(GLenum plane, GLfixed * equation) {
            emit_glGetClipPlanex(plane, equation);
    }
GLenum gles_glGetError() {
            emit_glGetError();
        return (GLenum)0;
    }
void gles_glGetFixedv(GLenum pname, GLfixed * params) {
            emit_glGetFixedv(pname, params);
    }
void gles_glGetFloatv(GLenum pname, GLfloat * params) {
            emit_glGetFloatv(pname, params);
    }
void gles_glGetIntegerv(GLenum pname, GLint * params) {
            emit_glGetIntegerv(pname, params);
    }
void gles_glGetLightfv(GLenum light, GLenum pname, GLfloat * params) {
            emit_glGetLightfv(light, pname, params);
    }
void gles_glGetLightxv(GLenum light, GLenum pname, GLfixed * params) {
            emit_glGetLightxv(light, pname, params);
    }
void gles_glGetMaterialfv(GLenum face, GLenum pname, GLfloat * params) {
            emit_glGetMaterialfv(face, pname, params);
    }
void gles_glGetMaterialxv(GLenum face, GLenum pname, GLfixed * params) {
            emit_glGetMaterialxv(face, pname, params);
    }
void gles_glGetPointerv(GLenum pname, GLvoid ** params) {
            emit_glGetPointerv(pname, params);
    }
const GLubyte * gles_glGetString(GLenum name) {
            emit_glGetString(name);
        return (const GLubyte *)0;
    }
void gles_glGetTexEnvfv(GLenum target, GLenum pname, GLfloat * params) {
            emit_glGetTexEnvfv(target, pname, params);
    }
void gles_glGetTexEnviv(GLenum target, GLenum pname, GLint * params) {
            emit_glGetTexEnviv(target, pname, params);
    }
void gles_glGetTexEnvxv(GLenum target, GLenum pname, GLfixed * params) {
            emit_glGetTexEnvxv(target, pname, params);
    }
void gles_glGetTexParameterfv(GLenum target, GLenum pname, GLfloat * params) {
            emit_glGetTexParameterfv(target, pname, params);
    }
void gles_glGetTexParameteriv(GLenum target, GLenum pname, GLint * params) {
            emit_glGetTexParameteriv(target, pname, params);
    }
void gles_glGetTexParameterxv(GLenum target, GLenum pname, GLfixed * params) {
            emit_glGetTexParameterxv(target, pname, params);
    }
void gles_glHint(GLenum target, GLenum mode) {
            emit_glHint(target, mode);
    }
GLboolean gles_glIsBuffer(GLuint buffer) {
            emit_glIsBuffer(buffer);
        return (GLboolean)0;
    }
GLboolean gles_glIsEnabled(GLenum cap) {
            emit_glIsEnabled(cap);
        return (GLboolean)0;
    }
GLboolean gles_glIsTexture(GLuint texture) {
            emit_glIsTexture(texture);
        return (GLboolean)0;
    }
void gles_glLightModelf(GLenum pname, GLfloat param) {
            emit_glLightModelf(pname, param);
    }
void gles_glLightModelfv(GLenum pname, const GLfloat * params) {
            emit_glLightModelfv(pname, params);
    }
void gles_glLightModelx(GLenum pname, GLfixed param) {
            emit_glLightModelx(pname, param);
    }
void gles_glLightModelxv(GLenum pname, const GLfixed * params) {
            emit_glLightModelxv(pname, params);
    }
void gles_glLightf(GLenum light, GLenum pname, GLfloat param) {
            emit_glLightf(light, pname, param);
    }
void gles_glLightfv(GLenum light, GLenum pname, const GLfloat * params) {
            emit_glLightfv(light, pname, params);
    }
void gles_glLightx(GLenum light, GLenum pname, GLfixed param) {
            emit_glLightx(light, pname, param);
    }
void gles_glLightxv(GLenum light, GLenum pname, const GLfixed * params) {
            emit_glLightxv(light, pname, params);
    }
void gles_glLineWidth(GLfloat width) {
            emit_glLineWidth(width);
    }
void gles_glLineWidthx(GLfixed width) {
            emit_glLineWidthx(width);
    }
void gles_glLoadIdentity() {
            emit_glLoadIdentity();
    }
void gles_glLoadMatrixf(const GLfloat * m) {
            emit_glLoadMatrixf(m);
    }
void gles_glLoadMatrixx(const GLfixed * m) {
            emit_glLoadMatrixx(m);
    }
void gles_glLogicOp(GLenum opcode) {
            emit_glLogicOp(opcode);
    }
void gles_glMaterialf(GLenum face, GLenum pname, GLfloat param) {
            emit_glMaterialf(face, pname, param);
    }
void gles_glMaterialfv(GLenum face, GLenum pname, const GLfloat * params) {
            emit_glMaterialfv(face, pname, params);
    }
void gles_glMaterialx(GLenum face, GLenum pname, GLfixed param) {
            emit_glMaterialx(face, pname, param);
    }
void gles_glMaterialxv(GLenum face, GLenum pname, const GLfixed * params) {
            emit_glMaterialxv(face, pname, params);
    }
void gles_glMatrixMode(GLenum mode) {
            emit_glMatrixMode(mode);
    }
void gles_glMultMatrixf(const GLfloat * m) {
            emit_glMultMatrixf(m);
    }
void gles_glMultMatrixx(const GLfixed * m) {
            emit_glMultMatrixx(m);
    }
void gles_glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {
            emit_glMultiTexCoord4f(target, s, t, r, q);
    }
void gles_glMultiTexCoord4x(GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) {
            emit_glMultiTexCoord4x(target, s, t, r, q);
    }
void gles_glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz) {
            emit_glNormal3f(nx, ny, nz);
    }
void gles_glNormal3x(GLfixed nx, GLfixed ny, GLfixed nz) {
            emit_glNormal3x(nx, ny, nz);
    }
void gles_glNormalPointer(GLenum type, GLsizei stride, const GLvoid * pointer) {
            emit_glNormalPointer(type, stride, pointer);
    }
void gles_glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far) {
            emit_glOrthof(left, right, bottom, top, near, far);
    }
void gles_glOrthox(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far) {
            emit_glOrthox(left, right, bottom, top, near, far);
    }
void gles_glPixelStorei(GLenum pname, GLint param) {
            emit_glPixelStorei(pname, param);
    }
void gles_glPointParameterf(GLenum pname, GLfloat param) {
            emit_glPointParameterf(pname, param);
    }
void gles_glPointParameterfv(GLenum pname, const GLfloat * params) {
            emit_glPointParameterfv(pname, params);
    }
void gles_glPointParameterx(GLenum pname, GLfixed param) {
            emit_glPointParameterx(pname, param);
    }
void gles_glPointParameterxv(GLenum pname, const GLfixed * params) {
            emit_glPointParameterxv(pname, params);
    }
void gles_glPointSize(GLfloat size) {
            emit_glPointSize(size);
    }
void gles_glPointSizePointerOES(GLenum type, GLsizei stride, const GLvoid * pointer) {
            emit_glPointSizePointerOES(type, stride, pointer);
    }
void gles_glPointSizex(GLfixed size) {
            emit_glPointSizex(size);
    }
void gles_glPolygonOffset(GLfloat factor, GLfloat units) {
            emit_glPolygonOffset(factor, units);
    }
void gles_glPolygonOffsetx(GLfixed factor, GLfixed units) {
            emit_glPolygonOffsetx(factor, units);
    }
void gles_glPopMatrix() {
            emit_glPopMatrix();
    }
void gles_glPushMatrix() {
            emit_glPushMatrix();
    }
void gles_glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels) {
            emit_glReadPixels(x, y, width, height, format, type, pixels);
    }
void gles_glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {
            emit_glRotatef(angle, x, y, z);
    }
void gles_glRotatex(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
            emit_glRotatex(angle, x, y, z);
    }
void gles_glSampleCoverage(GLclampf value, GLboolean invert) {
            emit_glSampleCoverage(value, invert);
    }
void gles_glSampleCoveragex(GLclampx value, GLboolean invert) {
            emit_glSampleCoveragex(value, invert);
    }
void gles_glScalef(GLfloat x, GLfloat y, GLfloat z) {
            emit_glScalef(x, y, z);
    }
void gles_glScalex(GLfixed x, GLfixed y, GLfixed z) {
            emit_glScalex(x, y, z);
    }
void gles_glScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
            emit_glScissor(x, y, width, height);
    }
void gles_glShadeModel(GLenum mode) {
            emit_glShadeModel(mode);
    }
void gles_glStencilFunc(GLenum func, GLint ref, GLuint mask) {
            emit_glStencilFunc(func, ref, mask);
    }
void gles_glStencilMask(GLuint mask) {
            emit_glStencilMask(mask);
    }
void gles_glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
            emit_glStencilOp(fail, zfail, zpass);
    }
void gles_glTexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {
            emit_glTexCoordPointer(size, type, stride, pointer);
    }
void gles_glTexEnvf(GLenum target, GLenum pname, GLfloat param) {
            emit_glTexEnvf(target, pname, param);
    }
void gles_glTexEnvfv(GLenum target, GLenum pname, const GLfloat * params) {
            emit_glTexEnvfv(target, pname, params);
    }
void gles_glTexEnvi(GLenum target, GLenum pname, GLint param) {
            emit_glTexEnvi(target, pname, param);
    }
void gles_glTexEnviv(GLenum target, GLenum pname, const GLint * params) {
            emit_glTexEnviv(target, pname, params);
    }
void gles_glTexEnvx(GLenum target, GLenum pname, GLfixed param) {
            emit_glTexEnvx(target, pname, param);
    }
void gles_glTexEnvxv(GLenum target, GLenum pname, const GLfixed * params) {
            emit_glTexEnvxv(target, pname, params);
    }
void gles_glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {
            emit_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
    }
void gles_glTexParameterf(GLenum target, GLenum pname, GLfloat param) {
            emit_glTexParameterf(target, pname, param);
    }
void gles_glTexParameterfv(GLenum target, GLenum pname, const GLfloat * params) {
            emit_glTexParameterfv(target, pname, params);
    }
void gles_glTexParameteri(GLenum target, GLenum pname, GLint param) {
            emit_glTexParameteri(target, pname, param);
    }
void gles_glTexParameteriv(GLenum target, GLenum pname, const GLint * params) {
            emit_glTexParameteriv(target, pname, params);
    }
void gles_glTexParameterx(GLenum target, GLenum pname, GLfixed param) {
            emit_glTexParameterx(target, pname, param);
    }
void gles_glTexParameterxv(GLenum target, GLenum pname, const GLfixed * params) {
            emit_glTexParameterxv(target, pname, params);
    }
void gles_glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {
            emit_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
    }
void gles_glTranslatef(GLfloat x, GLfloat y, GLfloat z) {
            emit_glTranslatef(x, y, z);
    }
void gles_glTranslatex(GLfixed x, GLfixed y, GLfixed z) {
            emit_glTranslatex(x, y, z);
    }
void gles_glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {
            emit_glVertexPointer(size, type, stride, pointer);
    }
void gles_glViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
            emit_glViewport(x, y, width, height);
    }
Added jni/glshim/test/util/mock.h.
















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
#ifndef USE_ES2
#ifdef __cplusplus
extern "C" {
#endif
#include "gl_str.h"
#include "wrap/gles.h"

#ifndef MOCK_H
#define MOCK_H

const char *mock_name(int func);
void *mock_cur();
void *mock_get(int idx);
void *mock_peek();
void *mock_shift();
void *mock_slide(int func);
void mock_print(const indexed_call_t *packed);
void mock_push(void *call);

static int verbose_test = 0;
static int failed_test = 0;
#define verbose { verbose_test = 1; }

#define mock_warningf(...) { printf("WARNING: "), printf(__VA_ARGS__); }
#define mock_errorf(...) { printf("ERROR: "); printf(__VA_ARGS__); failed_test = 1; }
#define mock_assert(cond, ...) { if (!(cond)) { mock_errorf(__VA_ARGS__); }}
#define assert(cond) mock_assert(cond, "%s\n", #cond)

#define mock_return { \
    indexed_call_t *call = NULL; \
    while ((call = mock_shift()) != NULL) { \
        mock_warningf("extra "); \
        mock_print(call); \
    } \
    if (state.error) { \
        mock_warningf("Ended with GL error flag: %s\n", gl_str(state.error)); \
    } \
    return failed_test; \
}

#define pack_glActiveTexture(texture) ({ \
    glActiveTexture_INDEXED *packed_data = malloc(sizeof(glActiveTexture_INDEXED)); \
    packed_data->func = glActiveTexture_INDEX; \
            packed_data->args.a1 = (GLenum)texture; \
            packed_data; \
})
#define emit_glActiveTexture(texture) { \
    mock_push(pack_glActiveTexture(texture)); \
}
#define test_glActiveTexture(texture) { \
    glActiveTexture_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glActiveTexture missing (no calls left)\n"); \
    } else if (packed->func != glActiveTexture_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glActiveTexture_INDEX); \
        if (! packed) { \
            mock_errorf("glActiveTexture missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glActiveTexture:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != texture) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glActiveTexture(0x%04X);\n", texture); \
        } \
    } \
}
#define pack_glAlphaFunc(func, ref) ({ \
    glAlphaFunc_INDEXED *packed_data = malloc(sizeof(glAlphaFunc_INDEXED)); \
    packed_data->func = glAlphaFunc_INDEX; \
            packed_data->args.a1 = (GLenum)func; \
        packed_data->args.a2 = (GLclampf)ref; \
            packed_data; \
})
#define emit_glAlphaFunc(func, ref) { \
    mock_push(pack_glAlphaFunc(func, ref)); \
}
#define test_glAlphaFunc(func, ref) { \
    glAlphaFunc_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glAlphaFunc missing (no calls left)\n"); \
    } else if (packed->func != glAlphaFunc_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glAlphaFunc_INDEX); \
        if (! packed) { \
            mock_errorf("glAlphaFunc missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glAlphaFunc:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != func) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != ref) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glAlphaFunc(0x%04X, %p);\n", func, ref); \
        } \
    } \
}
#define pack_glAlphaFuncx(func, ref) ({ \
    glAlphaFuncx_INDEXED *packed_data = malloc(sizeof(glAlphaFuncx_INDEXED)); \
    packed_data->func = glAlphaFuncx_INDEX; \
            packed_data->args.a1 = (GLenum)func; \
        packed_data->args.a2 = (GLclampx)ref; \
            packed_data; \
})
#define emit_glAlphaFuncx(func, ref) { \
    mock_push(pack_glAlphaFuncx(func, ref)); \
}
#define test_glAlphaFuncx(func, ref) { \
    glAlphaFuncx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glAlphaFuncx missing (no calls left)\n"); \
    } else if (packed->func != glAlphaFuncx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glAlphaFuncx_INDEX); \
        if (! packed) { \
            mock_errorf("glAlphaFuncx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glAlphaFuncx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != func) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != ref) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glAlphaFuncx(0x%04X, %p);\n", func, ref); \
        } \
    } \
}
#define pack_glBindBuffer(target, buffer) ({ \
    glBindBuffer_INDEXED *packed_data = malloc(sizeof(glBindBuffer_INDEXED)); \
    packed_data->func = glBindBuffer_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLuint)buffer; \
            packed_data; \
})
#define emit_glBindBuffer(target, buffer) { \
    mock_push(pack_glBindBuffer(target, buffer)); \
}
#define test_glBindBuffer(target, buffer) { \
    glBindBuffer_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBindBuffer missing (no calls left)\n"); \
    } else if (packed->func != glBindBuffer_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBindBuffer_INDEX); \
        if (! packed) { \
            mock_errorf("glBindBuffer missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBindBuffer:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != buffer) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBindBuffer(0x%04X, %u);\n", target, buffer); \
        } \
    } \
}
#define pack_glBindTexture(target, texture) ({ \
    glBindTexture_INDEXED *packed_data = malloc(sizeof(glBindTexture_INDEXED)); \
    packed_data->func = glBindTexture_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLuint)texture; \
            packed_data; \
})
#define emit_glBindTexture(target, texture) { \
    mock_push(pack_glBindTexture(target, texture)); \
}
#define test_glBindTexture(target, texture) { \
    glBindTexture_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBindTexture missing (no calls left)\n"); \
    } else if (packed->func != glBindTexture_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBindTexture_INDEX); \
        if (! packed) { \
            mock_errorf("glBindTexture missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBindTexture:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != texture) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBindTexture(0x%04X, %u);\n", target, texture); \
        } \
    } \
}
#define pack_glBlendColorOES(red, green, blue, alpha) ({ \
    glBlendColorOES_INDEXED *packed_data = malloc(sizeof(glBlendColorOES_INDEXED)); \
    packed_data->func = glBlendColorOES_INDEX; \
            packed_data->args.a1 = (GLclampf)red; \
        packed_data->args.a2 = (GLclampf)green; \
        packed_data->args.a3 = (GLclampf)blue; \
        packed_data->args.a4 = (GLclampf)alpha; \
            packed_data; \
})
#define emit_glBlendColorOES(red, green, blue, alpha) { \
    mock_push(pack_glBlendColorOES(red, green, blue, alpha)); \
}
#define test_glBlendColorOES(red, green, blue, alpha) { \
    glBlendColorOES_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBlendColorOES missing (no calls left)\n"); \
    } else if (packed->func != glBlendColorOES_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBlendColorOES_INDEX); \
        if (! packed) { \
            mock_errorf("glBlendColorOES missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBlendColorOES:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != red) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != green) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != blue) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != alpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBlendColorOES(%p, %p, %p, %p);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glBlendEquationOES(mode) ({ \
    glBlendEquationOES_INDEXED *packed_data = malloc(sizeof(glBlendEquationOES_INDEXED)); \
    packed_data->func = glBlendEquationOES_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
            packed_data; \
})
#define emit_glBlendEquationOES(mode) { \
    mock_push(pack_glBlendEquationOES(mode)); \
}
#define test_glBlendEquationOES(mode) { \
    glBlendEquationOES_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBlendEquationOES missing (no calls left)\n"); \
    } else if (packed->func != glBlendEquationOES_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBlendEquationOES_INDEX); \
        if (! packed) { \
            mock_errorf("glBlendEquationOES missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBlendEquationOES:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBlendEquationOES(0x%04X);\n", mode); \
        } \
    } \
}
#define pack_glBlendEquationSeparateOES(modeRGB, modeAlpha) ({ \
    glBlendEquationSeparateOES_INDEXED *packed_data = malloc(sizeof(glBlendEquationSeparateOES_INDEXED)); \
    packed_data->func = glBlendEquationSeparateOES_INDEX; \
            packed_data->args.a1 = (GLenum)modeRGB; \
        packed_data->args.a2 = (GLenum)modeAlpha; \
            packed_data; \
})
#define emit_glBlendEquationSeparateOES(modeRGB, modeAlpha) { \
    mock_push(pack_glBlendEquationSeparateOES(modeRGB, modeAlpha)); \
}
#define test_glBlendEquationSeparateOES(modeRGB, modeAlpha) { \
    glBlendEquationSeparateOES_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBlendEquationSeparateOES missing (no calls left)\n"); \
    } else if (packed->func != glBlendEquationSeparateOES_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBlendEquationSeparateOES_INDEX); \
        if (! packed) { \
            mock_errorf("glBlendEquationSeparateOES missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBlendEquationSeparateOES:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != modeRGB) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != modeAlpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBlendEquationSeparateOES(0x%04X, 0x%04X);\n", modeRGB, modeAlpha); \
        } \
    } \
}
#define pack_glBlendFunc(sfactor, dfactor) ({ \
    glBlendFunc_INDEXED *packed_data = malloc(sizeof(glBlendFunc_INDEXED)); \
    packed_data->func = glBlendFunc_INDEX; \
            packed_data->args.a1 = (GLenum)sfactor; \
        packed_data->args.a2 = (GLenum)dfactor; \
            packed_data; \
})
#define emit_glBlendFunc(sfactor, dfactor) { \
    mock_push(pack_glBlendFunc(sfactor, dfactor)); \
}
#define test_glBlendFunc(sfactor, dfactor) { \
    glBlendFunc_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBlendFunc missing (no calls left)\n"); \
    } else if (packed->func != glBlendFunc_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBlendFunc_INDEX); \
        if (! packed) { \
            mock_errorf("glBlendFunc missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBlendFunc:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != sfactor) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != dfactor) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBlendFunc(0x%04X, 0x%04X);\n", sfactor, dfactor); \
        } \
    } \
}
#define pack_glBlendFuncSeparateOES(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha) ({ \
    glBlendFuncSeparateOES_INDEXED *packed_data = malloc(sizeof(glBlendFuncSeparateOES_INDEXED)); \
    packed_data->func = glBlendFuncSeparateOES_INDEX; \
            packed_data->args.a1 = (GLenum)sfactorRGB; \
        packed_data->args.a2 = (GLenum)dfactorRGB; \
        packed_data->args.a3 = (GLenum)sfactorAlpha; \
        packed_data->args.a4 = (GLenum)dfactorAlpha; \
            packed_data; \
})
#define emit_glBlendFuncSeparateOES(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha) { \
    mock_push(pack_glBlendFuncSeparateOES(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)); \
}
#define test_glBlendFuncSeparateOES(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha) { \
    glBlendFuncSeparateOES_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBlendFuncSeparateOES missing (no calls left)\n"); \
    } else if (packed->func != glBlendFuncSeparateOES_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBlendFuncSeparateOES_INDEX); \
        if (! packed) { \
            mock_errorf("glBlendFuncSeparateOES missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBlendFuncSeparateOES:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != sfactorRGB) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != dfactorRGB) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != sfactorAlpha) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != dfactorAlpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBlendFuncSeparateOES(0x%04X, 0x%04X, 0x%04X, 0x%04X);\n", sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha); \
        } \
    } \
}
#define pack_glBufferData(target, size, data, usage) ({ \
    glBufferData_INDEXED *packed_data = malloc(sizeof(glBufferData_INDEXED)); \
    packed_data->func = glBufferData_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLsizeiptr)size; \
        packed_data->args.a3 = (GLvoid *)data; \
        packed_data->args.a4 = (GLenum)usage; \
            packed_data; \
})
#define emit_glBufferData(target, size, data, usage) { \
    mock_push(pack_glBufferData(target, size, data, usage)); \
}
#define test_glBufferData(target, size, data, usage) { \
    glBufferData_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBufferData missing (no calls left)\n"); \
    } else if (packed->func != glBufferData_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBufferData_INDEX); \
        if (! packed) { \
            mock_errorf("glBufferData missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBufferData:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != size) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = data; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(data)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                        if (packed->args.a4 != usage) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBufferData(0x%04X, %d, %p, 0x%04X);\n", target, size, data, usage); \
        } \
    } \
}
#define pack_glBufferSubData(target, offset, size, data) ({ \
    glBufferSubData_INDEXED *packed_data = malloc(sizeof(glBufferSubData_INDEXED)); \
    packed_data->func = glBufferSubData_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLintptr)offset; \
        packed_data->args.a3 = (GLsizeiptr)size; \
        packed_data->args.a4 = (GLvoid *)data; \
            packed_data; \
})
#define emit_glBufferSubData(target, offset, size, data) { \
    mock_push(pack_glBufferSubData(target, offset, size, data)); \
}
#define test_glBufferSubData(target, offset, size, data) { \
    glBufferSubData_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glBufferSubData missing (no calls left)\n"); \
    } else if (packed->func != glBufferSubData_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glBufferSubData_INDEX); \
        if (! packed) { \
            mock_errorf("glBufferSubData missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glBufferSubData:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != offset) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != size) { \
                    match = 0; \
        } \
                        void *a = packed->args.a4, *b = data; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(data)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glBufferSubData(0x%04X, %d, %d, %p);\n", target, offset, size, data); \
        } \
    } \
}
#define pack_glClear(mask) ({ \
    glClear_INDEXED *packed_data = malloc(sizeof(glClear_INDEXED)); \
    packed_data->func = glClear_INDEX; \
            packed_data->args.a1 = (GLbitfield)mask; \
            packed_data; \
})
#define emit_glClear(mask) { \
    mock_push(pack_glClear(mask)); \
}
#define test_glClear(mask) { \
    glClear_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClear missing (no calls left)\n"); \
    } else if (packed->func != glClear_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClear_INDEX); \
        if (! packed) { \
            mock_errorf("glClear missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClear:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mask) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClear(%d);\n", mask); \
        } \
    } \
}
#define pack_glClearColor(red, green, blue, alpha) ({ \
    glClearColor_INDEXED *packed_data = malloc(sizeof(glClearColor_INDEXED)); \
    packed_data->func = glClearColor_INDEX; \
            packed_data->args.a1 = (GLclampf)red; \
        packed_data->args.a2 = (GLclampf)green; \
        packed_data->args.a3 = (GLclampf)blue; \
        packed_data->args.a4 = (GLclampf)alpha; \
            packed_data; \
})
#define emit_glClearColor(red, green, blue, alpha) { \
    mock_push(pack_glClearColor(red, green, blue, alpha)); \
}
#define test_glClearColor(red, green, blue, alpha) { \
    glClearColor_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClearColor missing (no calls left)\n"); \
    } else if (packed->func != glClearColor_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClearColor_INDEX); \
        if (! packed) { \
            mock_errorf("glClearColor missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClearColor:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != red) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != green) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != blue) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != alpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClearColor(%p, %p, %p, %p);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glClearColorx(red, green, blue, alpha) ({ \
    glClearColorx_INDEXED *packed_data = malloc(sizeof(glClearColorx_INDEXED)); \
    packed_data->func = glClearColorx_INDEX; \
            packed_data->args.a1 = (GLclampx)red; \
        packed_data->args.a2 = (GLclampx)green; \
        packed_data->args.a3 = (GLclampx)blue; \
        packed_data->args.a4 = (GLclampx)alpha; \
            packed_data; \
})
#define emit_glClearColorx(red, green, blue, alpha) { \
    mock_push(pack_glClearColorx(red, green, blue, alpha)); \
}
#define test_glClearColorx(red, green, blue, alpha) { \
    glClearColorx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClearColorx missing (no calls left)\n"); \
    } else if (packed->func != glClearColorx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClearColorx_INDEX); \
        if (! packed) { \
            mock_errorf("glClearColorx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClearColorx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != red) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != green) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != blue) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != alpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClearColorx(%p, %p, %p, %p);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glClearDepthf(depth) ({ \
    glClearDepthf_INDEXED *packed_data = malloc(sizeof(glClearDepthf_INDEXED)); \
    packed_data->func = glClearDepthf_INDEX; \
            packed_data->args.a1 = (GLclampf)depth; \
            packed_data; \
})
#define emit_glClearDepthf(depth) { \
    mock_push(pack_glClearDepthf(depth)); \
}
#define test_glClearDepthf(depth) { \
    glClearDepthf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClearDepthf missing (no calls left)\n"); \
    } else if (packed->func != glClearDepthf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClearDepthf_INDEX); \
        if (! packed) { \
            mock_errorf("glClearDepthf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClearDepthf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != depth) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClearDepthf(%p);\n", depth); \
        } \
    } \
}
#define pack_glClearDepthx(depth) ({ \
    glClearDepthx_INDEXED *packed_data = malloc(sizeof(glClearDepthx_INDEXED)); \
    packed_data->func = glClearDepthx_INDEX; \
            packed_data->args.a1 = (GLclampx)depth; \
            packed_data; \
})
#define emit_glClearDepthx(depth) { \
    mock_push(pack_glClearDepthx(depth)); \
}
#define test_glClearDepthx(depth) { \
    glClearDepthx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClearDepthx missing (no calls left)\n"); \
    } else if (packed->func != glClearDepthx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClearDepthx_INDEX); \
        if (! packed) { \
            mock_errorf("glClearDepthx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClearDepthx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != depth) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClearDepthx(%p);\n", depth); \
        } \
    } \
}
#define pack_glClearStencil(s) ({ \
    glClearStencil_INDEXED *packed_data = malloc(sizeof(glClearStencil_INDEXED)); \
    packed_data->func = glClearStencil_INDEX; \
            packed_data->args.a1 = (GLint)s; \
            packed_data; \
})
#define emit_glClearStencil(s) { \
    mock_push(pack_glClearStencil(s)); \
}
#define test_glClearStencil(s) { \
    glClearStencil_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClearStencil missing (no calls left)\n"); \
    } else if (packed->func != glClearStencil_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClearStencil_INDEX); \
        if (! packed) { \
            mock_errorf("glClearStencil missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClearStencil:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != s) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClearStencil(%d);\n", s); \
        } \
    } \
}
#define pack_glClientActiveTexture(texture) ({ \
    glClientActiveTexture_INDEXED *packed_data = malloc(sizeof(glClientActiveTexture_INDEXED)); \
    packed_data->func = glClientActiveTexture_INDEX; \
            packed_data->args.a1 = (GLenum)texture; \
            packed_data; \
})
#define emit_glClientActiveTexture(texture) { \
    mock_push(pack_glClientActiveTexture(texture)); \
}
#define test_glClientActiveTexture(texture) { \
    glClientActiveTexture_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClientActiveTexture missing (no calls left)\n"); \
    } else if (packed->func != glClientActiveTexture_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClientActiveTexture_INDEX); \
        if (! packed) { \
            mock_errorf("glClientActiveTexture missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClientActiveTexture:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != texture) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClientActiveTexture(0x%04X);\n", texture); \
        } \
    } \
}
#define pack_glClipPlanef(plane, equation) ({ \
    glClipPlanef_INDEXED *packed_data = malloc(sizeof(glClipPlanef_INDEXED)); \
    packed_data->func = glClipPlanef_INDEX; \
            packed_data->args.a1 = (GLenum)plane; \
        packed_data->args.a2 = (GLfloat *)equation; \
            packed_data; \
})
#define emit_glClipPlanef(plane, equation) { \
    mock_push(pack_glClipPlanef(plane, equation)); \
}
#define test_glClipPlanef(plane, equation) { \
    glClipPlanef_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClipPlanef missing (no calls left)\n"); \
    } else if (packed->func != glClipPlanef_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClipPlanef_INDEX); \
        if (! packed) { \
            mock_errorf("glClipPlanef missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClipPlanef:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != plane) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = equation; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(equation)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClipPlanef(0x%04X, %p);\n", plane, equation); \
        } \
    } \
}
#define pack_glClipPlanex(plane, equation) ({ \
    glClipPlanex_INDEXED *packed_data = malloc(sizeof(glClipPlanex_INDEXED)); \
    packed_data->func = glClipPlanex_INDEX; \
            packed_data->args.a1 = (GLenum)plane; \
        packed_data->args.a2 = (GLfixed *)equation; \
            packed_data; \
})
#define emit_glClipPlanex(plane, equation) { \
    mock_push(pack_glClipPlanex(plane, equation)); \
}
#define test_glClipPlanex(plane, equation) { \
    glClipPlanex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glClipPlanex missing (no calls left)\n"); \
    } else if (packed->func != glClipPlanex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glClipPlanex_INDEX); \
        if (! packed) { \
            mock_errorf("glClipPlanex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glClipPlanex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != plane) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = equation; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(equation)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glClipPlanex(0x%04X, %p);\n", plane, equation); \
        } \
    } \
}
#define pack_glColor4f(red, green, blue, alpha) ({ \
    glColor4f_INDEXED *packed_data = malloc(sizeof(glColor4f_INDEXED)); \
    packed_data->func = glColor4f_INDEX; \
            packed_data->args.a1 = (GLfloat)red; \
        packed_data->args.a2 = (GLfloat)green; \
        packed_data->args.a3 = (GLfloat)blue; \
        packed_data->args.a4 = (GLfloat)alpha; \
            packed_data; \
})
#define emit_glColor4f(red, green, blue, alpha) { \
    mock_push(pack_glColor4f(red, green, blue, alpha)); \
}
#define test_glColor4f(red, green, blue, alpha) { \
    glColor4f_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glColor4f missing (no calls left)\n"); \
    } else if (packed->func != glColor4f_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glColor4f_INDEX); \
        if (! packed) { \
            mock_errorf("glColor4f missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glColor4f:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - red >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - green >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - blue >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a4 - alpha >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glColor4f(%0.2f, %0.2f, %0.2f, %0.2f);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glColor4ub(red, green, blue, alpha) ({ \
    glColor4ub_INDEXED *packed_data = malloc(sizeof(glColor4ub_INDEXED)); \
    packed_data->func = glColor4ub_INDEX; \
            packed_data->args.a1 = (GLubyte)red; \
        packed_data->args.a2 = (GLubyte)green; \
        packed_data->args.a3 = (GLubyte)blue; \
        packed_data->args.a4 = (GLubyte)alpha; \
            packed_data; \
})
#define emit_glColor4ub(red, green, blue, alpha) { \
    mock_push(pack_glColor4ub(red, green, blue, alpha)); \
}
#define test_glColor4ub(red, green, blue, alpha) { \
    glColor4ub_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glColor4ub missing (no calls left)\n"); \
    } else if (packed->func != glColor4ub_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glColor4ub_INDEX); \
        if (! packed) { \
            mock_errorf("glColor4ub missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glColor4ub:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != red) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != green) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != blue) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != alpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glColor4ub(%c, %c, %c, %c);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glColor4x(red, green, blue, alpha) ({ \
    glColor4x_INDEXED *packed_data = malloc(sizeof(glColor4x_INDEXED)); \
    packed_data->func = glColor4x_INDEX; \
            packed_data->args.a1 = (GLfixed)red; \
        packed_data->args.a2 = (GLfixed)green; \
        packed_data->args.a3 = (GLfixed)blue; \
        packed_data->args.a4 = (GLfixed)alpha; \
            packed_data; \
})
#define emit_glColor4x(red, green, blue, alpha) { \
    mock_push(pack_glColor4x(red, green, blue, alpha)); \
}
#define test_glColor4x(red, green, blue, alpha) { \
    glColor4x_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glColor4x missing (no calls left)\n"); \
    } else if (packed->func != glColor4x_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glColor4x_INDEX); \
        if (! packed) { \
            mock_errorf("glColor4x missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glColor4x:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != red) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != green) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != blue) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != alpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glColor4x(%p, %p, %p, %p);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glColorMask(red, green, blue, alpha) ({ \
    glColorMask_INDEXED *packed_data = malloc(sizeof(glColorMask_INDEXED)); \
    packed_data->func = glColorMask_INDEX; \
            packed_data->args.a1 = (GLboolean)red; \
        packed_data->args.a2 = (GLboolean)green; \
        packed_data->args.a3 = (GLboolean)blue; \
        packed_data->args.a4 = (GLboolean)alpha; \
            packed_data; \
})
#define emit_glColorMask(red, green, blue, alpha) { \
    mock_push(pack_glColorMask(red, green, blue, alpha)); \
}
#define test_glColorMask(red, green, blue, alpha) { \
    glColorMask_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glColorMask missing (no calls left)\n"); \
    } else if (packed->func != glColorMask_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glColorMask_INDEX); \
        if (! packed) { \
            mock_errorf("glColorMask missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glColorMask:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != red) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != green) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != blue) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != alpha) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glColorMask(%d, %d, %d, %d);\n", red, green, blue, alpha); \
        } \
    } \
}
#define pack_glColorPointer(size, type, stride, pointer) ({ \
    glColorPointer_INDEXED *packed_data = malloc(sizeof(glColorPointer_INDEXED)); \
    packed_data->func = glColorPointer_INDEX; \
            packed_data->args.a1 = (GLint)size; \
        packed_data->args.a2 = (GLenum)type; \
        packed_data->args.a3 = (GLsizei)stride; \
        packed_data->args.a4 = (GLvoid *)pointer; \
            packed_data; \
})
#define emit_glColorPointer(size, type, stride, pointer) { \
    mock_push(pack_glColorPointer(size, type, stride, pointer)); \
}
#define test_glColorPointer(size, type, stride, pointer) { \
    glColorPointer_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glColorPointer missing (no calls left)\n"); \
    } else if (packed->func != glColorPointer_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glColorPointer_INDEX); \
        if (! packed) { \
            mock_errorf("glColorPointer missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glColorPointer:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != size) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != type) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != stride) { \
                    match = 0; \
        } \
                        void *a = packed->args.a4, *b = pointer; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pointer)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glColorPointer(%d, 0x%04X, %d, %p);\n", size, type, stride, pointer); \
        } \
    } \
}
#define pack_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data) ({ \
    glCompressedTexImage2D_INDEXED *packed_data = malloc(sizeof(glCompressedTexImage2D_INDEXED)); \
    packed_data->func = glCompressedTexImage2D_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLenum)internalformat; \
        packed_data->args.a4 = (GLsizei)width; \
        packed_data->args.a5 = (GLsizei)height; \
        packed_data->args.a6 = (GLint)border; \
        packed_data->args.a7 = (GLsizei)imageSize; \
        packed_data->args.a8 = (GLvoid *)data; \
            packed_data; \
})
#define emit_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data) { \
    mock_push(pack_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data)); \
}
#define test_glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data) { \
    glCompressedTexImage2D_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glCompressedTexImage2D missing (no calls left)\n"); \
    } else if (packed->func != glCompressedTexImage2D_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glCompressedTexImage2D_INDEX); \
        if (! packed) { \
            mock_errorf("glCompressedTexImage2D missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glCompressedTexImage2D:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != level) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != internalformat) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != height) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != border) { \
                    match = 0; \
        } \
                        if (packed->args.a7 != imageSize) { \
                    match = 0; \
        } \
                        void *a = packed->args.a8, *b = data; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(data)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glCompressedTexImage2D(0x%04X, %d, 0x%04X, %d, %d, %d, %d, %p);\n", target, level, internalformat, width, height, border, imageSize, data); \
        } \
    } \
}
#define pack_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data) ({ \
    glCompressedTexSubImage2D_INDEXED *packed_data = malloc(sizeof(glCompressedTexSubImage2D_INDEXED)); \
    packed_data->func = glCompressedTexSubImage2D_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)xoffset; \
        packed_data->args.a4 = (GLint)yoffset; \
        packed_data->args.a5 = (GLsizei)width; \
        packed_data->args.a6 = (GLsizei)height; \
        packed_data->args.a7 = (GLenum)format; \
        packed_data->args.a8 = (GLsizei)imageSize; \
        packed_data->args.a9 = (GLvoid *)data; \
            packed_data; \
})
#define emit_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data) { \
    mock_push(pack_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data)); \
}
#define test_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data) { \
    glCompressedTexSubImage2D_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glCompressedTexSubImage2D missing (no calls left)\n"); \
    } else if (packed->func != glCompressedTexSubImage2D_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glCompressedTexSubImage2D_INDEX); \
        if (! packed) { \
            mock_errorf("glCompressedTexSubImage2D missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glCompressedTexSubImage2D:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != level) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != xoffset) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != yoffset) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != height) { \
                    match = 0; \
        } \
                        if (packed->args.a7 != format) { \
                    match = 0; \
        } \
                        if (packed->args.a8 != imageSize) { \
                    match = 0; \
        } \
                        void *a = packed->args.a9, *b = data; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(data)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glCompressedTexSubImage2D(0x%04X, %d, %d, %d, %d, %d, 0x%04X, %d, %p);\n", target, level, xoffset, yoffset, width, height, format, imageSize, data); \
        } \
    } \
}
#define pack_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border) ({ \
    glCopyTexImage2D_INDEXED *packed_data = malloc(sizeof(glCopyTexImage2D_INDEXED)); \
    packed_data->func = glCopyTexImage2D_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLenum)internalformat; \
        packed_data->args.a4 = (GLint)x; \
        packed_data->args.a5 = (GLint)y; \
        packed_data->args.a6 = (GLsizei)width; \
        packed_data->args.a7 = (GLsizei)height; \
        packed_data->args.a8 = (GLint)border; \
            packed_data; \
})
#define emit_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border) { \
    mock_push(pack_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border)); \
}
#define test_glCopyTexImage2D(target, level, internalformat, x, y, width, height, border) { \
    glCopyTexImage2D_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glCopyTexImage2D missing (no calls left)\n"); \
    } else if (packed->func != glCopyTexImage2D_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glCopyTexImage2D_INDEX); \
        if (! packed) { \
            mock_errorf("glCopyTexImage2D missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glCopyTexImage2D:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != level) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != internalformat) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a7 != height) { \
                    match = 0; \
        } \
                        if (packed->args.a8 != border) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glCopyTexImage2D(0x%04X, %d, 0x%04X, %d, %d, %d, %d, %d);\n", target, level, internalformat, x, y, width, height, border); \
        } \
    } \
}
#define pack_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) ({ \
    glCopyTexSubImage2D_INDEXED *packed_data = malloc(sizeof(glCopyTexSubImage2D_INDEXED)); \
    packed_data->func = glCopyTexSubImage2D_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)xoffset; \
        packed_data->args.a4 = (GLint)yoffset; \
        packed_data->args.a5 = (GLint)x; \
        packed_data->args.a6 = (GLint)y; \
        packed_data->args.a7 = (GLsizei)width; \
        packed_data->args.a8 = (GLsizei)height; \
            packed_data; \
})
#define emit_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) { \
    mock_push(pack_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height)); \
}
#define test_glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height) { \
    glCopyTexSubImage2D_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glCopyTexSubImage2D missing (no calls left)\n"); \
    } else if (packed->func != glCopyTexSubImage2D_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glCopyTexSubImage2D_INDEX); \
        if (! packed) { \
            mock_errorf("glCopyTexSubImage2D missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glCopyTexSubImage2D:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != level) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != xoffset) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != yoffset) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a7 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a8 != height) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glCopyTexSubImage2D(0x%04X, %d, %d, %d, %d, %d, %d, %d);\n", target, level, xoffset, yoffset, x, y, width, height); \
        } \
    } \
}
#define pack_glCullFace(mode) ({ \
    glCullFace_INDEXED *packed_data = malloc(sizeof(glCullFace_INDEXED)); \
    packed_data->func = glCullFace_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
            packed_data; \
})
#define emit_glCullFace(mode) { \
    mock_push(pack_glCullFace(mode)); \
}
#define test_glCullFace(mode) { \
    glCullFace_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glCullFace missing (no calls left)\n"); \
    } else if (packed->func != glCullFace_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glCullFace_INDEX); \
        if (! packed) { \
            mock_errorf("glCullFace missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glCullFace:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glCullFace(0x%04X);\n", mode); \
        } \
    } \
}
#define pack_glDeleteBuffers(n, buffers) ({ \
    glDeleteBuffers_INDEXED *packed_data = malloc(sizeof(glDeleteBuffers_INDEXED)); \
    packed_data->func = glDeleteBuffers_INDEX; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)buffers; \
            packed_data; \
})
#define emit_glDeleteBuffers(n, buffers) { \
    mock_push(pack_glDeleteBuffers(n, buffers)); \
}
#define test_glDeleteBuffers(n, buffers) { \
    glDeleteBuffers_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDeleteBuffers missing (no calls left)\n"); \
    } else if (packed->func != glDeleteBuffers_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDeleteBuffers_INDEX); \
        if (! packed) { \
            mock_errorf("glDeleteBuffers missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDeleteBuffers:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != n) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = buffers; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(buffers)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDeleteBuffers(%d, %p);\n", n, buffers); \
        } \
    } \
}
#define pack_glDeleteTextures(n, textures) ({ \
    glDeleteTextures_INDEXED *packed_data = malloc(sizeof(glDeleteTextures_INDEXED)); \
    packed_data->func = glDeleteTextures_INDEX; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)textures; \
            packed_data; \
})
#define emit_glDeleteTextures(n, textures) { \
    mock_push(pack_glDeleteTextures(n, textures)); \
}
#define test_glDeleteTextures(n, textures) { \
    glDeleteTextures_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDeleteTextures missing (no calls left)\n"); \
    } else if (packed->func != glDeleteTextures_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDeleteTextures_INDEX); \
        if (! packed) { \
            mock_errorf("glDeleteTextures missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDeleteTextures:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != n) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = textures; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(textures)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDeleteTextures(%d, %p);\n", n, textures); \
        } \
    } \
}
#define pack_glDepthFunc(func) ({ \
    glDepthFunc_INDEXED *packed_data = malloc(sizeof(glDepthFunc_INDEXED)); \
    packed_data->func = glDepthFunc_INDEX; \
            packed_data->args.a1 = (GLenum)func; \
            packed_data; \
})
#define emit_glDepthFunc(func) { \
    mock_push(pack_glDepthFunc(func)); \
}
#define test_glDepthFunc(func) { \
    glDepthFunc_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDepthFunc missing (no calls left)\n"); \
    } else if (packed->func != glDepthFunc_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDepthFunc_INDEX); \
        if (! packed) { \
            mock_errorf("glDepthFunc missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDepthFunc:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != func) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDepthFunc(0x%04X);\n", func); \
        } \
    } \
}
#define pack_glDepthMask(flag) ({ \
    glDepthMask_INDEXED *packed_data = malloc(sizeof(glDepthMask_INDEXED)); \
    packed_data->func = glDepthMask_INDEX; \
            packed_data->args.a1 = (GLboolean)flag; \
            packed_data; \
})
#define emit_glDepthMask(flag) { \
    mock_push(pack_glDepthMask(flag)); \
}
#define test_glDepthMask(flag) { \
    glDepthMask_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDepthMask missing (no calls left)\n"); \
    } else if (packed->func != glDepthMask_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDepthMask_INDEX); \
        if (! packed) { \
            mock_errorf("glDepthMask missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDepthMask:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != flag) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDepthMask(%d);\n", flag); \
        } \
    } \
}
#define pack_glDepthRangef(near, far) ({ \
    glDepthRangef_INDEXED *packed_data = malloc(sizeof(glDepthRangef_INDEXED)); \
    packed_data->func = glDepthRangef_INDEX; \
            packed_data->args.a1 = (GLclampf)near; \
        packed_data->args.a2 = (GLclampf)far; \
            packed_data; \
})
#define emit_glDepthRangef(near, far) { \
    mock_push(pack_glDepthRangef(near, far)); \
}
#define test_glDepthRangef(near, far) { \
    glDepthRangef_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDepthRangef missing (no calls left)\n"); \
    } else if (packed->func != glDepthRangef_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDepthRangef_INDEX); \
        if (! packed) { \
            mock_errorf("glDepthRangef missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDepthRangef:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != near) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != far) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDepthRangef(%p, %p);\n", near, far); \
        } \
    } \
}
#define pack_glDepthRangex(near, far) ({ \
    glDepthRangex_INDEXED *packed_data = malloc(sizeof(glDepthRangex_INDEXED)); \
    packed_data->func = glDepthRangex_INDEX; \
            packed_data->args.a1 = (GLclampx)near; \
        packed_data->args.a2 = (GLclampx)far; \
            packed_data; \
})
#define emit_glDepthRangex(near, far) { \
    mock_push(pack_glDepthRangex(near, far)); \
}
#define test_glDepthRangex(near, far) { \
    glDepthRangex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDepthRangex missing (no calls left)\n"); \
    } else if (packed->func != glDepthRangex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDepthRangex_INDEX); \
        if (! packed) { \
            mock_errorf("glDepthRangex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDepthRangex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != near) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != far) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDepthRangex(%p, %p);\n", near, far); \
        } \
    } \
}
#define pack_glDisable(cap) ({ \
    glDisable_INDEXED *packed_data = malloc(sizeof(glDisable_INDEXED)); \
    packed_data->func = glDisable_INDEX; \
            packed_data->args.a1 = (GLenum)cap; \
            packed_data; \
})
#define emit_glDisable(cap) { \
    mock_push(pack_glDisable(cap)); \
}
#define test_glDisable(cap) { \
    glDisable_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDisable missing (no calls left)\n"); \
    } else if (packed->func != glDisable_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDisable_INDEX); \
        if (! packed) { \
            mock_errorf("glDisable missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDisable:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != cap) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDisable(0x%04X);\n", cap); \
        } \
    } \
}
#define pack_glDisableClientState(array) ({ \
    glDisableClientState_INDEXED *packed_data = malloc(sizeof(glDisableClientState_INDEXED)); \
    packed_data->func = glDisableClientState_INDEX; \
            packed_data->args.a1 = (GLenum)array; \
            packed_data; \
})
#define emit_glDisableClientState(array) { \
    mock_push(pack_glDisableClientState(array)); \
}
#define test_glDisableClientState(array) { \
    glDisableClientState_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDisableClientState missing (no calls left)\n"); \
    } else if (packed->func != glDisableClientState_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDisableClientState_INDEX); \
        if (! packed) { \
            mock_errorf("glDisableClientState missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDisableClientState:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != array) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDisableClientState(0x%04X);\n", array); \
        } \
    } \
}
#define pack_glDrawArrays(mode, first, count) ({ \
    glDrawArrays_INDEXED *packed_data = malloc(sizeof(glDrawArrays_INDEXED)); \
    packed_data->func = glDrawArrays_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
        packed_data->args.a2 = (GLint)first; \
        packed_data->args.a3 = (GLsizei)count; \
            packed_data; \
})
#define emit_glDrawArrays(mode, first, count) { \
    mock_push(pack_glDrawArrays(mode, first, count)); \
}
#define test_glDrawArrays(mode, first, count) { \
    glDrawArrays_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDrawArrays missing (no calls left)\n"); \
    } else if (packed->func != glDrawArrays_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDrawArrays_INDEX); \
        if (! packed) { \
            mock_errorf("glDrawArrays missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDrawArrays:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != first) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != count) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDrawArrays(0x%04X, %d, %d);\n", mode, first, count); \
        } \
    } \
}
#define pack_glDrawElements(mode, count, type, indices) ({ \
    glDrawElements_INDEXED *packed_data = malloc(sizeof(glDrawElements_INDEXED)); \
    packed_data->func = glDrawElements_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
        packed_data->args.a2 = (GLsizei)count; \
        packed_data->args.a3 = (GLenum)type; \
        packed_data->args.a4 = (GLvoid *)indices; \
            packed_data; \
})
#define emit_glDrawElements(mode, count, type, indices) { \
    mock_push(pack_glDrawElements(mode, count, type, indices)); \
}
#define test_glDrawElements(mode, count, type, indices) { \
    glDrawElements_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glDrawElements missing (no calls left)\n"); \
    } else if (packed->func != glDrawElements_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glDrawElements_INDEX); \
        if (! packed) { \
            mock_errorf("glDrawElements missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glDrawElements:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != count) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != type) { \
                    match = 0; \
        } \
                        void *a = packed->args.a4, *b = indices; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(indices)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glDrawElements(0x%04X, %d, 0x%04X, %p);\n", mode, count, type, indices); \
        } \
    } \
}
#define pack_glEnable(cap) ({ \
    glEnable_INDEXED *packed_data = malloc(sizeof(glEnable_INDEXED)); \
    packed_data->func = glEnable_INDEX; \
            packed_data->args.a1 = (GLenum)cap; \
            packed_data; \
})
#define emit_glEnable(cap) { \
    mock_push(pack_glEnable(cap)); \
}
#define test_glEnable(cap) { \
    glEnable_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glEnable missing (no calls left)\n"); \
    } else if (packed->func != glEnable_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glEnable_INDEX); \
        if (! packed) { \
            mock_errorf("glEnable missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glEnable:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != cap) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glEnable(0x%04X);\n", cap); \
        } \
    } \
}
#define pack_glEnableClientState(array) ({ \
    glEnableClientState_INDEXED *packed_data = malloc(sizeof(glEnableClientState_INDEXED)); \
    packed_data->func = glEnableClientState_INDEX; \
            packed_data->args.a1 = (GLenum)array; \
            packed_data; \
})
#define emit_glEnableClientState(array) { \
    mock_push(pack_glEnableClientState(array)); \
}
#define test_glEnableClientState(array) { \
    glEnableClientState_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glEnableClientState missing (no calls left)\n"); \
    } else if (packed->func != glEnableClientState_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glEnableClientState_INDEX); \
        if (! packed) { \
            mock_errorf("glEnableClientState missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glEnableClientState:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != array) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glEnableClientState(0x%04X);\n", array); \
        } \
    } \
}
#define pack_glFinish() ({ \
    glFinish_INDEXED *packed_data = malloc(sizeof(glFinish_INDEXED)); \
    packed_data->func = glFinish_INDEX; \
        packed_data; \
})
#define emit_glFinish() { \
    mock_push(pack_glFinish()); \
}
#define test_glFinish() { \
    glFinish_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFinish missing (no calls left)\n"); \
    } else if (packed->func != glFinish_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFinish_INDEX); \
        if (! packed) { \
            mock_errorf("glFinish missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFinish:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFinish();\n", ); \
        } \
    } \
}
#define pack_glFlush() ({ \
    glFlush_INDEXED *packed_data = malloc(sizeof(glFlush_INDEXED)); \
    packed_data->func = glFlush_INDEX; \
        packed_data; \
})
#define emit_glFlush() { \
    mock_push(pack_glFlush()); \
}
#define test_glFlush() { \
    glFlush_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFlush missing (no calls left)\n"); \
    } else if (packed->func != glFlush_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFlush_INDEX); \
        if (! packed) { \
            mock_errorf("glFlush missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFlush:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFlush();\n", ); \
        } \
    } \
}
#define pack_glFogf(pname, param) ({ \
    glFogf_INDEXED *packed_data = malloc(sizeof(glFogf_INDEXED)); \
    packed_data->func = glFogf_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat)param; \
            packed_data; \
})
#define emit_glFogf(pname, param) { \
    mock_push(pack_glFogf(pname, param)); \
}
#define test_glFogf(pname, param) { \
    glFogf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFogf missing (no calls left)\n"); \
    } else if (packed->func != glFogf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFogf_INDEX); \
        if (! packed) { \
            mock_errorf("glFogf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFogf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFogf(0x%04X, %0.2f);\n", pname, param); \
        } \
    } \
}
#define pack_glFogfv(pname, params) ({ \
    glFogfv_INDEXED *packed_data = malloc(sizeof(glFogfv_INDEXED)); \
    packed_data->func = glFogfv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glFogfv(pname, params) { \
    mock_push(pack_glFogfv(pname, params)); \
}
#define test_glFogfv(pname, params) { \
    glFogfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFogfv missing (no calls left)\n"); \
    } else if (packed->func != glFogfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFogfv_INDEX); \
        if (! packed) { \
            mock_errorf("glFogfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFogfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFogfv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glFogx(pname, param) ({ \
    glFogx_INDEXED *packed_data = malloc(sizeof(glFogx_INDEXED)); \
    packed_data->func = glFogx_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed)param; \
            packed_data; \
})
#define emit_glFogx(pname, param) { \
    mock_push(pack_glFogx(pname, param)); \
}
#define test_glFogx(pname, param) { \
    glFogx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFogx missing (no calls left)\n"); \
    } else if (packed->func != glFogx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFogx_INDEX); \
        if (! packed) { \
            mock_errorf("glFogx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFogx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFogx(0x%04X, %p);\n", pname, param); \
        } \
    } \
}
#define pack_glFogxv(pname, params) ({ \
    glFogxv_INDEXED *packed_data = malloc(sizeof(glFogxv_INDEXED)); \
    packed_data->func = glFogxv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glFogxv(pname, params) { \
    mock_push(pack_glFogxv(pname, params)); \
}
#define test_glFogxv(pname, params) { \
    glFogxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFogxv missing (no calls left)\n"); \
    } else if (packed->func != glFogxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFogxv_INDEX); \
        if (! packed) { \
            mock_errorf("glFogxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFogxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFogxv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glFrontFace(mode) ({ \
    glFrontFace_INDEXED *packed_data = malloc(sizeof(glFrontFace_INDEXED)); \
    packed_data->func = glFrontFace_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
            packed_data; \
})
#define emit_glFrontFace(mode) { \
    mock_push(pack_glFrontFace(mode)); \
}
#define test_glFrontFace(mode) { \
    glFrontFace_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFrontFace missing (no calls left)\n"); \
    } else if (packed->func != glFrontFace_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFrontFace_INDEX); \
        if (! packed) { \
            mock_errorf("glFrontFace missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFrontFace:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFrontFace(0x%04X);\n", mode); \
        } \
    } \
}
#define pack_glFrustumf(left, right, bottom, top, near, far) ({ \
    glFrustumf_INDEXED *packed_data = malloc(sizeof(glFrustumf_INDEXED)); \
    packed_data->func = glFrustumf_INDEX; \
            packed_data->args.a1 = (GLfloat)left; \
        packed_data->args.a2 = (GLfloat)right; \
        packed_data->args.a3 = (GLfloat)bottom; \
        packed_data->args.a4 = (GLfloat)top; \
        packed_data->args.a5 = (GLfloat)near; \
        packed_data->args.a6 = (GLfloat)far; \
            packed_data; \
})
#define emit_glFrustumf(left, right, bottom, top, near, far) { \
    mock_push(pack_glFrustumf(left, right, bottom, top, near, far)); \
}
#define test_glFrustumf(left, right, bottom, top, near, far) { \
    glFrustumf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFrustumf missing (no calls left)\n"); \
    } else if (packed->func != glFrustumf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFrustumf_INDEX); \
        if (! packed) { \
            mock_errorf("glFrustumf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFrustumf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - left >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - right >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - bottom >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a4 - top >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a5 - near >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a6 - far >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFrustumf(%0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f);\n", left, right, bottom, top, near, far); \
        } \
    } \
}
#define pack_glFrustumx(left, right, bottom, top, near, far) ({ \
    glFrustumx_INDEXED *packed_data = malloc(sizeof(glFrustumx_INDEXED)); \
    packed_data->func = glFrustumx_INDEX; \
            packed_data->args.a1 = (GLfixed)left; \
        packed_data->args.a2 = (GLfixed)right; \
        packed_data->args.a3 = (GLfixed)bottom; \
        packed_data->args.a4 = (GLfixed)top; \
        packed_data->args.a5 = (GLfixed)near; \
        packed_data->args.a6 = (GLfixed)far; \
            packed_data; \
})
#define emit_glFrustumx(left, right, bottom, top, near, far) { \
    mock_push(pack_glFrustumx(left, right, bottom, top, near, far)); \
}
#define test_glFrustumx(left, right, bottom, top, near, far) { \
    glFrustumx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glFrustumx missing (no calls left)\n"); \
    } else if (packed->func != glFrustumx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glFrustumx_INDEX); \
        if (! packed) { \
            mock_errorf("glFrustumx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glFrustumx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != left) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != right) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != bottom) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != top) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != near) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != far) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glFrustumx(%p, %p, %p, %p, %p, %p);\n", left, right, bottom, top, near, far); \
        } \
    } \
}
#define pack_glGenBuffers(n, buffers) ({ \
    glGenBuffers_INDEXED *packed_data = malloc(sizeof(glGenBuffers_INDEXED)); \
    packed_data->func = glGenBuffers_INDEX; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)buffers; \
            packed_data; \
})
#define emit_glGenBuffers(n, buffers) { \
    mock_push(pack_glGenBuffers(n, buffers)); \
}
#define test_glGenBuffers(n, buffers) { \
    glGenBuffers_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGenBuffers missing (no calls left)\n"); \
    } else if (packed->func != glGenBuffers_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGenBuffers_INDEX); \
        if (! packed) { \
            mock_errorf("glGenBuffers missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGenBuffers:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != n) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = buffers; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(buffers)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGenBuffers(%d, %p);\n", n, buffers); \
        } \
    } \
}
#define pack_glGenTextures(n, textures) ({ \
    glGenTextures_INDEXED *packed_data = malloc(sizeof(glGenTextures_INDEXED)); \
    packed_data->func = glGenTextures_INDEX; \
            packed_data->args.a1 = (GLsizei)n; \
        packed_data->args.a2 = (GLuint *)textures; \
            packed_data; \
})
#define emit_glGenTextures(n, textures) { \
    mock_push(pack_glGenTextures(n, textures)); \
}
#define test_glGenTextures(n, textures) { \
    glGenTextures_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGenTextures missing (no calls left)\n"); \
    } else if (packed->func != glGenTextures_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGenTextures_INDEX); \
        if (! packed) { \
            mock_errorf("glGenTextures missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGenTextures:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != n) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = textures; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(textures)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGenTextures(%d, %p);\n", n, textures); \
        } \
    } \
}
#define pack_glGetBooleanv(pname, params) ({ \
    glGetBooleanv_INDEXED *packed_data = malloc(sizeof(glGetBooleanv_INDEXED)); \
    packed_data->func = glGetBooleanv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLboolean *)params; \
            packed_data; \
})
#define emit_glGetBooleanv(pname, params) { \
    mock_push(pack_glGetBooleanv(pname, params)); \
}
#define test_glGetBooleanv(pname, params) { \
    glGetBooleanv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetBooleanv missing (no calls left)\n"); \
    } else if (packed->func != glGetBooleanv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetBooleanv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetBooleanv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetBooleanv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetBooleanv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glGetBufferParameteriv(target, pname, params) ({ \
    glGetBufferParameteriv_INDEXED *packed_data = malloc(sizeof(glGetBufferParameteriv_INDEXED)); \
    packed_data->func = glGetBufferParameteriv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            packed_data; \
})
#define emit_glGetBufferParameteriv(target, pname, params) { \
    mock_push(pack_glGetBufferParameteriv(target, pname, params)); \
}
#define test_glGetBufferParameteriv(target, pname, params) { \
    glGetBufferParameteriv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetBufferParameteriv missing (no calls left)\n"); \
    } else if (packed->func != glGetBufferParameteriv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetBufferParameteriv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetBufferParameteriv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetBufferParameteriv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetBufferParameteriv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glGetClipPlanef(plane, equation) ({ \
    glGetClipPlanef_INDEXED *packed_data = malloc(sizeof(glGetClipPlanef_INDEXED)); \
    packed_data->func = glGetClipPlanef_INDEX; \
            packed_data->args.a1 = (GLenum)plane; \
        packed_data->args.a2 = (GLfloat *)equation; \
            packed_data; \
})
#define emit_glGetClipPlanef(plane, equation) { \
    mock_push(pack_glGetClipPlanef(plane, equation)); \
}
#define test_glGetClipPlanef(plane, equation) { \
    glGetClipPlanef_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetClipPlanef missing (no calls left)\n"); \
    } else if (packed->func != glGetClipPlanef_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetClipPlanef_INDEX); \
        if (! packed) { \
            mock_errorf("glGetClipPlanef missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetClipPlanef:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != plane) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = equation; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(equation)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetClipPlanef(0x%04X, %p);\n", plane, equation); \
        } \
    } \
}
#define pack_glGetClipPlanex(plane, equation) ({ \
    glGetClipPlanex_INDEXED *packed_data = malloc(sizeof(glGetClipPlanex_INDEXED)); \
    packed_data->func = glGetClipPlanex_INDEX; \
            packed_data->args.a1 = (GLenum)plane; \
        packed_data->args.a2 = (GLfixed *)equation; \
            packed_data; \
})
#define emit_glGetClipPlanex(plane, equation) { \
    mock_push(pack_glGetClipPlanex(plane, equation)); \
}
#define test_glGetClipPlanex(plane, equation) { \
    glGetClipPlanex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetClipPlanex missing (no calls left)\n"); \
    } else if (packed->func != glGetClipPlanex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetClipPlanex_INDEX); \
        if (! packed) { \
            mock_errorf("glGetClipPlanex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetClipPlanex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != plane) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = equation; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(equation)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetClipPlanex(0x%04X, %p);\n", plane, equation); \
        } \
    } \
}
#define pack_glGetError() ({ \
    glGetError_INDEXED *packed_data = malloc(sizeof(glGetError_INDEXED)); \
    packed_data->func = glGetError_INDEX; \
        packed_data; \
})
#define emit_glGetError() { \
    mock_push(pack_glGetError()); \
}
#define test_glGetError() { \
    glGetError_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetError missing (no calls left)\n"); \
    } else if (packed->func != glGetError_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetError_INDEX); \
        if (! packed) { \
            mock_errorf("glGetError missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetError:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetError();\n", ); \
        } \
    } \
}
#define pack_glGetFixedv(pname, params) ({ \
    glGetFixedv_INDEXED *packed_data = malloc(sizeof(glGetFixedv_INDEXED)); \
    packed_data->func = glGetFixedv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glGetFixedv(pname, params) { \
    mock_push(pack_glGetFixedv(pname, params)); \
}
#define test_glGetFixedv(pname, params) { \
    glGetFixedv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetFixedv missing (no calls left)\n"); \
    } else if (packed->func != glGetFixedv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetFixedv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetFixedv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetFixedv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetFixedv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glGetFloatv(pname, params) ({ \
    glGetFloatv_INDEXED *packed_data = malloc(sizeof(glGetFloatv_INDEXED)); \
    packed_data->func = glGetFloatv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glGetFloatv(pname, params) { \
    mock_push(pack_glGetFloatv(pname, params)); \
}
#define test_glGetFloatv(pname, params) { \
    glGetFloatv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetFloatv missing (no calls left)\n"); \
    } else if (packed->func != glGetFloatv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetFloatv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetFloatv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetFloatv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetFloatv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glGetIntegerv(pname, params) ({ \
    glGetIntegerv_INDEXED *packed_data = malloc(sizeof(glGetIntegerv_INDEXED)); \
    packed_data->func = glGetIntegerv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLint *)params; \
            packed_data; \
})
#define emit_glGetIntegerv(pname, params) { \
    mock_push(pack_glGetIntegerv(pname, params)); \
}
#define test_glGetIntegerv(pname, params) { \
    glGetIntegerv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetIntegerv missing (no calls left)\n"); \
    } else if (packed->func != glGetIntegerv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetIntegerv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetIntegerv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetIntegerv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetIntegerv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glGetLightfv(light, pname, params) ({ \
    glGetLightfv_INDEXED *packed_data = malloc(sizeof(glGetLightfv_INDEXED)); \
    packed_data->func = glGetLightfv_INDEX; \
            packed_data->args.a1 = (GLenum)light; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glGetLightfv(light, pname, params) { \
    mock_push(pack_glGetLightfv(light, pname, params)); \
}
#define test_glGetLightfv(light, pname, params) { \
    glGetLightfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetLightfv missing (no calls left)\n"); \
    } else if (packed->func != glGetLightfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetLightfv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetLightfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetLightfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != light) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetLightfv(0x%04X, 0x%04X, %p);\n", light, pname, params); \
        } \
    } \
}
#define pack_glGetLightxv(light, pname, params) ({ \
    glGetLightxv_INDEXED *packed_data = malloc(sizeof(glGetLightxv_INDEXED)); \
    packed_data->func = glGetLightxv_INDEX; \
            packed_data->args.a1 = (GLenum)light; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glGetLightxv(light, pname, params) { \
    mock_push(pack_glGetLightxv(light, pname, params)); \
}
#define test_glGetLightxv(light, pname, params) { \
    glGetLightxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetLightxv missing (no calls left)\n"); \
    } else if (packed->func != glGetLightxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetLightxv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetLightxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetLightxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != light) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetLightxv(0x%04X, 0x%04X, %p);\n", light, pname, params); \
        } \
    } \
}
#define pack_glGetMaterialfv(face, pname, params) ({ \
    glGetMaterialfv_INDEXED *packed_data = malloc(sizeof(glGetMaterialfv_INDEXED)); \
    packed_data->func = glGetMaterialfv_INDEX; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glGetMaterialfv(face, pname, params) { \
    mock_push(pack_glGetMaterialfv(face, pname, params)); \
}
#define test_glGetMaterialfv(face, pname, params) { \
    glGetMaterialfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetMaterialfv missing (no calls left)\n"); \
    } else if (packed->func != glGetMaterialfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetMaterialfv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetMaterialfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetMaterialfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != face) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetMaterialfv(0x%04X, 0x%04X, %p);\n", face, pname, params); \
        } \
    } \
}
#define pack_glGetMaterialxv(face, pname, params) ({ \
    glGetMaterialxv_INDEXED *packed_data = malloc(sizeof(glGetMaterialxv_INDEXED)); \
    packed_data->func = glGetMaterialxv_INDEX; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glGetMaterialxv(face, pname, params) { \
    mock_push(pack_glGetMaterialxv(face, pname, params)); \
}
#define test_glGetMaterialxv(face, pname, params) { \
    glGetMaterialxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetMaterialxv missing (no calls left)\n"); \
    } else if (packed->func != glGetMaterialxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetMaterialxv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetMaterialxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetMaterialxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != face) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetMaterialxv(0x%04X, 0x%04X, %p);\n", face, pname, params); \
        } \
    } \
}
#define pack_glGetPointerv(pname, params) ({ \
    glGetPointerv_INDEXED *packed_data = malloc(sizeof(glGetPointerv_INDEXED)); \
    packed_data->func = glGetPointerv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLvoid **)params; \
            packed_data; \
})
#define emit_glGetPointerv(pname, params) { \
    mock_push(pack_glGetPointerv(pname, params)); \
}
#define test_glGetPointerv(pname, params) { \
    glGetPointerv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetPointerv missing (no calls left)\n"); \
    } else if (packed->func != glGetPointerv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetPointerv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetPointerv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetPointerv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetPointerv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glGetString(name) ({ \
    glGetString_INDEXED *packed_data = malloc(sizeof(glGetString_INDEXED)); \
    packed_data->func = glGetString_INDEX; \
            packed_data->args.a1 = (GLenum)name; \
            packed_data; \
})
#define emit_glGetString(name) { \
    mock_push(pack_glGetString(name)); \
}
#define test_glGetString(name) { \
    glGetString_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetString missing (no calls left)\n"); \
    } else if (packed->func != glGetString_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetString_INDEX); \
        if (! packed) { \
            mock_errorf("glGetString missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetString:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != name) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetString(0x%04X);\n", name); \
        } \
    } \
}
#define pack_glGetTexEnvfv(target, pname, params) ({ \
    glGetTexEnvfv_INDEXED *packed_data = malloc(sizeof(glGetTexEnvfv_INDEXED)); \
    packed_data->func = glGetTexEnvfv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glGetTexEnvfv(target, pname, params) { \
    mock_push(pack_glGetTexEnvfv(target, pname, params)); \
}
#define test_glGetTexEnvfv(target, pname, params) { \
    glGetTexEnvfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetTexEnvfv missing (no calls left)\n"); \
    } else if (packed->func != glGetTexEnvfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetTexEnvfv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetTexEnvfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetTexEnvfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetTexEnvfv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glGetTexEnviv(target, pname, params) ({ \
    glGetTexEnviv_INDEXED *packed_data = malloc(sizeof(glGetTexEnviv_INDEXED)); \
    packed_data->func = glGetTexEnviv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            packed_data; \
})
#define emit_glGetTexEnviv(target, pname, params) { \
    mock_push(pack_glGetTexEnviv(target, pname, params)); \
}
#define test_glGetTexEnviv(target, pname, params) { \
    glGetTexEnviv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetTexEnviv missing (no calls left)\n"); \
    } else if (packed->func != glGetTexEnviv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetTexEnviv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetTexEnviv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetTexEnviv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetTexEnviv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glGetTexEnvxv(target, pname, params) ({ \
    glGetTexEnvxv_INDEXED *packed_data = malloc(sizeof(glGetTexEnvxv_INDEXED)); \
    packed_data->func = glGetTexEnvxv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glGetTexEnvxv(target, pname, params) { \
    mock_push(pack_glGetTexEnvxv(target, pname, params)); \
}
#define test_glGetTexEnvxv(target, pname, params) { \
    glGetTexEnvxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetTexEnvxv missing (no calls left)\n"); \
    } else if (packed->func != glGetTexEnvxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetTexEnvxv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetTexEnvxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetTexEnvxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetTexEnvxv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glGetTexParameterfv(target, pname, params) ({ \
    glGetTexParameterfv_INDEXED *packed_data = malloc(sizeof(glGetTexParameterfv_INDEXED)); \
    packed_data->func = glGetTexParameterfv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glGetTexParameterfv(target, pname, params) { \
    mock_push(pack_glGetTexParameterfv(target, pname, params)); \
}
#define test_glGetTexParameterfv(target, pname, params) { \
    glGetTexParameterfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetTexParameterfv missing (no calls left)\n"); \
    } else if (packed->func != glGetTexParameterfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetTexParameterfv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetTexParameterfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetTexParameterfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetTexParameterfv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glGetTexParameteriv(target, pname, params) ({ \
    glGetTexParameteriv_INDEXED *packed_data = malloc(sizeof(glGetTexParameteriv_INDEXED)); \
    packed_data->func = glGetTexParameteriv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            packed_data; \
})
#define emit_glGetTexParameteriv(target, pname, params) { \
    mock_push(pack_glGetTexParameteriv(target, pname, params)); \
}
#define test_glGetTexParameteriv(target, pname, params) { \
    glGetTexParameteriv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetTexParameteriv missing (no calls left)\n"); \
    } else if (packed->func != glGetTexParameteriv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetTexParameteriv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetTexParameteriv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetTexParameteriv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetTexParameteriv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glGetTexParameterxv(target, pname, params) ({ \
    glGetTexParameterxv_INDEXED *packed_data = malloc(sizeof(glGetTexParameterxv_INDEXED)); \
    packed_data->func = glGetTexParameterxv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glGetTexParameterxv(target, pname, params) { \
    mock_push(pack_glGetTexParameterxv(target, pname, params)); \
}
#define test_glGetTexParameterxv(target, pname, params) { \
    glGetTexParameterxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glGetTexParameterxv missing (no calls left)\n"); \
    } else if (packed->func != glGetTexParameterxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glGetTexParameterxv_INDEX); \
        if (! packed) { \
            mock_errorf("glGetTexParameterxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glGetTexParameterxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glGetTexParameterxv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glHint(target, mode) ({ \
    glHint_INDEXED *packed_data = malloc(sizeof(glHint_INDEXED)); \
    packed_data->func = glHint_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)mode; \
            packed_data; \
})
#define emit_glHint(target, mode) { \
    mock_push(pack_glHint(target, mode)); \
}
#define test_glHint(target, mode) { \
    glHint_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glHint missing (no calls left)\n"); \
    } else if (packed->func != glHint_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glHint_INDEX); \
        if (! packed) { \
            mock_errorf("glHint missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glHint:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != mode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glHint(0x%04X, 0x%04X);\n", target, mode); \
        } \
    } \
}
#define pack_glIsBuffer(buffer) ({ \
    glIsBuffer_INDEXED *packed_data = malloc(sizeof(glIsBuffer_INDEXED)); \
    packed_data->func = glIsBuffer_INDEX; \
            packed_data->args.a1 = (GLuint)buffer; \
            packed_data; \
})
#define emit_glIsBuffer(buffer) { \
    mock_push(pack_glIsBuffer(buffer)); \
}
#define test_glIsBuffer(buffer) { \
    glIsBuffer_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glIsBuffer missing (no calls left)\n"); \
    } else if (packed->func != glIsBuffer_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glIsBuffer_INDEX); \
        if (! packed) { \
            mock_errorf("glIsBuffer missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glIsBuffer:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != buffer) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glIsBuffer(%u);\n", buffer); \
        } \
    } \
}
#define pack_glIsEnabled(cap) ({ \
    glIsEnabled_INDEXED *packed_data = malloc(sizeof(glIsEnabled_INDEXED)); \
    packed_data->func = glIsEnabled_INDEX; \
            packed_data->args.a1 = (GLenum)cap; \
            packed_data; \
})
#define emit_glIsEnabled(cap) { \
    mock_push(pack_glIsEnabled(cap)); \
}
#define test_glIsEnabled(cap) { \
    glIsEnabled_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glIsEnabled missing (no calls left)\n"); \
    } else if (packed->func != glIsEnabled_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glIsEnabled_INDEX); \
        if (! packed) { \
            mock_errorf("glIsEnabled missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glIsEnabled:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != cap) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glIsEnabled(0x%04X);\n", cap); \
        } \
    } \
}
#define pack_glIsTexture(texture) ({ \
    glIsTexture_INDEXED *packed_data = malloc(sizeof(glIsTexture_INDEXED)); \
    packed_data->func = glIsTexture_INDEX; \
            packed_data->args.a1 = (GLuint)texture; \
            packed_data; \
})
#define emit_glIsTexture(texture) { \
    mock_push(pack_glIsTexture(texture)); \
}
#define test_glIsTexture(texture) { \
    glIsTexture_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glIsTexture missing (no calls left)\n"); \
    } else if (packed->func != glIsTexture_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glIsTexture_INDEX); \
        if (! packed) { \
            mock_errorf("glIsTexture missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glIsTexture:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != texture) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glIsTexture(%u);\n", texture); \
        } \
    } \
}
#define pack_glLightModelf(pname, param) ({ \
    glLightModelf_INDEXED *packed_data = malloc(sizeof(glLightModelf_INDEXED)); \
    packed_data->func = glLightModelf_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat)param; \
            packed_data; \
})
#define emit_glLightModelf(pname, param) { \
    mock_push(pack_glLightModelf(pname, param)); \
}
#define test_glLightModelf(pname, param) { \
    glLightModelf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightModelf missing (no calls left)\n"); \
    } else if (packed->func != glLightModelf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightModelf_INDEX); \
        if (! packed) { \
            mock_errorf("glLightModelf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightModelf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightModelf(0x%04X, %0.2f);\n", pname, param); \
        } \
    } \
}
#define pack_glLightModelfv(pname, params) ({ \
    glLightModelfv_INDEXED *packed_data = malloc(sizeof(glLightModelfv_INDEXED)); \
    packed_data->func = glLightModelfv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glLightModelfv(pname, params) { \
    mock_push(pack_glLightModelfv(pname, params)); \
}
#define test_glLightModelfv(pname, params) { \
    glLightModelfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightModelfv missing (no calls left)\n"); \
    } else if (packed->func != glLightModelfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightModelfv_INDEX); \
        if (! packed) { \
            mock_errorf("glLightModelfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightModelfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightModelfv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glLightModelx(pname, param) ({ \
    glLightModelx_INDEXED *packed_data = malloc(sizeof(glLightModelx_INDEXED)); \
    packed_data->func = glLightModelx_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed)param; \
            packed_data; \
})
#define emit_glLightModelx(pname, param) { \
    mock_push(pack_glLightModelx(pname, param)); \
}
#define test_glLightModelx(pname, param) { \
    glLightModelx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightModelx missing (no calls left)\n"); \
    } else if (packed->func != glLightModelx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightModelx_INDEX); \
        if (! packed) { \
            mock_errorf("glLightModelx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightModelx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightModelx(0x%04X, %p);\n", pname, param); \
        } \
    } \
}
#define pack_glLightModelxv(pname, params) ({ \
    glLightModelxv_INDEXED *packed_data = malloc(sizeof(glLightModelxv_INDEXED)); \
    packed_data->func = glLightModelxv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glLightModelxv(pname, params) { \
    mock_push(pack_glLightModelxv(pname, params)); \
}
#define test_glLightModelxv(pname, params) { \
    glLightModelxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightModelxv missing (no calls left)\n"); \
    } else if (packed->func != glLightModelxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightModelxv_INDEX); \
        if (! packed) { \
            mock_errorf("glLightModelxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightModelxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightModelxv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glLightf(light, pname, param) ({ \
    glLightf_INDEXED *packed_data = malloc(sizeof(glLightf_INDEXED)); \
    packed_data->func = glLightf_INDEX; \
            packed_data->args.a1 = (GLenum)light; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat)param; \
            packed_data; \
})
#define emit_glLightf(light, pname, param) { \
    mock_push(pack_glLightf(light, pname, param)); \
}
#define test_glLightf(light, pname, param) { \
    glLightf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightf missing (no calls left)\n"); \
    } else if (packed->func != glLightf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightf_INDEX); \
        if (! packed) { \
            mock_errorf("glLightf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != light) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightf(0x%04X, 0x%04X, %0.2f);\n", light, pname, param); \
        } \
    } \
}
#define pack_glLightfv(light, pname, params) ({ \
    glLightfv_INDEXED *packed_data = malloc(sizeof(glLightfv_INDEXED)); \
    packed_data->func = glLightfv_INDEX; \
            packed_data->args.a1 = (GLenum)light; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glLightfv(light, pname, params) { \
    mock_push(pack_glLightfv(light, pname, params)); \
}
#define test_glLightfv(light, pname, params) { \
    glLightfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightfv missing (no calls left)\n"); \
    } else if (packed->func != glLightfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightfv_INDEX); \
        if (! packed) { \
            mock_errorf("glLightfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != light) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightfv(0x%04X, 0x%04X, %p);\n", light, pname, params); \
        } \
    } \
}
#define pack_glLightx(light, pname, param) ({ \
    glLightx_INDEXED *packed_data = malloc(sizeof(glLightx_INDEXED)); \
    packed_data->func = glLightx_INDEX; \
            packed_data->args.a1 = (GLenum)light; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed)param; \
            packed_data; \
})
#define emit_glLightx(light, pname, param) { \
    mock_push(pack_glLightx(light, pname, param)); \
}
#define test_glLightx(light, pname, param) { \
    glLightx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightx missing (no calls left)\n"); \
    } else if (packed->func != glLightx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightx_INDEX); \
        if (! packed) { \
            mock_errorf("glLightx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != light) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightx(0x%04X, 0x%04X, %p);\n", light, pname, param); \
        } \
    } \
}
#define pack_glLightxv(light, pname, params) ({ \
    glLightxv_INDEXED *packed_data = malloc(sizeof(glLightxv_INDEXED)); \
    packed_data->func = glLightxv_INDEX; \
            packed_data->args.a1 = (GLenum)light; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glLightxv(light, pname, params) { \
    mock_push(pack_glLightxv(light, pname, params)); \
}
#define test_glLightxv(light, pname, params) { \
    glLightxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLightxv missing (no calls left)\n"); \
    } else if (packed->func != glLightxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLightxv_INDEX); \
        if (! packed) { \
            mock_errorf("glLightxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLightxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != light) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLightxv(0x%04X, 0x%04X, %p);\n", light, pname, params); \
        } \
    } \
}
#define pack_glLineWidth(width) ({ \
    glLineWidth_INDEXED *packed_data = malloc(sizeof(glLineWidth_INDEXED)); \
    packed_data->func = glLineWidth_INDEX; \
            packed_data->args.a1 = (GLfloat)width; \
            packed_data; \
})
#define emit_glLineWidth(width) { \
    mock_push(pack_glLineWidth(width)); \
}
#define test_glLineWidth(width) { \
    glLineWidth_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLineWidth missing (no calls left)\n"); \
    } else if (packed->func != glLineWidth_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLineWidth_INDEX); \
        if (! packed) { \
            mock_errorf("glLineWidth missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLineWidth:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - width >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLineWidth(%0.2f);\n", width); \
        } \
    } \
}
#define pack_glLineWidthx(width) ({ \
    glLineWidthx_INDEXED *packed_data = malloc(sizeof(glLineWidthx_INDEXED)); \
    packed_data->func = glLineWidthx_INDEX; \
            packed_data->args.a1 = (GLfixed)width; \
            packed_data; \
})
#define emit_glLineWidthx(width) { \
    mock_push(pack_glLineWidthx(width)); \
}
#define test_glLineWidthx(width) { \
    glLineWidthx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLineWidthx missing (no calls left)\n"); \
    } else if (packed->func != glLineWidthx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLineWidthx_INDEX); \
        if (! packed) { \
            mock_errorf("glLineWidthx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLineWidthx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != width) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLineWidthx(%p);\n", width); \
        } \
    } \
}
#define pack_glLoadIdentity() ({ \
    glLoadIdentity_INDEXED *packed_data = malloc(sizeof(glLoadIdentity_INDEXED)); \
    packed_data->func = glLoadIdentity_INDEX; \
        packed_data; \
})
#define emit_glLoadIdentity() { \
    mock_push(pack_glLoadIdentity()); \
}
#define test_glLoadIdentity() { \
    glLoadIdentity_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLoadIdentity missing (no calls left)\n"); \
    } else if (packed->func != glLoadIdentity_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLoadIdentity_INDEX); \
        if (! packed) { \
            mock_errorf("glLoadIdentity missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLoadIdentity:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLoadIdentity();\n", ); \
        } \
    } \
}
#define pack_glLoadMatrixf(m) ({ \
    glLoadMatrixf_INDEXED *packed_data = malloc(sizeof(glLoadMatrixf_INDEXED)); \
    packed_data->func = glLoadMatrixf_INDEX; \
            packed_data->args.a1 = (GLfloat *)m; \
            packed_data; \
})
#define emit_glLoadMatrixf(m) { \
    mock_push(pack_glLoadMatrixf(m)); \
}
#define test_glLoadMatrixf(m) { \
    glLoadMatrixf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLoadMatrixf missing (no calls left)\n"); \
    } else if (packed->func != glLoadMatrixf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLoadMatrixf_INDEX); \
        if (! packed) { \
            mock_errorf("glLoadMatrixf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLoadMatrixf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        void *a = packed->args.a1, *b = m; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(m)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLoadMatrixf(%p);\n", m); \
        } \
    } \
}
#define pack_glLoadMatrixx(m) ({ \
    glLoadMatrixx_INDEXED *packed_data = malloc(sizeof(glLoadMatrixx_INDEXED)); \
    packed_data->func = glLoadMatrixx_INDEX; \
            packed_data->args.a1 = (GLfixed *)m; \
            packed_data; \
})
#define emit_glLoadMatrixx(m) { \
    mock_push(pack_glLoadMatrixx(m)); \
}
#define test_glLoadMatrixx(m) { \
    glLoadMatrixx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLoadMatrixx missing (no calls left)\n"); \
    } else if (packed->func != glLoadMatrixx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLoadMatrixx_INDEX); \
        if (! packed) { \
            mock_errorf("glLoadMatrixx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLoadMatrixx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        void *a = packed->args.a1, *b = m; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(m)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLoadMatrixx(%p);\n", m); \
        } \
    } \
}
#define pack_glLogicOp(opcode) ({ \
    glLogicOp_INDEXED *packed_data = malloc(sizeof(glLogicOp_INDEXED)); \
    packed_data->func = glLogicOp_INDEX; \
            packed_data->args.a1 = (GLenum)opcode; \
            packed_data; \
})
#define emit_glLogicOp(opcode) { \
    mock_push(pack_glLogicOp(opcode)); \
}
#define test_glLogicOp(opcode) { \
    glLogicOp_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glLogicOp missing (no calls left)\n"); \
    } else if (packed->func != glLogicOp_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glLogicOp_INDEX); \
        if (! packed) { \
            mock_errorf("glLogicOp missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glLogicOp:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != opcode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glLogicOp(0x%04X);\n", opcode); \
        } \
    } \
}
#define pack_glMaterialf(face, pname, param) ({ \
    glMaterialf_INDEXED *packed_data = malloc(sizeof(glMaterialf_INDEXED)); \
    packed_data->func = glMaterialf_INDEX; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat)param; \
            packed_data; \
})
#define emit_glMaterialf(face, pname, param) { \
    mock_push(pack_glMaterialf(face, pname, param)); \
}
#define test_glMaterialf(face, pname, param) { \
    glMaterialf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMaterialf missing (no calls left)\n"); \
    } else if (packed->func != glMaterialf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMaterialf_INDEX); \
        if (! packed) { \
            mock_errorf("glMaterialf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMaterialf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != face) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMaterialf(0x%04X, 0x%04X, %0.2f);\n", face, pname, param); \
        } \
    } \
}
#define pack_glMaterialfv(face, pname, params) ({ \
    glMaterialfv_INDEXED *packed_data = malloc(sizeof(glMaterialfv_INDEXED)); \
    packed_data->func = glMaterialfv_INDEX; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glMaterialfv(face, pname, params) { \
    mock_push(pack_glMaterialfv(face, pname, params)); \
}
#define test_glMaterialfv(face, pname, params) { \
    glMaterialfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMaterialfv missing (no calls left)\n"); \
    } else if (packed->func != glMaterialfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMaterialfv_INDEX); \
        if (! packed) { \
            mock_errorf("glMaterialfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMaterialfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != face) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMaterialfv(0x%04X, 0x%04X, %p);\n", face, pname, params); \
        } \
    } \
}
#define pack_glMaterialx(face, pname, param) ({ \
    glMaterialx_INDEXED *packed_data = malloc(sizeof(glMaterialx_INDEXED)); \
    packed_data->func = glMaterialx_INDEX; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed)param; \
            packed_data; \
})
#define emit_glMaterialx(face, pname, param) { \
    mock_push(pack_glMaterialx(face, pname, param)); \
}
#define test_glMaterialx(face, pname, param) { \
    glMaterialx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMaterialx missing (no calls left)\n"); \
    } else if (packed->func != glMaterialx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMaterialx_INDEX); \
        if (! packed) { \
            mock_errorf("glMaterialx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMaterialx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != face) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMaterialx(0x%04X, 0x%04X, %p);\n", face, pname, param); \
        } \
    } \
}
#define pack_glMaterialxv(face, pname, params) ({ \
    glMaterialxv_INDEXED *packed_data = malloc(sizeof(glMaterialxv_INDEXED)); \
    packed_data->func = glMaterialxv_INDEX; \
            packed_data->args.a1 = (GLenum)face; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glMaterialxv(face, pname, params) { \
    mock_push(pack_glMaterialxv(face, pname, params)); \
}
#define test_glMaterialxv(face, pname, params) { \
    glMaterialxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMaterialxv missing (no calls left)\n"); \
    } else if (packed->func != glMaterialxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMaterialxv_INDEX); \
        if (! packed) { \
            mock_errorf("glMaterialxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMaterialxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != face) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMaterialxv(0x%04X, 0x%04X, %p);\n", face, pname, params); \
        } \
    } \
}
#define pack_glMatrixMode(mode) ({ \
    glMatrixMode_INDEXED *packed_data = malloc(sizeof(glMatrixMode_INDEXED)); \
    packed_data->func = glMatrixMode_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
            packed_data; \
})
#define emit_glMatrixMode(mode) { \
    mock_push(pack_glMatrixMode(mode)); \
}
#define test_glMatrixMode(mode) { \
    glMatrixMode_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMatrixMode missing (no calls left)\n"); \
    } else if (packed->func != glMatrixMode_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMatrixMode_INDEX); \
        if (! packed) { \
            mock_errorf("glMatrixMode missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMatrixMode:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMatrixMode(0x%04X);\n", mode); \
        } \
    } \
}
#define pack_glMultMatrixf(m) ({ \
    glMultMatrixf_INDEXED *packed_data = malloc(sizeof(glMultMatrixf_INDEXED)); \
    packed_data->func = glMultMatrixf_INDEX; \
            packed_data->args.a1 = (GLfloat *)m; \
            packed_data; \
})
#define emit_glMultMatrixf(m) { \
    mock_push(pack_glMultMatrixf(m)); \
}
#define test_glMultMatrixf(m) { \
    glMultMatrixf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMultMatrixf missing (no calls left)\n"); \
    } else if (packed->func != glMultMatrixf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMultMatrixf_INDEX); \
        if (! packed) { \
            mock_errorf("glMultMatrixf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMultMatrixf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        void *a = packed->args.a1, *b = m; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(m)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMultMatrixf(%p);\n", m); \
        } \
    } \
}
#define pack_glMultMatrixx(m) ({ \
    glMultMatrixx_INDEXED *packed_data = malloc(sizeof(glMultMatrixx_INDEXED)); \
    packed_data->func = glMultMatrixx_INDEX; \
            packed_data->args.a1 = (GLfixed *)m; \
            packed_data; \
})
#define emit_glMultMatrixx(m) { \
    mock_push(pack_glMultMatrixx(m)); \
}
#define test_glMultMatrixx(m) { \
    glMultMatrixx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMultMatrixx missing (no calls left)\n"); \
    } else if (packed->func != glMultMatrixx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMultMatrixx_INDEX); \
        if (! packed) { \
            mock_errorf("glMultMatrixx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMultMatrixx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        void *a = packed->args.a1, *b = m; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(m)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMultMatrixx(%p);\n", m); \
        } \
    } \
}
#define pack_glMultiTexCoord4f(target, s, t, r, q) ({ \
    glMultiTexCoord4f_INDEXED *packed_data = malloc(sizeof(glMultiTexCoord4f_INDEXED)); \
    packed_data->func = glMultiTexCoord4f_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLfloat)s; \
        packed_data->args.a3 = (GLfloat)t; \
        packed_data->args.a4 = (GLfloat)r; \
        packed_data->args.a5 = (GLfloat)q; \
            packed_data; \
})
#define emit_glMultiTexCoord4f(target, s, t, r, q) { \
    mock_push(pack_glMultiTexCoord4f(target, s, t, r, q)); \
}
#define test_glMultiTexCoord4f(target, s, t, r, q) { \
    glMultiTexCoord4f_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMultiTexCoord4f missing (no calls left)\n"); \
    } else if (packed->func != glMultiTexCoord4f_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMultiTexCoord4f_INDEX); \
        if (! packed) { \
            mock_errorf("glMultiTexCoord4f missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMultiTexCoord4f:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - s >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - t >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a4 - r >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a5 - q >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMultiTexCoord4f(0x%04X, %0.2f, %0.2f, %0.2f, %0.2f);\n", target, s, t, r, q); \
        } \
    } \
}
#define pack_glMultiTexCoord4x(target, s, t, r, q) ({ \
    glMultiTexCoord4x_INDEXED *packed_data = malloc(sizeof(glMultiTexCoord4x_INDEXED)); \
    packed_data->func = glMultiTexCoord4x_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLfixed)s; \
        packed_data->args.a3 = (GLfixed)t; \
        packed_data->args.a4 = (GLfixed)r; \
        packed_data->args.a5 = (GLfixed)q; \
            packed_data; \
})
#define emit_glMultiTexCoord4x(target, s, t, r, q) { \
    mock_push(pack_glMultiTexCoord4x(target, s, t, r, q)); \
}
#define test_glMultiTexCoord4x(target, s, t, r, q) { \
    glMultiTexCoord4x_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glMultiTexCoord4x missing (no calls left)\n"); \
    } else if (packed->func != glMultiTexCoord4x_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glMultiTexCoord4x_INDEX); \
        if (! packed) { \
            mock_errorf("glMultiTexCoord4x missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glMultiTexCoord4x:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != s) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != t) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != r) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != q) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glMultiTexCoord4x(0x%04X, %p, %p, %p, %p);\n", target, s, t, r, q); \
        } \
    } \
}
#define pack_glNormal3f(nx, ny, nz) ({ \
    glNormal3f_INDEXED *packed_data = malloc(sizeof(glNormal3f_INDEXED)); \
    packed_data->func = glNormal3f_INDEX; \
            packed_data->args.a1 = (GLfloat)nx; \
        packed_data->args.a2 = (GLfloat)ny; \
        packed_data->args.a3 = (GLfloat)nz; \
            packed_data; \
})
#define emit_glNormal3f(nx, ny, nz) { \
    mock_push(pack_glNormal3f(nx, ny, nz)); \
}
#define test_glNormal3f(nx, ny, nz) { \
    glNormal3f_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glNormal3f missing (no calls left)\n"); \
    } else if (packed->func != glNormal3f_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glNormal3f_INDEX); \
        if (! packed) { \
            mock_errorf("glNormal3f missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glNormal3f:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - nx >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - ny >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - nz >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glNormal3f(%0.2f, %0.2f, %0.2f);\n", nx, ny, nz); \
        } \
    } \
}
#define pack_glNormal3x(nx, ny, nz) ({ \
    glNormal3x_INDEXED *packed_data = malloc(sizeof(glNormal3x_INDEXED)); \
    packed_data->func = glNormal3x_INDEX; \
            packed_data->args.a1 = (GLfixed)nx; \
        packed_data->args.a2 = (GLfixed)ny; \
        packed_data->args.a3 = (GLfixed)nz; \
            packed_data; \
})
#define emit_glNormal3x(nx, ny, nz) { \
    mock_push(pack_glNormal3x(nx, ny, nz)); \
}
#define test_glNormal3x(nx, ny, nz) { \
    glNormal3x_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glNormal3x missing (no calls left)\n"); \
    } else if (packed->func != glNormal3x_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glNormal3x_INDEX); \
        if (! packed) { \
            mock_errorf("glNormal3x missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glNormal3x:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != nx) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != ny) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != nz) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glNormal3x(%p, %p, %p);\n", nx, ny, nz); \
        } \
    } \
}
#define pack_glNormalPointer(type, stride, pointer) ({ \
    glNormalPointer_INDEXED *packed_data = malloc(sizeof(glNormalPointer_INDEXED)); \
    packed_data->func = glNormalPointer_INDEX; \
            packed_data->args.a1 = (GLenum)type; \
        packed_data->args.a2 = (GLsizei)stride; \
        packed_data->args.a3 = (GLvoid *)pointer; \
            packed_data; \
})
#define emit_glNormalPointer(type, stride, pointer) { \
    mock_push(pack_glNormalPointer(type, stride, pointer)); \
}
#define test_glNormalPointer(type, stride, pointer) { \
    glNormalPointer_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glNormalPointer missing (no calls left)\n"); \
    } else if (packed->func != glNormalPointer_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glNormalPointer_INDEX); \
        if (! packed) { \
            mock_errorf("glNormalPointer missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glNormalPointer:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != type) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != stride) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = pointer; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pointer)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glNormalPointer(0x%04X, %d, %p);\n", type, stride, pointer); \
        } \
    } \
}
#define pack_glOrthof(left, right, bottom, top, near, far) ({ \
    glOrthof_INDEXED *packed_data = malloc(sizeof(glOrthof_INDEXED)); \
    packed_data->func = glOrthof_INDEX; \
            packed_data->args.a1 = (GLfloat)left; \
        packed_data->args.a2 = (GLfloat)right; \
        packed_data->args.a3 = (GLfloat)bottom; \
        packed_data->args.a4 = (GLfloat)top; \
        packed_data->args.a5 = (GLfloat)near; \
        packed_data->args.a6 = (GLfloat)far; \
            packed_data; \
})
#define emit_glOrthof(left, right, bottom, top, near, far) { \
    mock_push(pack_glOrthof(left, right, bottom, top, near, far)); \
}
#define test_glOrthof(left, right, bottom, top, near, far) { \
    glOrthof_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glOrthof missing (no calls left)\n"); \
    } else if (packed->func != glOrthof_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glOrthof_INDEX); \
        if (! packed) { \
            mock_errorf("glOrthof missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glOrthof:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - left >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - right >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - bottom >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a4 - top >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a5 - near >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a6 - far >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glOrthof(%0.2f, %0.2f, %0.2f, %0.2f, %0.2f, %0.2f);\n", left, right, bottom, top, near, far); \
        } \
    } \
}
#define pack_glOrthox(left, right, bottom, top, near, far) ({ \
    glOrthox_INDEXED *packed_data = malloc(sizeof(glOrthox_INDEXED)); \
    packed_data->func = glOrthox_INDEX; \
            packed_data->args.a1 = (GLfixed)left; \
        packed_data->args.a2 = (GLfixed)right; \
        packed_data->args.a3 = (GLfixed)bottom; \
        packed_data->args.a4 = (GLfixed)top; \
        packed_data->args.a5 = (GLfixed)near; \
        packed_data->args.a6 = (GLfixed)far; \
            packed_data; \
})
#define emit_glOrthox(left, right, bottom, top, near, far) { \
    mock_push(pack_glOrthox(left, right, bottom, top, near, far)); \
}
#define test_glOrthox(left, right, bottom, top, near, far) { \
    glOrthox_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glOrthox missing (no calls left)\n"); \
    } else if (packed->func != glOrthox_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glOrthox_INDEX); \
        if (! packed) { \
            mock_errorf("glOrthox missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glOrthox:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != left) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != right) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != bottom) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != top) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != near) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != far) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glOrthox(%p, %p, %p, %p, %p, %p);\n", left, right, bottom, top, near, far); \
        } \
    } \
}
#define pack_glPixelStorei(pname, param) ({ \
    glPixelStorei_INDEXED *packed_data = malloc(sizeof(glPixelStorei_INDEXED)); \
    packed_data->func = glPixelStorei_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLint)param; \
            packed_data; \
})
#define emit_glPixelStorei(pname, param) { \
    mock_push(pack_glPixelStorei(pname, param)); \
}
#define test_glPixelStorei(pname, param) { \
    glPixelStorei_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPixelStorei missing (no calls left)\n"); \
    } else if (packed->func != glPixelStorei_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPixelStorei_INDEX); \
        if (! packed) { \
            mock_errorf("glPixelStorei missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPixelStorei:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPixelStorei(0x%04X, %d);\n", pname, param); \
        } \
    } \
}
#define pack_glPointParameterf(pname, param) ({ \
    glPointParameterf_INDEXED *packed_data = malloc(sizeof(glPointParameterf_INDEXED)); \
    packed_data->func = glPointParameterf_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat)param; \
            packed_data; \
})
#define emit_glPointParameterf(pname, param) { \
    mock_push(pack_glPointParameterf(pname, param)); \
}
#define test_glPointParameterf(pname, param) { \
    glPointParameterf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointParameterf missing (no calls left)\n"); \
    } else if (packed->func != glPointParameterf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointParameterf_INDEX); \
        if (! packed) { \
            mock_errorf("glPointParameterf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointParameterf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointParameterf(0x%04X, %0.2f);\n", pname, param); \
        } \
    } \
}
#define pack_glPointParameterfv(pname, params) ({ \
    glPointParameterfv_INDEXED *packed_data = malloc(sizeof(glPointParameterfv_INDEXED)); \
    packed_data->func = glPointParameterfv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glPointParameterfv(pname, params) { \
    mock_push(pack_glPointParameterfv(pname, params)); \
}
#define test_glPointParameterfv(pname, params) { \
    glPointParameterfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointParameterfv missing (no calls left)\n"); \
    } else if (packed->func != glPointParameterfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointParameterfv_INDEX); \
        if (! packed) { \
            mock_errorf("glPointParameterfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointParameterfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointParameterfv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glPointParameterx(pname, param) ({ \
    glPointParameterx_INDEXED *packed_data = malloc(sizeof(glPointParameterx_INDEXED)); \
    packed_data->func = glPointParameterx_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed)param; \
            packed_data; \
})
#define emit_glPointParameterx(pname, param) { \
    mock_push(pack_glPointParameterx(pname, param)); \
}
#define test_glPointParameterx(pname, param) { \
    glPointParameterx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointParameterx missing (no calls left)\n"); \
    } else if (packed->func != glPointParameterx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointParameterx_INDEX); \
        if (! packed) { \
            mock_errorf("glPointParameterx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointParameterx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointParameterx(0x%04X, %p);\n", pname, param); \
        } \
    } \
}
#define pack_glPointParameterxv(pname, params) ({ \
    glPointParameterxv_INDEXED *packed_data = malloc(sizeof(glPointParameterxv_INDEXED)); \
    packed_data->func = glPointParameterxv_INDEX; \
            packed_data->args.a1 = (GLenum)pname; \
        packed_data->args.a2 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glPointParameterxv(pname, params) { \
    mock_push(pack_glPointParameterxv(pname, params)); \
}
#define test_glPointParameterxv(pname, params) { \
    glPointParameterxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointParameterxv missing (no calls left)\n"); \
    } else if (packed->func != glPointParameterxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointParameterxv_INDEX); \
        if (! packed) { \
            mock_errorf("glPointParameterxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointParameterxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a2, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointParameterxv(0x%04X, %p);\n", pname, params); \
        } \
    } \
}
#define pack_glPointSize(size) ({ \
    glPointSize_INDEXED *packed_data = malloc(sizeof(glPointSize_INDEXED)); \
    packed_data->func = glPointSize_INDEX; \
            packed_data->args.a1 = (GLfloat)size; \
            packed_data; \
})
#define emit_glPointSize(size) { \
    mock_push(pack_glPointSize(size)); \
}
#define test_glPointSize(size) { \
    glPointSize_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointSize missing (no calls left)\n"); \
    } else if (packed->func != glPointSize_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointSize_INDEX); \
        if (! packed) { \
            mock_errorf("glPointSize missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointSize:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - size >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointSize(%0.2f);\n", size); \
        } \
    } \
}
#define pack_glPointSizePointerOES(type, stride, pointer) ({ \
    glPointSizePointerOES_INDEXED *packed_data = malloc(sizeof(glPointSizePointerOES_INDEXED)); \
    packed_data->func = glPointSizePointerOES_INDEX; \
            packed_data->args.a1 = (GLenum)type; \
        packed_data->args.a2 = (GLsizei)stride; \
        packed_data->args.a3 = (GLvoid *)pointer; \
            packed_data; \
})
#define emit_glPointSizePointerOES(type, stride, pointer) { \
    mock_push(pack_glPointSizePointerOES(type, stride, pointer)); \
}
#define test_glPointSizePointerOES(type, stride, pointer) { \
    glPointSizePointerOES_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointSizePointerOES missing (no calls left)\n"); \
    } else if (packed->func != glPointSizePointerOES_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointSizePointerOES_INDEX); \
        if (! packed) { \
            mock_errorf("glPointSizePointerOES missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointSizePointerOES:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != type) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != stride) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = pointer; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pointer)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointSizePointerOES(0x%04X, %d, %p);\n", type, stride, pointer); \
        } \
    } \
}
#define pack_glPointSizex(size) ({ \
    glPointSizex_INDEXED *packed_data = malloc(sizeof(glPointSizex_INDEXED)); \
    packed_data->func = glPointSizex_INDEX; \
            packed_data->args.a1 = (GLfixed)size; \
            packed_data; \
})
#define emit_glPointSizex(size) { \
    mock_push(pack_glPointSizex(size)); \
}
#define test_glPointSizex(size) { \
    glPointSizex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPointSizex missing (no calls left)\n"); \
    } else if (packed->func != glPointSizex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPointSizex_INDEX); \
        if (! packed) { \
            mock_errorf("glPointSizex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPointSizex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != size) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPointSizex(%p);\n", size); \
        } \
    } \
}
#define pack_glPolygonOffset(factor, units) ({ \
    glPolygonOffset_INDEXED *packed_data = malloc(sizeof(glPolygonOffset_INDEXED)); \
    packed_data->func = glPolygonOffset_INDEX; \
            packed_data->args.a1 = (GLfloat)factor; \
        packed_data->args.a2 = (GLfloat)units; \
            packed_data; \
})
#define emit_glPolygonOffset(factor, units) { \
    mock_push(pack_glPolygonOffset(factor, units)); \
}
#define test_glPolygonOffset(factor, units) { \
    glPolygonOffset_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPolygonOffset missing (no calls left)\n"); \
    } else if (packed->func != glPolygonOffset_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPolygonOffset_INDEX); \
        if (! packed) { \
            mock_errorf("glPolygonOffset missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPolygonOffset:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - factor >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - units >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPolygonOffset(%0.2f, %0.2f);\n", factor, units); \
        } \
    } \
}
#define pack_glPolygonOffsetx(factor, units) ({ \
    glPolygonOffsetx_INDEXED *packed_data = malloc(sizeof(glPolygonOffsetx_INDEXED)); \
    packed_data->func = glPolygonOffsetx_INDEX; \
            packed_data->args.a1 = (GLfixed)factor; \
        packed_data->args.a2 = (GLfixed)units; \
            packed_data; \
})
#define emit_glPolygonOffsetx(factor, units) { \
    mock_push(pack_glPolygonOffsetx(factor, units)); \
}
#define test_glPolygonOffsetx(factor, units) { \
    glPolygonOffsetx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPolygonOffsetx missing (no calls left)\n"); \
    } else if (packed->func != glPolygonOffsetx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPolygonOffsetx_INDEX); \
        if (! packed) { \
            mock_errorf("glPolygonOffsetx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPolygonOffsetx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != factor) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != units) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPolygonOffsetx(%p, %p);\n", factor, units); \
        } \
    } \
}
#define pack_glPopMatrix() ({ \
    glPopMatrix_INDEXED *packed_data = malloc(sizeof(glPopMatrix_INDEXED)); \
    packed_data->func = glPopMatrix_INDEX; \
        packed_data; \
})
#define emit_glPopMatrix() { \
    mock_push(pack_glPopMatrix()); \
}
#define test_glPopMatrix() { \
    glPopMatrix_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPopMatrix missing (no calls left)\n"); \
    } else if (packed->func != glPopMatrix_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPopMatrix_INDEX); \
        if (! packed) { \
            mock_errorf("glPopMatrix missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPopMatrix:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPopMatrix();\n", ); \
        } \
    } \
}
#define pack_glPushMatrix() ({ \
    glPushMatrix_INDEXED *packed_data = malloc(sizeof(glPushMatrix_INDEXED)); \
    packed_data->func = glPushMatrix_INDEX; \
        packed_data; \
})
#define emit_glPushMatrix() { \
    mock_push(pack_glPushMatrix()); \
}
#define test_glPushMatrix() { \
    glPushMatrix_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glPushMatrix missing (no calls left)\n"); \
    } else if (packed->func != glPushMatrix_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glPushMatrix_INDEX); \
        if (! packed) { \
            mock_errorf("glPushMatrix missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glPushMatrix:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glPushMatrix();\n", ); \
        } \
    } \
}
#define pack_glReadPixels(x, y, width, height, format, type, pixels) ({ \
    glReadPixels_INDEXED *packed_data = malloc(sizeof(glReadPixels_INDEXED)); \
    packed_data->func = glReadPixels_INDEX; \
            packed_data->args.a1 = (GLint)x; \
        packed_data->args.a2 = (GLint)y; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
        packed_data->args.a5 = (GLenum)format; \
        packed_data->args.a6 = (GLenum)type; \
        packed_data->args.a7 = (GLvoid *)pixels; \
            packed_data; \
})
#define emit_glReadPixels(x, y, width, height, format, type, pixels) { \
    mock_push(pack_glReadPixels(x, y, width, height, format, type, pixels)); \
}
#define test_glReadPixels(x, y, width, height, format, type, pixels) { \
    glReadPixels_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glReadPixels missing (no calls left)\n"); \
    } else if (packed->func != glReadPixels_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glReadPixels_INDEX); \
        if (! packed) { \
            mock_errorf("glReadPixels missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glReadPixels:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != height) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != format) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != type) { \
                    match = 0; \
        } \
                        void *a = packed->args.a7, *b = pixels; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pixels)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glReadPixels(%d, %d, %d, %d, 0x%04X, 0x%04X, %p);\n", x, y, width, height, format, type, pixels); \
        } \
    } \
}
#define pack_glRotatef(angle, x, y, z) ({ \
    glRotatef_INDEXED *packed_data = malloc(sizeof(glRotatef_INDEXED)); \
    packed_data->func = glRotatef_INDEX; \
            packed_data->args.a1 = (GLfloat)angle; \
        packed_data->args.a2 = (GLfloat)x; \
        packed_data->args.a3 = (GLfloat)y; \
        packed_data->args.a4 = (GLfloat)z; \
            packed_data; \
})
#define emit_glRotatef(angle, x, y, z) { \
    mock_push(pack_glRotatef(angle, x, y, z)); \
}
#define test_glRotatef(angle, x, y, z) { \
    glRotatef_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glRotatef missing (no calls left)\n"); \
    } else if (packed->func != glRotatef_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glRotatef_INDEX); \
        if (! packed) { \
            mock_errorf("glRotatef missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glRotatef:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - angle >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - x >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - y >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a4 - z >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glRotatef(%0.2f, %0.2f, %0.2f, %0.2f);\n", angle, x, y, z); \
        } \
    } \
}
#define pack_glRotatex(angle, x, y, z) ({ \
    glRotatex_INDEXED *packed_data = malloc(sizeof(glRotatex_INDEXED)); \
    packed_data->func = glRotatex_INDEX; \
            packed_data->args.a1 = (GLfixed)angle; \
        packed_data->args.a2 = (GLfixed)x; \
        packed_data->args.a3 = (GLfixed)y; \
        packed_data->args.a4 = (GLfixed)z; \
            packed_data; \
})
#define emit_glRotatex(angle, x, y, z) { \
    mock_push(pack_glRotatex(angle, x, y, z)); \
}
#define test_glRotatex(angle, x, y, z) { \
    glRotatex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glRotatex missing (no calls left)\n"); \
    } else if (packed->func != glRotatex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glRotatex_INDEX); \
        if (! packed) { \
            mock_errorf("glRotatex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glRotatex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != angle) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != z) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glRotatex(%p, %p, %p, %p);\n", angle, x, y, z); \
        } \
    } \
}
#define pack_glSampleCoverage(value, invert) ({ \
    glSampleCoverage_INDEXED *packed_data = malloc(sizeof(glSampleCoverage_INDEXED)); \
    packed_data->func = glSampleCoverage_INDEX; \
            packed_data->args.a1 = (GLclampf)value; \
        packed_data->args.a2 = (GLboolean)invert; \
            packed_data; \
})
#define emit_glSampleCoverage(value, invert) { \
    mock_push(pack_glSampleCoverage(value, invert)); \
}
#define test_glSampleCoverage(value, invert) { \
    glSampleCoverage_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glSampleCoverage missing (no calls left)\n"); \
    } else if (packed->func != glSampleCoverage_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glSampleCoverage_INDEX); \
        if (! packed) { \
            mock_errorf("glSampleCoverage missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glSampleCoverage:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != value) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != invert) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glSampleCoverage(%p, %d);\n", value, invert); \
        } \
    } \
}
#define pack_glSampleCoveragex(value, invert) ({ \
    glSampleCoveragex_INDEXED *packed_data = malloc(sizeof(glSampleCoveragex_INDEXED)); \
    packed_data->func = glSampleCoveragex_INDEX; \
            packed_data->args.a1 = (GLclampx)value; \
        packed_data->args.a2 = (GLboolean)invert; \
            packed_data; \
})
#define emit_glSampleCoveragex(value, invert) { \
    mock_push(pack_glSampleCoveragex(value, invert)); \
}
#define test_glSampleCoveragex(value, invert) { \
    glSampleCoveragex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glSampleCoveragex missing (no calls left)\n"); \
    } else if (packed->func != glSampleCoveragex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glSampleCoveragex_INDEX); \
        if (! packed) { \
            mock_errorf("glSampleCoveragex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glSampleCoveragex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != value) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != invert) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glSampleCoveragex(%p, %d);\n", value, invert); \
        } \
    } \
}
#define pack_glScalef(x, y, z) ({ \
    glScalef_INDEXED *packed_data = malloc(sizeof(glScalef_INDEXED)); \
    packed_data->func = glScalef_INDEX; \
            packed_data->args.a1 = (GLfloat)x; \
        packed_data->args.a2 = (GLfloat)y; \
        packed_data->args.a3 = (GLfloat)z; \
            packed_data; \
})
#define emit_glScalef(x, y, z) { \
    mock_push(pack_glScalef(x, y, z)); \
}
#define test_glScalef(x, y, z) { \
    glScalef_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glScalef missing (no calls left)\n"); \
    } else if (packed->func != glScalef_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glScalef_INDEX); \
        if (! packed) { \
            mock_errorf("glScalef missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glScalef:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - x >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - y >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - z >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glScalef(%0.2f, %0.2f, %0.2f);\n", x, y, z); \
        } \
    } \
}
#define pack_glScalex(x, y, z) ({ \
    glScalex_INDEXED *packed_data = malloc(sizeof(glScalex_INDEXED)); \
    packed_data->func = glScalex_INDEX; \
            packed_data->args.a1 = (GLfixed)x; \
        packed_data->args.a2 = (GLfixed)y; \
        packed_data->args.a3 = (GLfixed)z; \
            packed_data; \
})
#define emit_glScalex(x, y, z) { \
    mock_push(pack_glScalex(x, y, z)); \
}
#define test_glScalex(x, y, z) { \
    glScalex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glScalex missing (no calls left)\n"); \
    } else if (packed->func != glScalex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glScalex_INDEX); \
        if (! packed) { \
            mock_errorf("glScalex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glScalex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != z) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glScalex(%p, %p, %p);\n", x, y, z); \
        } \
    } \
}
#define pack_glScissor(x, y, width, height) ({ \
    glScissor_INDEXED *packed_data = malloc(sizeof(glScissor_INDEXED)); \
    packed_data->func = glScissor_INDEX; \
            packed_data->args.a1 = (GLint)x; \
        packed_data->args.a2 = (GLint)y; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
            packed_data; \
})
#define emit_glScissor(x, y, width, height) { \
    mock_push(pack_glScissor(x, y, width, height)); \
}
#define test_glScissor(x, y, width, height) { \
    glScissor_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glScissor missing (no calls left)\n"); \
    } else if (packed->func != glScissor_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glScissor_INDEX); \
        if (! packed) { \
            mock_errorf("glScissor missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glScissor:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != height) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glScissor(%d, %d, %d, %d);\n", x, y, width, height); \
        } \
    } \
}
#define pack_glShadeModel(mode) ({ \
    glShadeModel_INDEXED *packed_data = malloc(sizeof(glShadeModel_INDEXED)); \
    packed_data->func = glShadeModel_INDEX; \
            packed_data->args.a1 = (GLenum)mode; \
            packed_data; \
})
#define emit_glShadeModel(mode) { \
    mock_push(pack_glShadeModel(mode)); \
}
#define test_glShadeModel(mode) { \
    glShadeModel_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glShadeModel missing (no calls left)\n"); \
    } else if (packed->func != glShadeModel_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glShadeModel_INDEX); \
        if (! packed) { \
            mock_errorf("glShadeModel missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glShadeModel:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mode) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glShadeModel(0x%04X);\n", mode); \
        } \
    } \
}
#define pack_glStencilFunc(func, ref, mask) ({ \
    glStencilFunc_INDEXED *packed_data = malloc(sizeof(glStencilFunc_INDEXED)); \
    packed_data->func = glStencilFunc_INDEX; \
            packed_data->args.a1 = (GLenum)func; \
        packed_data->args.a2 = (GLint)ref; \
        packed_data->args.a3 = (GLuint)mask; \
            packed_data; \
})
#define emit_glStencilFunc(func, ref, mask) { \
    mock_push(pack_glStencilFunc(func, ref, mask)); \
}
#define test_glStencilFunc(func, ref, mask) { \
    glStencilFunc_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glStencilFunc missing (no calls left)\n"); \
    } else if (packed->func != glStencilFunc_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glStencilFunc_INDEX); \
        if (! packed) { \
            mock_errorf("glStencilFunc missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glStencilFunc:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != func) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != ref) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != mask) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glStencilFunc(0x%04X, %d, %u);\n", func, ref, mask); \
        } \
    } \
}
#define pack_glStencilMask(mask) ({ \
    glStencilMask_INDEXED *packed_data = malloc(sizeof(glStencilMask_INDEXED)); \
    packed_data->func = glStencilMask_INDEX; \
            packed_data->args.a1 = (GLuint)mask; \
            packed_data; \
})
#define emit_glStencilMask(mask) { \
    mock_push(pack_glStencilMask(mask)); \
}
#define test_glStencilMask(mask) { \
    glStencilMask_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glStencilMask missing (no calls left)\n"); \
    } else if (packed->func != glStencilMask_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glStencilMask_INDEX); \
        if (! packed) { \
            mock_errorf("glStencilMask missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glStencilMask:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != mask) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glStencilMask(%u);\n", mask); \
        } \
    } \
}
#define pack_glStencilOp(fail, zfail, zpass) ({ \
    glStencilOp_INDEXED *packed_data = malloc(sizeof(glStencilOp_INDEXED)); \
    packed_data->func = glStencilOp_INDEX; \
            packed_data->args.a1 = (GLenum)fail; \
        packed_data->args.a2 = (GLenum)zfail; \
        packed_data->args.a3 = (GLenum)zpass; \
            packed_data; \
})
#define emit_glStencilOp(fail, zfail, zpass) { \
    mock_push(pack_glStencilOp(fail, zfail, zpass)); \
}
#define test_glStencilOp(fail, zfail, zpass) { \
    glStencilOp_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glStencilOp missing (no calls left)\n"); \
    } else if (packed->func != glStencilOp_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glStencilOp_INDEX); \
        if (! packed) { \
            mock_errorf("glStencilOp missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glStencilOp:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != fail) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != zfail) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != zpass) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glStencilOp(0x%04X, 0x%04X, 0x%04X);\n", fail, zfail, zpass); \
        } \
    } \
}
#define pack_glTexCoordPointer(size, type, stride, pointer) ({ \
    glTexCoordPointer_INDEXED *packed_data = malloc(sizeof(glTexCoordPointer_INDEXED)); \
    packed_data->func = glTexCoordPointer_INDEX; \
            packed_data->args.a1 = (GLint)size; \
        packed_data->args.a2 = (GLenum)type; \
        packed_data->args.a3 = (GLsizei)stride; \
        packed_data->args.a4 = (GLvoid *)pointer; \
            packed_data; \
})
#define emit_glTexCoordPointer(size, type, stride, pointer) { \
    mock_push(pack_glTexCoordPointer(size, type, stride, pointer)); \
}
#define test_glTexCoordPointer(size, type, stride, pointer) { \
    glTexCoordPointer_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexCoordPointer missing (no calls left)\n"); \
    } else if (packed->func != glTexCoordPointer_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexCoordPointer_INDEX); \
        if (! packed) { \
            mock_errorf("glTexCoordPointer missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexCoordPointer:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != size) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != type) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != stride) { \
                    match = 0; \
        } \
                        void *a = packed->args.a4, *b = pointer; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pointer)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexCoordPointer(%d, 0x%04X, %d, %p);\n", size, type, stride, pointer); \
        } \
    } \
}
#define pack_glTexEnvf(target, pname, param) ({ \
    glTexEnvf_INDEXED *packed_data = malloc(sizeof(glTexEnvf_INDEXED)); \
    packed_data->func = glTexEnvf_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat)param; \
            packed_data; \
})
#define emit_glTexEnvf(target, pname, param) { \
    mock_push(pack_glTexEnvf(target, pname, param)); \
}
#define test_glTexEnvf(target, pname, param) { \
    glTexEnvf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexEnvf missing (no calls left)\n"); \
    } else if (packed->func != glTexEnvf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexEnvf_INDEX); \
        if (! packed) { \
            mock_errorf("glTexEnvf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexEnvf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexEnvf(0x%04X, 0x%04X, %0.2f);\n", target, pname, param); \
        } \
    } \
}
#define pack_glTexEnvfv(target, pname, params) ({ \
    glTexEnvfv_INDEXED *packed_data = malloc(sizeof(glTexEnvfv_INDEXED)); \
    packed_data->func = glTexEnvfv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glTexEnvfv(target, pname, params) { \
    mock_push(pack_glTexEnvfv(target, pname, params)); \
}
#define test_glTexEnvfv(target, pname, params) { \
    glTexEnvfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexEnvfv missing (no calls left)\n"); \
    } else if (packed->func != glTexEnvfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexEnvfv_INDEX); \
        if (! packed) { \
            mock_errorf("glTexEnvfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexEnvfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexEnvfv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glTexEnvi(target, pname, param) ({ \
    glTexEnvi_INDEXED *packed_data = malloc(sizeof(glTexEnvi_INDEXED)); \
    packed_data->func = glTexEnvi_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint)param; \
            packed_data; \
})
#define emit_glTexEnvi(target, pname, param) { \
    mock_push(pack_glTexEnvi(target, pname, param)); \
}
#define test_glTexEnvi(target, pname, param) { \
    glTexEnvi_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexEnvi missing (no calls left)\n"); \
    } else if (packed->func != glTexEnvi_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexEnvi_INDEX); \
        if (! packed) { \
            mock_errorf("glTexEnvi missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexEnvi:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexEnvi(0x%04X, 0x%04X, %d);\n", target, pname, param); \
        } \
    } \
}
#define pack_glTexEnviv(target, pname, params) ({ \
    glTexEnviv_INDEXED *packed_data = malloc(sizeof(glTexEnviv_INDEXED)); \
    packed_data->func = glTexEnviv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            packed_data; \
})
#define emit_glTexEnviv(target, pname, params) { \
    mock_push(pack_glTexEnviv(target, pname, params)); \
}
#define test_glTexEnviv(target, pname, params) { \
    glTexEnviv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexEnviv missing (no calls left)\n"); \
    } else if (packed->func != glTexEnviv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexEnviv_INDEX); \
        if (! packed) { \
            mock_errorf("glTexEnviv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexEnviv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexEnviv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glTexEnvx(target, pname, param) ({ \
    glTexEnvx_INDEXED *packed_data = malloc(sizeof(glTexEnvx_INDEXED)); \
    packed_data->func = glTexEnvx_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed)param; \
            packed_data; \
})
#define emit_glTexEnvx(target, pname, param) { \
    mock_push(pack_glTexEnvx(target, pname, param)); \
}
#define test_glTexEnvx(target, pname, param) { \
    glTexEnvx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexEnvx missing (no calls left)\n"); \
    } else if (packed->func != glTexEnvx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexEnvx_INDEX); \
        if (! packed) { \
            mock_errorf("glTexEnvx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexEnvx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexEnvx(0x%04X, 0x%04X, %p);\n", target, pname, param); \
        } \
    } \
}
#define pack_glTexEnvxv(target, pname, params) ({ \
    glTexEnvxv_INDEXED *packed_data = malloc(sizeof(glTexEnvxv_INDEXED)); \
    packed_data->func = glTexEnvxv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glTexEnvxv(target, pname, params) { \
    mock_push(pack_glTexEnvxv(target, pname, params)); \
}
#define test_glTexEnvxv(target, pname, params) { \
    glTexEnvxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexEnvxv missing (no calls left)\n"); \
    } else if (packed->func != glTexEnvxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexEnvxv_INDEX); \
        if (! packed) { \
            mock_errorf("glTexEnvxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexEnvxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexEnvxv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels) ({ \
    glTexImage2D_INDEXED *packed_data = malloc(sizeof(glTexImage2D_INDEXED)); \
    packed_data->func = glTexImage2D_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)internalformat; \
        packed_data->args.a4 = (GLsizei)width; \
        packed_data->args.a5 = (GLsizei)height; \
        packed_data->args.a6 = (GLint)border; \
        packed_data->args.a7 = (GLenum)format; \
        packed_data->args.a8 = (GLenum)type; \
        packed_data->args.a9 = (GLvoid *)pixels; \
            packed_data; \
})
#define emit_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels) { \
    mock_push(pack_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels)); \
}
#define test_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels) { \
    glTexImage2D_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexImage2D missing (no calls left)\n"); \
    } else if (packed->func != glTexImage2D_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexImage2D_INDEX); \
        if (! packed) { \
            mock_errorf("glTexImage2D missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexImage2D:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != level) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != internalformat) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != height) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != border) { \
                    match = 0; \
        } \
                        if (packed->args.a7 != format) { \
                    match = 0; \
        } \
                        if (packed->args.a8 != type) { \
                    match = 0; \
        } \
                        void *a = packed->args.a9, *b = pixels; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pixels)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexImage2D(0x%04X, %d, %d, %d, %d, %d, 0x%04X, 0x%04X, %p);\n", target, level, internalformat, width, height, border, format, type, pixels); \
        } \
    } \
}
#define pack_glTexParameterf(target, pname, param) ({ \
    glTexParameterf_INDEXED *packed_data = malloc(sizeof(glTexParameterf_INDEXED)); \
    packed_data->func = glTexParameterf_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat)param; \
            packed_data; \
})
#define emit_glTexParameterf(target, pname, param) { \
    mock_push(pack_glTexParameterf(target, pname, param)); \
}
#define test_glTexParameterf(target, pname, param) { \
    glTexParameterf_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexParameterf missing (no calls left)\n"); \
    } else if (packed->func != glTexParameterf_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexParameterf_INDEX); \
        if (! packed) { \
            mock_errorf("glTexParameterf missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexParameterf:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - param >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexParameterf(0x%04X, 0x%04X, %0.2f);\n", target, pname, param); \
        } \
    } \
}
#define pack_glTexParameterfv(target, pname, params) ({ \
    glTexParameterfv_INDEXED *packed_data = malloc(sizeof(glTexParameterfv_INDEXED)); \
    packed_data->func = glTexParameterfv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfloat *)params; \
            packed_data; \
})
#define emit_glTexParameterfv(target, pname, params) { \
    mock_push(pack_glTexParameterfv(target, pname, params)); \
}
#define test_glTexParameterfv(target, pname, params) { \
    glTexParameterfv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexParameterfv missing (no calls left)\n"); \
    } else if (packed->func != glTexParameterfv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexParameterfv_INDEX); \
        if (! packed) { \
            mock_errorf("glTexParameterfv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexParameterfv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexParameterfv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glTexParameteri(target, pname, param) ({ \
    glTexParameteri_INDEXED *packed_data = malloc(sizeof(glTexParameteri_INDEXED)); \
    packed_data->func = glTexParameteri_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint)param; \
            packed_data; \
})
#define emit_glTexParameteri(target, pname, param) { \
    mock_push(pack_glTexParameteri(target, pname, param)); \
}
#define test_glTexParameteri(target, pname, param) { \
    glTexParameteri_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexParameteri missing (no calls left)\n"); \
    } else if (packed->func != glTexParameteri_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexParameteri_INDEX); \
        if (! packed) { \
            mock_errorf("glTexParameteri missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexParameteri:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexParameteri(0x%04X, 0x%04X, %d);\n", target, pname, param); \
        } \
    } \
}
#define pack_glTexParameteriv(target, pname, params) ({ \
    glTexParameteriv_INDEXED *packed_data = malloc(sizeof(glTexParameteriv_INDEXED)); \
    packed_data->func = glTexParameteriv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLint *)params; \
            packed_data; \
})
#define emit_glTexParameteriv(target, pname, params) { \
    mock_push(pack_glTexParameteriv(target, pname, params)); \
}
#define test_glTexParameteriv(target, pname, params) { \
    glTexParameteriv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexParameteriv missing (no calls left)\n"); \
    } else if (packed->func != glTexParameteriv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexParameteriv_INDEX); \
        if (! packed) { \
            mock_errorf("glTexParameteriv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexParameteriv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexParameteriv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glTexParameterx(target, pname, param) ({ \
    glTexParameterx_INDEXED *packed_data = malloc(sizeof(glTexParameterx_INDEXED)); \
    packed_data->func = glTexParameterx_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed)param; \
            packed_data; \
})
#define emit_glTexParameterx(target, pname, param) { \
    mock_push(pack_glTexParameterx(target, pname, param)); \
}
#define test_glTexParameterx(target, pname, param) { \
    glTexParameterx_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexParameterx missing (no calls left)\n"); \
    } else if (packed->func != glTexParameterx_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexParameterx_INDEX); \
        if (! packed) { \
            mock_errorf("glTexParameterx missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexParameterx:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != param) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexParameterx(0x%04X, 0x%04X, %p);\n", target, pname, param); \
        } \
    } \
}
#define pack_glTexParameterxv(target, pname, params) ({ \
    glTexParameterxv_INDEXED *packed_data = malloc(sizeof(glTexParameterxv_INDEXED)); \
    packed_data->func = glTexParameterxv_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLenum)pname; \
        packed_data->args.a3 = (GLfixed *)params; \
            packed_data; \
})
#define emit_glTexParameterxv(target, pname, params) { \
    mock_push(pack_glTexParameterxv(target, pname, params)); \
}
#define test_glTexParameterxv(target, pname, params) { \
    glTexParameterxv_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexParameterxv missing (no calls left)\n"); \
    } else if (packed->func != glTexParameterxv_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexParameterxv_INDEX); \
        if (! packed) { \
            mock_errorf("glTexParameterxv missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexParameterxv:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != pname) { \
                    match = 0; \
        } \
                        void *a = packed->args.a3, *b = params; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(params)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexParameterxv(0x%04X, 0x%04X, %p);\n", target, pname, params); \
        } \
    } \
}
#define pack_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels) ({ \
    glTexSubImage2D_INDEXED *packed_data = malloc(sizeof(glTexSubImage2D_INDEXED)); \
    packed_data->func = glTexSubImage2D_INDEX; \
            packed_data->args.a1 = (GLenum)target; \
        packed_data->args.a2 = (GLint)level; \
        packed_data->args.a3 = (GLint)xoffset; \
        packed_data->args.a4 = (GLint)yoffset; \
        packed_data->args.a5 = (GLsizei)width; \
        packed_data->args.a6 = (GLsizei)height; \
        packed_data->args.a7 = (GLenum)format; \
        packed_data->args.a8 = (GLenum)type; \
        packed_data->args.a9 = (GLvoid *)pixels; \
            packed_data; \
})
#define emit_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels) { \
    mock_push(pack_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels)); \
}
#define test_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels) { \
    glTexSubImage2D_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTexSubImage2D missing (no calls left)\n"); \
    } else if (packed->func != glTexSubImage2D_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTexSubImage2D_INDEX); \
        if (! packed) { \
            mock_errorf("glTexSubImage2D missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTexSubImage2D:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != target) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != level) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != xoffset) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != yoffset) { \
                    match = 0; \
        } \
                        if (packed->args.a5 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a6 != height) { \
                    match = 0; \
        } \
                        if (packed->args.a7 != format) { \
                    match = 0; \
        } \
                        if (packed->args.a8 != type) { \
                    match = 0; \
        } \
                        void *a = packed->args.a9, *b = pixels; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pixels)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTexSubImage2D(0x%04X, %d, %d, %d, %d, %d, 0x%04X, 0x%04X, %p);\n", target, level, xoffset, yoffset, width, height, format, type, pixels); \
        } \
    } \
}
#define pack_glTranslatef(x, y, z) ({ \
    glTranslatef_INDEXED *packed_data = malloc(sizeof(glTranslatef_INDEXED)); \
    packed_data->func = glTranslatef_INDEX; \
            packed_data->args.a1 = (GLfloat)x; \
        packed_data->args.a2 = (GLfloat)y; \
        packed_data->args.a3 = (GLfloat)z; \
            packed_data; \
})
#define emit_glTranslatef(x, y, z) { \
    mock_push(pack_glTranslatef(x, y, z)); \
}
#define test_glTranslatef(x, y, z) { \
    glTranslatef_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTranslatef missing (no calls left)\n"); \
    } else if (packed->func != glTranslatef_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTranslatef_INDEX); \
        if (! packed) { \
            mock_errorf("glTranslatef missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTranslatef:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 - x >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a2 - y >= 0.01) { \
                    match = 0; \
        } \
                        if (packed->args.a3 - z >= 0.01) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTranslatef(%0.2f, %0.2f, %0.2f);\n", x, y, z); \
        } \
    } \
}
#define pack_glTranslatex(x, y, z) ({ \
    glTranslatex_INDEXED *packed_data = malloc(sizeof(glTranslatex_INDEXED)); \
    packed_data->func = glTranslatex_INDEX; \
            packed_data->args.a1 = (GLfixed)x; \
        packed_data->args.a2 = (GLfixed)y; \
        packed_data->args.a3 = (GLfixed)z; \
            packed_data; \
})
#define emit_glTranslatex(x, y, z) { \
    mock_push(pack_glTranslatex(x, y, z)); \
}
#define test_glTranslatex(x, y, z) { \
    glTranslatex_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glTranslatex missing (no calls left)\n"); \
    } else if (packed->func != glTranslatex_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glTranslatex_INDEX); \
        if (! packed) { \
            mock_errorf("glTranslatex missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glTranslatex:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != z) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glTranslatex(%p, %p, %p);\n", x, y, z); \
        } \
    } \
}
#define pack_glVertexPointer(size, type, stride, pointer) ({ \
    glVertexPointer_INDEXED *packed_data = malloc(sizeof(glVertexPointer_INDEXED)); \
    packed_data->func = glVertexPointer_INDEX; \
            packed_data->args.a1 = (GLint)size; \
        packed_data->args.a2 = (GLenum)type; \
        packed_data->args.a3 = (GLsizei)stride; \
        packed_data->args.a4 = (GLvoid *)pointer; \
            packed_data; \
})
#define emit_glVertexPointer(size, type, stride, pointer) { \
    mock_push(pack_glVertexPointer(size, type, stride, pointer)); \
}
#define test_glVertexPointer(size, type, stride, pointer) { \
    glVertexPointer_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glVertexPointer missing (no calls left)\n"); \
    } else if (packed->func != glVertexPointer_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glVertexPointer_INDEX); \
        if (! packed) { \
            mock_errorf("glVertexPointer missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glVertexPointer:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != size) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != type) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != stride) { \
                    match = 0; \
        } \
                        void *a = packed->args.a4, *b = pointer; \
        if (b == NULL && a != NULL || (a != NULL && b != NULL && (memcmp(a, b, sizeof(pointer)) != 0))) { \
            ptr_error = 1; \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glVertexPointer(%d, 0x%04X, %d, %p);\n", size, type, stride, pointer); \
        } \
    } \
}
#define pack_glViewport(x, y, width, height) ({ \
    glViewport_INDEXED *packed_data = malloc(sizeof(glViewport_INDEXED)); \
    packed_data->func = glViewport_INDEX; \
            packed_data->args.a1 = (GLint)x; \
        packed_data->args.a2 = (GLint)y; \
        packed_data->args.a3 = (GLsizei)width; \
        packed_data->args.a4 = (GLsizei)height; \
            packed_data; \
})
#define emit_glViewport(x, y, width, height) { \
    mock_push(pack_glViewport(x, y, width, height)); \
}
#define test_glViewport(x, y, width, height) { \
    glViewport_INDEXED *packed = mock_cur(); \
    if (packed == NULL) { \
        mock_errorf("glViewport missing (no calls left)\n"); \
    } else if (packed->func != glViewport_INDEX) { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        indexed_call_t *tmp = (indexed_call_t *)packed; \
        packed = mock_slide(glViewport_INDEX); \
        if (! packed) { \
            mock_errorf("glViewport missing\n"); \
        } else { \
            mock_warningf("unexpected call while looking for glViewport:\n  "); \
            mock_print(tmp); \
        }\
    } else { \
        if (verbose_test) { \
            mock_print(mock_cur()); \
        } \
        mock_shift(); \
    } \
    if (packed) { \
        int match = 1, ptr_error = 0; \
                        if (packed->args.a1 != x) { \
                    match = 0; \
        } \
                        if (packed->args.a2 != y) { \
                    match = 0; \
        } \
                        if (packed->args.a3 != width) { \
                    match = 0; \
        } \
                        if (packed->args.a4 != height) { \
                    match = 0; \
        } \
                if (! match) { \
            mock_errorf("calls do not match:\n"); \
            if (ptr_error) { \
                printf("  (pointer mismatch)\n"); \
            } \
            printf("  have: "); mock_print((const indexed_call_t *)packed); \
            printf("  want: glViewport(%d, %d, %d, %d);\n", x, y, width, height); \
        } \
    } \
}

#define gles_glActiveTexture_INDEX 1
#define gles_glActiveTexture_RETURN void
#define gles_glActiveTexture_ARG_NAMES texture
#define gles_glActiveTexture_ARG_EXPAND GLenum texture
#define gles_glActiveTexture_PACKED PACKED_void_GLenum
#define gles_glActiveTexture_INDEXED INDEXED_void_GLenum
#define gles_glActiveTexture_FORMAT FORMAT_void_GLenum
#define gles_glAlphaFunc_INDEX 2
#define gles_glAlphaFunc_RETURN void
#define gles_glAlphaFunc_ARG_NAMES func, ref
#define gles_glAlphaFunc_ARG_EXPAND GLenum func, GLclampf ref
#define gles_glAlphaFunc_PACKED PACKED_void_GLenum_GLclampf
#define gles_glAlphaFunc_INDEXED INDEXED_void_GLenum_GLclampf
#define gles_glAlphaFunc_FORMAT FORMAT_void_GLenum_GLclampf
#define gles_glAlphaFuncx_INDEX 3
#define gles_glAlphaFuncx_RETURN void
#define gles_glAlphaFuncx_ARG_NAMES func, ref
#define gles_glAlphaFuncx_ARG_EXPAND GLenum func, GLclampx ref
#define gles_glAlphaFuncx_PACKED PACKED_void_GLenum_GLclampx
#define gles_glAlphaFuncx_INDEXED INDEXED_void_GLenum_GLclampx
#define gles_glAlphaFuncx_FORMAT FORMAT_void_GLenum_GLclampx
#define gles_glBindBuffer_INDEX 4
#define gles_glBindBuffer_RETURN void
#define gles_glBindBuffer_ARG_NAMES target, buffer
#define gles_glBindBuffer_ARG_EXPAND GLenum target, GLuint buffer
#define gles_glBindBuffer_PACKED PACKED_void_GLenum_GLuint
#define gles_glBindBuffer_INDEXED INDEXED_void_GLenum_GLuint
#define gles_glBindBuffer_FORMAT FORMAT_void_GLenum_GLuint
#define gles_glBindTexture_INDEX 5
#define gles_glBindTexture_RETURN void
#define gles_glBindTexture_ARG_NAMES target, texture
#define gles_glBindTexture_ARG_EXPAND GLenum target, GLuint texture
#define gles_glBindTexture_PACKED PACKED_void_GLenum_GLuint
#define gles_glBindTexture_INDEXED INDEXED_void_GLenum_GLuint
#define gles_glBindTexture_FORMAT FORMAT_void_GLenum_GLuint
#define gles_glBlendColorOES_INDEX 6
#define gles_glBlendColorOES_RETURN void
#define gles_glBlendColorOES_ARG_NAMES red, green, blue, alpha
#define gles_glBlendColorOES_ARG_EXPAND GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha
#define gles_glBlendColorOES_PACKED PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define gles_glBlendColorOES_INDEXED INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define gles_glBlendColorOES_FORMAT FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf
#define gles_glBlendEquationOES_INDEX 7
#define gles_glBlendEquationOES_RETURN void
#define gles_glBlendEquationOES_ARG_NAMES mode
#define gles_glBlendEquationOES_ARG_EXPAND GLenum mode
#define gles_glBlendEquationOES_PACKED PACKED_void_GLenum
#define gles_glBlendEquationOES_INDEXED INDEXED_void_GLenum
#define gles_glBlendEquationOES_FORMAT FORMAT_void_GLenum
#define gles_glBlendEquationSeparateOES_INDEX 8
#define gles_glBlendEquationSeparateOES_RETURN void
#define gles_glBlendEquationSeparateOES_ARG_NAMES modeRGB, modeAlpha
#define gles_glBlendEquationSeparateOES_ARG_EXPAND GLenum modeRGB, GLenum modeAlpha
#define gles_glBlendEquationSeparateOES_PACKED PACKED_void_GLenum_GLenum
#define gles_glBlendEquationSeparateOES_INDEXED INDEXED_void_GLenum_GLenum
#define gles_glBlendEquationSeparateOES_FORMAT FORMAT_void_GLenum_GLenum
#define gles_glBlendFunc_INDEX 9
#define gles_glBlendFunc_RETURN void
#define gles_glBlendFunc_ARG_NAMES sfactor, dfactor
#define gles_glBlendFunc_ARG_EXPAND GLenum sfactor, GLenum dfactor
#define gles_glBlendFunc_PACKED PACKED_void_GLenum_GLenum
#define gles_glBlendFunc_INDEXED INDEXED_void_GLenum_GLenum
#define gles_glBlendFunc_FORMAT FORMAT_void_GLenum_GLenum
#define gles_glBlendFuncSeparateOES_INDEX 10
#define gles_glBlendFuncSeparateOES_RETURN void
#define gles_glBlendFuncSeparateOES_ARG_NAMES sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha
#define gles_glBlendFuncSeparateOES_ARG_EXPAND GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha
#define gles_glBlendFuncSeparateOES_PACKED PACKED_void_GLenum_GLenum_GLenum_GLenum
#define gles_glBlendFuncSeparateOES_INDEXED INDEXED_void_GLenum_GLenum_GLenum_GLenum
#define gles_glBlendFuncSeparateOES_FORMAT FORMAT_void_GLenum_GLenum_GLenum_GLenum
#define gles_glBufferData_INDEX 11
#define gles_glBufferData_RETURN void
#define gles_glBufferData_ARG_NAMES target, size, data, usage
#define gles_glBufferData_ARG_EXPAND GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage
#define gles_glBufferData_PACKED PACKED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum
#define gles_glBufferData_INDEXED INDEXED_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum
#define gles_glBufferData_FORMAT FORMAT_void_GLenum_GLsizeiptr_const_GLvoid___GENPT___GLenum
#define gles_glBufferSubData_INDEX 12
#define gles_glBufferSubData_RETURN void
#define gles_glBufferSubData_ARG_NAMES target, offset, size, data
#define gles_glBufferSubData_ARG_EXPAND GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data
#define gles_glBufferSubData_PACKED PACKED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__
#define gles_glBufferSubData_INDEXED INDEXED_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__
#define gles_glBufferSubData_FORMAT FORMAT_void_GLenum_GLintptr_GLsizeiptr_const_GLvoid___GENPT__
#define gles_glClear_INDEX 13
#define gles_glClear_RETURN void
#define gles_glClear_ARG_NAMES mask
#define gles_glClear_ARG_EXPAND GLbitfield mask
#define gles_glClear_PACKED PACKED_void_GLbitfield
#define gles_glClear_INDEXED INDEXED_void_GLbitfield
#define gles_glClear_FORMAT FORMAT_void_GLbitfield
#define gles_glClearColor_INDEX 14
#define gles_glClearColor_RETURN void
#define gles_glClearColor_ARG_NAMES red, green, blue, alpha
#define gles_glClearColor_ARG_EXPAND GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha
#define gles_glClearColor_PACKED PACKED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define gles_glClearColor_INDEXED INDEXED_void_GLclampf_GLclampf_GLclampf_GLclampf
#define gles_glClearColor_FORMAT FORMAT_void_GLclampf_GLclampf_GLclampf_GLclampf
#define gles_glClearColorx_INDEX 15
#define gles_glClearColorx_RETURN void
#define gles_glClearColorx_ARG_NAMES red, green, blue, alpha
#define gles_glClearColorx_ARG_EXPAND GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha
#define gles_glClearColorx_PACKED PACKED_void_GLclampx_GLclampx_GLclampx_GLclampx
#define gles_glClearColorx_INDEXED INDEXED_void_GLclampx_GLclampx_GLclampx_GLclampx
#define gles_glClearColorx_FORMAT FORMAT_void_GLclampx_GLclampx_GLclampx_GLclampx
#define gles_glClearDepthf_INDEX 16
#define gles_glClearDepthf_RETURN void
#define gles_glClearDepthf_ARG_NAMES depth
#define gles_glClearDepthf_ARG_EXPAND GLclampf depth
#define gles_glClearDepthf_PACKED PACKED_void_GLclampf
#define gles_glClearDepthf_INDEXED INDEXED_void_GLclampf
#define gles_glClearDepthf_FORMAT FORMAT_void_GLclampf
#define gles_glClearDepthx_INDEX 17
#define gles_glClearDepthx_RETURN void
#define gles_glClearDepthx_ARG_NAMES depth
#define gles_glClearDepthx_ARG_EXPAND GLclampx depth
#define gles_glClearDepthx_PACKED PACKED_void_GLclampx
#define gles_glClearDepthx_INDEXED INDEXED_void_GLclampx
#define gles_glClearDepthx_FORMAT FORMAT_void_GLclampx
#define gles_glClearStencil_INDEX 18
#define gles_glClearStencil_RETURN void
#define gles_glClearStencil_ARG_NAMES s
#define gles_glClearStencil_ARG_EXPAND GLint s
#define gles_glClearStencil_PACKED PACKED_void_GLint
#define gles_glClearStencil_INDEXED INDEXED_void_GLint
#define gles_glClearStencil_FORMAT FORMAT_void_GLint
#define gles_glClientActiveTexture_INDEX 19
#define gles_glClientActiveTexture_RETURN void
#define gles_glClientActiveTexture_ARG_NAMES texture
#define gles_glClientActiveTexture_ARG_EXPAND GLenum texture
#define gles_glClientActiveTexture_PACKED PACKED_void_GLenum
#define gles_glClientActiveTexture_INDEXED INDEXED_void_GLenum
#define gles_glClientActiveTexture_FORMAT FORMAT_void_GLenum
#define gles_glClipPlanef_INDEX 20
#define gles_glClipPlanef_RETURN void
#define gles_glClipPlanef_ARG_NAMES plane, equation
#define gles_glClipPlanef_ARG_EXPAND GLenum plane, const GLfloat * equation
#define gles_glClipPlanef_PACKED PACKED_void_GLenum_const_GLfloat___GENPT__
#define gles_glClipPlanef_INDEXED INDEXED_void_GLenum_const_GLfloat___GENPT__
#define gles_glClipPlanef_FORMAT FORMAT_void_GLenum_const_GLfloat___GENPT__
#define gles_glClipPlanex_INDEX 21
#define gles_glClipPlanex_RETURN void
#define gles_glClipPlanex_ARG_NAMES plane, equation
#define gles_glClipPlanex_ARG_EXPAND GLenum plane, const GLfixed * equation
#define gles_glClipPlanex_PACKED PACKED_void_GLenum_const_GLfixed___GENPT__
#define gles_glClipPlanex_INDEXED INDEXED_void_GLenum_const_GLfixed___GENPT__
#define gles_glClipPlanex_FORMAT FORMAT_void_GLenum_const_GLfixed___GENPT__
#define gles_glColor4f_INDEX 22
#define gles_glColor4f_RETURN void
#define gles_glColor4f_ARG_NAMES red, green, blue, alpha
#define gles_glColor4f_ARG_EXPAND GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha
#define gles_glColor4f_PACKED PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glColor4f_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glColor4f_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glColor4ub_INDEX 23
#define gles_glColor4ub_RETURN void
#define gles_glColor4ub_ARG_NAMES red, green, blue, alpha
#define gles_glColor4ub_ARG_EXPAND GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha
#define gles_glColor4ub_PACKED PACKED_void_GLubyte_GLubyte_GLubyte_GLubyte
#define gles_glColor4ub_INDEXED INDEXED_void_GLubyte_GLubyte_GLubyte_GLubyte
#define gles_glColor4ub_FORMAT FORMAT_void_GLubyte_GLubyte_GLubyte_GLubyte
#define gles_glColor4x_INDEX 24
#define gles_glColor4x_RETURN void
#define gles_glColor4x_ARG_NAMES red, green, blue, alpha
#define gles_glColor4x_ARG_EXPAND GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha
#define gles_glColor4x_PACKED PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glColor4x_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glColor4x_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glColorMask_INDEX 25
#define gles_glColorMask_RETURN void
#define gles_glColorMask_ARG_NAMES red, green, blue, alpha
#define gles_glColorMask_ARG_EXPAND GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha
#define gles_glColorMask_PACKED PACKED_void_GLboolean_GLboolean_GLboolean_GLboolean
#define gles_glColorMask_INDEXED INDEXED_void_GLboolean_GLboolean_GLboolean_GLboolean
#define gles_glColorMask_FORMAT FORMAT_void_GLboolean_GLboolean_GLboolean_GLboolean
#define gles_glColorPointer_INDEX 26
#define gles_glColorPointer_RETURN void
#define gles_glColorPointer_ARG_NAMES size, type, stride, pointer
#define gles_glColorPointer_ARG_EXPAND GLint size, GLenum type, GLsizei stride, const GLvoid * pointer
#define gles_glColorPointer_PACKED PACKED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glColorPointer_INDEXED INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glColorPointer_FORMAT FORMAT_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glCompressedTexImage2D_INDEX 27
#define gles_glCompressedTexImage2D_RETURN void
#define gles_glCompressedTexImage2D_ARG_NAMES target, level, internalformat, width, height, border, imageSize, data
#define gles_glCompressedTexImage2D_ARG_EXPAND GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data
#define gles_glCompressedTexImage2D_PACKED PACKED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__
#define gles_glCompressedTexImage2D_INDEXED INDEXED_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__
#define gles_glCompressedTexImage2D_FORMAT FORMAT_void_GLenum_GLint_GLenum_GLsizei_GLsizei_GLint_GLsizei_const_GLvoid___GENPT__
#define gles_glCompressedTexSubImage2D_INDEX 28
#define gles_glCompressedTexSubImage2D_RETURN void
#define gles_glCompressedTexSubImage2D_ARG_NAMES target, level, xoffset, yoffset, width, height, format, imageSize, data
#define gles_glCompressedTexSubImage2D_ARG_EXPAND GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data
#define gles_glCompressedTexSubImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glCompressedTexSubImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glCompressedTexSubImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glCopyTexImage2D_INDEX 29
#define gles_glCopyTexImage2D_RETURN void
#define gles_glCopyTexImage2D_ARG_NAMES target, level, internalformat, x, y, width, height, border
#define gles_glCopyTexImage2D_ARG_EXPAND GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border
#define gles_glCopyTexImage2D_PACKED PACKED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint
#define gles_glCopyTexImage2D_INDEXED INDEXED_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint
#define gles_glCopyTexImage2D_FORMAT FORMAT_void_GLenum_GLint_GLenum_GLint_GLint_GLsizei_GLsizei_GLint
#define gles_glCopyTexSubImage2D_INDEX 30
#define gles_glCopyTexSubImage2D_RETURN void
#define gles_glCopyTexSubImage2D_ARG_NAMES target, level, xoffset, yoffset, x, y, width, height
#define gles_glCopyTexSubImage2D_ARG_EXPAND GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height
#define gles_glCopyTexSubImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei
#define gles_glCopyTexSubImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei
#define gles_glCopyTexSubImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLint_GLint_GLint_GLsizei_GLsizei
#define gles_glCullFace_INDEX 31
#define gles_glCullFace_RETURN void
#define gles_glCullFace_ARG_NAMES mode
#define gles_glCullFace_ARG_EXPAND GLenum mode
#define gles_glCullFace_PACKED PACKED_void_GLenum
#define gles_glCullFace_INDEXED INDEXED_void_GLenum
#define gles_glCullFace_FORMAT FORMAT_void_GLenum
#define gles_glDeleteBuffers_INDEX 32
#define gles_glDeleteBuffers_RETURN void
#define gles_glDeleteBuffers_ARG_NAMES n, buffers
#define gles_glDeleteBuffers_ARG_EXPAND GLsizei n, const GLuint * buffers
#define gles_glDeleteBuffers_PACKED PACKED_void_GLsizei_const_GLuint___GENPT__
#define gles_glDeleteBuffers_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT__
#define gles_glDeleteBuffers_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT__
#define gles_glDeleteTextures_INDEX 33
#define gles_glDeleteTextures_RETURN void
#define gles_glDeleteTextures_ARG_NAMES n, textures
#define gles_glDeleteTextures_ARG_EXPAND GLsizei n, const GLuint * textures
#define gles_glDeleteTextures_PACKED PACKED_void_GLsizei_const_GLuint___GENPT__
#define gles_glDeleteTextures_INDEXED INDEXED_void_GLsizei_const_GLuint___GENPT__
#define gles_glDeleteTextures_FORMAT FORMAT_void_GLsizei_const_GLuint___GENPT__
#define gles_glDepthFunc_INDEX 34
#define gles_glDepthFunc_RETURN void
#define gles_glDepthFunc_ARG_NAMES func
#define gles_glDepthFunc_ARG_EXPAND GLenum func
#define gles_glDepthFunc_PACKED PACKED_void_GLenum
#define gles_glDepthFunc_INDEXED INDEXED_void_GLenum
#define gles_glDepthFunc_FORMAT FORMAT_void_GLenum
#define gles_glDepthMask_INDEX 35
#define gles_glDepthMask_RETURN void
#define gles_glDepthMask_ARG_NAMES flag
#define gles_glDepthMask_ARG_EXPAND GLboolean flag
#define gles_glDepthMask_PACKED PACKED_void_GLboolean
#define gles_glDepthMask_INDEXED INDEXED_void_GLboolean
#define gles_glDepthMask_FORMAT FORMAT_void_GLboolean
#define gles_glDepthRangef_INDEX 36
#define gles_glDepthRangef_RETURN void
#define gles_glDepthRangef_ARG_NAMES near, far
#define gles_glDepthRangef_ARG_EXPAND GLclampf near, GLclampf far
#define gles_glDepthRangef_PACKED PACKED_void_GLclampf_GLclampf
#define gles_glDepthRangef_INDEXED INDEXED_void_GLclampf_GLclampf
#define gles_glDepthRangef_FORMAT FORMAT_void_GLclampf_GLclampf
#define gles_glDepthRangex_INDEX 37
#define gles_glDepthRangex_RETURN void
#define gles_glDepthRangex_ARG_NAMES near, far
#define gles_glDepthRangex_ARG_EXPAND GLclampx near, GLclampx far
#define gles_glDepthRangex_PACKED PACKED_void_GLclampx_GLclampx
#define gles_glDepthRangex_INDEXED INDEXED_void_GLclampx_GLclampx
#define gles_glDepthRangex_FORMAT FORMAT_void_GLclampx_GLclampx
#define gles_glDisable_INDEX 38
#define gles_glDisable_RETURN void
#define gles_glDisable_ARG_NAMES cap
#define gles_glDisable_ARG_EXPAND GLenum cap
#define gles_glDisable_PACKED PACKED_void_GLenum
#define gles_glDisable_INDEXED INDEXED_void_GLenum
#define gles_glDisable_FORMAT FORMAT_void_GLenum
#define gles_glDisableClientState_INDEX 39
#define gles_glDisableClientState_RETURN void
#define gles_glDisableClientState_ARG_NAMES array
#define gles_glDisableClientState_ARG_EXPAND GLenum array
#define gles_glDisableClientState_PACKED PACKED_void_GLenum
#define gles_glDisableClientState_INDEXED INDEXED_void_GLenum
#define gles_glDisableClientState_FORMAT FORMAT_void_GLenum
#define gles_glDrawArrays_INDEX 40
#define gles_glDrawArrays_RETURN void
#define gles_glDrawArrays_ARG_NAMES mode, first, count
#define gles_glDrawArrays_ARG_EXPAND GLenum mode, GLint first, GLsizei count
#define gles_glDrawArrays_PACKED PACKED_void_GLenum_GLint_GLsizei
#define gles_glDrawArrays_INDEXED INDEXED_void_GLenum_GLint_GLsizei
#define gles_glDrawArrays_FORMAT FORMAT_void_GLenum_GLint_GLsizei
#define gles_glDrawElements_INDEX 41
#define gles_glDrawElements_RETURN void
#define gles_glDrawElements_ARG_NAMES mode, count, type, indices
#define gles_glDrawElements_ARG_EXPAND GLenum mode, GLsizei count, GLenum type, const GLvoid * indices
#define gles_glDrawElements_PACKED PACKED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__
#define gles_glDrawElements_INDEXED INDEXED_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__
#define gles_glDrawElements_FORMAT FORMAT_void_GLenum_GLsizei_GLenum_const_GLvoid___GENPT__
#define gles_glEnable_INDEX 42
#define gles_glEnable_RETURN void
#define gles_glEnable_ARG_NAMES cap
#define gles_glEnable_ARG_EXPAND GLenum cap
#define gles_glEnable_PACKED PACKED_void_GLenum
#define gles_glEnable_INDEXED INDEXED_void_GLenum
#define gles_glEnable_FORMAT FORMAT_void_GLenum
#define gles_glEnableClientState_INDEX 43
#define gles_glEnableClientState_RETURN void
#define gles_glEnableClientState_ARG_NAMES array
#define gles_glEnableClientState_ARG_EXPAND GLenum array
#define gles_glEnableClientState_PACKED PACKED_void_GLenum
#define gles_glEnableClientState_INDEXED INDEXED_void_GLenum
#define gles_glEnableClientState_FORMAT FORMAT_void_GLenum
#define gles_glFinish_INDEX 44
#define gles_glFinish_RETURN void
#define gles_glFinish_ARG_NAMES 
#define gles_glFinish_ARG_EXPAND 
#define gles_glFinish_PACKED PACKED_void
#define gles_glFinish_INDEXED INDEXED_void
#define gles_glFinish_FORMAT FORMAT_void
#define gles_glFlush_INDEX 45
#define gles_glFlush_RETURN void
#define gles_glFlush_ARG_NAMES 
#define gles_glFlush_ARG_EXPAND 
#define gles_glFlush_PACKED PACKED_void
#define gles_glFlush_INDEXED INDEXED_void
#define gles_glFlush_FORMAT FORMAT_void
#define gles_glFogf_INDEX 46
#define gles_glFogf_RETURN void
#define gles_glFogf_ARG_NAMES pname, param
#define gles_glFogf_ARG_EXPAND GLenum pname, GLfloat param
#define gles_glFogf_PACKED PACKED_void_GLenum_GLfloat
#define gles_glFogf_INDEXED INDEXED_void_GLenum_GLfloat
#define gles_glFogf_FORMAT FORMAT_void_GLenum_GLfloat
#define gles_glFogfv_INDEX 47
#define gles_glFogfv_RETURN void
#define gles_glFogfv_ARG_NAMES pname, params
#define gles_glFogfv_ARG_EXPAND GLenum pname, const GLfloat * params
#define gles_glFogfv_PACKED PACKED_void_GLenum_const_GLfloat___GENPT__
#define gles_glFogfv_INDEXED INDEXED_void_GLenum_const_GLfloat___GENPT__
#define gles_glFogfv_FORMAT FORMAT_void_GLenum_const_GLfloat___GENPT__
#define gles_glFogx_INDEX 48
#define gles_glFogx_RETURN void
#define gles_glFogx_ARG_NAMES pname, param
#define gles_glFogx_ARG_EXPAND GLenum pname, GLfixed param
#define gles_glFogx_PACKED PACKED_void_GLenum_GLfixed
#define gles_glFogx_INDEXED INDEXED_void_GLenum_GLfixed
#define gles_glFogx_FORMAT FORMAT_void_GLenum_GLfixed
#define gles_glFogxv_INDEX 49
#define gles_glFogxv_RETURN void
#define gles_glFogxv_ARG_NAMES pname, params
#define gles_glFogxv_ARG_EXPAND GLenum pname, const GLfixed * params
#define gles_glFogxv_PACKED PACKED_void_GLenum_const_GLfixed___GENPT__
#define gles_glFogxv_INDEXED INDEXED_void_GLenum_const_GLfixed___GENPT__
#define gles_glFogxv_FORMAT FORMAT_void_GLenum_const_GLfixed___GENPT__
#define gles_glFrontFace_INDEX 50
#define gles_glFrontFace_RETURN void
#define gles_glFrontFace_ARG_NAMES mode
#define gles_glFrontFace_ARG_EXPAND GLenum mode
#define gles_glFrontFace_PACKED PACKED_void_GLenum
#define gles_glFrontFace_INDEXED INDEXED_void_GLenum
#define gles_glFrontFace_FORMAT FORMAT_void_GLenum
#define gles_glFrustumf_INDEX 51
#define gles_glFrustumf_RETURN void
#define gles_glFrustumf_ARG_NAMES left, right, bottom, top, near, far
#define gles_glFrustumf_ARG_EXPAND GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far
#define gles_glFrustumf_PACKED PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glFrustumf_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glFrustumf_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glFrustumx_INDEX 52
#define gles_glFrustumx_RETURN void
#define gles_glFrustumx_ARG_NAMES left, right, bottom, top, near, far
#define gles_glFrustumx_ARG_EXPAND GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far
#define gles_glFrustumx_PACKED PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glFrustumx_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glFrustumx_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glGenBuffers_INDEX 53
#define gles_glGenBuffers_RETURN void
#define gles_glGenBuffers_ARG_NAMES n, buffers
#define gles_glGenBuffers_ARG_EXPAND GLsizei n, GLuint * buffers
#define gles_glGenBuffers_PACKED PACKED_void_GLsizei_GLuint___GENPT__
#define gles_glGenBuffers_INDEXED INDEXED_void_GLsizei_GLuint___GENPT__
#define gles_glGenBuffers_FORMAT FORMAT_void_GLsizei_GLuint___GENPT__
#define gles_glGenTextures_INDEX 54
#define gles_glGenTextures_RETURN void
#define gles_glGenTextures_ARG_NAMES n, textures
#define gles_glGenTextures_ARG_EXPAND GLsizei n, GLuint * textures
#define gles_glGenTextures_PACKED PACKED_void_GLsizei_GLuint___GENPT__
#define gles_glGenTextures_INDEXED INDEXED_void_GLsizei_GLuint___GENPT__
#define gles_glGenTextures_FORMAT FORMAT_void_GLsizei_GLuint___GENPT__
#define gles_glGetBooleanv_INDEX 55
#define gles_glGetBooleanv_RETURN void
#define gles_glGetBooleanv_ARG_NAMES pname, params
#define gles_glGetBooleanv_ARG_EXPAND GLenum pname, GLboolean * params
#define gles_glGetBooleanv_PACKED PACKED_void_GLenum_GLboolean___GENPT__
#define gles_glGetBooleanv_INDEXED INDEXED_void_GLenum_GLboolean___GENPT__
#define gles_glGetBooleanv_FORMAT FORMAT_void_GLenum_GLboolean___GENPT__
#define gles_glGetBufferParameteriv_INDEX 56
#define gles_glGetBufferParameteriv_RETURN void
#define gles_glGetBufferParameteriv_ARG_NAMES target, pname, params
#define gles_glGetBufferParameteriv_ARG_EXPAND GLenum target, GLenum pname, GLint * params
#define gles_glGetBufferParameteriv_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetBufferParameteriv_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetBufferParameteriv_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetClipPlanef_INDEX 57
#define gles_glGetClipPlanef_RETURN void
#define gles_glGetClipPlanef_ARG_NAMES plane, equation
#define gles_glGetClipPlanef_ARG_EXPAND GLenum plane, GLfloat * equation
#define gles_glGetClipPlanef_PACKED PACKED_void_GLenum_GLfloat___GENPT__
#define gles_glGetClipPlanef_INDEXED INDEXED_void_GLenum_GLfloat___GENPT__
#define gles_glGetClipPlanef_FORMAT FORMAT_void_GLenum_GLfloat___GENPT__
#define gles_glGetClipPlanex_INDEX 58
#define gles_glGetClipPlanex_RETURN void
#define gles_glGetClipPlanex_ARG_NAMES plane, equation
#define gles_glGetClipPlanex_ARG_EXPAND GLenum plane, GLfixed * equation
#define gles_glGetClipPlanex_PACKED PACKED_void_GLenum_GLfixed___GENPT__
#define gles_glGetClipPlanex_INDEXED INDEXED_void_GLenum_GLfixed___GENPT__
#define gles_glGetClipPlanex_FORMAT FORMAT_void_GLenum_GLfixed___GENPT__
#define gles_glGetError_INDEX 59
#define gles_glGetError_RETURN GLenum
#define gles_glGetError_ARG_NAMES 
#define gles_glGetError_ARG_EXPAND 
#define gles_glGetError_PACKED PACKED_GLenum
#define gles_glGetError_INDEXED INDEXED_GLenum
#define gles_glGetError_FORMAT FORMAT_GLenum
#define gles_glGetFixedv_INDEX 60
#define gles_glGetFixedv_RETURN void
#define gles_glGetFixedv_ARG_NAMES pname, params
#define gles_glGetFixedv_ARG_EXPAND GLenum pname, GLfixed * params
#define gles_glGetFixedv_PACKED PACKED_void_GLenum_GLfixed___GENPT__
#define gles_glGetFixedv_INDEXED INDEXED_void_GLenum_GLfixed___GENPT__
#define gles_glGetFixedv_FORMAT FORMAT_void_GLenum_GLfixed___GENPT__
#define gles_glGetFloatv_INDEX 61
#define gles_glGetFloatv_RETURN void
#define gles_glGetFloatv_ARG_NAMES pname, params
#define gles_glGetFloatv_ARG_EXPAND GLenum pname, GLfloat * params
#define gles_glGetFloatv_PACKED PACKED_void_GLenum_GLfloat___GENPT__
#define gles_glGetFloatv_INDEXED INDEXED_void_GLenum_GLfloat___GENPT__
#define gles_glGetFloatv_FORMAT FORMAT_void_GLenum_GLfloat___GENPT__
#define gles_glGetIntegerv_INDEX 62
#define gles_glGetIntegerv_RETURN void
#define gles_glGetIntegerv_ARG_NAMES pname, params
#define gles_glGetIntegerv_ARG_EXPAND GLenum pname, GLint * params
#define gles_glGetIntegerv_PACKED PACKED_void_GLenum_GLint___GENPT__
#define gles_glGetIntegerv_INDEXED INDEXED_void_GLenum_GLint___GENPT__
#define gles_glGetIntegerv_FORMAT FORMAT_void_GLenum_GLint___GENPT__
#define gles_glGetLightfv_INDEX 63
#define gles_glGetLightfv_RETURN void
#define gles_glGetLightfv_ARG_NAMES light, pname, params
#define gles_glGetLightfv_ARG_EXPAND GLenum light, GLenum pname, GLfloat * params
#define gles_glGetLightfv_PACKED PACKED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetLightfv_INDEXED INDEXED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetLightfv_FORMAT FORMAT_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetLightxv_INDEX 64
#define gles_glGetLightxv_RETURN void
#define gles_glGetLightxv_ARG_NAMES light, pname, params
#define gles_glGetLightxv_ARG_EXPAND GLenum light, GLenum pname, GLfixed * params
#define gles_glGetLightxv_PACKED PACKED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetLightxv_INDEXED INDEXED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetLightxv_FORMAT FORMAT_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetMaterialfv_INDEX 65
#define gles_glGetMaterialfv_RETURN void
#define gles_glGetMaterialfv_ARG_NAMES face, pname, params
#define gles_glGetMaterialfv_ARG_EXPAND GLenum face, GLenum pname, GLfloat * params
#define gles_glGetMaterialfv_PACKED PACKED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetMaterialfv_INDEXED INDEXED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetMaterialfv_FORMAT FORMAT_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetMaterialxv_INDEX 66
#define gles_glGetMaterialxv_RETURN void
#define gles_glGetMaterialxv_ARG_NAMES face, pname, params
#define gles_glGetMaterialxv_ARG_EXPAND GLenum face, GLenum pname, GLfixed * params
#define gles_glGetMaterialxv_PACKED PACKED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetMaterialxv_INDEXED INDEXED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetMaterialxv_FORMAT FORMAT_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetPointerv_INDEX 67
#define gles_glGetPointerv_RETURN void
#define gles_glGetPointerv_ARG_NAMES pname, params
#define gles_glGetPointerv_ARG_EXPAND GLenum pname, GLvoid ** params
#define gles_glGetPointerv_PACKED PACKED_void_GLenum_GLvoid___GENPT____GENPT__
#define gles_glGetPointerv_INDEXED INDEXED_void_GLenum_GLvoid___GENPT____GENPT__
#define gles_glGetPointerv_FORMAT FORMAT_void_GLenum_GLvoid___GENPT____GENPT__
#define gles_glGetString_INDEX 68
#define gles_glGetString_RETURN const GLubyte *
#define gles_glGetString_ARG_NAMES name
#define gles_glGetString_ARG_EXPAND GLenum name
#define gles_glGetString_PACKED PACKED_const_GLubyte___GENPT___GLenum
#define gles_glGetString_INDEXED INDEXED_const_GLubyte___GENPT___GLenum
#define gles_glGetString_FORMAT FORMAT_const_GLubyte___GENPT___GLenum
#define gles_glGetTexEnvfv_INDEX 69
#define gles_glGetTexEnvfv_RETURN void
#define gles_glGetTexEnvfv_ARG_NAMES target, pname, params
#define gles_glGetTexEnvfv_ARG_EXPAND GLenum target, GLenum pname, GLfloat * params
#define gles_glGetTexEnvfv_PACKED PACKED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetTexEnvfv_INDEXED INDEXED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetTexEnvfv_FORMAT FORMAT_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetTexEnviv_INDEX 70
#define gles_glGetTexEnviv_RETURN void
#define gles_glGetTexEnviv_ARG_NAMES target, pname, params
#define gles_glGetTexEnviv_ARG_EXPAND GLenum target, GLenum pname, GLint * params
#define gles_glGetTexEnviv_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetTexEnviv_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetTexEnviv_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetTexEnvxv_INDEX 71
#define gles_glGetTexEnvxv_RETURN void
#define gles_glGetTexEnvxv_ARG_NAMES target, pname, params
#define gles_glGetTexEnvxv_ARG_EXPAND GLenum target, GLenum pname, GLfixed * params
#define gles_glGetTexEnvxv_PACKED PACKED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetTexEnvxv_INDEXED INDEXED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetTexEnvxv_FORMAT FORMAT_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetTexParameterfv_INDEX 72
#define gles_glGetTexParameterfv_RETURN void
#define gles_glGetTexParameterfv_ARG_NAMES target, pname, params
#define gles_glGetTexParameterfv_ARG_EXPAND GLenum target, GLenum pname, GLfloat * params
#define gles_glGetTexParameterfv_PACKED PACKED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetTexParameterfv_INDEXED INDEXED_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetTexParameterfv_FORMAT FORMAT_void_GLenum_GLenum_GLfloat___GENPT__
#define gles_glGetTexParameteriv_INDEX 73
#define gles_glGetTexParameteriv_RETURN void
#define gles_glGetTexParameteriv_ARG_NAMES target, pname, params
#define gles_glGetTexParameteriv_ARG_EXPAND GLenum target, GLenum pname, GLint * params
#define gles_glGetTexParameteriv_PACKED PACKED_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetTexParameteriv_INDEXED INDEXED_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetTexParameteriv_FORMAT FORMAT_void_GLenum_GLenum_GLint___GENPT__
#define gles_glGetTexParameterxv_INDEX 74
#define gles_glGetTexParameterxv_RETURN void
#define gles_glGetTexParameterxv_ARG_NAMES target, pname, params
#define gles_glGetTexParameterxv_ARG_EXPAND GLenum target, GLenum pname, GLfixed * params
#define gles_glGetTexParameterxv_PACKED PACKED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetTexParameterxv_INDEXED INDEXED_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glGetTexParameterxv_FORMAT FORMAT_void_GLenum_GLenum_GLfixed___GENPT__
#define gles_glHint_INDEX 75
#define gles_glHint_RETURN void
#define gles_glHint_ARG_NAMES target, mode
#define gles_glHint_ARG_EXPAND GLenum target, GLenum mode
#define gles_glHint_PACKED PACKED_void_GLenum_GLenum
#define gles_glHint_INDEXED INDEXED_void_GLenum_GLenum
#define gles_glHint_FORMAT FORMAT_void_GLenum_GLenum
#define gles_glIsBuffer_INDEX 76
#define gles_glIsBuffer_RETURN GLboolean
#define gles_glIsBuffer_ARG_NAMES buffer
#define gles_glIsBuffer_ARG_EXPAND GLuint buffer
#define gles_glIsBuffer_PACKED PACKED_GLboolean_GLuint
#define gles_glIsBuffer_INDEXED INDEXED_GLboolean_GLuint
#define gles_glIsBuffer_FORMAT FORMAT_GLboolean_GLuint
#define gles_glIsEnabled_INDEX 77
#define gles_glIsEnabled_RETURN GLboolean
#define gles_glIsEnabled_ARG_NAMES cap
#define gles_glIsEnabled_ARG_EXPAND GLenum cap
#define gles_glIsEnabled_PACKED PACKED_GLboolean_GLenum
#define gles_glIsEnabled_INDEXED INDEXED_GLboolean_GLenum
#define gles_glIsEnabled_FORMAT FORMAT_GLboolean_GLenum
#define gles_glIsTexture_INDEX 78
#define gles_glIsTexture_RETURN GLboolean
#define gles_glIsTexture_ARG_NAMES texture
#define gles_glIsTexture_ARG_EXPAND GLuint texture
#define gles_glIsTexture_PACKED PACKED_GLboolean_GLuint
#define gles_glIsTexture_INDEXED INDEXED_GLboolean_GLuint
#define gles_glIsTexture_FORMAT FORMAT_GLboolean_GLuint
#define gles_glLightModelf_INDEX 79
#define gles_glLightModelf_RETURN void
#define gles_glLightModelf_ARG_NAMES pname, param
#define gles_glLightModelf_ARG_EXPAND GLenum pname, GLfloat param
#define gles_glLightModelf_PACKED PACKED_void_GLenum_GLfloat
#define gles_glLightModelf_INDEXED INDEXED_void_GLenum_GLfloat
#define gles_glLightModelf_FORMAT FORMAT_void_GLenum_GLfloat
#define gles_glLightModelfv_INDEX 80
#define gles_glLightModelfv_RETURN void
#define gles_glLightModelfv_ARG_NAMES pname, params
#define gles_glLightModelfv_ARG_EXPAND GLenum pname, const GLfloat * params
#define gles_glLightModelfv_PACKED PACKED_void_GLenum_const_GLfloat___GENPT__
#define gles_glLightModelfv_INDEXED INDEXED_void_GLenum_const_GLfloat___GENPT__
#define gles_glLightModelfv_FORMAT FORMAT_void_GLenum_const_GLfloat___GENPT__
#define gles_glLightModelx_INDEX 81
#define gles_glLightModelx_RETURN void
#define gles_glLightModelx_ARG_NAMES pname, param
#define gles_glLightModelx_ARG_EXPAND GLenum pname, GLfixed param
#define gles_glLightModelx_PACKED PACKED_void_GLenum_GLfixed
#define gles_glLightModelx_INDEXED INDEXED_void_GLenum_GLfixed
#define gles_glLightModelx_FORMAT FORMAT_void_GLenum_GLfixed
#define gles_glLightModelxv_INDEX 82
#define gles_glLightModelxv_RETURN void
#define gles_glLightModelxv_ARG_NAMES pname, params
#define gles_glLightModelxv_ARG_EXPAND GLenum pname, const GLfixed * params
#define gles_glLightModelxv_PACKED PACKED_void_GLenum_const_GLfixed___GENPT__
#define gles_glLightModelxv_INDEXED INDEXED_void_GLenum_const_GLfixed___GENPT__
#define gles_glLightModelxv_FORMAT FORMAT_void_GLenum_const_GLfixed___GENPT__
#define gles_glLightf_INDEX 83
#define gles_glLightf_RETURN void
#define gles_glLightf_ARG_NAMES light, pname, param
#define gles_glLightf_ARG_EXPAND GLenum light, GLenum pname, GLfloat param
#define gles_glLightf_PACKED PACKED_void_GLenum_GLenum_GLfloat
#define gles_glLightf_INDEXED INDEXED_void_GLenum_GLenum_GLfloat
#define gles_glLightf_FORMAT FORMAT_void_GLenum_GLenum_GLfloat
#define gles_glLightfv_INDEX 84
#define gles_glLightfv_RETURN void
#define gles_glLightfv_ARG_NAMES light, pname, params
#define gles_glLightfv_ARG_EXPAND GLenum light, GLenum pname, const GLfloat * params
#define gles_glLightfv_PACKED PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glLightfv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glLightfv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glLightx_INDEX 85
#define gles_glLightx_RETURN void
#define gles_glLightx_ARG_NAMES light, pname, param
#define gles_glLightx_ARG_EXPAND GLenum light, GLenum pname, GLfixed param
#define gles_glLightx_PACKED PACKED_void_GLenum_GLenum_GLfixed
#define gles_glLightx_INDEXED INDEXED_void_GLenum_GLenum_GLfixed
#define gles_glLightx_FORMAT FORMAT_void_GLenum_GLenum_GLfixed
#define gles_glLightxv_INDEX 86
#define gles_glLightxv_RETURN void
#define gles_glLightxv_ARG_NAMES light, pname, params
#define gles_glLightxv_ARG_EXPAND GLenum light, GLenum pname, const GLfixed * params
#define gles_glLightxv_PACKED PACKED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glLightxv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glLightxv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glLineWidth_INDEX 87
#define gles_glLineWidth_RETURN void
#define gles_glLineWidth_ARG_NAMES width
#define gles_glLineWidth_ARG_EXPAND GLfloat width
#define gles_glLineWidth_PACKED PACKED_void_GLfloat
#define gles_glLineWidth_INDEXED INDEXED_void_GLfloat
#define gles_glLineWidth_FORMAT FORMAT_void_GLfloat
#define gles_glLineWidthx_INDEX 88
#define gles_glLineWidthx_RETURN void
#define gles_glLineWidthx_ARG_NAMES width
#define gles_glLineWidthx_ARG_EXPAND GLfixed width
#define gles_glLineWidthx_PACKED PACKED_void_GLfixed
#define gles_glLineWidthx_INDEXED INDEXED_void_GLfixed
#define gles_glLineWidthx_FORMAT FORMAT_void_GLfixed
#define gles_glLoadIdentity_INDEX 89
#define gles_glLoadIdentity_RETURN void
#define gles_glLoadIdentity_ARG_NAMES 
#define gles_glLoadIdentity_ARG_EXPAND 
#define gles_glLoadIdentity_PACKED PACKED_void
#define gles_glLoadIdentity_INDEXED INDEXED_void
#define gles_glLoadIdentity_FORMAT FORMAT_void
#define gles_glLoadMatrixf_INDEX 90
#define gles_glLoadMatrixf_RETURN void
#define gles_glLoadMatrixf_ARG_NAMES m
#define gles_glLoadMatrixf_ARG_EXPAND const GLfloat * m
#define gles_glLoadMatrixf_PACKED PACKED_void_const_GLfloat___GENPT__
#define gles_glLoadMatrixf_INDEXED INDEXED_void_const_GLfloat___GENPT__
#define gles_glLoadMatrixf_FORMAT FORMAT_void_const_GLfloat___GENPT__
#define gles_glLoadMatrixx_INDEX 91
#define gles_glLoadMatrixx_RETURN void
#define gles_glLoadMatrixx_ARG_NAMES m
#define gles_glLoadMatrixx_ARG_EXPAND const GLfixed * m
#define gles_glLoadMatrixx_PACKED PACKED_void_const_GLfixed___GENPT__
#define gles_glLoadMatrixx_INDEXED INDEXED_void_const_GLfixed___GENPT__
#define gles_glLoadMatrixx_FORMAT FORMAT_void_const_GLfixed___GENPT__
#define gles_glLogicOp_INDEX 92
#define gles_glLogicOp_RETURN void
#define gles_glLogicOp_ARG_NAMES opcode
#define gles_glLogicOp_ARG_EXPAND GLenum opcode
#define gles_glLogicOp_PACKED PACKED_void_GLenum
#define gles_glLogicOp_INDEXED INDEXED_void_GLenum
#define gles_glLogicOp_FORMAT FORMAT_void_GLenum
#define gles_glMaterialf_INDEX 93
#define gles_glMaterialf_RETURN void
#define gles_glMaterialf_ARG_NAMES face, pname, param
#define gles_glMaterialf_ARG_EXPAND GLenum face, GLenum pname, GLfloat param
#define gles_glMaterialf_PACKED PACKED_void_GLenum_GLenum_GLfloat
#define gles_glMaterialf_INDEXED INDEXED_void_GLenum_GLenum_GLfloat
#define gles_glMaterialf_FORMAT FORMAT_void_GLenum_GLenum_GLfloat
#define gles_glMaterialfv_INDEX 94
#define gles_glMaterialfv_RETURN void
#define gles_glMaterialfv_ARG_NAMES face, pname, params
#define gles_glMaterialfv_ARG_EXPAND GLenum face, GLenum pname, const GLfloat * params
#define gles_glMaterialfv_PACKED PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glMaterialfv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glMaterialfv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glMaterialx_INDEX 95
#define gles_glMaterialx_RETURN void
#define gles_glMaterialx_ARG_NAMES face, pname, param
#define gles_glMaterialx_ARG_EXPAND GLenum face, GLenum pname, GLfixed param
#define gles_glMaterialx_PACKED PACKED_void_GLenum_GLenum_GLfixed
#define gles_glMaterialx_INDEXED INDEXED_void_GLenum_GLenum_GLfixed
#define gles_glMaterialx_FORMAT FORMAT_void_GLenum_GLenum_GLfixed
#define gles_glMaterialxv_INDEX 96
#define gles_glMaterialxv_RETURN void
#define gles_glMaterialxv_ARG_NAMES face, pname, params
#define gles_glMaterialxv_ARG_EXPAND GLenum face, GLenum pname, const GLfixed * params
#define gles_glMaterialxv_PACKED PACKED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glMaterialxv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glMaterialxv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glMatrixMode_INDEX 97
#define gles_glMatrixMode_RETURN void
#define gles_glMatrixMode_ARG_NAMES mode
#define gles_glMatrixMode_ARG_EXPAND GLenum mode
#define gles_glMatrixMode_PACKED PACKED_void_GLenum
#define gles_glMatrixMode_INDEXED INDEXED_void_GLenum
#define gles_glMatrixMode_FORMAT FORMAT_void_GLenum
#define gles_glMultMatrixf_INDEX 98
#define gles_glMultMatrixf_RETURN void
#define gles_glMultMatrixf_ARG_NAMES m
#define gles_glMultMatrixf_ARG_EXPAND const GLfloat * m
#define gles_glMultMatrixf_PACKED PACKED_void_const_GLfloat___GENPT__
#define gles_glMultMatrixf_INDEXED INDEXED_void_const_GLfloat___GENPT__
#define gles_glMultMatrixf_FORMAT FORMAT_void_const_GLfloat___GENPT__
#define gles_glMultMatrixx_INDEX 99
#define gles_glMultMatrixx_RETURN void
#define gles_glMultMatrixx_ARG_NAMES m
#define gles_glMultMatrixx_ARG_EXPAND const GLfixed * m
#define gles_glMultMatrixx_PACKED PACKED_void_const_GLfixed___GENPT__
#define gles_glMultMatrixx_INDEXED INDEXED_void_const_GLfixed___GENPT__
#define gles_glMultMatrixx_FORMAT FORMAT_void_const_GLfixed___GENPT__
#define gles_glMultiTexCoord4f_INDEX 100
#define gles_glMultiTexCoord4f_RETURN void
#define gles_glMultiTexCoord4f_ARG_NAMES target, s, t, r, q
#define gles_glMultiTexCoord4f_ARG_EXPAND GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q
#define gles_glMultiTexCoord4f_PACKED PACKED_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glMultiTexCoord4f_INDEXED INDEXED_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glMultiTexCoord4f_FORMAT FORMAT_void_GLenum_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glMultiTexCoord4x_INDEX 101
#define gles_glMultiTexCoord4x_RETURN void
#define gles_glMultiTexCoord4x_ARG_NAMES target, s, t, r, q
#define gles_glMultiTexCoord4x_ARG_EXPAND GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q
#define gles_glMultiTexCoord4x_PACKED PACKED_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glMultiTexCoord4x_INDEXED INDEXED_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glMultiTexCoord4x_FORMAT FORMAT_void_GLenum_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glNormal3f_INDEX 102
#define gles_glNormal3f_RETURN void
#define gles_glNormal3f_ARG_NAMES nx, ny, nz
#define gles_glNormal3f_ARG_EXPAND GLfloat nx, GLfloat ny, GLfloat nz
#define gles_glNormal3f_PACKED PACKED_void_GLfloat_GLfloat_GLfloat
#define gles_glNormal3f_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat
#define gles_glNormal3f_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat
#define gles_glNormal3x_INDEX 103
#define gles_glNormal3x_RETURN void
#define gles_glNormal3x_ARG_NAMES nx, ny, nz
#define gles_glNormal3x_ARG_EXPAND GLfixed nx, GLfixed ny, GLfixed nz
#define gles_glNormal3x_PACKED PACKED_void_GLfixed_GLfixed_GLfixed
#define gles_glNormal3x_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed
#define gles_glNormal3x_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed
#define gles_glNormalPointer_INDEX 104
#define gles_glNormalPointer_RETURN void
#define gles_glNormalPointer_ARG_NAMES type, stride, pointer
#define gles_glNormalPointer_ARG_EXPAND GLenum type, GLsizei stride, const GLvoid * pointer
#define gles_glNormalPointer_PACKED PACKED_void_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glNormalPointer_INDEXED INDEXED_void_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glNormalPointer_FORMAT FORMAT_void_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glOrthof_INDEX 105
#define gles_glOrthof_RETURN void
#define gles_glOrthof_ARG_NAMES left, right, bottom, top, near, far
#define gles_glOrthof_ARG_EXPAND GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat near, GLfloat far
#define gles_glOrthof_PACKED PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glOrthof_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glOrthof_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glOrthox_INDEX 106
#define gles_glOrthox_RETURN void
#define gles_glOrthox_ARG_NAMES left, right, bottom, top, near, far
#define gles_glOrthox_ARG_EXPAND GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed near, GLfixed far
#define gles_glOrthox_PACKED PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glOrthox_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glOrthox_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glPixelStorei_INDEX 107
#define gles_glPixelStorei_RETURN void
#define gles_glPixelStorei_ARG_NAMES pname, param
#define gles_glPixelStorei_ARG_EXPAND GLenum pname, GLint param
#define gles_glPixelStorei_PACKED PACKED_void_GLenum_GLint
#define gles_glPixelStorei_INDEXED INDEXED_void_GLenum_GLint
#define gles_glPixelStorei_FORMAT FORMAT_void_GLenum_GLint
#define gles_glPointParameterf_INDEX 108
#define gles_glPointParameterf_RETURN void
#define gles_glPointParameterf_ARG_NAMES pname, param
#define gles_glPointParameterf_ARG_EXPAND GLenum pname, GLfloat param
#define gles_glPointParameterf_PACKED PACKED_void_GLenum_GLfloat
#define gles_glPointParameterf_INDEXED INDEXED_void_GLenum_GLfloat
#define gles_glPointParameterf_FORMAT FORMAT_void_GLenum_GLfloat
#define gles_glPointParameterfv_INDEX 109
#define gles_glPointParameterfv_RETURN void
#define gles_glPointParameterfv_ARG_NAMES pname, params
#define gles_glPointParameterfv_ARG_EXPAND GLenum pname, const GLfloat * params
#define gles_glPointParameterfv_PACKED PACKED_void_GLenum_const_GLfloat___GENPT__
#define gles_glPointParameterfv_INDEXED INDEXED_void_GLenum_const_GLfloat___GENPT__
#define gles_glPointParameterfv_FORMAT FORMAT_void_GLenum_const_GLfloat___GENPT__
#define gles_glPointParameterx_INDEX 110
#define gles_glPointParameterx_RETURN void
#define gles_glPointParameterx_ARG_NAMES pname, param
#define gles_glPointParameterx_ARG_EXPAND GLenum pname, GLfixed param
#define gles_glPointParameterx_PACKED PACKED_void_GLenum_GLfixed
#define gles_glPointParameterx_INDEXED INDEXED_void_GLenum_GLfixed
#define gles_glPointParameterx_FORMAT FORMAT_void_GLenum_GLfixed
#define gles_glPointParameterxv_INDEX 111
#define gles_glPointParameterxv_RETURN void
#define gles_glPointParameterxv_ARG_NAMES pname, params
#define gles_glPointParameterxv_ARG_EXPAND GLenum pname, const GLfixed * params
#define gles_glPointParameterxv_PACKED PACKED_void_GLenum_const_GLfixed___GENPT__
#define gles_glPointParameterxv_INDEXED INDEXED_void_GLenum_const_GLfixed___GENPT__
#define gles_glPointParameterxv_FORMAT FORMAT_void_GLenum_const_GLfixed___GENPT__
#define gles_glPointSize_INDEX 112
#define gles_glPointSize_RETURN void
#define gles_glPointSize_ARG_NAMES size
#define gles_glPointSize_ARG_EXPAND GLfloat size
#define gles_glPointSize_PACKED PACKED_void_GLfloat
#define gles_glPointSize_INDEXED INDEXED_void_GLfloat
#define gles_glPointSize_FORMAT FORMAT_void_GLfloat
#define gles_glPointSizePointerOES_INDEX 113
#define gles_glPointSizePointerOES_RETURN void
#define gles_glPointSizePointerOES_ARG_NAMES type, stride, pointer
#define gles_glPointSizePointerOES_ARG_EXPAND GLenum type, GLsizei stride, const GLvoid * pointer
#define gles_glPointSizePointerOES_PACKED PACKED_void_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glPointSizePointerOES_INDEXED INDEXED_void_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glPointSizePointerOES_FORMAT FORMAT_void_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glPointSizex_INDEX 114
#define gles_glPointSizex_RETURN void
#define gles_glPointSizex_ARG_NAMES size
#define gles_glPointSizex_ARG_EXPAND GLfixed size
#define gles_glPointSizex_PACKED PACKED_void_GLfixed
#define gles_glPointSizex_INDEXED INDEXED_void_GLfixed
#define gles_glPointSizex_FORMAT FORMAT_void_GLfixed
#define gles_glPolygonOffset_INDEX 115
#define gles_glPolygonOffset_RETURN void
#define gles_glPolygonOffset_ARG_NAMES factor, units
#define gles_glPolygonOffset_ARG_EXPAND GLfloat factor, GLfloat units
#define gles_glPolygonOffset_PACKED PACKED_void_GLfloat_GLfloat
#define gles_glPolygonOffset_INDEXED INDEXED_void_GLfloat_GLfloat
#define gles_glPolygonOffset_FORMAT FORMAT_void_GLfloat_GLfloat
#define gles_glPolygonOffsetx_INDEX 116
#define gles_glPolygonOffsetx_RETURN void
#define gles_glPolygonOffsetx_ARG_NAMES factor, units
#define gles_glPolygonOffsetx_ARG_EXPAND GLfixed factor, GLfixed units
#define gles_glPolygonOffsetx_PACKED PACKED_void_GLfixed_GLfixed
#define gles_glPolygonOffsetx_INDEXED INDEXED_void_GLfixed_GLfixed
#define gles_glPolygonOffsetx_FORMAT FORMAT_void_GLfixed_GLfixed
#define gles_glPopMatrix_INDEX 117
#define gles_glPopMatrix_RETURN void
#define gles_glPopMatrix_ARG_NAMES 
#define gles_glPopMatrix_ARG_EXPAND 
#define gles_glPopMatrix_PACKED PACKED_void
#define gles_glPopMatrix_INDEXED INDEXED_void
#define gles_glPopMatrix_FORMAT FORMAT_void
#define gles_glPushMatrix_INDEX 118
#define gles_glPushMatrix_RETURN void
#define gles_glPushMatrix_ARG_NAMES 
#define gles_glPushMatrix_ARG_EXPAND 
#define gles_glPushMatrix_PACKED PACKED_void
#define gles_glPushMatrix_INDEXED INDEXED_void
#define gles_glPushMatrix_FORMAT FORMAT_void
#define gles_glReadPixels_INDEX 119
#define gles_glReadPixels_RETURN void
#define gles_glReadPixels_ARG_NAMES x, y, width, height, format, type, pixels
#define gles_glReadPixels_ARG_EXPAND GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels
#define gles_glReadPixels_PACKED PACKED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__
#define gles_glReadPixels_INDEXED INDEXED_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__
#define gles_glReadPixels_FORMAT FORMAT_void_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_GLvoid___GENPT__
#define gles_glRotatef_INDEX 120
#define gles_glRotatef_RETURN void
#define gles_glRotatef_ARG_NAMES angle, x, y, z
#define gles_glRotatef_ARG_EXPAND GLfloat angle, GLfloat x, GLfloat y, GLfloat z
#define gles_glRotatef_PACKED PACKED_void_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glRotatef_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glRotatef_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat_GLfloat
#define gles_glRotatex_INDEX 121
#define gles_glRotatex_RETURN void
#define gles_glRotatex_ARG_NAMES angle, x, y, z
#define gles_glRotatex_ARG_EXPAND GLfixed angle, GLfixed x, GLfixed y, GLfixed z
#define gles_glRotatex_PACKED PACKED_void_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glRotatex_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glRotatex_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed_GLfixed
#define gles_glSampleCoverage_INDEX 122
#define gles_glSampleCoverage_RETURN void
#define gles_glSampleCoverage_ARG_NAMES value, invert
#define gles_glSampleCoverage_ARG_EXPAND GLclampf value, GLboolean invert
#define gles_glSampleCoverage_PACKED PACKED_void_GLclampf_GLboolean
#define gles_glSampleCoverage_INDEXED INDEXED_void_GLclampf_GLboolean
#define gles_glSampleCoverage_FORMAT FORMAT_void_GLclampf_GLboolean
#define gles_glSampleCoveragex_INDEX 123
#define gles_glSampleCoveragex_RETURN void
#define gles_glSampleCoveragex_ARG_NAMES value, invert
#define gles_glSampleCoveragex_ARG_EXPAND GLclampx value, GLboolean invert
#define gles_glSampleCoveragex_PACKED PACKED_void_GLclampx_GLboolean
#define gles_glSampleCoveragex_INDEXED INDEXED_void_GLclampx_GLboolean
#define gles_glSampleCoveragex_FORMAT FORMAT_void_GLclampx_GLboolean
#define gles_glScalef_INDEX 124
#define gles_glScalef_RETURN void
#define gles_glScalef_ARG_NAMES x, y, z
#define gles_glScalef_ARG_EXPAND GLfloat x, GLfloat y, GLfloat z
#define gles_glScalef_PACKED PACKED_void_GLfloat_GLfloat_GLfloat
#define gles_glScalef_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat
#define gles_glScalef_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat
#define gles_glScalex_INDEX 125
#define gles_glScalex_RETURN void
#define gles_glScalex_ARG_NAMES x, y, z
#define gles_glScalex_ARG_EXPAND GLfixed x, GLfixed y, GLfixed z
#define gles_glScalex_PACKED PACKED_void_GLfixed_GLfixed_GLfixed
#define gles_glScalex_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed
#define gles_glScalex_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed
#define gles_glScissor_INDEX 126
#define gles_glScissor_RETURN void
#define gles_glScissor_ARG_NAMES x, y, width, height
#define gles_glScissor_ARG_EXPAND GLint x, GLint y, GLsizei width, GLsizei height
#define gles_glScissor_PACKED PACKED_void_GLint_GLint_GLsizei_GLsizei
#define gles_glScissor_INDEXED INDEXED_void_GLint_GLint_GLsizei_GLsizei
#define gles_glScissor_FORMAT FORMAT_void_GLint_GLint_GLsizei_GLsizei
#define gles_glShadeModel_INDEX 127
#define gles_glShadeModel_RETURN void
#define gles_glShadeModel_ARG_NAMES mode
#define gles_glShadeModel_ARG_EXPAND GLenum mode
#define gles_glShadeModel_PACKED PACKED_void_GLenum
#define gles_glShadeModel_INDEXED INDEXED_void_GLenum
#define gles_glShadeModel_FORMAT FORMAT_void_GLenum
#define gles_glStencilFunc_INDEX 128
#define gles_glStencilFunc_RETURN void
#define gles_glStencilFunc_ARG_NAMES func, ref, mask
#define gles_glStencilFunc_ARG_EXPAND GLenum func, GLint ref, GLuint mask
#define gles_glStencilFunc_PACKED PACKED_void_GLenum_GLint_GLuint
#define gles_glStencilFunc_INDEXED INDEXED_void_GLenum_GLint_GLuint
#define gles_glStencilFunc_FORMAT FORMAT_void_GLenum_GLint_GLuint
#define gles_glStencilMask_INDEX 129
#define gles_glStencilMask_RETURN void
#define gles_glStencilMask_ARG_NAMES mask
#define gles_glStencilMask_ARG_EXPAND GLuint mask
#define gles_glStencilMask_PACKED PACKED_void_GLuint
#define gles_glStencilMask_INDEXED INDEXED_void_GLuint
#define gles_glStencilMask_FORMAT FORMAT_void_GLuint
#define gles_glStencilOp_INDEX 130
#define gles_glStencilOp_RETURN void
#define gles_glStencilOp_ARG_NAMES fail, zfail, zpass
#define gles_glStencilOp_ARG_EXPAND GLenum fail, GLenum zfail, GLenum zpass
#define gles_glStencilOp_PACKED PACKED_void_GLenum_GLenum_GLenum
#define gles_glStencilOp_INDEXED INDEXED_void_GLenum_GLenum_GLenum
#define gles_glStencilOp_FORMAT FORMAT_void_GLenum_GLenum_GLenum
#define gles_glTexCoordPointer_INDEX 131
#define gles_glTexCoordPointer_RETURN void
#define gles_glTexCoordPointer_ARG_NAMES size, type, stride, pointer
#define gles_glTexCoordPointer_ARG_EXPAND GLint size, GLenum type, GLsizei stride, const GLvoid * pointer
#define gles_glTexCoordPointer_PACKED PACKED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glTexCoordPointer_INDEXED INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glTexCoordPointer_FORMAT FORMAT_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glTexEnvf_INDEX 132
#define gles_glTexEnvf_RETURN void
#define gles_glTexEnvf_ARG_NAMES target, pname, param
#define gles_glTexEnvf_ARG_EXPAND GLenum target, GLenum pname, GLfloat param
#define gles_glTexEnvf_PACKED PACKED_void_GLenum_GLenum_GLfloat
#define gles_glTexEnvf_INDEXED INDEXED_void_GLenum_GLenum_GLfloat
#define gles_glTexEnvf_FORMAT FORMAT_void_GLenum_GLenum_GLfloat
#define gles_glTexEnvfv_INDEX 133
#define gles_glTexEnvfv_RETURN void
#define gles_glTexEnvfv_ARG_NAMES target, pname, params
#define gles_glTexEnvfv_ARG_EXPAND GLenum target, GLenum pname, const GLfloat * params
#define gles_glTexEnvfv_PACKED PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glTexEnvfv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glTexEnvfv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glTexEnvi_INDEX 134
#define gles_glTexEnvi_RETURN void
#define gles_glTexEnvi_ARG_NAMES target, pname, param
#define gles_glTexEnvi_ARG_EXPAND GLenum target, GLenum pname, GLint param
#define gles_glTexEnvi_PACKED PACKED_void_GLenum_GLenum_GLint
#define gles_glTexEnvi_INDEXED INDEXED_void_GLenum_GLenum_GLint
#define gles_glTexEnvi_FORMAT FORMAT_void_GLenum_GLenum_GLint
#define gles_glTexEnviv_INDEX 135
#define gles_glTexEnviv_RETURN void
#define gles_glTexEnviv_ARG_NAMES target, pname, params
#define gles_glTexEnviv_ARG_EXPAND GLenum target, GLenum pname, const GLint * params
#define gles_glTexEnviv_PACKED PACKED_void_GLenum_GLenum_const_GLint___GENPT__
#define gles_glTexEnviv_INDEXED INDEXED_void_GLenum_GLenum_const_GLint___GENPT__
#define gles_glTexEnviv_FORMAT FORMAT_void_GLenum_GLenum_const_GLint___GENPT__
#define gles_glTexEnvx_INDEX 136
#define gles_glTexEnvx_RETURN void
#define gles_glTexEnvx_ARG_NAMES target, pname, param
#define gles_glTexEnvx_ARG_EXPAND GLenum target, GLenum pname, GLfixed param
#define gles_glTexEnvx_PACKED PACKED_void_GLenum_GLenum_GLfixed
#define gles_glTexEnvx_INDEXED INDEXED_void_GLenum_GLenum_GLfixed
#define gles_glTexEnvx_FORMAT FORMAT_void_GLenum_GLenum_GLfixed
#define gles_glTexEnvxv_INDEX 137
#define gles_glTexEnvxv_RETURN void
#define gles_glTexEnvxv_ARG_NAMES target, pname, params
#define gles_glTexEnvxv_ARG_EXPAND GLenum target, GLenum pname, const GLfixed * params
#define gles_glTexEnvxv_PACKED PACKED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glTexEnvxv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glTexEnvxv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glTexImage2D_INDEX 138
#define gles_glTexImage2D_RETURN void
#define gles_glTexImage2D_ARG_NAMES target, level, internalformat, width, height, border, format, type, pixels
#define gles_glTexImage2D_ARG_EXPAND GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels
#define gles_glTexImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__
#define gles_glTexImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__
#define gles_glTexImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLsizei_GLsizei_GLint_GLenum_GLenum_const_GLvoid___GENPT__
#define gles_glTexParameterf_INDEX 139
#define gles_glTexParameterf_RETURN void
#define gles_glTexParameterf_ARG_NAMES target, pname, param
#define gles_glTexParameterf_ARG_EXPAND GLenum target, GLenum pname, GLfloat param
#define gles_glTexParameterf_PACKED PACKED_void_GLenum_GLenum_GLfloat
#define gles_glTexParameterf_INDEXED INDEXED_void_GLenum_GLenum_GLfloat
#define gles_glTexParameterf_FORMAT FORMAT_void_GLenum_GLenum_GLfloat
#define gles_glTexParameterfv_INDEX 140
#define gles_glTexParameterfv_RETURN void
#define gles_glTexParameterfv_ARG_NAMES target, pname, params
#define gles_glTexParameterfv_ARG_EXPAND GLenum target, GLenum pname, const GLfloat * params
#define gles_glTexParameterfv_PACKED PACKED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glTexParameterfv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glTexParameterfv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfloat___GENPT__
#define gles_glTexParameteri_INDEX 141
#define gles_glTexParameteri_RETURN void
#define gles_glTexParameteri_ARG_NAMES target, pname, param
#define gles_glTexParameteri_ARG_EXPAND GLenum target, GLenum pname, GLint param
#define gles_glTexParameteri_PACKED PACKED_void_GLenum_GLenum_GLint
#define gles_glTexParameteri_INDEXED INDEXED_void_GLenum_GLenum_GLint
#define gles_glTexParameteri_FORMAT FORMAT_void_GLenum_GLenum_GLint
#define gles_glTexParameteriv_INDEX 142
#define gles_glTexParameteriv_RETURN void
#define gles_glTexParameteriv_ARG_NAMES target, pname, params
#define gles_glTexParameteriv_ARG_EXPAND GLenum target, GLenum pname, const GLint * params
#define gles_glTexParameteriv_PACKED PACKED_void_GLenum_GLenum_const_GLint___GENPT__
#define gles_glTexParameteriv_INDEXED INDEXED_void_GLenum_GLenum_const_GLint___GENPT__
#define gles_glTexParameteriv_FORMAT FORMAT_void_GLenum_GLenum_const_GLint___GENPT__
#define gles_glTexParameterx_INDEX 143
#define gles_glTexParameterx_RETURN void
#define gles_glTexParameterx_ARG_NAMES target, pname, param
#define gles_glTexParameterx_ARG_EXPAND GLenum target, GLenum pname, GLfixed param
#define gles_glTexParameterx_PACKED PACKED_void_GLenum_GLenum_GLfixed
#define gles_glTexParameterx_INDEXED INDEXED_void_GLenum_GLenum_GLfixed
#define gles_glTexParameterx_FORMAT FORMAT_void_GLenum_GLenum_GLfixed
#define gles_glTexParameterxv_INDEX 144
#define gles_glTexParameterxv_RETURN void
#define gles_glTexParameterxv_ARG_NAMES target, pname, params
#define gles_glTexParameterxv_ARG_EXPAND GLenum target, GLenum pname, const GLfixed * params
#define gles_glTexParameterxv_PACKED PACKED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glTexParameterxv_INDEXED INDEXED_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glTexParameterxv_FORMAT FORMAT_void_GLenum_GLenum_const_GLfixed___GENPT__
#define gles_glTexSubImage2D_INDEX 145
#define gles_glTexSubImage2D_RETURN void
#define gles_glTexSubImage2D_ARG_NAMES target, level, xoffset, yoffset, width, height, format, type, pixels
#define gles_glTexSubImage2D_ARG_EXPAND GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels
#define gles_glTexSubImage2D_PACKED PACKED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__
#define gles_glTexSubImage2D_INDEXED INDEXED_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__
#define gles_glTexSubImage2D_FORMAT FORMAT_void_GLenum_GLint_GLint_GLint_GLsizei_GLsizei_GLenum_GLenum_const_GLvoid___GENPT__
#define gles_glTranslatef_INDEX 146
#define gles_glTranslatef_RETURN void
#define gles_glTranslatef_ARG_NAMES x, y, z
#define gles_glTranslatef_ARG_EXPAND GLfloat x, GLfloat y, GLfloat z
#define gles_glTranslatef_PACKED PACKED_void_GLfloat_GLfloat_GLfloat
#define gles_glTranslatef_INDEXED INDEXED_void_GLfloat_GLfloat_GLfloat
#define gles_glTranslatef_FORMAT FORMAT_void_GLfloat_GLfloat_GLfloat
#define gles_glTranslatex_INDEX 147
#define gles_glTranslatex_RETURN void
#define gles_glTranslatex_ARG_NAMES x, y, z
#define gles_glTranslatex_ARG_EXPAND GLfixed x, GLfixed y, GLfixed z
#define gles_glTranslatex_PACKED PACKED_void_GLfixed_GLfixed_GLfixed
#define gles_glTranslatex_INDEXED INDEXED_void_GLfixed_GLfixed_GLfixed
#define gles_glTranslatex_FORMAT FORMAT_void_GLfixed_GLfixed_GLfixed
#define gles_glVertexPointer_INDEX 148
#define gles_glVertexPointer_RETURN void
#define gles_glVertexPointer_ARG_NAMES size, type, stride, pointer
#define gles_glVertexPointer_ARG_EXPAND GLint size, GLenum type, GLsizei stride, const GLvoid * pointer
#define gles_glVertexPointer_PACKED PACKED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glVertexPointer_INDEXED INDEXED_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glVertexPointer_FORMAT FORMAT_void_GLint_GLenum_GLsizei_const_GLvoid___GENPT__
#define gles_glViewport_INDEX 149
#define gles_glViewport_RETURN void
#define gles_glViewport_ARG_NAMES x, y, width, height
#define gles_glViewport_ARG_EXPAND GLint x, GLint y, GLsizei width, GLsizei height
#define gles_glViewport_PACKED PACKED_void_GLint_GLint_GLsizei_GLsizei
#define gles_glViewport_INDEXED INDEXED_void_GLint_GLint_GLsizei_GLsizei
#define gles_glViewport_FORMAT FORMAT_void_GLint_GLint_GLsizei_GLsizei

void gles_glActiveTexture(glActiveTexture_ARG_EXPAND);
void gles_glAlphaFunc(glAlphaFunc_ARG_EXPAND);
void gles_glAlphaFuncx(glAlphaFuncx_ARG_EXPAND);
void gles_glBindBuffer(glBindBuffer_ARG_EXPAND);
void gles_glBindTexture(glBindTexture_ARG_EXPAND);
void gles_glBlendColorOES(glBlendColorOES_ARG_EXPAND);
void gles_glBlendEquationOES(glBlendEquationOES_ARG_EXPAND);
void gles_glBlendEquationSeparateOES(glBlendEquationSeparateOES_ARG_EXPAND);
void gles_glBlendFunc(glBlendFunc_ARG_EXPAND);
void gles_glBlendFuncSeparateOES(glBlendFuncSeparateOES_ARG_EXPAND);
void gles_glBufferData(glBufferData_ARG_EXPAND);
void gles_glBufferSubData(glBufferSubData_ARG_EXPAND);
void gles_glClear(glClear_ARG_EXPAND);
void gles_glClearColor(glClearColor_ARG_EXPAND);
void gles_glClearColorx(glClearColorx_ARG_EXPAND);
void gles_glClearDepthf(glClearDepthf_ARG_EXPAND);
void gles_glClearDepthx(glClearDepthx_ARG_EXPAND);
void gles_glClearStencil(glClearStencil_ARG_EXPAND);
void gles_glClientActiveTexture(glClientActiveTexture_ARG_EXPAND);
void gles_glClipPlanef(glClipPlanef_ARG_EXPAND);
void gles_glClipPlanex(glClipPlanex_ARG_EXPAND);
void gles_glColor4f(glColor4f_ARG_EXPAND);
void gles_glColor4ub(glColor4ub_ARG_EXPAND);
void gles_glColor4x(glColor4x_ARG_EXPAND);
void gles_glColorMask(glColorMask_ARG_EXPAND);
void gles_glColorPointer(glColorPointer_ARG_EXPAND);
void gles_glCompressedTexImage2D(glCompressedTexImage2D_ARG_EXPAND);
void gles_glCompressedTexSubImage2D(glCompressedTexSubImage2D_ARG_EXPAND);
void gles_glCopyTexImage2D(glCopyTexImage2D_ARG_EXPAND);
void gles_glCopyTexSubImage2D(glCopyTexSubImage2D_ARG_EXPAND);
void gles_glCullFace(glCullFace_ARG_EXPAND);
void gles_glDeleteBuffers(glDeleteBuffers_ARG_EXPAND);
void gles_glDeleteTextures(glDeleteTextures_ARG_EXPAND);
void gles_glDepthFunc(glDepthFunc_ARG_EXPAND);
void gles_glDepthMask(glDepthMask_ARG_EXPAND);
void gles_glDepthRangef(glDepthRangef_ARG_EXPAND);
void gles_glDepthRangex(glDepthRangex_ARG_EXPAND);
void gles_glDisable(glDisable_ARG_EXPAND);
void gles_glDisableClientState(glDisableClientState_ARG_EXPAND);
void gles_glDrawArrays(glDrawArrays_ARG_EXPAND);
void gles_glDrawElements(glDrawElements_ARG_EXPAND);
void gles_glEnable(glEnable_ARG_EXPAND);
void gles_glEnableClientState(glEnableClientState_ARG_EXPAND);
void gles_glFinish(glFinish_ARG_EXPAND);
void gles_glFlush(glFlush_ARG_EXPAND);
void gles_glFogf(glFogf_ARG_EXPAND);
void gles_glFogfv(glFogfv_ARG_EXPAND);
void gles_glFogx(glFogx_ARG_EXPAND);
void gles_glFogxv(glFogxv_ARG_EXPAND);
void gles_glFrontFace(glFrontFace_ARG_EXPAND);
void gles_glFrustumf(glFrustumf_ARG_EXPAND);
void gles_glFrustumx(glFrustumx_ARG_EXPAND);
void gles_glGenBuffers(glGenBuffers_ARG_EXPAND);
void gles_glGenTextures(glGenTextures_ARG_EXPAND);
void gles_glGetBooleanv(glGetBooleanv_ARG_EXPAND);
void gles_glGetBufferParameteriv(glGetBufferParameteriv_ARG_EXPAND);
void gles_glGetClipPlanef(glGetClipPlanef_ARG_EXPAND);
void gles_glGetClipPlanex(glGetClipPlanex_ARG_EXPAND);
GLenum gles_glGetError(glGetError_ARG_EXPAND);
void gles_glGetFixedv(glGetFixedv_ARG_EXPAND);
void gles_glGetFloatv(glGetFloatv_ARG_EXPAND);
void gles_glGetIntegerv(glGetIntegerv_ARG_EXPAND);
void gles_glGetLightfv(glGetLightfv_ARG_EXPAND);
void gles_glGetLightxv(glGetLightxv_ARG_EXPAND);
void gles_glGetMaterialfv(glGetMaterialfv_ARG_EXPAND);
void gles_glGetMaterialxv(glGetMaterialxv_ARG_EXPAND);
void gles_glGetPointerv(glGetPointerv_ARG_EXPAND);
const GLubyte * gles_glGetString(glGetString_ARG_EXPAND);
void gles_glGetTexEnvfv(glGetTexEnvfv_ARG_EXPAND);
void gles_glGetTexEnviv(glGetTexEnviv_ARG_EXPAND);
void gles_glGetTexEnvxv(glGetTexEnvxv_ARG_EXPAND);
void gles_glGetTexParameterfv(glGetTexParameterfv_ARG_EXPAND);
void gles_glGetTexParameteriv(glGetTexParameteriv_ARG_EXPAND);
void gles_glGetTexParameterxv(glGetTexParameterxv_ARG_EXPAND);
void gles_glHint(glHint_ARG_EXPAND);
GLboolean gles_glIsBuffer(glIsBuffer_ARG_EXPAND);
GLboolean gles_glIsEnabled(glIsEnabled_ARG_EXPAND);
GLboolean gles_glIsTexture(glIsTexture_ARG_EXPAND);
void gles_glLightModelf(glLightModelf_ARG_EXPAND);
void gles_glLightModelfv(glLightModelfv_ARG_EXPAND);
void gles_glLightModelx(glLightModelx_ARG_EXPAND);
void gles_glLightModelxv(glLightModelxv_ARG_EXPAND);
void gles_glLightf(glLightf_ARG_EXPAND);
void gles_glLightfv(glLightfv_ARG_EXPAND);
void gles_glLightx(glLightx_ARG_EXPAND);
void gles_glLightxv(glLightxv_ARG_EXPAND);
void gles_glLineWidth(glLineWidth_ARG_EXPAND);
void gles_glLineWidthx(glLineWidthx_ARG_EXPAND);
void gles_glLoadIdentity(glLoadIdentity_ARG_EXPAND);
void gles_glLoadMatrixf(glLoadMatrixf_ARG_EXPAND);
void gles_glLoadMatrixx(glLoadMatrixx_ARG_EXPAND);
void gles_glLogicOp(glLogicOp_ARG_EXPAND);
void gles_glMaterialf(glMaterialf_ARG_EXPAND);
void gles_glMaterialfv(glMaterialfv_ARG_EXPAND);
void gles_glMaterialx(glMaterialx_ARG_EXPAND);
void gles_glMaterialxv(glMaterialxv_ARG_EXPAND);
void gles_glMatrixMode(glMatrixMode_ARG_EXPAND);
void gles_glMultMatrixf(glMultMatrixf_ARG_EXPAND);
void gles_glMultMatrixx(glMultMatrixx_ARG_EXPAND);
void gles_glMultiTexCoord4f(glMultiTexCoord4f_ARG_EXPAND);
void gles_glMultiTexCoord4x(glMultiTexCoord4x_ARG_EXPAND);
void gles_glNormal3f(glNormal3f_ARG_EXPAND);
void gles_glNormal3x(glNormal3x_ARG_EXPAND);
void gles_glNormalPointer(glNormalPointer_ARG_EXPAND);
void gles_glOrthof(glOrthof_ARG_EXPAND);
void gles_glOrthox(glOrthox_ARG_EXPAND);
void gles_glPixelStorei(glPixelStorei_ARG_EXPAND);
void gles_glPointParameterf(glPointParameterf_ARG_EXPAND);
void gles_glPointParameterfv(glPointParameterfv_ARG_EXPAND);
void gles_glPointParameterx(glPointParameterx_ARG_EXPAND);
void gles_glPointParameterxv(glPointParameterxv_ARG_EXPAND);
void gles_glPointSize(glPointSize_ARG_EXPAND);
void gles_glPointSizePointerOES(glPointSizePointerOES_ARG_EXPAND);
void gles_glPointSizex(glPointSizex_ARG_EXPAND);
void gles_glPolygonOffset(glPolygonOffset_ARG_EXPAND);
void gles_glPolygonOffsetx(glPolygonOffsetx_ARG_EXPAND);
void gles_glPopMatrix(glPopMatrix_ARG_EXPAND);
void gles_glPushMatrix(glPushMatrix_ARG_EXPAND);
void gles_glReadPixels(glReadPixels_ARG_EXPAND);
void gles_glRotatef(glRotatef_ARG_EXPAND);
void gles_glRotatex(glRotatex_ARG_EXPAND);
void gles_glSampleCoverage(glSampleCoverage_ARG_EXPAND);
void gles_glSampleCoveragex(glSampleCoveragex_ARG_EXPAND);
void gles_glScalef(glScalef_ARG_EXPAND);
void gles_glScalex(glScalex_ARG_EXPAND);
void gles_glScissor(glScissor_ARG_EXPAND);
void gles_glShadeModel(glShadeModel_ARG_EXPAND);
void gles_glStencilFunc(glStencilFunc_ARG_EXPAND);
void gles_glStencilMask(glStencilMask_ARG_EXPAND);
void gles_glStencilOp(glStencilOp_ARG_EXPAND);
void gles_glTexCoordPointer(glTexCoordPointer_ARG_EXPAND);
void gles_glTexEnvf(glTexEnvf_ARG_EXPAND);
void gles_glTexEnvfv(glTexEnvfv_ARG_EXPAND);
void gles_glTexEnvi(glTexEnvi_ARG_EXPAND);
void gles_glTexEnviv(glTexEnviv_ARG_EXPAND);
void gles_glTexEnvx(glTexEnvx_ARG_EXPAND);
void gles_glTexEnvxv(glTexEnvxv_ARG_EXPAND);
void gles_glTexImage2D(glTexImage2D_ARG_EXPAND);
void gles_glTexParameterf(glTexParameterf_ARG_EXPAND);
void gles_glTexParameterfv(glTexParameterfv_ARG_EXPAND);
void gles_glTexParameteri(glTexParameteri_ARG_EXPAND);
void gles_glTexParameteriv(glTexParameteriv_ARG_EXPAND);
void gles_glTexParameterx(glTexParameterx_ARG_EXPAND);
void gles_glTexParameterxv(glTexParameterxv_ARG_EXPAND);
void gles_glTexSubImage2D(glTexSubImage2D_ARG_EXPAND);
void gles_glTranslatef(glTranslatef_ARG_EXPAND);
void gles_glTranslatex(glTranslatex_ARG_EXPAND);
void gles_glVertexPointer(glVertexPointer_ARG_EXPAND);
void gles_glViewport(glViewport_ARG_EXPAND);
#endif

#ifdef __cplusplus
} // extern "C"
#endif
#endif
Added jni/glshim/test/util/run.py.




































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
import argparse
import jinja2
import os
import signal
import subprocess
import sys
import traceback

from blessings import Terminal
from contextlib import contextmanager

signals = dict((k, v) for v, k in signal.__dict__.iteritems() if v.startswith('SIG'))
term = Terminal()
TEST_ROOT = os.getcwd()

env = jinja2.Environment(
    trim_blocks=True,
    lstrip_blocks=True,
    loader=jinja2.FileSystemLoader(os.path.join(TEST_ROOT, 'util', 'template')),
)


@contextmanager
def chdir(d):
    old = os.getcwd()
    os.chdir(d)
    yield
    os.chdir(old)


def shell(*args, **kwargs):
    p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    output = p.communicate(kwargs.get('input', ''))
    out = '\n'.join(((output[0] or '').strip(), (output[1] or '').strip()))
    if p.returncode < 0:
        sig = signals.get(-p.returncode)
        if sig is not None:
            out += '\n' + sig
    return out.strip(), p.returncode


def walk(base):
    for root, _, files in os.walk(base):
        for name in files:
            yield os.path.join(root, name)


class Test:
    def __init__(self, path, tail):
        self.path = path
        self.name = os.path.splitext(tail)[0].strip('/')
        self.exe = os.path.basename(self.name)
        self.dir = self.name.rsplit(self.exe, 1)[0].strip('/')
        self.ran = False
        self.success = None
        self.build_failed = False
        self.output = ''

    @classmethod
    def find(cls, base, filt):
        tests = []
        for path in walk(base):
            tail = path.replace(base, '', 1)
            test = None
            if path.endswith('.c'):
                test = Test(path, tail)
            elif path.endswith('.py'):
                test = PythonTest(path, tail)
            else:
                continue

            if test and filt:
                for f in filt:
                    if test.name.startswith(f):
                        break
                else:
                    continue

            tests.append(test)
        return tests

    @property
    def status(self):
        if self.build_failed:
            return 'build failed'
        elif not self.ran:
            return 'skipped'
        return 'pass' if self.success else 'fail'

    @property
    def status_color(self):
        if self.build_failed:
            return term.red
        elif not self.ran:
            return term.yellow
        return term.green if self.success else term.red

    def build(self, project):
        junk_dir = os.path.join(TEST_ROOT, 'build')
        bin_dir = os.path.join(TEST_ROOT, 'bin', self.dir)
        if not os.path.exists(junk_dir):
            os.makedirs(junk_dir)

        cmakelists = os.path.join(junk_dir, 'CMakeLists.txt')
        t = env.get_template('CMakeLists.txt.j2')
        txt = t.render(
            project=args.project,
            exe=self.exe,
            sources=self.path,
            bin_dir=bin_dir,
            util=os.path.join(TEST_ROOT, 'util'),
        )
        with open(cmakelists, 'w') as f:
            f.write(txt)

        out, status = shell('cmake', cmakelists)
        if status:
            self.output = out
            self.build_failed = True
            return False

        with chdir(junk_dir):
            out, status = shell('make', '-j2')
            if status:
                self.output = out
                self.build_failed = True
                return False

        tmp = os.path.join(bin_dir, 'tmp')
        out = os.path.join(bin_dir, self.exe)
        if os.path.exists(out):
            os.unlink(out)
        os.rename(tmp, out)
        return True

    def run(self):
        bin_dir = os.path.join(TEST_ROOT, 'bin', self.dir)
        with chdir(bin_dir):
            self.output, status = shell('./' + self.exe)
            self.ran = True
            self.success = (status == 0)
        return self.success

    def __repr__(self):
        if self.ran:
            return '<Test: {} ({})>'.format(self.name, self.status)
        else:
            return '<Test: {}>'.format(self.name)


class PythonTest(Test):
    def build(self, project):
        return True

    def run(self):
        with chdir(TEST_ROOT):
            self.output, status = shell('python', self.path)
            self.ran = True
            self.success = (status == 0)
            return False

def run(args):
    tests = Test.find(args.base, args.tests)
    if not tests:
        print 'No tests!'
        return

    step_fmt = lambda step: term.bold('[' + step + ']')
    status_fmt = lambda test: term.bold('[' + test.status_color(test.status) + ']')
    back = lambda mult: '\b' * mult
    out = lambda *a: (sys.stdout.write(' '.join(str(s) for s in a)), sys.stdout.flush())

    duplicate_errors = set()

    for i, test in enumerate(tests):
        headline = '[{}/{}] {} ['.format(i + 1, len(tests), test.name)
        print term.bold(headline.ljust(79, '-')),
        out(back(8) + ' ' + step_fmt('build'))

        try:
            build = test.build(args.project)
        except Exception:
            test.build_failed = True
            print
            traceback.print_exc()

        out(back(7) + step_fmt(' run '))
        if not test.build_failed:
            try:
                success = test.run()
            except Exception:
                test.ran = True
                success = test.success = False
                print
                traceback.print_exc()

        out(back(max(7, len(test.status) + 3)) + '  ' + status_fmt(test))
        print

        if test.output:
            if test.build_failed:
                if test.output in duplicate_errors:
                    continue
                else:
                    duplicate_errors.add(test.output)

            for line in test.output.split('\n'):
                ERROR = term.bold(term.red('ERROR:'))
                WARNING = term.bold(term.yellow('WARNING:'))
                if line.startswith('ERROR'):
                    line = line.replace('ERROR:', ERROR, 1)
                elif line.startswith('WARNING'):
                    line = line.replace('WARNING:', WARNING, 1)
                if test.build_failed:
                    line = line.replace('error:', ERROR)
                    line = line.replace('warning:', WARNING)
                print '> {}'.format(line)

    passed = sum(t.success for t in tests if t.ran)
    total = sum(t.ran for t in tests)
    results = '{} / {} passed, {} skipped '.format(passed, total, len(tests) - total)

    if total > 0:
        pc = passed / float(total) * 100
        percent = '{:.2f}%'.format(pc)
        if passed == total:
            percent = term.green('100%')
        elif pc < 75:
            percent = term.red(percent)
        else:
            percent = term.yellow(percent)
        print term.bold((results + '[{}]').format(percent).rjust(80 + len(term.green(''))))
        print


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Build and run tests.')
    parser.add_argument('--project', help='project directory', default='.')
    parser.add_argument('--base', help='test directories to search', required=True)
    parser.add_argument('tests', help='test names to run (all by default)', nargs='*')
    args = parser.parse_args()
    run(args)
Added jni/glshim/test/util/template/CMakeLists.txt.j2.




































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cmake_minimum_required(VERSION 2.6)

project(test)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY {{ bin_dir }})

include_directories({{ util }})
include_directories({{ project }}/include)
include_directories({{ project }}/src/gl)
include_directories({{ project }}/src/util)

add_definitions(-include test.h)
include({{ project }}/flags.cmake)

file(GLOB_RECURSE GL_SOURCES {{ project }}/src/gl/*.c {{ project }}/src/gl/*.cpp)
file(GLOB UTIL_SOURCES {{ project }}/src/util/*.c {{ project }}/src/util/math/*.c)
set(GL_SOURCES ${GL_SOURCES} ${UTIL_SOURCES})

add_executable(tmp ${GL_SOURCES} {{ sources }} {{ util }}/mock.c)
Added jni/glshim/test/util/test.h.


















>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
#define LOAD_RAW(...) {}
#define PROXY(...) {}

#include <stdio.h>
#include "mock.h"

#define free(...) {}
#undef emit_glGetError
#define emit_glGetError(...) {}