1/*
2 * Copyright © 2012 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
22 */
23
24#include <gtest/gtest.h>
25#include <GL/gl.h>
26
27extern "C" {
28#include "glapi/glapi.h"
29#include "glapi/glapitable.h"
30}
31
32struct name_offset {
33   const char *name;
34   int offset;
35};
36
37extern const struct name_offset linux_gl_abi[];
38extern const struct name_offset known_dispatch[];
39
40TEST(GetProcAddress, ABIOffsetByName)
41{
42   /* 408 functions have had their locations in the dispatch table set since
43    * the dawn of time.  Verify that all of these functions are at the correct
44    * locations.
45    */
46   for (unsigned i = 0; linux_gl_abi[i].name != NULL; i++) {
47      EXPECT_EQ(linux_gl_abi[i].offset,
48		_glapi_get_proc_offset(linux_gl_abi[i].name))
49	 << "function name: " << linux_gl_abi[i].name;
50   }
51}
52
53TEST(GetProcAddress, ABINameByOffset)
54{
55   /* 408 functions have had their locations in the dispatch table set since
56    * the dawn of time.  Verify that all of these functions are at the correct
57    * locations.
58    */
59   for (unsigned i = 0; linux_gl_abi[i].name != NULL; i++) {
60      EXPECT_STREQ(linux_gl_abi[i].name,
61		   _glapi_get_proc_name(linux_gl_abi[i].offset))
62	 << "function offset: " << linux_gl_abi[i].offset;
63   }
64}
65
66TEST(GetProcAddress, TableBigEnoughForABI)
67{
68   const unsigned table_entries = sizeof(struct _glapi_table) / sizeof(void *);
69
70   EXPECT_GE(table_entries, 408u);
71}
72
73TEST(GetProcAddress, TableDidntShrink)
74{
75   const unsigned table_entries = sizeof(struct _glapi_table) / sizeof(void *);
76
77   /* The dispatch table is not expected to shrink.  At GIT commit b45052b the
78    * table had 978 entries.  Changes that intentionally reduce the size of
79    * the table are very rare.  In those cases, the expected value should be
80    * updated to reflect the change.
81    *
82    * Changes that accidentally reduce the size of the table are bugs, and
83    * they should be fixed.
84    *
85    * 6 entries were removed when GL_SGIS_pixel_texture was removed from the
86    * dispatch table.
87    *
88    * 1 entry was removed when GL_SGIX_pixel_texture was removed from the
89    * dispatch table.
90    *
91    * 2 entries were removed when GL_APPLE_texture_range was removed from the
92    * dispatch table.
93    *
94    * 13 entries were removed when GL_NV_register_combiners was removed from
95    * the dispatch table.
96    *
97    * 7 entries were removed when GL_NV_fence was removed from the dispatch
98    * table.
99    *
100    * 2 entries were removed when GL_NV_vertex_array_range was removed from
101    * the dispatch table.
102    */
103   EXPECT_GE(table_entries, 978u - 6u - 1u - 2u - 13u - 7u - 2u);
104}
105
106TEST(GetProcAddress, QueriedDispatchSizeBigEnough)
107{
108   const unsigned table_entries = sizeof(struct _glapi_table) / sizeof(void *);
109
110   /* _glapi_get_dispatch_table_size returns the size of the extended dispatch
111    * table.  This is the size of the static table with some extra entries for
112    * drivers to use for extensions that the core does not know about.
113    */
114   EXPECT_LT(table_entries, _glapi_get_dispatch_table_size());
115}
116
117TEST(GetProcAddress, KnownDispatchOffsetsAreConsistent)
118{
119   /* Verify that the queried dispatch offset for every known function is
120    * consistent with its location in the static dispatch table.
121    *
122    * There is some redundancy between this test and ABIOffsetByName.  That's
123    * okay.  The offsets in ABIOffsetByName comdirectly from the ABI
124    * definition.  The offsets in this test come from locations in a structure
125    * definition generated by scripts.
126    */
127   for (unsigned i = 0; known_dispatch[i].name != NULL; i++) {
128      EXPECT_EQ(known_dispatch[i].offset,
129		_glapi_get_proc_offset(known_dispatch[i].name))
130	 << "function name: " << known_dispatch[i].name;
131   }
132}
133
134TEST(GetProcAddress, KnownDispatchNamesAreConsistent)
135{
136   /* Verify that the queried dispatch name for every known function is
137    * consistent with its location in the static dispatch table.
138    *
139    * There is some redundancy between this test and ABINameByOffset.  That's
140    * okay.  The offsets in ABIOffsetByName comdirectly from the ABI
141    * definition.  The offsets in this test come from locations in a structure
142    * definition generated by scripts.
143    */
144   for (unsigned i = 0; known_dispatch[i].name != NULL; i++) {
145      EXPECT_STREQ(known_dispatch[i].name,
146		   _glapi_get_proc_name(known_dispatch[i].offset))
147	 << "function offset: " << known_dispatch[i].offset;
148   }
149}
150
151const struct name_offset linux_gl_abi[] = {
152   { "glNewList", 0 },
153   { "glEndList", 1 },
154   { "glCallList", 2 },
155   { "glCallLists", 3 },
156   { "glDeleteLists", 4 },
157   { "glGenLists", 5 },
158   { "glListBase", 6 },
159   { "glBegin", 7 },
160   { "glBitmap", 8 },
161   { "glColor3b", 9 },
162   { "glColor3bv", 10 },
163   { "glColor3d", 11 },
164   { "glColor3dv", 12 },
165   { "glColor3f", 13 },
166   { "glColor3fv", 14 },
167   { "glColor3i", 15 },
168   { "glColor3iv", 16 },
169   { "glColor3s", 17 },
170   { "glColor3sv", 18 },
171   { "glColor3ub", 19 },
172   { "glColor3ubv", 20 },
173   { "glColor3ui", 21 },
174   { "glColor3uiv", 22 },
175   { "glColor3us", 23 },
176   { "glColor3usv", 24 },
177   { "glColor4b", 25 },
178   { "glColor4bv", 26 },
179   { "glColor4d", 27 },
180   { "glColor4dv", 28 },
181   { "glColor4f", 29 },
182   { "glColor4fv", 30 },
183   { "glColor4i", 31 },
184   { "glColor4iv", 32 },
185   { "glColor4s", 33 },
186   { "glColor4sv", 34 },
187   { "glColor4ub", 35 },
188   { "glColor4ubv", 36 },
189   { "glColor4ui", 37 },
190   { "glColor4uiv", 38 },
191   { "glColor4us", 39 },
192   { "glColor4usv", 40 },
193   { "glEdgeFlag", 41 },
194   { "glEdgeFlagv", 42 },
195   { "glEnd", 43 },
196   { "glIndexd", 44 },
197   { "glIndexdv", 45 },
198   { "glIndexf", 46 },
199   { "glIndexfv", 47 },
200   { "glIndexi", 48 },
201   { "glIndexiv", 49 },
202   { "glIndexs", 50 },
203   { "glIndexsv", 51 },
204   { "glNormal3b", 52 },
205   { "glNormal3bv", 53 },
206   { "glNormal3d", 54 },
207   { "glNormal3dv", 55 },
208   { "glNormal3f", 56 },
209   { "glNormal3fv", 57 },
210   { "glNormal3i", 58 },
211   { "glNormal3iv", 59 },
212   { "glNormal3s", 60 },
213   { "glNormal3sv", 61 },
214   { "glRasterPos2d", 62 },
215   { "glRasterPos2dv", 63 },
216   { "glRasterPos2f", 64 },
217   { "glRasterPos2fv", 65 },
218   { "glRasterPos2i", 66 },
219   { "glRasterPos2iv", 67 },
220   { "glRasterPos2s", 68 },
221   { "glRasterPos2sv", 69 },
222   { "glRasterPos3d", 70 },
223   { "glRasterPos3dv", 71 },
224   { "glRasterPos3f", 72 },
225   { "glRasterPos3fv", 73 },
226   { "glRasterPos3i", 74 },
227   { "glRasterPos3iv", 75 },
228   { "glRasterPos3s", 76 },
229   { "glRasterPos3sv", 77 },
230   { "glRasterPos4d", 78 },
231   { "glRasterPos4dv", 79 },
232   { "glRasterPos4f", 80 },
233   { "glRasterPos4fv", 81 },
234   { "glRasterPos4i", 82 },
235   { "glRasterPos4iv", 83 },
236   { "glRasterPos4s", 84 },
237   { "glRasterPos4sv", 85 },
238   { "glRectd", 86 },
239   { "glRectdv", 87 },
240   { "glRectf", 88 },
241   { "glRectfv", 89 },
242   { "glRecti", 90 },
243   { "glRectiv", 91 },
244   { "glRects", 92 },
245   { "glRectsv", 93 },
246   { "glTexCoord1d", 94 },
247   { "glTexCoord1dv", 95 },
248   { "glTexCoord1f", 96 },
249   { "glTexCoord1fv", 97 },
250   { "glTexCoord1i", 98 },
251   { "glTexCoord1iv", 99 },
252   { "glTexCoord1s", 100 },
253   { "glTexCoord1sv", 101 },
254   { "glTexCoord2d", 102 },
255   { "glTexCoord2dv", 103 },
256   { "glTexCoord2f", 104 },
257   { "glTexCoord2fv", 105 },
258   { "glTexCoord2i", 106 },
259   { "glTexCoord2iv", 107 },
260   { "glTexCoord2s", 108 },
261   { "glTexCoord2sv", 109 },
262   { "glTexCoord3d", 110 },
263   { "glTexCoord3dv", 111 },
264   { "glTexCoord3f", 112 },
265   { "glTexCoord3fv", 113 },
266   { "glTexCoord3i", 114 },
267   { "glTexCoord3iv", 115 },
268   { "glTexCoord3s", 116 },
269   { "glTexCoord3sv", 117 },
270   { "glTexCoord4d", 118 },
271   { "glTexCoord4dv", 119 },
272   { "glTexCoord4f", 120 },
273   { "glTexCoord4fv", 121 },
274   { "glTexCoord4i", 122 },
275   { "glTexCoord4iv", 123 },
276   { "glTexCoord4s", 124 },
277   { "glTexCoord4sv", 125 },
278   { "glVertex2d", 126 },
279   { "glVertex2dv", 127 },
280   { "glVertex2f", 128 },
281   { "glVertex2fv", 129 },
282   { "glVertex2i", 130 },
283   { "glVertex2iv", 131 },
284   { "glVertex2s", 132 },
285   { "glVertex2sv", 133 },
286   { "glVertex3d", 134 },
287   { "glVertex3dv", 135 },
288   { "glVertex3f", 136 },
289   { "glVertex3fv", 137 },
290   { "glVertex3i", 138 },
291   { "glVertex3iv", 139 },
292   { "glVertex3s", 140 },
293   { "glVertex3sv", 141 },
294   { "glVertex4d", 142 },
295   { "glVertex4dv", 143 },
296   { "glVertex4f", 144 },
297   { "glVertex4fv", 145 },
298   { "glVertex4i", 146 },
299   { "glVertex4iv", 147 },
300   { "glVertex4s", 148 },
301   { "glVertex4sv", 149 },
302   { "glClipPlane", 150 },
303   { "glColorMaterial", 151 },
304   { "glCullFace", 152 },
305   { "glFogf", 153 },
306   { "glFogfv", 154 },
307   { "glFogi", 155 },
308   { "glFogiv", 156 },
309   { "glFrontFace", 157 },
310   { "glHint", 158 },
311   { "glLightf", 159 },
312   { "glLightfv", 160 },
313   { "glLighti", 161 },
314   { "glLightiv", 162 },
315   { "glLightModelf", 163 },
316   { "glLightModelfv", 164 },
317   { "glLightModeli", 165 },
318   { "glLightModeliv", 166 },
319   { "glLineStipple", 167 },
320   { "glLineWidth", 168 },
321   { "glMaterialf", 169 },
322   { "glMaterialfv", 170 },
323   { "glMateriali", 171 },
324   { "glMaterialiv", 172 },
325   { "glPointSize", 173 },
326   { "glPolygonMode", 174 },
327   { "glPolygonStipple", 175 },
328   { "glScissor", 176 },
329   { "glShadeModel", 177 },
330   { "glTexParameterf", 178 },
331   { "glTexParameterfv", 179 },
332   { "glTexParameteri", 180 },
333   { "glTexParameteriv", 181 },
334   { "glTexImage1D", 182 },
335   { "glTexImage2D", 183 },
336   { "glTexEnvf", 184 },
337   { "glTexEnvfv", 185 },
338   { "glTexEnvi", 186 },
339   { "glTexEnviv", 187 },
340   { "glTexGend", 188 },
341   { "glTexGendv", 189 },
342   { "glTexGenf", 190 },
343   { "glTexGenfv", 191 },
344   { "glTexGeni", 192 },
345   { "glTexGeniv", 193 },
346   { "glFeedbackBuffer", 194 },
347   { "glSelectBuffer", 195 },
348   { "glRenderMode", 196 },
349   { "glInitNames", 197 },
350   { "glLoadName", 198 },
351   { "glPassThrough", 199 },
352   { "glPopName", 200 },
353   { "glPushName", 201 },
354   { "glDrawBuffer", 202 },
355   { "glClear", 203 },
356   { "glClearAccum", 204 },
357   { "glClearIndex", 205 },
358   { "glClearColor", 206 },
359   { "glClearStencil", 207 },
360   { "glClearDepth", 208 },
361   { "glStencilMask", 209 },
362   { "glColorMask", 210 },
363   { "glDepthMask", 211 },
364   { "glIndexMask", 212 },
365   { "glAccum", 213 },
366   { "glDisable", 214 },
367   { "glEnable", 215 },
368   { "glFinish", 216 },
369   { "glFlush", 217 },
370   { "glPopAttrib", 218 },
371   { "glPushAttrib", 219 },
372   { "glMap1d", 220 },
373   { "glMap1f", 221 },
374   { "glMap2d", 222 },
375   { "glMap2f", 223 },
376   { "glMapGrid1d", 224 },
377   { "glMapGrid1f", 225 },
378   { "glMapGrid2d", 226 },
379   { "glMapGrid2f", 227 },
380   { "glEvalCoord1d", 228 },
381   { "glEvalCoord1dv", 229 },
382   { "glEvalCoord1f", 230 },
383   { "glEvalCoord1fv", 231 },
384   { "glEvalCoord2d", 232 },
385   { "glEvalCoord2dv", 233 },
386   { "glEvalCoord2f", 234 },
387   { "glEvalCoord2fv", 235 },
388   { "glEvalMesh1", 236 },
389   { "glEvalPoint1", 237 },
390   { "glEvalMesh2", 238 },
391   { "glEvalPoint2", 239 },
392   { "glAlphaFunc", 240 },
393   { "glBlendFunc", 241 },
394   { "glLogicOp", 242 },
395   { "glStencilFunc", 243 },
396   { "glStencilOp", 244 },
397   { "glDepthFunc", 245 },
398   { "glPixelZoom", 246 },
399   { "glPixelTransferf", 247 },
400   { "glPixelTransferi", 248 },
401   { "glPixelStoref", 249 },
402   { "glPixelStorei", 250 },
403   { "glPixelMapfv", 251 },
404   { "glPixelMapuiv", 252 },
405   { "glPixelMapusv", 253 },
406   { "glReadBuffer", 254 },
407   { "glCopyPixels", 255 },
408   { "glReadPixels", 256 },
409   { "glDrawPixels", 257 },
410   { "glGetBooleanv", 258 },
411   { "glGetClipPlane", 259 },
412   { "glGetDoublev", 260 },
413   { "glGetError", 261 },
414   { "glGetFloatv", 262 },
415   { "glGetIntegerv", 263 },
416   { "glGetLightfv", 264 },
417   { "glGetLightiv", 265 },
418   { "glGetMapdv", 266 },
419   { "glGetMapfv", 267 },
420   { "glGetMapiv", 268 },
421   { "glGetMaterialfv", 269 },
422   { "glGetMaterialiv", 270 },
423   { "glGetPixelMapfv", 271 },
424   { "glGetPixelMapuiv", 272 },
425   { "glGetPixelMapusv", 273 },
426   { "glGetPolygonStipple", 274 },
427   { "glGetString", 275 },
428   { "glGetTexEnvfv", 276 },
429   { "glGetTexEnviv", 277 },
430   { "glGetTexGendv", 278 },
431   { "glGetTexGenfv", 279 },
432   { "glGetTexGeniv", 280 },
433   { "glGetTexImage", 281 },
434   { "glGetTexParameterfv", 282 },
435   { "glGetTexParameteriv", 283 },
436   { "glGetTexLevelParameterfv", 284 },
437   { "glGetTexLevelParameteriv", 285 },
438   { "glIsEnabled", 286 },
439   { "glIsList", 287 },
440   { "glDepthRange", 288 },
441   { "glFrustum", 289 },
442   { "glLoadIdentity", 290 },
443   { "glLoadMatrixf", 291 },
444   { "glLoadMatrixd", 292 },
445   { "glMatrixMode", 293 },
446   { "glMultMatrixf", 294 },
447   { "glMultMatrixd", 295 },
448   { "glOrtho", 296 },
449   { "glPopMatrix", 297 },
450   { "glPushMatrix", 298 },
451   { "glRotated", 299 },
452   { "glRotatef", 300 },
453   { "glScaled", 301 },
454   { "glScalef", 302 },
455   { "glTranslated", 303 },
456   { "glTranslatef", 304 },
457   { "glViewport", 305 },
458   { "glArrayElement", 306 },
459   { "glColorPointer", 308 },
460   { "glDisableClientState", 309 },
461   { "glDrawArrays", 310 },
462   { "glDrawElements", 311 },
463   { "glEdgeFlagPointer", 312 },
464   { "glEnableClientState", 313 },
465   { "glGetPointerv", 329 },
466   { "glIndexPointer", 314 },
467   { "glInterleavedArrays", 317 },
468   { "glNormalPointer", 318 },
469   { "glTexCoordPointer", 320 },
470   { "glVertexPointer", 321 },
471   { "glPolygonOffset", 319 },
472   { "glCopyTexImage1D", 323 },
473   { "glCopyTexImage2D", 324 },
474   { "glCopyTexSubImage1D", 325 },
475   { "glCopyTexSubImage2D", 326 },
476   { "glTexSubImage1D", 332 },
477   { "glTexSubImage2D", 333 },
478   { "glAreTexturesResident", 322 },
479   { "glBindTexture", 307 },
480   { "glDeleteTextures", 327 },
481   { "glGenTextures", 328 },
482   { "glIsTexture", 330 },
483   { "glPrioritizeTextures", 331 },
484   { "glIndexub", 315 },
485   { "glIndexubv", 316 },
486   { "glPopClientAttrib", 334 },
487   { "glPushClientAttrib", 335 },
488   { "glBlendColor", 336 },
489   { "glBlendEquation", 337 },
490   { "glDrawRangeElements", 338 },
491   { "glColorTable", 339 },
492   { "glColorTableParameterfv", 340 },
493   { "glColorTableParameteriv", 341 },
494   { "glCopyColorTable", 342 },
495   { "glGetColorTable", 343 },
496   { "glGetColorTableParameterfv", 344 },
497   { "glGetColorTableParameteriv", 345 },
498   { "glColorSubTable", 346 },
499   { "glCopyColorSubTable", 347 },
500   { "glConvolutionFilter1D", 348 },
501   { "glConvolutionFilter2D", 349 },
502   { "glConvolutionParameterf", 350 },
503   { "glConvolutionParameterfv", 351 },
504   { "glConvolutionParameteri", 352 },
505   { "glConvolutionParameteriv", 353 },
506   { "glCopyConvolutionFilter1D", 354 },
507   { "glCopyConvolutionFilter2D", 355 },
508   { "glGetConvolutionFilter", 356 },
509   { "glGetConvolutionParameterfv", 357 },
510   { "glGetConvolutionParameteriv", 358 },
511   { "glGetSeparableFilter", 359 },
512   { "glSeparableFilter2D", 360 },
513   { "glGetHistogram", 361 },
514   { "glGetHistogramParameterfv", 362 },
515   { "glGetHistogramParameteriv", 363 },
516   { "glGetMinmax", 364 },
517   { "glGetMinmaxParameterfv", 365 },
518   { "glGetMinmaxParameteriv", 366 },
519   { "glHistogram", 367 },
520   { "glMinmax", 368 },
521   { "glResetHistogram", 369 },
522   { "glResetMinmax", 370 },
523   { "glTexImage3D", 371 },
524   { "glTexSubImage3D", 372 },
525   { "glCopyTexSubImage3D", 373 },
526   { "glActiveTextureARB", 374 },
527   { "glClientActiveTextureARB", 375 },
528   { "glMultiTexCoord1dARB", 376 },
529   { "glMultiTexCoord1dvARB", 377 },
530   { "glMultiTexCoord1fARB", 378 },
531   { "glMultiTexCoord1fvARB", 379 },
532   { "glMultiTexCoord1iARB", 380 },
533   { "glMultiTexCoord1ivARB", 381 },
534   { "glMultiTexCoord1sARB", 382 },
535   { "glMultiTexCoord1svARB", 383 },
536   { "glMultiTexCoord2dARB", 384 },
537   { "glMultiTexCoord2dvARB", 385 },
538   { "glMultiTexCoord2fARB", 386 },
539   { "glMultiTexCoord2fvARB", 387 },
540   { "glMultiTexCoord2iARB", 388 },
541   { "glMultiTexCoord2ivARB", 389 },
542   { "glMultiTexCoord2sARB", 390 },
543   { "glMultiTexCoord2svARB", 391 },
544   { "glMultiTexCoord3dARB", 392 },
545   { "glMultiTexCoord3dvARB", 393 },
546   { "glMultiTexCoord3fARB", 394 },
547   { "glMultiTexCoord3fvARB", 395 },
548   { "glMultiTexCoord3iARB", 396 },
549   { "glMultiTexCoord3ivARB", 397 },
550   { "glMultiTexCoord3sARB", 398 },
551   { "glMultiTexCoord3svARB", 399 },
552   { "glMultiTexCoord4dARB", 400 },
553   { "glMultiTexCoord4dvARB", 401 },
554   { "glMultiTexCoord4fARB", 402 },
555   { "glMultiTexCoord4fvARB", 403 },
556   { "glMultiTexCoord4iARB", 404 },
557   { "glMultiTexCoord4ivARB", 405 },
558   { "glMultiTexCoord4sARB", 406 },
559   { "glMultiTexCoord4svARB", 407 },
560   { NULL, 0 }
561};
562
563#define _O(f) ((intptr_t) & (((struct _glapi_table *) 0)->f)) / sizeof(void *)
564
565const struct name_offset known_dispatch[] = {
566   { "glNewList", _O(NewList) },
567   { "glEndList", _O(EndList) },
568   { "glCallList", _O(CallList) },
569   { "glCallLists", _O(CallLists) },
570   { "glDeleteLists", _O(DeleteLists) },
571   { "glGenLists", _O(GenLists) },
572   { "glListBase", _O(ListBase) },
573   { "glBegin", _O(Begin) },
574   { "glBitmap", _O(Bitmap) },
575   { "glColor3b", _O(Color3b) },
576   { "glColor3bv", _O(Color3bv) },
577   { "glColor3d", _O(Color3d) },
578   { "glColor3dv", _O(Color3dv) },
579   { "glColor3f", _O(Color3f) },
580   { "glColor3fv", _O(Color3fv) },
581   { "glColor3i", _O(Color3i) },
582   { "glColor3iv", _O(Color3iv) },
583   { "glColor3s", _O(Color3s) },
584   { "glColor3sv", _O(Color3sv) },
585   { "glColor3ub", _O(Color3ub) },
586   { "glColor3ubv", _O(Color3ubv) },
587   { "glColor3ui", _O(Color3ui) },
588   { "glColor3uiv", _O(Color3uiv) },
589   { "glColor3us", _O(Color3us) },
590   { "glColor3usv", _O(Color3usv) },
591   { "glColor4b", _O(Color4b) },
592   { "glColor4bv", _O(Color4bv) },
593   { "glColor4d", _O(Color4d) },
594   { "glColor4dv", _O(Color4dv) },
595   { "glColor4f", _O(Color4f) },
596   { "glColor4fv", _O(Color4fv) },
597   { "glColor4i", _O(Color4i) },
598   { "glColor4iv", _O(Color4iv) },
599   { "glColor4s", _O(Color4s) },
600   { "glColor4sv", _O(Color4sv) },
601   { "glColor4ub", _O(Color4ub) },
602   { "glColor4ubv", _O(Color4ubv) },
603   { "glColor4ui", _O(Color4ui) },
604   { "glColor4uiv", _O(Color4uiv) },
605   { "glColor4us", _O(Color4us) },
606   { "glColor4usv", _O(Color4usv) },
607   { "glEdgeFlag", _O(EdgeFlag) },
608   { "glEdgeFlagv", _O(EdgeFlagv) },
609   { "glEnd", _O(End) },
610   { "glIndexd", _O(Indexd) },
611   { "glIndexdv", _O(Indexdv) },
612   { "glIndexf", _O(Indexf) },
613   { "glIndexfv", _O(Indexfv) },
614   { "glIndexi", _O(Indexi) },
615   { "glIndexiv", _O(Indexiv) },
616   { "glIndexs", _O(Indexs) },
617   { "glIndexsv", _O(Indexsv) },
618   { "glNormal3b", _O(Normal3b) },
619   { "glNormal3bv", _O(Normal3bv) },
620   { "glNormal3d", _O(Normal3d) },
621   { "glNormal3dv", _O(Normal3dv) },
622   { "glNormal3f", _O(Normal3f) },
623   { "glNormal3fv", _O(Normal3fv) },
624   { "glNormal3i", _O(Normal3i) },
625   { "glNormal3iv", _O(Normal3iv) },
626   { "glNormal3s", _O(Normal3s) },
627   { "glNormal3sv", _O(Normal3sv) },
628   { "glRasterPos2d", _O(RasterPos2d) },
629   { "glRasterPos2dv", _O(RasterPos2dv) },
630   { "glRasterPos2f", _O(RasterPos2f) },
631   { "glRasterPos2fv", _O(RasterPos2fv) },
632   { "glRasterPos2i", _O(RasterPos2i) },
633   { "glRasterPos2iv", _O(RasterPos2iv) },
634   { "glRasterPos2s", _O(RasterPos2s) },
635   { "glRasterPos2sv", _O(RasterPos2sv) },
636   { "glRasterPos3d", _O(RasterPos3d) },
637   { "glRasterPos3dv", _O(RasterPos3dv) },
638   { "glRasterPos3f", _O(RasterPos3f) },
639   { "glRasterPos3fv", _O(RasterPos3fv) },
640   { "glRasterPos3i", _O(RasterPos3i) },
641   { "glRasterPos3iv", _O(RasterPos3iv) },
642   { "glRasterPos3s", _O(RasterPos3s) },
643   { "glRasterPos3sv", _O(RasterPos3sv) },
644   { "glRasterPos4d", _O(RasterPos4d) },
645   { "glRasterPos4dv", _O(RasterPos4dv) },
646   { "glRasterPos4f", _O(RasterPos4f) },
647   { "glRasterPos4fv", _O(RasterPos4fv) },
648   { "glRasterPos4i", _O(RasterPos4i) },
649   { "glRasterPos4iv", _O(RasterPos4iv) },
650   { "glRasterPos4s", _O(RasterPos4s) },
651   { "glRasterPos4sv", _O(RasterPos4sv) },
652   { "glRectd", _O(Rectd) },
653   { "glRectdv", _O(Rectdv) },
654   { "glRectf", _O(Rectf) },
655   { "glRectfv", _O(Rectfv) },
656   { "glRecti", _O(Recti) },
657   { "glRectiv", _O(Rectiv) },
658   { "glRects", _O(Rects) },
659   { "glRectsv", _O(Rectsv) },
660   { "glTexCoord1d", _O(TexCoord1d) },
661   { "glTexCoord1dv", _O(TexCoord1dv) },
662   { "glTexCoord1f", _O(TexCoord1f) },
663   { "glTexCoord1fv", _O(TexCoord1fv) },
664   { "glTexCoord1i", _O(TexCoord1i) },
665   { "glTexCoord1iv", _O(TexCoord1iv) },
666   { "glTexCoord1s", _O(TexCoord1s) },
667   { "glTexCoord1sv", _O(TexCoord1sv) },
668   { "glTexCoord2d", _O(TexCoord2d) },
669   { "glTexCoord2dv", _O(TexCoord2dv) },
670   { "glTexCoord2f", _O(TexCoord2f) },
671   { "glTexCoord2fv", _O(TexCoord2fv) },
672   { "glTexCoord2i", _O(TexCoord2i) },
673   { "glTexCoord2iv", _O(TexCoord2iv) },
674   { "glTexCoord2s", _O(TexCoord2s) },
675   { "glTexCoord2sv", _O(TexCoord2sv) },
676   { "glTexCoord3d", _O(TexCoord3d) },
677   { "glTexCoord3dv", _O(TexCoord3dv) },
678   { "glTexCoord3f", _O(TexCoord3f) },
679   { "glTexCoord3fv", _O(TexCoord3fv) },
680   { "glTexCoord3i", _O(TexCoord3i) },
681   { "glTexCoord3iv", _O(TexCoord3iv) },
682   { "glTexCoord3s", _O(TexCoord3s) },
683   { "glTexCoord3sv", _O(TexCoord3sv) },
684   { "glTexCoord4d", _O(TexCoord4d) },
685   { "glTexCoord4dv", _O(TexCoord4dv) },
686   { "glTexCoord4f", _O(TexCoord4f) },
687   { "glTexCoord4fv", _O(TexCoord4fv) },
688   { "glTexCoord4i", _O(TexCoord4i) },
689   { "glTexCoord4iv", _O(TexCoord4iv) },
690   { "glTexCoord4s", _O(TexCoord4s) },
691   { "glTexCoord4sv", _O(TexCoord4sv) },
692   { "glVertex2d", _O(Vertex2d) },
693   { "glVertex2dv", _O(Vertex2dv) },
694   { "glVertex2f", _O(Vertex2f) },
695   { "glVertex2fv", _O(Vertex2fv) },
696   { "glVertex2i", _O(Vertex2i) },
697   { "glVertex2iv", _O(Vertex2iv) },
698   { "glVertex2s", _O(Vertex2s) },
699   { "glVertex2sv", _O(Vertex2sv) },
700   { "glVertex3d", _O(Vertex3d) },
701   { "glVertex3dv", _O(Vertex3dv) },
702   { "glVertex3f", _O(Vertex3f) },
703   { "glVertex3fv", _O(Vertex3fv) },
704   { "glVertex3i", _O(Vertex3i) },
705   { "glVertex3iv", _O(Vertex3iv) },
706   { "glVertex3s", _O(Vertex3s) },
707   { "glVertex3sv", _O(Vertex3sv) },
708   { "glVertex4d", _O(Vertex4d) },
709   { "glVertex4dv", _O(Vertex4dv) },
710   { "glVertex4f", _O(Vertex4f) },
711   { "glVertex4fv", _O(Vertex4fv) },
712   { "glVertex4i", _O(Vertex4i) },
713   { "glVertex4iv", _O(Vertex4iv) },
714   { "glVertex4s", _O(Vertex4s) },
715   { "glVertex4sv", _O(Vertex4sv) },
716   { "glClipPlane", _O(ClipPlane) },
717   { "glColorMaterial", _O(ColorMaterial) },
718   { "glCullFace", _O(CullFace) },
719   { "glFogf", _O(Fogf) },
720   { "glFogfv", _O(Fogfv) },
721   { "glFogi", _O(Fogi) },
722   { "glFogiv", _O(Fogiv) },
723   { "glFrontFace", _O(FrontFace) },
724   { "glHint", _O(Hint) },
725   { "glLightf", _O(Lightf) },
726   { "glLightfv", _O(Lightfv) },
727   { "glLighti", _O(Lighti) },
728   { "glLightiv", _O(Lightiv) },
729   { "glLightModelf", _O(LightModelf) },
730   { "glLightModelfv", _O(LightModelfv) },
731   { "glLightModeli", _O(LightModeli) },
732   { "glLightModeliv", _O(LightModeliv) },
733   { "glLineStipple", _O(LineStipple) },
734   { "glLineWidth", _O(LineWidth) },
735   { "glMaterialf", _O(Materialf) },
736   { "glMaterialfv", _O(Materialfv) },
737   { "glMateriali", _O(Materiali) },
738   { "glMaterialiv", _O(Materialiv) },
739   { "glPointSize", _O(PointSize) },
740   { "glPolygonMode", _O(PolygonMode) },
741   { "glPolygonStipple", _O(PolygonStipple) },
742   { "glScissor", _O(Scissor) },
743   { "glShadeModel", _O(ShadeModel) },
744   { "glTexParameterf", _O(TexParameterf) },
745   { "glTexParameterfv", _O(TexParameterfv) },
746   { "glTexParameteri", _O(TexParameteri) },
747   { "glTexParameteriv", _O(TexParameteriv) },
748   { "glTexImage1D", _O(TexImage1D) },
749   { "glTexImage2D", _O(TexImage2D) },
750   { "glTexEnvf", _O(TexEnvf) },
751   { "glTexEnvfv", _O(TexEnvfv) },
752   { "glTexEnvi", _O(TexEnvi) },
753   { "glTexEnviv", _O(TexEnviv) },
754   { "glTexGend", _O(TexGend) },
755   { "glTexGendv", _O(TexGendv) },
756   { "glTexGenf", _O(TexGenf) },
757   { "glTexGenfv", _O(TexGenfv) },
758   { "glTexGeni", _O(TexGeni) },
759   { "glTexGeniv", _O(TexGeniv) },
760   { "glFeedbackBuffer", _O(FeedbackBuffer) },
761   { "glSelectBuffer", _O(SelectBuffer) },
762   { "glRenderMode", _O(RenderMode) },
763   { "glInitNames", _O(InitNames) },
764   { "glLoadName", _O(LoadName) },
765   { "glPassThrough", _O(PassThrough) },
766   { "glPopName", _O(PopName) },
767   { "glPushName", _O(PushName) },
768   { "glDrawBuffer", _O(DrawBuffer) },
769   { "glClear", _O(Clear) },
770   { "glClearAccum", _O(ClearAccum) },
771   { "glClearIndex", _O(ClearIndex) },
772   { "glClearColor", _O(ClearColor) },
773   { "glClearStencil", _O(ClearStencil) },
774   { "glClearDepth", _O(ClearDepth) },
775   { "glStencilMask", _O(StencilMask) },
776   { "glColorMask", _O(ColorMask) },
777   { "glDepthMask", _O(DepthMask) },
778   { "glIndexMask", _O(IndexMask) },
779   { "glAccum", _O(Accum) },
780   { "glDisable", _O(Disable) },
781   { "glEnable", _O(Enable) },
782   { "glFinish", _O(Finish) },
783   { "glFlush", _O(Flush) },
784   { "glPopAttrib", _O(PopAttrib) },
785   { "glPushAttrib", _O(PushAttrib) },
786   { "glMap1d", _O(Map1d) },
787   { "glMap1f", _O(Map1f) },
788   { "glMap2d", _O(Map2d) },
789   { "glMap2f", _O(Map2f) },
790   { "glMapGrid1d", _O(MapGrid1d) },
791   { "glMapGrid1f", _O(MapGrid1f) },
792   { "glMapGrid2d", _O(MapGrid2d) },
793   { "glMapGrid2f", _O(MapGrid2f) },
794   { "glEvalCoord1d", _O(EvalCoord1d) },
795   { "glEvalCoord1dv", _O(EvalCoord1dv) },
796   { "glEvalCoord1f", _O(EvalCoord1f) },
797   { "glEvalCoord1fv", _O(EvalCoord1fv) },
798   { "glEvalCoord2d", _O(EvalCoord2d) },
799   { "glEvalCoord2dv", _O(EvalCoord2dv) },
800   { "glEvalCoord2f", _O(EvalCoord2f) },
801   { "glEvalCoord2fv", _O(EvalCoord2fv) },
802   { "glEvalMesh1", _O(EvalMesh1) },
803   { "glEvalPoint1", _O(EvalPoint1) },
804   { "glEvalMesh2", _O(EvalMesh2) },
805   { "glEvalPoint2", _O(EvalPoint2) },
806   { "glAlphaFunc", _O(AlphaFunc) },
807   { "glBlendFunc", _O(BlendFunc) },
808   { "glLogicOp", _O(LogicOp) },
809   { "glStencilFunc", _O(StencilFunc) },
810   { "glStencilOp", _O(StencilOp) },
811   { "glDepthFunc", _O(DepthFunc) },
812   { "glPixelZoom", _O(PixelZoom) },
813   { "glPixelTransferf", _O(PixelTransferf) },
814   { "glPixelTransferi", _O(PixelTransferi) },
815   { "glPixelStoref", _O(PixelStoref) },
816   { "glPixelStorei", _O(PixelStorei) },
817   { "glPixelMapfv", _O(PixelMapfv) },
818   { "glPixelMapuiv", _O(PixelMapuiv) },
819   { "glPixelMapusv", _O(PixelMapusv) },
820   { "glReadBuffer", _O(ReadBuffer) },
821   { "glCopyPixels", _O(CopyPixels) },
822   { "glReadPixels", _O(ReadPixels) },
823   { "glDrawPixels", _O(DrawPixels) },
824   { "glGetBooleanv", _O(GetBooleanv) },
825   { "glGetClipPlane", _O(GetClipPlane) },
826   { "glGetDoublev", _O(GetDoublev) },
827   { "glGetError", _O(GetError) },
828   { "glGetFloatv", _O(GetFloatv) },
829   { "glGetIntegerv", _O(GetIntegerv) },
830   { "glGetLightfv", _O(GetLightfv) },
831   { "glGetLightiv", _O(GetLightiv) },
832   { "glGetMapdv", _O(GetMapdv) },
833   { "glGetMapfv", _O(GetMapfv) },
834   { "glGetMapiv", _O(GetMapiv) },
835   { "glGetMaterialfv", _O(GetMaterialfv) },
836   { "glGetMaterialiv", _O(GetMaterialiv) },
837   { "glGetPixelMapfv", _O(GetPixelMapfv) },
838   { "glGetPixelMapuiv", _O(GetPixelMapuiv) },
839   { "glGetPixelMapusv", _O(GetPixelMapusv) },
840   { "glGetPolygonStipple", _O(GetPolygonStipple) },
841   { "glGetString", _O(GetString) },
842   { "glGetTexEnvfv", _O(GetTexEnvfv) },
843   { "glGetTexEnviv", _O(GetTexEnviv) },
844   { "glGetTexGendv", _O(GetTexGendv) },
845   { "glGetTexGenfv", _O(GetTexGenfv) },
846   { "glGetTexGeniv", _O(GetTexGeniv) },
847   { "glGetTexImage", _O(GetTexImage) },
848   { "glGetTexParameterfv", _O(GetTexParameterfv) },
849   { "glGetTexParameteriv", _O(GetTexParameteriv) },
850   { "glGetTexLevelParameterfv", _O(GetTexLevelParameterfv) },
851   { "glGetTexLevelParameteriv", _O(GetTexLevelParameteriv) },
852   { "glIsEnabled", _O(IsEnabled) },
853   { "glIsList", _O(IsList) },
854   { "glDepthRange", _O(DepthRange) },
855   { "glFrustum", _O(Frustum) },
856   { "glLoadIdentity", _O(LoadIdentity) },
857   { "glLoadMatrixf", _O(LoadMatrixf) },
858   { "glLoadMatrixd", _O(LoadMatrixd) },
859   { "glMatrixMode", _O(MatrixMode) },
860   { "glMultMatrixf", _O(MultMatrixf) },
861   { "glMultMatrixd", _O(MultMatrixd) },
862   { "glOrtho", _O(Ortho) },
863   { "glPopMatrix", _O(PopMatrix) },
864   { "glPushMatrix", _O(PushMatrix) },
865   { "glRotated", _O(Rotated) },
866   { "glRotatef", _O(Rotatef) },
867   { "glScaled", _O(Scaled) },
868   { "glScalef", _O(Scalef) },
869   { "glTranslated", _O(Translated) },
870   { "glTranslatef", _O(Translatef) },
871   { "glViewport", _O(Viewport) },
872   { "glArrayElement", _O(ArrayElement) },
873   { "glBindTexture", _O(BindTexture) },
874   { "glColorPointer", _O(ColorPointer) },
875   { "glDisableClientState", _O(DisableClientState) },
876   { "glDrawArrays", _O(DrawArrays) },
877   { "glDrawElements", _O(DrawElements) },
878   { "glEdgeFlagPointer", _O(EdgeFlagPointer) },
879   { "glEnableClientState", _O(EnableClientState) },
880   { "glIndexPointer", _O(IndexPointer) },
881   { "glIndexub", _O(Indexub) },
882   { "glIndexubv", _O(Indexubv) },
883   { "glInterleavedArrays", _O(InterleavedArrays) },
884   { "glNormalPointer", _O(NormalPointer) },
885   { "glPolygonOffset", _O(PolygonOffset) },
886   { "glTexCoordPointer", _O(TexCoordPointer) },
887   { "glVertexPointer", _O(VertexPointer) },
888   { "glAreTexturesResident", _O(AreTexturesResident) },
889   { "glCopyTexImage1D", _O(CopyTexImage1D) },
890   { "glCopyTexImage2D", _O(CopyTexImage2D) },
891   { "glCopyTexSubImage1D", _O(CopyTexSubImage1D) },
892   { "glCopyTexSubImage2D", _O(CopyTexSubImage2D) },
893   { "glDeleteTextures", _O(DeleteTextures) },
894   { "glGenTextures", _O(GenTextures) },
895   { "glGetPointerv", _O(GetPointerv) },
896   { "glIsTexture", _O(IsTexture) },
897   { "glPrioritizeTextures", _O(PrioritizeTextures) },
898   { "glTexSubImage1D", _O(TexSubImage1D) },
899   { "glTexSubImage2D", _O(TexSubImage2D) },
900   { "glPopClientAttrib", _O(PopClientAttrib) },
901   { "glPushClientAttrib", _O(PushClientAttrib) },
902   { "glBlendColor", _O(BlendColor) },
903   { "glBlendEquation", _O(BlendEquation) },
904   { "glDrawRangeElements", _O(DrawRangeElements) },
905   { "glColorTable", _O(ColorTable) },
906   { "glColorTableParameterfv", _O(ColorTableParameterfv) },
907   { "glColorTableParameteriv", _O(ColorTableParameteriv) },
908   { "glCopyColorTable", _O(CopyColorTable) },
909   { "glGetColorTable", _O(GetColorTable) },
910   { "glGetColorTableParameterfv", _O(GetColorTableParameterfv) },
911   { "glGetColorTableParameteriv", _O(GetColorTableParameteriv) },
912   { "glColorSubTable", _O(ColorSubTable) },
913   { "glCopyColorSubTable", _O(CopyColorSubTable) },
914   { "glConvolutionFilter1D", _O(ConvolutionFilter1D) },
915   { "glConvolutionFilter2D", _O(ConvolutionFilter2D) },
916   { "glConvolutionParameterf", _O(ConvolutionParameterf) },
917   { "glConvolutionParameterfv", _O(ConvolutionParameterfv) },
918   { "glConvolutionParameteri", _O(ConvolutionParameteri) },
919   { "glConvolutionParameteriv", _O(ConvolutionParameteriv) },
920   { "glCopyConvolutionFilter1D", _O(CopyConvolutionFilter1D) },
921   { "glCopyConvolutionFilter2D", _O(CopyConvolutionFilter2D) },
922   { "glGetConvolutionFilter", _O(GetConvolutionFilter) },
923   { "glGetConvolutionParameterfv", _O(GetConvolutionParameterfv) },
924   { "glGetConvolutionParameteriv", _O(GetConvolutionParameteriv) },
925   { "glGetSeparableFilter", _O(GetSeparableFilter) },
926   { "glSeparableFilter2D", _O(SeparableFilter2D) },
927   { "glGetHistogram", _O(GetHistogram) },
928   { "glGetHistogramParameterfv", _O(GetHistogramParameterfv) },
929   { "glGetHistogramParameteriv", _O(GetHistogramParameteriv) },
930   { "glGetMinmax", _O(GetMinmax) },
931   { "glGetMinmaxParameterfv", _O(GetMinmaxParameterfv) },
932   { "glGetMinmaxParameteriv", _O(GetMinmaxParameteriv) },
933   { "glHistogram", _O(Histogram) },
934   { "glMinmax", _O(Minmax) },
935   { "glResetHistogram", _O(ResetHistogram) },
936   { "glResetMinmax", _O(ResetMinmax) },
937   { "glTexImage3D", _O(TexImage3D) },
938   { "glTexSubImage3D", _O(TexSubImage3D) },
939   { "glCopyTexSubImage3D", _O(CopyTexSubImage3D) },
940   { "glActiveTextureARB", _O(ActiveTextureARB) },
941   { "glClientActiveTextureARB", _O(ClientActiveTextureARB) },
942   { "glMultiTexCoord1dARB", _O(MultiTexCoord1dARB) },
943   { "glMultiTexCoord1dvARB", _O(MultiTexCoord1dvARB) },
944   { "glMultiTexCoord1fARB", _O(MultiTexCoord1fARB) },
945   { "glMultiTexCoord1fvARB", _O(MultiTexCoord1fvARB) },
946   { "glMultiTexCoord1iARB", _O(MultiTexCoord1iARB) },
947   { "glMultiTexCoord1ivARB", _O(MultiTexCoord1ivARB) },
948   { "glMultiTexCoord1sARB", _O(MultiTexCoord1sARB) },
949   { "glMultiTexCoord1svARB", _O(MultiTexCoord1svARB) },
950   { "glMultiTexCoord2dARB", _O(MultiTexCoord2dARB) },
951   { "glMultiTexCoord2dvARB", _O(MultiTexCoord2dvARB) },
952   { "glMultiTexCoord2fARB", _O(MultiTexCoord2fARB) },
953   { "glMultiTexCoord2fvARB", _O(MultiTexCoord2fvARB) },
954   { "glMultiTexCoord2iARB", _O(MultiTexCoord2iARB) },
955   { "glMultiTexCoord2ivARB", _O(MultiTexCoord2ivARB) },
956   { "glMultiTexCoord2sARB", _O(MultiTexCoord2sARB) },
957   { "glMultiTexCoord2svARB", _O(MultiTexCoord2svARB) },
958   { "glMultiTexCoord3dARB", _O(MultiTexCoord3dARB) },
959   { "glMultiTexCoord3dvARB", _O(MultiTexCoord3dvARB) },
960   { "glMultiTexCoord3fARB", _O(MultiTexCoord3fARB) },
961   { "glMultiTexCoord3fvARB", _O(MultiTexCoord3fvARB) },
962   { "glMultiTexCoord3iARB", _O(MultiTexCoord3iARB) },
963   { "glMultiTexCoord3ivARB", _O(MultiTexCoord3ivARB) },
964   { "glMultiTexCoord3sARB", _O(MultiTexCoord3sARB) },
965   { "glMultiTexCoord3svARB", _O(MultiTexCoord3svARB) },
966   { "glMultiTexCoord4dARB", _O(MultiTexCoord4dARB) },
967   { "glMultiTexCoord4dvARB", _O(MultiTexCoord4dvARB) },
968   { "glMultiTexCoord4fARB", _O(MultiTexCoord4fARB) },
969   { "glMultiTexCoord4fvARB", _O(MultiTexCoord4fvARB) },
970   { "glMultiTexCoord4iARB", _O(MultiTexCoord4iARB) },
971   { "glMultiTexCoord4ivARB", _O(MultiTexCoord4ivARB) },
972   { "glMultiTexCoord4sARB", _O(MultiTexCoord4sARB) },
973   { "glMultiTexCoord4svARB", _O(MultiTexCoord4svARB) },
974   { "glAttachShader", _O(AttachShader) },
975   { "glCreateProgram", _O(CreateProgram) },
976   { "glCreateShader", _O(CreateShader) },
977   { "glDeleteProgram", _O(DeleteProgram) },
978   { "glDeleteShader", _O(DeleteShader) },
979   { "glDetachShader", _O(DetachShader) },
980   { "glGetAttachedShaders", _O(GetAttachedShaders) },
981   { "glGetProgramInfoLog", _O(GetProgramInfoLog) },
982   { "glGetProgramiv", _O(GetProgramiv) },
983   { "glGetShaderInfoLog", _O(GetShaderInfoLog) },
984   { "glGetShaderiv", _O(GetShaderiv) },
985   { "glIsProgram", _O(IsProgram) },
986   { "glIsShader", _O(IsShader) },
987   { "glStencilFuncSeparate", _O(StencilFuncSeparate) },
988   { "glStencilMaskSeparate", _O(StencilMaskSeparate) },
989   { "glStencilOpSeparate", _O(StencilOpSeparate) },
990   { "glUniformMatrix2x3fv", _O(UniformMatrix2x3fv) },
991   { "glUniformMatrix2x4fv", _O(UniformMatrix2x4fv) },
992   { "glUniformMatrix3x2fv", _O(UniformMatrix3x2fv) },
993   { "glUniformMatrix3x4fv", _O(UniformMatrix3x4fv) },
994   { "glUniformMatrix4x2fv", _O(UniformMatrix4x2fv) },
995   { "glUniformMatrix4x3fv", _O(UniformMatrix4x3fv) },
996   { "glClampColor", _O(ClampColor) },
997   { "glClearBufferfi", _O(ClearBufferfi) },
998   { "glClearBufferfv", _O(ClearBufferfv) },
999   { "glClearBufferiv", _O(ClearBufferiv) },
1000   { "glClearBufferuiv", _O(ClearBufferuiv) },
1001   { "glGetStringi", _O(GetStringi) },
1002   { "glFramebufferTexture", _O(FramebufferTexture) },
1003   { "glGetBufferParameteri64v", _O(GetBufferParameteri64v) },
1004   { "glGetInteger64i_v", _O(GetInteger64i_v) },
1005   { "glVertexAttribDivisor", _O(VertexAttribDivisor) },
1006   { "glLoadTransposeMatrixdARB", _O(LoadTransposeMatrixdARB) },
1007   { "glLoadTransposeMatrixfARB", _O(LoadTransposeMatrixfARB) },
1008   { "glMultTransposeMatrixdARB", _O(MultTransposeMatrixdARB) },
1009   { "glMultTransposeMatrixfARB", _O(MultTransposeMatrixfARB) },
1010   { "glSampleCoverageARB", _O(SampleCoverageARB) },
1011   { "glCompressedTexImage1DARB", _O(CompressedTexImage1DARB) },
1012   { "glCompressedTexImage2DARB", _O(CompressedTexImage2DARB) },
1013   { "glCompressedTexImage3DARB", _O(CompressedTexImage3DARB) },
1014   { "glCompressedTexSubImage1DARB", _O(CompressedTexSubImage1DARB) },
1015   { "glCompressedTexSubImage2DARB", _O(CompressedTexSubImage2DARB) },
1016   { "glCompressedTexSubImage3DARB", _O(CompressedTexSubImage3DARB) },
1017   { "glGetCompressedTexImageARB", _O(GetCompressedTexImageARB) },
1018   { "glDisableVertexAttribArrayARB", _O(DisableVertexAttribArrayARB) },
1019   { "glEnableVertexAttribArrayARB", _O(EnableVertexAttribArrayARB) },
1020   { "glGetProgramEnvParameterdvARB", _O(GetProgramEnvParameterdvARB) },
1021   { "glGetProgramEnvParameterfvARB", _O(GetProgramEnvParameterfvARB) },
1022   { "glGetProgramLocalParameterdvARB", _O(GetProgramLocalParameterdvARB) },
1023   { "glGetProgramLocalParameterfvARB", _O(GetProgramLocalParameterfvARB) },
1024   { "glGetProgramStringARB", _O(GetProgramStringARB) },
1025   { "glGetProgramivARB", _O(GetProgramivARB) },
1026   { "glGetVertexAttribdvARB", _O(GetVertexAttribdvARB) },
1027   { "glGetVertexAttribfvARB", _O(GetVertexAttribfvARB) },
1028   { "glGetVertexAttribivARB", _O(GetVertexAttribivARB) },
1029   { "glProgramEnvParameter4dARB", _O(ProgramEnvParameter4dARB) },
1030   { "glProgramEnvParameter4dvARB", _O(ProgramEnvParameter4dvARB) },
1031   { "glProgramEnvParameter4fARB", _O(ProgramEnvParameter4fARB) },
1032   { "glProgramEnvParameter4fvARB", _O(ProgramEnvParameter4fvARB) },
1033   { "glProgramLocalParameter4dARB", _O(ProgramLocalParameter4dARB) },
1034   { "glProgramLocalParameter4dvARB", _O(ProgramLocalParameter4dvARB) },
1035   { "glProgramLocalParameter4fARB", _O(ProgramLocalParameter4fARB) },
1036   { "glProgramLocalParameter4fvARB", _O(ProgramLocalParameter4fvARB) },
1037   { "glProgramStringARB", _O(ProgramStringARB) },
1038   { "glVertexAttrib1dARB", _O(VertexAttrib1dARB) },
1039   { "glVertexAttrib1dvARB", _O(VertexAttrib1dvARB) },
1040   { "glVertexAttrib1fARB", _O(VertexAttrib1fARB) },
1041   { "glVertexAttrib1fvARB", _O(VertexAttrib1fvARB) },
1042   { "glVertexAttrib1sARB", _O(VertexAttrib1sARB) },
1043   { "glVertexAttrib1svARB", _O(VertexAttrib1svARB) },
1044   { "glVertexAttrib2dARB", _O(VertexAttrib2dARB) },
1045   { "glVertexAttrib2dvARB", _O(VertexAttrib2dvARB) },
1046   { "glVertexAttrib2fARB", _O(VertexAttrib2fARB) },
1047   { "glVertexAttrib2fvARB", _O(VertexAttrib2fvARB) },
1048   { "glVertexAttrib2sARB", _O(VertexAttrib2sARB) },
1049   { "glVertexAttrib2svARB", _O(VertexAttrib2svARB) },
1050   { "glVertexAttrib3dARB", _O(VertexAttrib3dARB) },
1051   { "glVertexAttrib3dvARB", _O(VertexAttrib3dvARB) },
1052   { "glVertexAttrib3fARB", _O(VertexAttrib3fARB) },
1053   { "glVertexAttrib3fvARB", _O(VertexAttrib3fvARB) },
1054   { "glVertexAttrib3sARB", _O(VertexAttrib3sARB) },
1055   { "glVertexAttrib3svARB", _O(VertexAttrib3svARB) },
1056   { "glVertexAttrib4NbvARB", _O(VertexAttrib4NbvARB) },
1057   { "glVertexAttrib4NivARB", _O(VertexAttrib4NivARB) },
1058   { "glVertexAttrib4NsvARB", _O(VertexAttrib4NsvARB) },
1059   { "glVertexAttrib4NubARB", _O(VertexAttrib4NubARB) },
1060   { "glVertexAttrib4NubvARB", _O(VertexAttrib4NubvARB) },
1061   { "glVertexAttrib4NuivARB", _O(VertexAttrib4NuivARB) },
1062   { "glVertexAttrib4NusvARB", _O(VertexAttrib4NusvARB) },
1063   { "glVertexAttrib4bvARB", _O(VertexAttrib4bvARB) },
1064   { "glVertexAttrib4dARB", _O(VertexAttrib4dARB) },
1065   { "glVertexAttrib4dvARB", _O(VertexAttrib4dvARB) },
1066   { "glVertexAttrib4fARB", _O(VertexAttrib4fARB) },
1067   { "glVertexAttrib4fvARB", _O(VertexAttrib4fvARB) },
1068   { "glVertexAttrib4ivARB", _O(VertexAttrib4ivARB) },
1069   { "glVertexAttrib4sARB", _O(VertexAttrib4sARB) },
1070   { "glVertexAttrib4svARB", _O(VertexAttrib4svARB) },
1071   { "glVertexAttrib4ubvARB", _O(VertexAttrib4ubvARB) },
1072   { "glVertexAttrib4uivARB", _O(VertexAttrib4uivARB) },
1073   { "glVertexAttrib4usvARB", _O(VertexAttrib4usvARB) },
1074   { "glVertexAttribPointerARB", _O(VertexAttribPointerARB) },
1075   { "glBindBufferARB", _O(BindBufferARB) },
1076   { "glBufferDataARB", _O(BufferDataARB) },
1077   { "glBufferSubDataARB", _O(BufferSubDataARB) },
1078   { "glDeleteBuffersARB", _O(DeleteBuffersARB) },
1079   { "glGenBuffersARB", _O(GenBuffersARB) },
1080   { "glGetBufferParameterivARB", _O(GetBufferParameterivARB) },
1081   { "glGetBufferPointervARB", _O(GetBufferPointervARB) },
1082   { "glGetBufferSubDataARB", _O(GetBufferSubDataARB) },
1083   { "glIsBufferARB", _O(IsBufferARB) },
1084   { "glMapBufferARB", _O(MapBufferARB) },
1085   { "glUnmapBufferARB", _O(UnmapBufferARB) },
1086   { "glBeginQueryARB", _O(BeginQueryARB) },
1087   { "glDeleteQueriesARB", _O(DeleteQueriesARB) },
1088   { "glEndQueryARB", _O(EndQueryARB) },
1089   { "glGenQueriesARB", _O(GenQueriesARB) },
1090   { "glGetQueryObjectivARB", _O(GetQueryObjectivARB) },
1091   { "glGetQueryObjectuivARB", _O(GetQueryObjectuivARB) },
1092   { "glGetQueryivARB", _O(GetQueryivARB) },
1093   { "glIsQueryARB", _O(IsQueryARB) },
1094   { "glAttachObjectARB", _O(AttachObjectARB) },
1095   { "glCompileShaderARB", _O(CompileShaderARB) },
1096   { "glCreateProgramObjectARB", _O(CreateProgramObjectARB) },
1097   { "glCreateShaderObjectARB", _O(CreateShaderObjectARB) },
1098   { "glDeleteObjectARB", _O(DeleteObjectARB) },
1099   { "glDetachObjectARB", _O(DetachObjectARB) },
1100   { "glGetActiveUniformARB", _O(GetActiveUniformARB) },
1101   { "glGetAttachedObjectsARB", _O(GetAttachedObjectsARB) },
1102   { "glGetHandleARB", _O(GetHandleARB) },
1103   { "glGetInfoLogARB", _O(GetInfoLogARB) },
1104   { "glGetObjectParameterfvARB", _O(GetObjectParameterfvARB) },
1105   { "glGetObjectParameterivARB", _O(GetObjectParameterivARB) },
1106   { "glGetShaderSourceARB", _O(GetShaderSourceARB) },
1107   { "glGetUniformLocationARB", _O(GetUniformLocationARB) },
1108   { "glGetUniformfvARB", _O(GetUniformfvARB) },
1109   { "glGetUniformivARB", _O(GetUniformivARB) },
1110   { "glLinkProgramARB", _O(LinkProgramARB) },
1111   { "glShaderSourceARB", _O(ShaderSourceARB) },
1112   { "glUniform1fARB", _O(Uniform1fARB) },
1113   { "glUniform1fvARB", _O(Uniform1fvARB) },
1114   { "glUniform1iARB", _O(Uniform1iARB) },
1115   { "glUniform1ivARB", _O(Uniform1ivARB) },
1116   { "glUniform2fARB", _O(Uniform2fARB) },
1117   { "glUniform2fvARB", _O(Uniform2fvARB) },
1118   { "glUniform2iARB", _O(Uniform2iARB) },
1119   { "glUniform2ivARB", _O(Uniform2ivARB) },
1120   { "glUniform3fARB", _O(Uniform3fARB) },
1121   { "glUniform3fvARB", _O(Uniform3fvARB) },
1122   { "glUniform3iARB", _O(Uniform3iARB) },
1123   { "glUniform3ivARB", _O(Uniform3ivARB) },
1124   { "glUniform4fARB", _O(Uniform4fARB) },
1125   { "glUniform4fvARB", _O(Uniform4fvARB) },
1126   { "glUniform4iARB", _O(Uniform4iARB) },
1127   { "glUniform4ivARB", _O(Uniform4ivARB) },
1128   { "glUniformMatrix2fvARB", _O(UniformMatrix2fvARB) },
1129   { "glUniformMatrix3fvARB", _O(UniformMatrix3fvARB) },
1130   { "glUniformMatrix4fvARB", _O(UniformMatrix4fvARB) },
1131   { "glUseProgramObjectARB", _O(UseProgramObjectARB) },
1132   { "glValidateProgramARB", _O(ValidateProgramARB) },
1133   { "glBindAttribLocationARB", _O(BindAttribLocationARB) },
1134   { "glGetActiveAttribARB", _O(GetActiveAttribARB) },
1135   { "glGetAttribLocationARB", _O(GetAttribLocationARB) },
1136   { "glDrawBuffersARB", _O(DrawBuffersARB) },
1137   { "glClampColorARB", _O(ClampColorARB) },
1138   { "glDrawArraysInstancedARB", _O(DrawArraysInstancedARB) },
1139   { "glDrawElementsInstancedARB", _O(DrawElementsInstancedARB) },
1140   { "glRenderbufferStorageMultisample", _O(RenderbufferStorageMultisample) },
1141   { "glFramebufferTextureARB", _O(FramebufferTextureARB) },
1142   { "glFramebufferTextureFaceARB", _O(FramebufferTextureFaceARB) },
1143   { "glProgramParameteriARB", _O(ProgramParameteriARB) },
1144   { "glVertexAttribDivisorARB", _O(VertexAttribDivisorARB) },
1145   { "glFlushMappedBufferRange", _O(FlushMappedBufferRange) },
1146   { "glMapBufferRange", _O(MapBufferRange) },
1147   { "glTexBufferARB", _O(TexBufferARB) },
1148   { "glBindVertexArray", _O(BindVertexArray) },
1149   { "glGenVertexArrays", _O(GenVertexArrays) },
1150   { "glCopyBufferSubData", _O(CopyBufferSubData) },
1151   { "glClientWaitSync", _O(ClientWaitSync) },
1152   { "glDeleteSync", _O(DeleteSync) },
1153   { "glFenceSync", _O(FenceSync) },
1154   { "glGetInteger64v", _O(GetInteger64v) },
1155   { "glGetSynciv", _O(GetSynciv) },
1156   { "glIsSync", _O(IsSync) },
1157   { "glWaitSync", _O(WaitSync) },
1158   { "glDrawElementsBaseVertex", _O(DrawElementsBaseVertex) },
1159   { "glDrawElementsInstancedBaseVertex", _O(DrawElementsInstancedBaseVertex) },
1160   { "glDrawRangeElementsBaseVertex", _O(DrawRangeElementsBaseVertex) },
1161   { "glMultiDrawElementsBaseVertex", _O(MultiDrawElementsBaseVertex) },
1162   { "glBlendEquationSeparateiARB", _O(BlendEquationSeparateiARB) },
1163   { "glBlendEquationiARB", _O(BlendEquationiARB) },
1164   { "glBlendFuncSeparateiARB", _O(BlendFuncSeparateiARB) },
1165   { "glBlendFunciARB", _O(BlendFunciARB) },
1166   { "glBindFragDataLocationIndexed", _O(BindFragDataLocationIndexed) },
1167   { "glGetFragDataIndex", _O(GetFragDataIndex) },
1168   { "glBindSampler", _O(BindSampler) },
1169   { "glDeleteSamplers", _O(DeleteSamplers) },
1170   { "glGenSamplers", _O(GenSamplers) },
1171   { "glGetSamplerParameterIiv", _O(GetSamplerParameterIiv) },
1172   { "glGetSamplerParameterIuiv", _O(GetSamplerParameterIuiv) },
1173   { "glGetSamplerParameterfv", _O(GetSamplerParameterfv) },
1174   { "glGetSamplerParameteriv", _O(GetSamplerParameteriv) },
1175   { "glIsSampler", _O(IsSampler) },
1176   { "glSamplerParameterIiv", _O(SamplerParameterIiv) },
1177   { "glSamplerParameterIuiv", _O(SamplerParameterIuiv) },
1178   { "glSamplerParameterf", _O(SamplerParameterf) },
1179   { "glSamplerParameterfv", _O(SamplerParameterfv) },
1180   { "glSamplerParameteri", _O(SamplerParameteri) },
1181   { "glSamplerParameteriv", _O(SamplerParameteriv) },
1182   { "glColorP3ui", _O(ColorP3ui) },
1183   { "glColorP3uiv", _O(ColorP3uiv) },
1184   { "glColorP4ui", _O(ColorP4ui) },
1185   { "glColorP4uiv", _O(ColorP4uiv) },
1186   { "glMultiTexCoordP1ui", _O(MultiTexCoordP1ui) },
1187   { "glMultiTexCoordP1uiv", _O(MultiTexCoordP1uiv) },
1188   { "glMultiTexCoordP2ui", _O(MultiTexCoordP2ui) },
1189   { "glMultiTexCoordP2uiv", _O(MultiTexCoordP2uiv) },
1190   { "glMultiTexCoordP3ui", _O(MultiTexCoordP3ui) },
1191   { "glMultiTexCoordP3uiv", _O(MultiTexCoordP3uiv) },
1192   { "glMultiTexCoordP4ui", _O(MultiTexCoordP4ui) },
1193   { "glMultiTexCoordP4uiv", _O(MultiTexCoordP4uiv) },
1194   { "glNormalP3ui", _O(NormalP3ui) },
1195   { "glNormalP3uiv", _O(NormalP3uiv) },
1196   { "glSecondaryColorP3ui", _O(SecondaryColorP3ui) },
1197   { "glSecondaryColorP3uiv", _O(SecondaryColorP3uiv) },
1198   { "glTexCoordP1ui", _O(TexCoordP1ui) },
1199   { "glTexCoordP1uiv", _O(TexCoordP1uiv) },
1200   { "glTexCoordP2ui", _O(TexCoordP2ui) },
1201   { "glTexCoordP2uiv", _O(TexCoordP2uiv) },
1202   { "glTexCoordP3ui", _O(TexCoordP3ui) },
1203   { "glTexCoordP3uiv", _O(TexCoordP3uiv) },
1204   { "glTexCoordP4ui", _O(TexCoordP4ui) },
1205   { "glTexCoordP4uiv", _O(TexCoordP4uiv) },
1206   { "glVertexAttribP1ui", _O(VertexAttribP1ui) },
1207   { "glVertexAttribP1uiv", _O(VertexAttribP1uiv) },
1208   { "glVertexAttribP2ui", _O(VertexAttribP2ui) },
1209   { "glVertexAttribP2uiv", _O(VertexAttribP2uiv) },
1210   { "glVertexAttribP3ui", _O(VertexAttribP3ui) },
1211   { "glVertexAttribP3uiv", _O(VertexAttribP3uiv) },
1212   { "glVertexAttribP4ui", _O(VertexAttribP4ui) },
1213   { "glVertexAttribP4uiv", _O(VertexAttribP4uiv) },
1214   { "glVertexP2ui", _O(VertexP2ui) },
1215   { "glVertexP2uiv", _O(VertexP2uiv) },
1216   { "glVertexP3ui", _O(VertexP3ui) },
1217   { "glVertexP3uiv", _O(VertexP3uiv) },
1218   { "glVertexP4ui", _O(VertexP4ui) },
1219   { "glVertexP4uiv", _O(VertexP4uiv) },
1220   { "glBindTransformFeedback", _O(BindTransformFeedback) },
1221   { "glDeleteTransformFeedbacks", _O(DeleteTransformFeedbacks) },
1222   { "glDrawTransformFeedback", _O(DrawTransformFeedback) },
1223   { "glGenTransformFeedbacks", _O(GenTransformFeedbacks) },
1224   { "glIsTransformFeedback", _O(IsTransformFeedback) },
1225   { "glPauseTransformFeedback", _O(PauseTransformFeedback) },
1226   { "glResumeTransformFeedback", _O(ResumeTransformFeedback) },
1227   { "glClearDepthf", _O(ClearDepthf) },
1228   { "glDepthRangef", _O(DepthRangef) },
1229   { "glGetShaderPrecisionFormat", _O(GetShaderPrecisionFormat) },
1230   { "glReleaseShaderCompiler", _O(ReleaseShaderCompiler) },
1231   { "glShaderBinary", _O(ShaderBinary) },
1232   { "glDebugMessageCallbackARB", _O(DebugMessageCallbackARB) },
1233   { "glDebugMessageControlARB", _O(DebugMessageControlARB) },
1234   { "glDebugMessageInsertARB", _O(DebugMessageInsertARB) },
1235   { "glGetDebugMessageLogARB", _O(GetDebugMessageLogARB) },
1236   { "glGetGraphicsResetStatusARB", _O(GetGraphicsResetStatusARB) },
1237   { "glGetnColorTableARB", _O(GetnColorTableARB) },
1238   { "glGetnCompressedTexImageARB", _O(GetnCompressedTexImageARB) },
1239   { "glGetnConvolutionFilterARB", _O(GetnConvolutionFilterARB) },
1240   { "glGetnHistogramARB", _O(GetnHistogramARB) },
1241   { "glGetnMapdvARB", _O(GetnMapdvARB) },
1242   { "glGetnMapfvARB", _O(GetnMapfvARB) },
1243   { "glGetnMapivARB", _O(GetnMapivARB) },
1244   { "glGetnMinmaxARB", _O(GetnMinmaxARB) },
1245   { "glGetnPixelMapfvARB", _O(GetnPixelMapfvARB) },
1246   { "glGetnPixelMapuivARB", _O(GetnPixelMapuivARB) },
1247   { "glGetnPixelMapusvARB", _O(GetnPixelMapusvARB) },
1248   { "glGetnPolygonStippleARB", _O(GetnPolygonStippleARB) },
1249   { "glGetnSeparableFilterARB", _O(GetnSeparableFilterARB) },
1250   { "glGetnTexImageARB", _O(GetnTexImageARB) },
1251   { "glGetnUniformdvARB", _O(GetnUniformdvARB) },
1252   { "glGetnUniformfvARB", _O(GetnUniformfvARB) },
1253   { "glGetnUniformivARB", _O(GetnUniformivARB) },
1254   { "glGetnUniformuivARB", _O(GetnUniformuivARB) },
1255   { "glReadnPixelsARB", _O(ReadnPixelsARB) },
1256   { "glTexStorage1D", _O(TexStorage1D) },
1257   { "glTexStorage2D", _O(TexStorage2D) },
1258   { "glTexStorage3D", _O(TexStorage3D) },
1259   { "glTextureStorage1DEXT", _O(TextureStorage1DEXT) },
1260   { "glTextureStorage2DEXT", _O(TextureStorage2DEXT) },
1261   { "glTextureStorage3DEXT", _O(TextureStorage3DEXT) },
1262   { "glPolygonOffsetEXT", _O(PolygonOffsetEXT) },
1263   { "glSampleMaskSGIS", _O(SampleMaskSGIS) },
1264   { "glSamplePatternSGIS", _O(SamplePatternSGIS) },
1265   { "glColorPointerEXT", _O(ColorPointerEXT) },
1266   { "glEdgeFlagPointerEXT", _O(EdgeFlagPointerEXT) },
1267   { "glIndexPointerEXT", _O(IndexPointerEXT) },
1268   { "glNormalPointerEXT", _O(NormalPointerEXT) },
1269   { "glTexCoordPointerEXT", _O(TexCoordPointerEXT) },
1270   { "glVertexPointerEXT", _O(VertexPointerEXT) },
1271   { "glPointParameterfEXT", _O(PointParameterfEXT) },
1272   { "glPointParameterfvEXT", _O(PointParameterfvEXT) },
1273   { "glLockArraysEXT", _O(LockArraysEXT) },
1274   { "glUnlockArraysEXT", _O(UnlockArraysEXT) },
1275   { "glSecondaryColor3bEXT", _O(SecondaryColor3bEXT) },
1276   { "glSecondaryColor3bvEXT", _O(SecondaryColor3bvEXT) },
1277   { "glSecondaryColor3dEXT", _O(SecondaryColor3dEXT) },
1278   { "glSecondaryColor3dvEXT", _O(SecondaryColor3dvEXT) },
1279   { "glSecondaryColor3fEXT", _O(SecondaryColor3fEXT) },
1280   { "glSecondaryColor3fvEXT", _O(SecondaryColor3fvEXT) },
1281   { "glSecondaryColor3iEXT", _O(SecondaryColor3iEXT) },
1282   { "glSecondaryColor3ivEXT", _O(SecondaryColor3ivEXT) },
1283   { "glSecondaryColor3sEXT", _O(SecondaryColor3sEXT) },
1284   { "glSecondaryColor3svEXT", _O(SecondaryColor3svEXT) },
1285   { "glSecondaryColor3ubEXT", _O(SecondaryColor3ubEXT) },
1286   { "glSecondaryColor3ubvEXT", _O(SecondaryColor3ubvEXT) },
1287   { "glSecondaryColor3uiEXT", _O(SecondaryColor3uiEXT) },
1288   { "glSecondaryColor3uivEXT", _O(SecondaryColor3uivEXT) },
1289   { "glSecondaryColor3usEXT", _O(SecondaryColor3usEXT) },
1290   { "glSecondaryColor3usvEXT", _O(SecondaryColor3usvEXT) },
1291   { "glSecondaryColorPointerEXT", _O(SecondaryColorPointerEXT) },
1292   { "glMultiDrawArraysEXT", _O(MultiDrawArraysEXT) },
1293   { "glMultiDrawElementsEXT", _O(MultiDrawElementsEXT) },
1294   { "glFogCoordPointerEXT", _O(FogCoordPointerEXT) },
1295   { "glFogCoorddEXT", _O(FogCoorddEXT) },
1296   { "glFogCoorddvEXT", _O(FogCoorddvEXT) },
1297   { "glFogCoordfEXT", _O(FogCoordfEXT) },
1298   { "glFogCoordfvEXT", _O(FogCoordfvEXT) },
1299   { "glBlendFuncSeparateEXT", _O(BlendFuncSeparateEXT) },
1300   { "glResizeBuffersMESA", _O(ResizeBuffersMESA) },
1301   { "glWindowPos2dMESA", _O(WindowPos2dMESA) },
1302   { "glWindowPos2dvMESA", _O(WindowPos2dvMESA) },
1303   { "glWindowPos2fMESA", _O(WindowPos2fMESA) },
1304   { "glWindowPos2fvMESA", _O(WindowPos2fvMESA) },
1305   { "glWindowPos2iMESA", _O(WindowPos2iMESA) },
1306   { "glWindowPos2ivMESA", _O(WindowPos2ivMESA) },
1307   { "glWindowPos2sMESA", _O(WindowPos2sMESA) },
1308   { "glWindowPos2svMESA", _O(WindowPos2svMESA) },
1309   { "glWindowPos3dMESA", _O(WindowPos3dMESA) },
1310   { "glWindowPos3dvMESA", _O(WindowPos3dvMESA) },
1311   { "glWindowPos3fMESA", _O(WindowPos3fMESA) },
1312   { "glWindowPos3fvMESA", _O(WindowPos3fvMESA) },
1313   { "glWindowPos3iMESA", _O(WindowPos3iMESA) },
1314   { "glWindowPos3ivMESA", _O(WindowPos3ivMESA) },
1315   { "glWindowPos3sMESA", _O(WindowPos3sMESA) },
1316   { "glWindowPos3svMESA", _O(WindowPos3svMESA) },
1317   { "glWindowPos4dMESA", _O(WindowPos4dMESA) },
1318   { "glWindowPos4dvMESA", _O(WindowPos4dvMESA) },
1319   { "glWindowPos4fMESA", _O(WindowPos4fMESA) },
1320   { "glWindowPos4fvMESA", _O(WindowPos4fvMESA) },
1321   { "glWindowPos4iMESA", _O(WindowPos4iMESA) },
1322   { "glWindowPos4ivMESA", _O(WindowPos4ivMESA) },
1323   { "glWindowPos4sMESA", _O(WindowPos4sMESA) },
1324   { "glWindowPos4svMESA", _O(WindowPos4svMESA) },
1325   { "glMultiModeDrawArraysIBM", _O(MultiModeDrawArraysIBM) },
1326   { "glMultiModeDrawElementsIBM", _O(MultiModeDrawElementsIBM) },
1327   { "glAreProgramsResidentNV", _O(AreProgramsResidentNV) },
1328   { "glBindProgramNV", _O(BindProgramNV) },
1329   { "glDeleteProgramsNV", _O(DeleteProgramsNV) },
1330   { "glExecuteProgramNV", _O(ExecuteProgramNV) },
1331   { "glGenProgramsNV", _O(GenProgramsNV) },
1332   { "glGetProgramParameterdvNV", _O(GetProgramParameterdvNV) },
1333   { "glGetProgramParameterfvNV", _O(GetProgramParameterfvNV) },
1334   { "glGetProgramStringNV", _O(GetProgramStringNV) },
1335   { "glGetProgramivNV", _O(GetProgramivNV) },
1336   { "glGetTrackMatrixivNV", _O(GetTrackMatrixivNV) },
1337   { "glGetVertexAttribPointervNV", _O(GetVertexAttribPointervNV) },
1338   { "glGetVertexAttribdvNV", _O(GetVertexAttribdvNV) },
1339   { "glGetVertexAttribfvNV", _O(GetVertexAttribfvNV) },
1340   { "glGetVertexAttribivNV", _O(GetVertexAttribivNV) },
1341   { "glIsProgramNV", _O(IsProgramNV) },
1342   { "glLoadProgramNV", _O(LoadProgramNV) },
1343   { "glProgramParameters4dvNV", _O(ProgramParameters4dvNV) },
1344   { "glProgramParameters4fvNV", _O(ProgramParameters4fvNV) },
1345   { "glRequestResidentProgramsNV", _O(RequestResidentProgramsNV) },
1346   { "glTrackMatrixNV", _O(TrackMatrixNV) },
1347   { "glVertexAttrib1dNV", _O(VertexAttrib1dNV) },
1348   { "glVertexAttrib1dvNV", _O(VertexAttrib1dvNV) },
1349   { "glVertexAttrib1fNV", _O(VertexAttrib1fNV) },
1350   { "glVertexAttrib1fvNV", _O(VertexAttrib1fvNV) },
1351   { "glVertexAttrib1sNV", _O(VertexAttrib1sNV) },
1352   { "glVertexAttrib1svNV", _O(VertexAttrib1svNV) },
1353   { "glVertexAttrib2dNV", _O(VertexAttrib2dNV) },
1354   { "glVertexAttrib2dvNV", _O(VertexAttrib2dvNV) },
1355   { "glVertexAttrib2fNV", _O(VertexAttrib2fNV) },
1356   { "glVertexAttrib2fvNV", _O(VertexAttrib2fvNV) },
1357   { "glVertexAttrib2sNV", _O(VertexAttrib2sNV) },
1358   { "glVertexAttrib2svNV", _O(VertexAttrib2svNV) },
1359   { "glVertexAttrib3dNV", _O(VertexAttrib3dNV) },
1360   { "glVertexAttrib3dvNV", _O(VertexAttrib3dvNV) },
1361   { "glVertexAttrib3fNV", _O(VertexAttrib3fNV) },
1362   { "glVertexAttrib3fvNV", _O(VertexAttrib3fvNV) },
1363   { "glVertexAttrib3sNV", _O(VertexAttrib3sNV) },
1364   { "glVertexAttrib3svNV", _O(VertexAttrib3svNV) },
1365   { "glVertexAttrib4dNV", _O(VertexAttrib4dNV) },
1366   { "glVertexAttrib4dvNV", _O(VertexAttrib4dvNV) },
1367   { "glVertexAttrib4fNV", _O(VertexAttrib4fNV) },
1368   { "glVertexAttrib4fvNV", _O(VertexAttrib4fvNV) },
1369   { "glVertexAttrib4sNV", _O(VertexAttrib4sNV) },
1370   { "glVertexAttrib4svNV", _O(VertexAttrib4svNV) },
1371   { "glVertexAttrib4ubNV", _O(VertexAttrib4ubNV) },
1372   { "glVertexAttrib4ubvNV", _O(VertexAttrib4ubvNV) },
1373   { "glVertexAttribPointerNV", _O(VertexAttribPointerNV) },
1374   { "glVertexAttribs1dvNV", _O(VertexAttribs1dvNV) },
1375   { "glVertexAttribs1fvNV", _O(VertexAttribs1fvNV) },
1376   { "glVertexAttribs1svNV", _O(VertexAttribs1svNV) },
1377   { "glVertexAttribs2dvNV", _O(VertexAttribs2dvNV) },
1378   { "glVertexAttribs2fvNV", _O(VertexAttribs2fvNV) },
1379   { "glVertexAttribs2svNV", _O(VertexAttribs2svNV) },
1380   { "glVertexAttribs3dvNV", _O(VertexAttribs3dvNV) },
1381   { "glVertexAttribs3fvNV", _O(VertexAttribs3fvNV) },
1382   { "glVertexAttribs3svNV", _O(VertexAttribs3svNV) },
1383   { "glVertexAttribs4dvNV", _O(VertexAttribs4dvNV) },
1384   { "glVertexAttribs4fvNV", _O(VertexAttribs4fvNV) },
1385   { "glVertexAttribs4svNV", _O(VertexAttribs4svNV) },
1386   { "glVertexAttribs4ubvNV", _O(VertexAttribs4ubvNV) },
1387   { "glGetTexBumpParameterfvATI", _O(GetTexBumpParameterfvATI) },
1388   { "glGetTexBumpParameterivATI", _O(GetTexBumpParameterivATI) },
1389   { "glTexBumpParameterfvATI", _O(TexBumpParameterfvATI) },
1390   { "glTexBumpParameterivATI", _O(TexBumpParameterivATI) },
1391   { "glAlphaFragmentOp1ATI", _O(AlphaFragmentOp1ATI) },
1392   { "glAlphaFragmentOp2ATI", _O(AlphaFragmentOp2ATI) },
1393   { "glAlphaFragmentOp3ATI", _O(AlphaFragmentOp3ATI) },
1394   { "glBeginFragmentShaderATI", _O(BeginFragmentShaderATI) },
1395   { "glBindFragmentShaderATI", _O(BindFragmentShaderATI) },
1396   { "glColorFragmentOp1ATI", _O(ColorFragmentOp1ATI) },
1397   { "glColorFragmentOp2ATI", _O(ColorFragmentOp2ATI) },
1398   { "glColorFragmentOp3ATI", _O(ColorFragmentOp3ATI) },
1399   { "glDeleteFragmentShaderATI", _O(DeleteFragmentShaderATI) },
1400   { "glEndFragmentShaderATI", _O(EndFragmentShaderATI) },
1401   { "glGenFragmentShadersATI", _O(GenFragmentShadersATI) },
1402   { "glPassTexCoordATI", _O(PassTexCoordATI) },
1403   { "glSampleMapATI", _O(SampleMapATI) },
1404   { "glSetFragmentShaderConstantATI", _O(SetFragmentShaderConstantATI) },
1405   { "glPointParameteriNV", _O(PointParameteriNV) },
1406   { "glPointParameterivNV", _O(PointParameterivNV) },
1407   { "glActiveStencilFaceEXT", _O(ActiveStencilFaceEXT) },
1408   { "glBindVertexArrayAPPLE", _O(BindVertexArrayAPPLE) },
1409   { "glDeleteVertexArraysAPPLE", _O(DeleteVertexArraysAPPLE) },
1410   { "glGenVertexArraysAPPLE", _O(GenVertexArraysAPPLE) },
1411   { "glIsVertexArrayAPPLE", _O(IsVertexArrayAPPLE) },
1412   { "glGetProgramNamedParameterdvNV", _O(GetProgramNamedParameterdvNV) },
1413   { "glGetProgramNamedParameterfvNV", _O(GetProgramNamedParameterfvNV) },
1414   { "glProgramNamedParameter4dNV", _O(ProgramNamedParameter4dNV) },
1415   { "glProgramNamedParameter4dvNV", _O(ProgramNamedParameter4dvNV) },
1416   { "glProgramNamedParameter4fNV", _O(ProgramNamedParameter4fNV) },
1417   { "glProgramNamedParameter4fvNV", _O(ProgramNamedParameter4fvNV) },
1418   { "glPrimitiveRestartIndexNV", _O(PrimitiveRestartIndexNV) },
1419   { "glPrimitiveRestartNV", _O(PrimitiveRestartNV) },
1420   { "glDepthBoundsEXT", _O(DepthBoundsEXT) },
1421   { "glBlendEquationSeparateEXT", _O(BlendEquationSeparateEXT) },
1422   { "glBindFramebufferEXT", _O(BindFramebufferEXT) },
1423   { "glBindRenderbufferEXT", _O(BindRenderbufferEXT) },
1424   { "glCheckFramebufferStatusEXT", _O(CheckFramebufferStatusEXT) },
1425   { "glDeleteFramebuffersEXT", _O(DeleteFramebuffersEXT) },
1426   { "glDeleteRenderbuffersEXT", _O(DeleteRenderbuffersEXT) },
1427   { "glFramebufferRenderbufferEXT", _O(FramebufferRenderbufferEXT) },
1428   { "glFramebufferTexture1DEXT", _O(FramebufferTexture1DEXT) },
1429   { "glFramebufferTexture2DEXT", _O(FramebufferTexture2DEXT) },
1430   { "glFramebufferTexture3DEXT", _O(FramebufferTexture3DEXT) },
1431   { "glGenFramebuffersEXT", _O(GenFramebuffersEXT) },
1432   { "glGenRenderbuffersEXT", _O(GenRenderbuffersEXT) },
1433   { "glGenerateMipmapEXT", _O(GenerateMipmapEXT) },
1434   { "glGetFramebufferAttachmentParameterivEXT", _O(GetFramebufferAttachmentParameterivEXT) },
1435   { "glGetRenderbufferParameterivEXT", _O(GetRenderbufferParameterivEXT) },
1436   { "glIsFramebufferEXT", _O(IsFramebufferEXT) },
1437   { "glIsRenderbufferEXT", _O(IsRenderbufferEXT) },
1438   { "glRenderbufferStorageEXT", _O(RenderbufferStorageEXT) },
1439   { "glBlitFramebufferEXT", _O(BlitFramebufferEXT) },
1440   { "glBufferParameteriAPPLE", _O(BufferParameteriAPPLE) },
1441   { "glFlushMappedBufferRangeAPPLE", _O(FlushMappedBufferRangeAPPLE) },
1442   { "glBindFragDataLocationEXT", _O(BindFragDataLocationEXT) },
1443   { "glGetFragDataLocationEXT", _O(GetFragDataLocationEXT) },
1444   { "glGetUniformuivEXT", _O(GetUniformuivEXT) },
1445   { "glGetVertexAttribIivEXT", _O(GetVertexAttribIivEXT) },
1446   { "glGetVertexAttribIuivEXT", _O(GetVertexAttribIuivEXT) },
1447   { "glUniform1uiEXT", _O(Uniform1uiEXT) },
1448   { "glUniform1uivEXT", _O(Uniform1uivEXT) },
1449   { "glUniform2uiEXT", _O(Uniform2uiEXT) },
1450   { "glUniform2uivEXT", _O(Uniform2uivEXT) },
1451   { "glUniform3uiEXT", _O(Uniform3uiEXT) },
1452   { "glUniform3uivEXT", _O(Uniform3uivEXT) },
1453   { "glUniform4uiEXT", _O(Uniform4uiEXT) },
1454   { "glUniform4uivEXT", _O(Uniform4uivEXT) },
1455   { "glVertexAttribI1iEXT", _O(VertexAttribI1iEXT) },
1456   { "glVertexAttribI1ivEXT", _O(VertexAttribI1ivEXT) },
1457   { "glVertexAttribI1uiEXT", _O(VertexAttribI1uiEXT) },
1458   { "glVertexAttribI1uivEXT", _O(VertexAttribI1uivEXT) },
1459   { "glVertexAttribI2iEXT", _O(VertexAttribI2iEXT) },
1460   { "glVertexAttribI2ivEXT", _O(VertexAttribI2ivEXT) },
1461   { "glVertexAttribI2uiEXT", _O(VertexAttribI2uiEXT) },
1462   { "glVertexAttribI2uivEXT", _O(VertexAttribI2uivEXT) },
1463   { "glVertexAttribI3iEXT", _O(VertexAttribI3iEXT) },
1464   { "glVertexAttribI3ivEXT", _O(VertexAttribI3ivEXT) },
1465   { "glVertexAttribI3uiEXT", _O(VertexAttribI3uiEXT) },
1466   { "glVertexAttribI3uivEXT", _O(VertexAttribI3uivEXT) },
1467   { "glVertexAttribI4bvEXT", _O(VertexAttribI4bvEXT) },
1468   { "glVertexAttribI4iEXT", _O(VertexAttribI4iEXT) },
1469   { "glVertexAttribI4ivEXT", _O(VertexAttribI4ivEXT) },
1470   { "glVertexAttribI4svEXT", _O(VertexAttribI4svEXT) },
1471   { "glVertexAttribI4ubvEXT", _O(VertexAttribI4ubvEXT) },
1472   { "glVertexAttribI4uiEXT", _O(VertexAttribI4uiEXT) },
1473   { "glVertexAttribI4uivEXT", _O(VertexAttribI4uivEXT) },
1474   { "glVertexAttribI4usvEXT", _O(VertexAttribI4usvEXT) },
1475   { "glVertexAttribIPointerEXT", _O(VertexAttribIPointerEXT) },
1476   { "glFramebufferTextureLayerEXT", _O(FramebufferTextureLayerEXT) },
1477   { "glColorMaskIndexedEXT", _O(ColorMaskIndexedEXT) },
1478   { "glDisableIndexedEXT", _O(DisableIndexedEXT) },
1479   { "glEnableIndexedEXT", _O(EnableIndexedEXT) },
1480   { "glGetBooleanIndexedvEXT", _O(GetBooleanIndexedvEXT) },
1481   { "glGetIntegerIndexedvEXT", _O(GetIntegerIndexedvEXT) },
1482   { "glIsEnabledIndexedEXT", _O(IsEnabledIndexedEXT) },
1483   { "glClearColorIiEXT", _O(ClearColorIiEXT) },
1484   { "glClearColorIuiEXT", _O(ClearColorIuiEXT) },
1485   { "glGetTexParameterIivEXT", _O(GetTexParameterIivEXT) },
1486   { "glGetTexParameterIuivEXT", _O(GetTexParameterIuivEXT) },
1487   { "glTexParameterIivEXT", _O(TexParameterIivEXT) },
1488   { "glTexParameterIuivEXT", _O(TexParameterIuivEXT) },
1489   { "glBeginConditionalRenderNV", _O(BeginConditionalRenderNV) },
1490   { "glEndConditionalRenderNV", _O(EndConditionalRenderNV) },
1491   { "glBeginTransformFeedbackEXT", _O(BeginTransformFeedbackEXT) },
1492   { "glBindBufferBaseEXT", _O(BindBufferBaseEXT) },
1493   { "glBindBufferOffsetEXT", _O(BindBufferOffsetEXT) },
1494   { "glBindBufferRangeEXT", _O(BindBufferRangeEXT) },
1495   { "glEndTransformFeedbackEXT", _O(EndTransformFeedbackEXT) },
1496   { "glGetTransformFeedbackVaryingEXT", _O(GetTransformFeedbackVaryingEXT) },
1497   { "glTransformFeedbackVaryingsEXT", _O(TransformFeedbackVaryingsEXT) },
1498   { "glProvokingVertexEXT", _O(ProvokingVertexEXT) },
1499   { "glGetObjectParameterivAPPLE", _O(GetObjectParameterivAPPLE) },
1500   { "glObjectPurgeableAPPLE", _O(ObjectPurgeableAPPLE) },
1501   { "glObjectUnpurgeableAPPLE", _O(ObjectUnpurgeableAPPLE) },
1502   { "glActiveProgramEXT", _O(ActiveProgramEXT) },
1503   { "glCreateShaderProgramEXT", _O(CreateShaderProgramEXT) },
1504   { "glUseShaderProgramEXT", _O(UseShaderProgramEXT) },
1505   { "glTextureBarrierNV", _O(TextureBarrierNV) },
1506   { "glStencilFuncSeparateATI", _O(StencilFuncSeparateATI) },
1507   { "glProgramEnvParameters4fvEXT", _O(ProgramEnvParameters4fvEXT) },
1508   { "glProgramLocalParameters4fvEXT", _O(ProgramLocalParameters4fvEXT) },
1509   { "glGetQueryObjecti64vEXT", _O(GetQueryObjecti64vEXT) },
1510   { "glGetQueryObjectui64vEXT", _O(GetQueryObjectui64vEXT) },
1511   { "glEGLImageTargetRenderbufferStorageOES", _O(EGLImageTargetRenderbufferStorageOES) },
1512   { "glEGLImageTargetTexture2DOES", _O(EGLImageTargetTexture2DOES) },
1513   { NULL, 0 }
1514};
1515
1516#ifndef GLX_INDIRECT_RENDERING
1517extern "C" {
1518GLAPI GLboolean GLAPIENTRY
1519glAreTexturesResidentEXT(GLsizei n, const GLuint *textures,
1520			 GLboolean *residences)
1521{
1522   (void) n;
1523   (void) textures;
1524   (void) residences;
1525   return GL_FALSE;
1526}
1527
1528GLAPI void GLAPIENTRY
1529glDeleteTexturesEXT(GLsizei n, const GLuint *textures)
1530{
1531   (void) n;
1532   (void) textures;
1533}
1534
1535GLAPI void GLAPIENTRY
1536glGenTexturesEXT(GLsizei n, GLuint *textures)
1537{
1538   (void) n;
1539   (void) textures;
1540}
1541
1542GLAPI GLboolean GLAPIENTRY
1543glIsTextureEXT(GLuint texture)
1544{
1545   (void) texture;
1546   return GL_FALSE;
1547}
1548
1549GLAPI void GLAPIENTRY
1550glGetColorTableEXT(GLenum target, GLenum format, GLenum type, GLvoid *table)
1551{
1552   (void) target;
1553   (void) format;
1554   (void) type;
1555   (void) table;
1556}
1557
1558GLAPI void GLAPIENTRY
1559glGetColorTableParameterfvEXT(GLenum target, GLenum pname, GLfloat *params)
1560{
1561   (void) target;
1562   (void) pname;
1563   (void) params;
1564}
1565
1566GLAPI void GLAPIENTRY
1567glGetColorTableParameterivEXT(GLenum target, GLenum pname, GLint *params)
1568{
1569   (void) target;
1570   (void) pname;
1571   (void) params;
1572}
1573
1574void GLAPIENTRY
1575gl_dispatch_stub_356(GLenum target, GLenum format, GLenum type, GLvoid * image)
1576{
1577   (void) target;
1578   (void) format;
1579   (void) type;
1580   (void) image;
1581}
1582
1583void GLAPIENTRY
1584gl_dispatch_stub_357(GLenum target, GLenum pname, GLfloat * params)
1585{
1586   (void) target;
1587   (void) pname;
1588   (void) params;
1589}
1590
1591void GLAPIENTRY
1592gl_dispatch_stub_358(GLenum target, GLenum pname, GLint * params)
1593{
1594   (void) target;
1595   (void) pname;
1596   (void) params;
1597}
1598
1599void GLAPIENTRY
1600gl_dispatch_stub_359(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span)
1601{
1602   (void) target;
1603   (void) format;
1604   (void) type;
1605   (void) row;
1606   (void) column;
1607   (void) span;
1608}
1609
1610void GLAPIENTRY
1611gl_dispatch_stub_361(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
1612{
1613   (void) target;
1614   (void) reset;
1615   (void) format;
1616   (void) type;
1617   (void) values;
1618}
1619
1620void GLAPIENTRY
1621gl_dispatch_stub_362(GLenum target, GLenum pname, GLfloat * params)
1622{
1623   (void) target;
1624   (void) pname;
1625   (void) params;
1626}
1627
1628void GLAPIENTRY
1629gl_dispatch_stub_363(GLenum target, GLenum pname, GLint * params)
1630{
1631   (void) target;
1632   (void) pname;
1633   (void) params;
1634}
1635
1636void GLAPIENTRY
1637gl_dispatch_stub_364(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values)
1638{
1639   (void) target;
1640   (void) reset;
1641   (void) format;
1642   (void) type;
1643   (void) values;
1644}
1645
1646void GLAPIENTRY
1647gl_dispatch_stub_365(GLenum target, GLenum pname, GLfloat * params)
1648{
1649   (void) target;
1650   (void) pname;
1651   (void) params;
1652}
1653
1654void GLAPIENTRY
1655gl_dispatch_stub_366(GLenum target, GLenum pname, GLint * params)
1656{
1657   (void) target;
1658   (void) pname;
1659   (void) params;
1660}
1661
1662}
1663#endif
1664