blob: 5e05e5a8643a5d2ec863a2b45afd79f46090bdcf [file] [log] [blame]
Brian Paul17fe22d2001-11-18 23:16:56 +00001/* $Id: getprocaddress.c,v 1.1 2001/11/18 23:16:56 brianp Exp $ */
2
3/*
4 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 */
23
24/*
25 * Test that glXGetProcAddress works.
26 */
27
28#include <X11/Xlib.h>
29#include <X11/Xutil.h>
30#include <GL/gl.h>
31#include <GL/glx.h>
32#include <stdio.h>
33#include <stdlib.h>
34#include <string.h>
35
36
37/* This big list of functions can be generated automatically by
38 * running the functions.py script.
39 */
40static const char *functions[] = {
41 "-1.0",
42 "glNewList",
43 "glEndList",
44 "glCallList",
45 "glCallLists",
46 "glDeleteLists",
47 "glGenLists",
48 "glListBase",
49 "glBegin",
50 "glBitmap",
51 "glColor3b",
52 "glColor3bv",
53 "glColor3d",
54 "glColor3dv",
55 "glColor3f",
56 "glColor3fv",
57 "glColor3i",
58 "glColor3iv",
59 "glColor3s",
60 "glColor3sv",
61 "glColor3ub",
62 "glColor3ubv",
63 "glColor3ui",
64 "glColor3uiv",
65 "glColor3us",
66 "glColor3usv",
67 "glColor4b",
68 "glColor4bv",
69 "glColor4d",
70 "glColor4dv",
71 "glColor4f",
72 "glColor4fv",
73 "glColor4i",
74 "glColor4iv",
75 "glColor4s",
76 "glColor4sv",
77 "glColor4ub",
78 "glColor4ubv",
79 "glColor4ui",
80 "glColor4uiv",
81 "glColor4us",
82 "glColor4usv",
83 "glEdgeFlag",
84 "glEdgeFlagv",
85 "glEnd",
86 "glIndexd",
87 "glIndexdv",
88 "glIndexf",
89 "glIndexfv",
90 "glIndexi",
91 "glIndexiv",
92 "glIndexs",
93 "glIndexsv",
94 "glNormal3b",
95 "glNormal3bv",
96 "glNormal3d",
97 "glNormal3dv",
98 "glNormal3f",
99 "glNormal3fv",
100 "glNormal3i",
101 "glNormal3iv",
102 "glNormal3s",
103 "glNormal3sv",
104 "glRasterPos2d",
105 "glRasterPos2dv",
106 "glRasterPos2f",
107 "glRasterPos2fv",
108 "glRasterPos2i",
109 "glRasterPos2iv",
110 "glRasterPos2s",
111 "glRasterPos2sv",
112 "glRasterPos3d",
113 "glRasterPos3dv",
114 "glRasterPos3f",
115 "glRasterPos3fv",
116 "glRasterPos3i",
117 "glRasterPos3iv",
118 "glRasterPos3s",
119 "glRasterPos3sv",
120 "glRasterPos4d",
121 "glRasterPos4dv",
122 "glRasterPos4f",
123 "glRasterPos4fv",
124 "glRasterPos4i",
125 "glRasterPos4iv",
126 "glRasterPos4s",
127 "glRasterPos4sv",
128 "glRectd",
129 "glRectdv",
130 "glRectf",
131 "glRectfv",
132 "glRecti",
133 "glRectiv",
134 "glRects",
135 "glRectsv",
136 "glTexCoord1d",
137 "glTexCoord1dv",
138 "glTexCoord1f",
139 "glTexCoord1fv",
140 "glTexCoord1i",
141 "glTexCoord1iv",
142 "glTexCoord1s",
143 "glTexCoord1sv",
144 "glTexCoord2d",
145 "glTexCoord2dv",
146 "glTexCoord2f",
147 "glTexCoord2fv",
148 "glTexCoord2i",
149 "glTexCoord2iv",
150 "glTexCoord2s",
151 "glTexCoord2sv",
152 "glTexCoord3d",
153 "glTexCoord3dv",
154 "glTexCoord3f",
155 "glTexCoord3fv",
156 "glTexCoord3i",
157 "glTexCoord3iv",
158 "glTexCoord3s",
159 "glTexCoord3sv",
160 "glTexCoord4d",
161 "glTexCoord4dv",
162 "glTexCoord4f",
163 "glTexCoord4fv",
164 "glTexCoord4i",
165 "glTexCoord4iv",
166 "glTexCoord4s",
167 "glTexCoord4sv",
168 "glVertex2d",
169 "glVertex2dv",
170 "glVertex2f",
171 "glVertex2fv",
172 "glVertex2i",
173 "glVertex2iv",
174 "glVertex2s",
175 "glVertex2sv",
176 "glVertex3d",
177 "glVertex3dv",
178 "glVertex3f",
179 "glVertex3fv",
180 "glVertex3i",
181 "glVertex3iv",
182 "glVertex3s",
183 "glVertex3sv",
184 "glVertex4d",
185 "glVertex4dv",
186 "glVertex4f",
187 "glVertex4fv",
188 "glVertex4i",
189 "glVertex4iv",
190 "glVertex4s",
191 "glVertex4sv",
192 "glClipPlane",
193 "glColorMaterial",
194 "glCullFace",
195 "glFogf",
196 "glFogfv",
197 "glFogi",
198 "glFogiv",
199 "glFrontFace",
200 "glHint",
201 "glLightf",
202 "glLightfv",
203 "glLighti",
204 "glLightiv",
205 "glLightModelf",
206 "glLightModelfv",
207 "glLightModeli",
208 "glLightModeliv",
209 "glLineStipple",
210 "glLineWidth",
211 "glMaterialf",
212 "glMaterialfv",
213 "glMateriali",
214 "glMaterialiv",
215 "glPointSize",
216 "glPolygonMode",
217 "glPolygonStipple",
218 "glScissor",
219 "glShadeModel",
220 "glTexParameterf",
221 "glTexParameterfv",
222 "glTexParameteri",
223 "glTexParameteriv",
224 "glTexImage1D",
225 "glTexImage2D",
226 "glTexEnvf",
227 "glTexEnvfv",
228 "glTexEnvi",
229 "glTexEnviv",
230 "glTexGend",
231 "glTexGendv",
232 "glTexGenf",
233 "glTexGenfv",
234 "glTexGeni",
235 "glTexGeniv",
236 "glFeedbackBuffer",
237 "glSelectBuffer",
238 "glRenderMode",
239 "glInitNames",
240 "glLoadName",
241 "glPassThrough",
242 "glPopName",
243 "glPushName",
244 "glDrawBuffer",
245 "glClear",
246 "glClearAccum",
247 "glClearIndex",
248 "glClearColor",
249 "glClearStencil",
250 "glClearDepth",
251 "glStencilMask",
252 "glColorMask",
253 "glDepthMask",
254 "glIndexMask",
255 "glAccum",
256 "glDisable",
257 "glEnable",
258 "glFinish",
259 "glFlush",
260 "glPopAttrib",
261 "glPushAttrib",
262 "glMap1d",
263 "glMap1f",
264 "glMap2d",
265 "glMap2f",
266 "glMapGrid1d",
267 "glMapGrid1f",
268 "glMapGrid2d",
269 "glMapGrid2f",
270 "glEvalCoord1d",
271 "glEvalCoord1dv",
272 "glEvalCoord1f",
273 "glEvalCoord1fv",
274 "glEvalCoord2d",
275 "glEvalCoord2dv",
276 "glEvalCoord2f",
277 "glEvalCoord2fv",
278 "glEvalMesh1",
279 "glEvalPoint1",
280 "glEvalMesh2",
281 "glEvalPoint2",
282 "glAlphaFunc",
283 "glBlendFunc",
284 "glLogicOp",
285 "glStencilFunc",
286 "glStencilOp",
287 "glDepthFunc",
288 "glPixelZoom",
289 "glPixelTransferf",
290 "glPixelTransferi",
291 "glPixelStoref",
292 "glPixelStorei",
293 "glPixelMapfv",
294 "glPixelMapuiv",
295 "glPixelMapusv",
296 "glReadBuffer",
297 "glCopyPixels",
298 "glReadPixels",
299 "glDrawPixels",
300 "glGetBooleanv",
301 "glGetClipPlane",
302 "glGetDoublev",
303 "glGetError",
304 "glGetFloatv",
305 "glGetIntegerv",
306 "glGetLightfv",
307 "glGetLightiv",
308 "glGetMapdv",
309 "glGetMapfv",
310 "glGetMapiv",
311 "glGetMaterialfv",
312 "glGetMaterialiv",
313 "glGetPixelMapfv",
314 "glGetPixelMapuiv",
315 "glGetPixelMapusv",
316 "glGetPolygonStipple",
317 "glGetString",
318 "glGetTexEnvfv",
319 "glGetTexEnviv",
320 "glGetTexGendv",
321 "glGetTexGenfv",
322 "glGetTexGeniv",
323 "glGetTexImage",
324 "glGetTexParameterfv",
325 "glGetTexParameteriv",
326 "glGetTexLevelParameterfv",
327 "glGetTexLevelParameteriv",
328 "glIsEnabled",
329 "glIsList",
330 "glDepthRange",
331 "glFrustum",
332 "glLoadIdentity",
333 "glLoadMatrixf",
334 "glLoadMatrixd",
335 "glMatrixMode",
336 "glMultMatrixf",
337 "glMultMatrixd",
338 "glOrtho",
339 "glPopMatrix",
340 "glPushMatrix",
341 "glRotated",
342 "glRotatef",
343 "glScaled",
344 "glScalef",
345 "glTranslated",
346 "glTranslatef",
347 "glViewport",
348 "-1.1",
349 "glArrayElement",
350 "glColorPointer",
351 "glDisableClientState",
352 "glDrawArrays",
353 "glDrawElements",
354 "glEdgeFlagPointer",
355 "glEnableClientState",
356 "glGetPointerv",
357 "glIndexPointer",
358 "glInterleavedArrays",
359 "glNormalPointer",
360 "glTexCoordPointer",
361 "glVertexPointer",
362 "glPolygonOffset",
363 "glCopyTexImage1D",
364 "glCopyTexImage2D",
365 "glCopyTexSubImage1D",
366 "glCopyTexSubImage2D",
367 "glTexSubImage1D",
368 "glTexSubImage2D",
369 "glAreTexturesResident",
370 "glBindTexture",
371 "glDeleteTextures",
372 "glGenTextures",
373 "glIsTexture",
374 "glPrioritizeTextures",
375 "glIndexub",
376 "glIndexubv",
377 "glPopClientAttrib",
378 "glPushClientAttrib",
379 "-1.2",
380 "glBlendColor",
381 "glBlendEquation",
382 "glDrawRangeElements",
383 "glColorTable",
384 "glColorTableParameterfv",
385 "glColorTableParameteriv",
386 "glCopyColorTable",
387 "glGetColorTable",
388 "glGetColorTableParameterfv",
389 "glGetColorTableParameteriv",
390 "glColorSubTable",
391 "glCopyColorSubTable",
392 "glConvolutionFilter1D",
393 "glConvolutionFilter2D",
394 "glConvolutionParameterf",
395 "glConvolutionParameterfv",
396 "glConvolutionParameteri",
397 "glConvolutionParameteriv",
398 "glCopyConvolutionFilter1D",
399 "glCopyConvolutionFilter2D",
400 "glGetConvolutionFilter",
401 "glGetConvolutionParameterfv",
402 "glGetConvolutionParameteriv",
403 "glGetSeparableFilter",
404 "glSeparableFilter2D",
405 "glGetHistogram",
406 "glGetHistogramParameterfv",
407 "glGetHistogramParameteriv",
408 "glGetMinmax",
409 "glGetMinmaxParameterfv",
410 "glGetMinmaxParameteriv",
411 "glHistogram",
412 "glMinmax",
413 "glResetHistogram",
414 "glResetMinmax",
415 "glTexImage3D",
416 "glTexSubImage3D",
417 "glCopyTexSubImage3D",
418 "-1.3",
419 "glActiveTexture",
420 "glClientActiveTexture",
421 "glMultiTexCoord1d",
422 "glMultiTexCoord1dv",
423 "glMultiTexCoord1f",
424 "glMultiTexCoord1fv",
425 "glMultiTexCoord1i",
426 "glMultiTexCoord1iv",
427 "glMultiTexCoord1s",
428 "glMultiTexCoord1sv",
429 "glMultiTexCoord2d",
430 "glMultiTexCoord2dv",
431 "glMultiTexCoord2f",
432 "glMultiTexCoord2fv",
433 "glMultiTexCoord2i",
434 "glMultiTexCoord2iv",
435 "glMultiTexCoord2s",
436 "glMultiTexCoord2sv",
437 "glMultiTexCoord3d",
438 "glMultiTexCoord3dv",
439 "glMultiTexCoord3f",
440 "glMultiTexCoord3fv",
441 "glMultiTexCoord3i",
442 "glMultiTexCoord3iv",
443 "glMultiTexCoord3s",
444 "glMultiTexCoord3sv",
445 "glMultiTexCoord4d",
446 "glMultiTexCoord4dv",
447 "glMultiTexCoord4f",
448 "glMultiTexCoord4fv",
449 "glMultiTexCoord4i",
450 "glMultiTexCoord4iv",
451 "glMultiTexCoord4s",
452 "glMultiTexCoord4sv",
453 "glLoadTransposeMatrixf",
454 "glLoadTransposeMatrixd",
455 "glMultTransposeMatrixf",
456 "glMultTransposeMatrixd",
457 "glSampleCoverage",
458 "glCompressedTexImage3D",
459 "glCompressedTexImage2D",
460 "glCompressedTexImage1D",
461 "glCompressedTexSubImage3D",
462 "glCompressedTexSubImage2D",
463 "glCompressedTexSubImage1D",
464 "glGetCompressedTexImage",
465 "-GL_ARB_multitexture",
466 "glActiveTextureARB",
467 "glClientActiveTextureARB",
468 "glMultiTexCoord1dARB",
469 "glMultiTexCoord1dvARB",
470 "glMultiTexCoord1fARB",
471 "glMultiTexCoord1fvARB",
472 "glMultiTexCoord1iARB",
473 "glMultiTexCoord1ivARB",
474 "glMultiTexCoord1sARB",
475 "glMultiTexCoord1svARB",
476 "glMultiTexCoord2dARB",
477 "glMultiTexCoord2dvARB",
478 "glMultiTexCoord2fARB",
479 "glMultiTexCoord2fvARB",
480 "glMultiTexCoord2iARB",
481 "glMultiTexCoord2ivARB",
482 "glMultiTexCoord2sARB",
483 "glMultiTexCoord2svARB",
484 "glMultiTexCoord3dARB",
485 "glMultiTexCoord3dvARB",
486 "glMultiTexCoord3fARB",
487 "glMultiTexCoord3fvARB",
488 "glMultiTexCoord3iARB",
489 "glMultiTexCoord3ivARB",
490 "glMultiTexCoord3sARB",
491 "glMultiTexCoord3svARB",
492 "glMultiTexCoord4dARB",
493 "glMultiTexCoord4dvARB",
494 "glMultiTexCoord4fARB",
495 "glMultiTexCoord4fvARB",
496 "glMultiTexCoord4iARB",
497 "glMultiTexCoord4ivARB",
498 "glMultiTexCoord4sARB",
499 "glMultiTexCoord4svARB",
500 "-GL_ARB_transpose_matrix",
501 "glLoadTransposeMatrixfARB",
502 "glLoadTransposeMatrixdARB",
503 "glMultTransposeMatrixfARB",
504 "glMultTransposeMatrixdARB",
505 "-GL_ARB_multisample",
506 "glSampleCoverageARB",
507 "-unused",
508 "gl__unused413",
509 "-GL_ARB_texture_compression",
510 "glCompressedTexImage3DARB",
511 "glCompressedTexImage2DARB",
512 "glCompressedTexImage1DARB",
513 "glCompressedTexSubImage3DARB",
514 "glCompressedTexSubImage2DARB",
515 "glCompressedTexSubImage1DARB",
516 "glGetCompressedTexImageARB",
517 "-GL_ARB_vertex_blend",
518 "glWeightbvARB",
519 "glWeightsvARB",
520 "glWeightivARB",
521 "glWeightfvARB",
522 "glWeightdvARB",
523 "glWeightubvARB",
524 "glWeightusvARB",
525 "glWeightuivARB",
526 "glWeightPointerARB",
527 "glVertexBlendARB",
528 "-GL_ARB_matrix_palette",
529 "glCurrentPaletteMatrixARB",
530 "glMatrixIndexubvARB",
531 "glMatrixIndexusvARB",
532 "glMatrixIndexuivARB",
533 "glMatrixIndexPointerARB",
534 "-GL_EXT_blend_color",
535 "glBlendColorEXT",
536 "-GL_EXT_polygon_offset",
537 "glPolygonOffsetEXT",
538 "-GL_EXT_texture3D",
539 "glTexImage3DEXT",
540 "glTexSubImage3DEXT",
541 "-GL_SGIS_texture_filter4",
542 "glGetTexFilterFuncSGIS",
543 "glTexFilterFuncSGIS",
544 "-GL_EXT_subtexture",
545 "glTexSubImage1DEXT",
546 "glTexSubImage2DEXT",
547 "-GL_EXT_copy_texture",
548 "glCopyTexImage1DEXT",
549 "glCopyTexImage2DEXT",
550 "glCopyTexSubImage1DEXT",
551 "glCopyTexSubImage2DEXT",
552 "glCopyTexSubImage3DEXT",
553 "-GL_EXT_histogram",
554 "glGetHistogramEXT",
555 "glGetHistogramParameterfvEXT",
556 "glGetHistogramParameterivEXT",
557 "glGetMinmaxEXT",
558 "glGetMinmaxParameterfvEXT",
559 "glGetMinmaxParameterivEXT",
560 "glHistogramEXT",
561 "glMinmaxEXT",
562 "glResetHistogramEXT",
563 "glResetMinmaxEXT",
564 "-GL_EXT_convolution",
565 "glConvolutionFilter1DEXT",
566 "glConvolutionFilter2DEXT",
567 "glConvolutionParameterfEXT",
568 "glConvolutionParameterfvEXT",
569 "glConvolutionParameteriEXT",
570 "glConvolutionParameterivEXT",
571 "glCopyConvolutionFilter1DEXT",
572 "glCopyConvolutionFilter2DEXT",
573 "glGetConvolutionFilterEXT",
574 "glGetConvolutionParameterfvEXT",
575 "glGetConvolutionParameterivEXT",
576 "glGetSeparableFilterEXT",
577 "glSeparableFilter2DEXT",
578 "-GL_SGI_color_table",
579 "glColorTableSGI",
580 "glColorTableParameterfvSGI",
581 "glColorTableParameterivSGI",
582 "glCopyColorTableSGI",
583 "glGetColorTableSGI",
584 "glGetColorTableParameterfvSGI",
585 "glGetColorTableParameterivSGI",
586 "-GL_SGIX_pixel_texture",
587 "glPixelTexGenSGIX",
588 "-GL_SGIS_pixel_texture",
589 "glPixelTexGenParameteriSGIS",
590 "glPixelTexGenParameterivSGIS",
591 "glPixelTexGenParameterfSGIS",
592 "glPixelTexGenParameterfvSGIS",
593 "glGetPixelTexGenParameterivSGIS",
594 "glGetPixelTexGenParameterfvSGIS",
595 "-GL_SGIS_texture4D",
596 "glTexImage4DSGIS",
597 "glTexSubImage4DSGIS",
598 "-GL_EXT_texture_object",
599 "glAreTexturesResidentEXT",
600 "glBindTextureEXT",
601 "glDeleteTexturesEXT",
602 "glGenTexturesEXT",
603 "glIsTextureEXT",
604 "glPrioritizeTexturesEXT",
605 "-GL_SGIS_detail_texture",
606 "glDetailTexFuncSGIS",
607 "glGetDetailTexFuncSGIS",
608 "-GL_SGIS_sharpen_texture",
609 "glSharpenTexFuncSGIS",
610 "glGetSharpenTexFuncSGIS",
611 "-GL_SGIS_multisample",
612 "glSampleMaskSGIS",
613 "glSamplePatternSGIS",
614 "-GL_EXT_vertex_array",
615 "glArrayElementEXT",
616 "glColorPointerEXT",
617 "glDrawArraysEXT",
618 "glEdgeFlagPointerEXT",
619 "glGetPointervEXT",
620 "glIndexPointerEXT",
621 "glNormalPointerEXT",
622 "glTexCoordPointerEXT",
623 "glVertexPointerEXT",
624 "-GL_EXT_blend_minmax",
625 "glBlendEquationEXT",
626 "-GL_SGIX_sprite",
627 "glSpriteParameterfSGIX",
628 "glSpriteParameterfvSGIX",
629 "glSpriteParameteriSGIX",
630 "glSpriteParameterivSGIX",
631 "-GL_ARB_point_parameters",
632 "glPointParameterfARB",
633 "glPointParameterfvARB",
634 "-GL_EXT_point_parameters",
635 "glPointParameterfEXT",
636 "glPointParameterfvEXT",
637 "-GL_SGIS_point_parameters",
638 "glPointParameterfSGIS",
639 "glPointParameterfvSGIS",
640 "-GL_SGIX_instruments",
641 "glGetInstrumentsSGIX",
642 "glInstrumentsBufferSGIX",
643 "glPollInstrumentsSGIX",
644 "glReadInstrumentsSGIX",
645 "glStartInstrumentsSGIX",
646 "glStopInstrumentsSGIX",
647 "-GL_SGIX_framezoom",
648 "glFrameZoomSGIX",
649 "-GL_SGIX_tag_sample_buffer",
650 "glTagSampleBufferSGIX",
651 "-GL_SGIX_polynomial_ffd",
652 "glDeformationMap3dSGIX",
653 "glDeformationMap3fSGIX",
654 "glDeformSGIX",
655 "glLoadIdentityDeformationMapSGIX",
656 "-GL_SGIX_reference_plane",
657 "glReferencePlaneSGIX",
658 "-GL_SGIX_flush_raster",
659 "glFlushRasterSGIX",
660 "-GL_SGIS_fog_function",
661 "glFogFuncSGIS",
662 "glGetFogFuncSGIS",
663 "-GL_HP_image_transform",
664 "glImageTransformParameteriHP",
665 "glImageTransformParameterfHP",
666 "glImageTransformParameterivHP",
667 "glImageTransformParameterfvHP",
668 "glGetImageTransformParameterivHP",
669 "glGetImageTransformParameterfvHP",
670 "-GL_EXT_color_subtable",
671 "glColorSubTableEXT",
672 "glCopyColorSubTableEXT",
673 "-GL_PGI_misc_hints",
674 "glHintPGI",
675 "-GL_EXT_paletted_texture",
676 "glColorTableEXT",
677 "glGetColorTableEXT",
678 "glGetColorTableParameterivEXT",
679 "glGetColorTableParameterfvEXT",
680 "-GL_SGIX_list_priority",
681 "glGetListParameterfvSGIX",
682 "glGetListParameterivSGIX",
683 "glListParameterfSGIX",
684 "glListParameterfvSGIX",
685 "glListParameteriSGIX",
686 "glListParameterivSGIX",
687 "-GL_EXT_index_material",
688 "glIndexMaterialEXT",
689 "-GL_EXT_index_func",
690 "glIndexFuncEXT",
691 "-GL_EXT_compiled_vertex_array",
692 "glLockArraysEXT",
693 "glUnlockArraysEXT",
694 "-GL_EXT_cull_vertex",
695 "glCullParameterdvEXT",
696 "glCullParameterfvEXT",
697 "-GL_SGIX_fragment_lighting",
698 "glFragmentColorMaterialSGIX",
699 "glFragmentLightfSGIX",
700 "glFragmentLightfvSGIX",
701 "glFragmentLightiSGIX",
702 "glFragmentLightivSGIX",
703 "glFragmentLightModelfSGIX",
704 "glFragmentLightModelfvSGIX",
705 "glFragmentLightModeliSGIX",
706 "glFragmentLightModelivSGIX",
707 "glFragmentMaterialfSGIX",
708 "glFragmentMaterialfvSGIX",
709 "glFragmentMaterialiSGIX",
710 "glFragmentMaterialivSGIX",
711 "glGetFragmentLightfvSGIX",
712 "glGetFragmentLightivSGIX",
713 "glGetFragmentMaterialfvSGIX",
714 "glGetFragmentMaterialivSGIX",
715 "glLightEnviSGIX",
716 "-GL_EXT_draw_range_elements",
717 "glDrawRangeElementsEXT",
718 "-GL_EXT_light_texture",
719 "glApplyTextureEXT",
720 "glTextureLightEXT",
721 "glTextureMaterialEXT",
722 "-GL_SGIX_async",
723 "glAsyncMarkerSGIX",
724 "glFinishAsyncSGIX",
725 "glPollAsyncSGIX",
726 "glGenAsyncMarkersSGIX",
727 "glDeleteAsyncMarkersSGIX",
728 "glIsAsyncMarkerSGIX",
729 "-GL_INTEL_parallel_arrays",
730 "glVertexPointervINTEL",
731 "glNormalPointervINTEL",
732 "glColorPointervINTEL",
733 "glTexCoordPointervINTEL",
734 "-GL_EXT_pixel_transform",
735 "glPixelTransformParameteriEXT",
736 "glPixelTransformParameterfEXT",
737 "glPixelTransformParameterivEXT",
738 "glPixelTransformParameterfvEXT",
739 "-GL_EXT_secondary_color",
740 "glSecondaryColor3bEXT",
741 "glSecondaryColor3bvEXT",
742 "glSecondaryColor3dEXT",
743 "glSecondaryColor3dvEXT",
744 "glSecondaryColor3fEXT",
745 "glSecondaryColor3fvEXT",
746 "glSecondaryColor3iEXT",
747 "glSecondaryColor3ivEXT",
748 "glSecondaryColor3sEXT",
749 "glSecondaryColor3svEXT",
750 "glSecondaryColor3ubEXT",
751 "glSecondaryColor3ubvEXT",
752 "glSecondaryColor3uiEXT",
753 "glSecondaryColor3uivEXT",
754 "glSecondaryColor3usEXT",
755 "glSecondaryColor3usvEXT",
756 "glSecondaryColorPointerEXT",
757 "-GL_EXT_texture_perturb_normal",
758 "glTextureNormalEXT",
759 "-GL_EXT_multi_draw_arrays",
760 "glMultiDrawArraysEXT",
761 "glMultiDrawElementsEXT",
762 "-GL_EXT_fog_coord",
763 "glFogCoordfEXT",
764 "glFogCoordfvEXT",
765 "glFogCoorddEXT",
766 "glFogCoorddvEXT",
767 "glFogCoordPointerEXT",
768 "-GL_EXT_coordinate_frame",
769 "glTangent3bEXT",
770 "glTangent3bvEXT",
771 "glTangent3dEXT",
772 "glTangent3dvEXT",
773 "glTangent3fEXT",
774 "glTangent3fvEXT",
775 "glTangent3iEXT",
776 "glTangent3ivEXT",
777 "glTangent3sEXT",
778 "glTangent3svEXT",
779 "glBinormal3bEXT",
780 "glBinormal3bvEXT",
781 "glBinormal3dEXT",
782 "glBinormal3dvEXT",
783 "glBinormal3fEXT",
784 "glBinormal3fvEXT",
785 "glBinormal3iEXT",
786 "glBinormal3ivEXT",
787 "glBinormal3sEXT",
788 "glBinormal3svEXT",
789 "glTangentPointerEXT",
790 "glBinormalPointerEXT",
791 "-GL_SUNX_constant_data",
792 "glFinishTextureSUNX",
793 "-GL_SUN_global_alpha",
794 "glGlobalAlphaFactorbSUN",
795 "glGlobalAlphaFactorsSUN",
796 "glGlobalAlphaFactoriSUN",
797 "glGlobalAlphaFactorfSUN",
798 "glGlobalAlphaFactordSUN",
799 "glGlobalAlphaFactorubSUN",
800 "glGlobalAlphaFactorusSUN",
801 "glGlobalAlphaFactoruiSUN",
802 "-GL_SUN_triangle_list",
803 "glReplacementCodeuiSUN",
804 "glReplacementCodeusSUN",
805 "glReplacementCodeubSUN",
806 "glReplacementCodeuivSUN",
807 "glReplacementCodeusvSUN",
808 "glReplacementCodeubvSUN",
809 "glReplacementCodePointerSUN",
810 "-GL_SUN_vertex",
811 "glColor4ubVertex2fSUN",
812 "glColor4ubVertex2fvSUN",
813 "glColor4ubVertex3fSUN",
814 "glColor4ubVertex3fvSUN",
815 "glColor3fVertex3fSUN",
816 "glColor3fVertex3fvSUN",
817 "glNormal3fVertex3fSUN",
818 "glNormal3fVertex3fvSUN",
819 "glColor4fNormal3fVertex3fSUN",
820 "glColor4fNormal3fVertex3fvSUN",
821 "glTexCoord2fVertex3fSUN",
822 "glTexCoord2fVertex3fvSUN",
823 "glTexCoord4fVertex4fSUN",
824 "glTexCoord4fVertex4fvSUN",
825 "glTexCoord2fColor4ubVertex3fSUN",
826 "glTexCoord2fColor4ubVertex3fvSUN",
827 "glTexCoord2fColor3fVertex3fSUN",
828 "glTexCoord2fColor3fVertex3fvSUN",
829 "glTexCoord2fNormal3fVertex3fSUN",
830 "glTexCoord2fNormal3fVertex3fvSUN",
831 "glTexCoord2fColor4fNormal3fVertex3fSUN",
832 "glTexCoord2fColor4fNormal3fVertex3fvSUN",
833 "glTexCoord4fColor4fNormal3fVertex4fSUN",
834 "glTexCoord4fColor4fNormal3fVertex4fvSUN",
835 "glReplacementCodeuiVertex3fSUN",
836 "glReplacementCodeuiVertex3fvSUN",
837 "glReplacementCodeuiColor4ubVertex3fSUN",
838 "glReplacementCodeuiColor4ubVertex3fvSUN",
839 "glReplacementCodeuiColor3fVertex3fSUN",
840 "glReplacementCodeuiColor3fVertex3fvSUN",
841 "glReplacementCodeuiNormal3fVertex3fSUN",
842 "glReplacementCodeuiNormal3fVertex3fvSUN",
843 "glReplacementCodeuiColor4fNormal3fVertex3fSUN",
844 "glReplacementCodeuiColor4fNormal3fVertex3fvSUN",
845 "glReplacementCodeuiTexCoord2fVertex3fSUN",
846 "glReplacementCodeuiTexCoord2fVertex3fvSUN",
847 "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN",
848 "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN",
849 "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN",
850 "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN",
851 "-GL_EXT_blend_func_separate",
852 "glBlendFuncSeparateEXT",
853 "glBlendFuncSeparateINGR",
854 "-GL_EXT_vertex_weighting",
855 "glVertexWeightfEXT",
856 "glVertexWeightfvEXT",
857 "glVertexWeightPointerEXT",
858 "-GL_NV_vertex_array_range",
859 "glFlushVertexArrayRangeNV",
860 "glVertexArrayRangeNV",
861 "-GL_NV_register_combiners",
862 "glCombinerParameterfvNV",
863 "glCombinerParameterfNV",
864 "glCombinerParameterivNV",
865 "glCombinerParameteriNV",
866 "glCombinerInputNV",
867 "glCombinerOutputNV",
868 "glFinalCombinerInputNV",
869 "glGetCombinerInputParameterfvNV",
870 "glGetCombinerInputParameterivNV",
871 "glGetCombinerOutputParameterfvNV",
872 "glGetCombinerOutputParameterivNV",
873 "glGetFinalCombinerInputParameterfvNV",
874 "glGetFinalCombinerInputParameterivNV",
875 "-GL_MESA_resize_buffers",
876 "glResizeBuffersMESA",
877 "-GL_MESA_window_pos",
878 "glWindowPos2dMESA",
879 "glWindowPos2dvMESA",
880 "glWindowPos2fMESA",
881 "glWindowPos2fvMESA",
882 "glWindowPos2iMESA",
883 "glWindowPos2ivMESA",
884 "glWindowPos2sMESA",
885 "glWindowPos2svMESA",
886 "glWindowPos3dMESA",
887 "glWindowPos3dvMESA",
888 "glWindowPos3fMESA",
889 "glWindowPos3fvMESA",
890 "glWindowPos3iMESA",
891 "glWindowPos3ivMESA",
892 "glWindowPos3sMESA",
893 "glWindowPos3svMESA",
894 "glWindowPos4dMESA",
895 "glWindowPos4dvMESA",
896 "glWindowPos4fMESA",
897 "glWindowPos4fvMESA",
898 "glWindowPos4iMESA",
899 "glWindowPos4ivMESA",
900 "glWindowPos4sMESA",
901 "glWindowPos4svMESA",
902 "-GL_IBM_multimode_draw_arrays",
903 "glMultiModeDrawArraysIBM",
904 "glMultiModeDrawElementsIBM",
905 "-GL_IBM_vertex_array_lists",
906 "glColorPointerListIBM",
907 "glSecondaryColorPointerListIBM",
908 "glEdgeFlagPointerListIBM",
909 "glFogCoordPointerListIBM",
910 "glIndexPointerListIBM",
911 "glNormalPointerListIBM",
912 "glTexCoordPointerListIBM",
913 "glVertexPointerListIBM",
914 "-GL_3DFX_tbuffer",
915 "glTbufferMask3DFX",
916 "-GL_EXT_multisample",
917 "glSampleMaskEXT",
918 "glSamplePatternEXT",
919 "-GL_SGIS_texture_color_mask",
920 "glTextureColorMaskSGIS",
921 "-GL_SGIX_igloo_interface",
922 "glIglooInterfaceSGIX",
923 "-GL_NV_fence",
924 "glGenFencesNV",
925 "glDeleteFencesNV",
926 "glSetFenceNV",
927 "glTestFenceNV",
928 "glFinishFenceNV",
929 "glIsFenceNV",
930 "glGetFenceivNV",
931 "-GL_NV_evaluators",
932 "glMapControlPointsNV",
933 "glMapParameterivNV",
934 "glMapParameterfvNV",
935 "glGetMapControlPointsNV",
936 "glGetMapParameterivNV",
937 "glGetMapParameterfvNV",
938 "glGetMapAttribParameterivNV",
939 "glGetMapAttribParameterfvNV",
940 "glEvalMapsNV",
941 "-GL_NV_register_combiners2",
942 "glCombinerStageParameterfvNV",
943 "glGetCombinerStageParameterfvNV",
944 "-GL_NV_vertex_program",
945 "glBindProgramNV",
946 "glDeleteProgramsNV",
947 "glExecuteProgramNV",
948 "glGenProgramsNV",
949 "glAreProgramsResidentNV",
950 "glRequestResidentProgramsNV",
951 "glGetProgramParameterfvNV",
952 "glGetProgramParameterdvNV",
953 "glGetProgramivNV",
954 "glGetProgramStringNV",
955 "glGetTrackMatrixivNV",
956 "glGetVertexAttribdvNV",
957 "glGetVertexAttribfvNV",
958 "glGetVertexAttribivNV",
959 "glGetVertexAttribPointervNV",
960 "glIsProgramNV",
961 "glLoadProgramNV",
962 "glProgramParameter4fNV",
963 "glProgramParameter4dNV",
964 "glProgramParameter4dvNV",
965 "glProgramParameter4fvNV",
966 "glProgramParameters4dvNV",
967 "glProgramParameters4fvNV",
968 "glTrackMatrixNV",
969 "glVertexAttribPointerNV",
970 "glVertexAttrib1sNV",
971 "glVertexAttrib1fNV",
972 "glVertexAttrib1dNV",
973 "glVertexAttrib2sNV",
974 "glVertexAttrib2fNV",
975 "glVertexAttrib2dNV",
976 "glVertexAttrib3sNV",
977 "glVertexAttrib3fNV",
978 "glVertexAttrib3dNV",
979 "glVertexAttrib4sNV",
980 "glVertexAttrib4fNV",
981 "glVertexAttrib4dNV",
982 "glVertexAttrib4ubNV",
983 "glVertexAttrib1svNV",
984 "glVertexAttrib1fvNV",
985 "glVertexAttrib1dvNV",
986 "glVertexAttrib2svNV",
987 "glVertexAttrib2fvNV",
988 "glVertexAttrib2dvNV",
989 "glVertexAttrib3svNV",
990 "glVertexAttrib3fvNV",
991 "glVertexAttrib3dvNV",
992 "glVertexAttrib4svNV",
993 "glVertexAttrib4fvNV",
994 "glVertexAttrib4dvNV",
995 "glVertexAttrib4ubvNV",
996 "glVertexAttribs1svNV",
997 "glVertexAttribs1fvNV",
998 "glVertexAttribs1dvNV",
999 "glVertexAttribs2svNV",
1000 "glVertexAttribs2fvNV",
1001 "glVertexAttribs2dvNV",
1002 "glVertexAttribs3svNV",
1003 "glVertexAttribs3fvNV",
1004 "glVertexAttribs3dvNV",
1005 "glVertexAttribs4svNV",
1006 "glVertexAttribs4fvNV",
1007 "glVertexAttribs4dvNV",
1008 "glVertexAttribs4ubvNV",
1009 "-GL_ARB_window_pos",
1010 "glWindowPos2dARB",
1011 "glWindowPos2fARB",
1012 "glWindowPos2iARB",
1013 "glWindowPos2sARB",
1014 "glWindowPos2dvARB",
1015 "glWindowPos2fvARB",
1016 "glWindowPos2ivARB",
1017 "glWindowPos2svARB",
1018 "glWindowPos3dARB",
1019 "glWindowPos3fARB",
1020 "glWindowPos3iARB",
1021 "glWindowPos3sARB",
1022 "glWindowPos3dvARB",
1023 "glWindowPos3fvARB",
1024 "glWindowPos3ivARB",
1025
1026 NULL
1027};
1028
1029
1030
1031static int
1032extension_supported(const char *haystack, const char *needle)
1033{
1034 if (strstr(haystack, needle))
1035 return 1;
1036 else
1037 return 0;
1038}
1039
1040
1041static void
1042test_functions( const char *extensions )
1043{
1044 int failures = 0, passes = 0;
1045 int doTests;
1046 int i;
1047
1048 for (i = 0; functions[i]; i++) {
1049 if (functions[i][0] == '-') {
1050 if (functions[i][1] == '1') {
1051 doTests = 1;
1052 }
1053 else {
1054 /* check if the named extension is available */
1055 doTests = extension_supported(extensions, functions[i]+1);
1056 }
1057 if (doTests)
1058 printf("Testing %s functions\n", functions[i] + 1);
1059 failures = 0;
1060 passes = 0;
1061 }
1062 else if (doTests) {
1063 void *p = (void *) glXGetProcAddress((const GLubyte *) functions[i]);
1064 if (p) {
1065 passes++;
1066 }
1067 else {
1068 printf(" glXGetProcAddress(%s) failed!\n", functions[i]);
1069 failures++;
1070 }
1071 }
1072
1073 if (doTests && (!functions[i + 1] || functions[i + 1][0] == '-')) {
1074 if (failures > 0) {
1075 printf(" %d failures\n", failures);
1076 }
1077 else if (i > 0) {
1078 printf(" %d passed.\n", passes);
1079 }
1080 }
1081 }
1082}
1083
1084
1085
1086static void
1087print_screen_info(Display *dpy, int scrnum, Bool allowDirect)
1088{
1089 Window win;
1090 int attribSingle[] = {
1091 GLX_RGBA,
1092 GLX_RED_SIZE, 1,
1093 GLX_GREEN_SIZE, 1,
1094 GLX_BLUE_SIZE, 1,
1095 None };
1096 int attribDouble[] = {
1097 GLX_RGBA,
1098 GLX_RED_SIZE, 1,
1099 GLX_GREEN_SIZE, 1,
1100 GLX_BLUE_SIZE, 1,
1101 GLX_DOUBLEBUFFER,
1102 None };
1103
1104 XSetWindowAttributes attr;
1105 unsigned long mask;
1106 Window root;
1107 GLXContext ctx;
1108 XVisualInfo *visinfo;
1109 int width = 100, height = 100;
1110
1111 root = RootWindow(dpy, scrnum);
1112
1113 visinfo = glXChooseVisual(dpy, scrnum, attribSingle);
1114 if (!visinfo) {
1115 visinfo = glXChooseVisual(dpy, scrnum, attribDouble);
1116 if (!visinfo) {
1117 fprintf(stderr, "Error: couldn't find RGB GLX visual\n");
1118 return;
1119 }
1120 }
1121
1122 attr.background_pixel = 0;
1123 attr.border_pixel = 0;
1124 attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
1125 attr.event_mask = StructureNotifyMask | ExposureMask;
1126 mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
1127 win = XCreateWindow(dpy, root, 0, 0, width, height,
1128 0, visinfo->depth, InputOutput,
1129 visinfo->visual, mask, &attr);
1130
1131 ctx = glXCreateContext( dpy, visinfo, NULL, allowDirect );
1132 if (!ctx) {
1133 fprintf(stderr, "Error: glXCreateContext failed\n");
1134 XDestroyWindow(dpy, win);
1135 return;
1136 }
1137
1138 if (glXMakeCurrent(dpy, win, ctx)) {
1139 test_functions( (const char *) glGetString(GL_EXTENSIONS) );
1140 }
1141 else {
1142 fprintf(stderr, "Error: glXMakeCurrent failed\n");
1143 }
1144
1145 glXDestroyContext(dpy, ctx);
1146 XDestroyWindow(dpy, win);
1147}
1148
1149
1150int
1151main(int argc, char *argv[])
1152{
1153 char *displayName = NULL;
1154 Display *dpy;
1155
1156 dpy = XOpenDisplay(displayName);
1157 if (!dpy) {
1158 fprintf(stderr, "Error: unable to open display %s\n", displayName);
1159 return -1;
1160 }
1161
1162 print_screen_info(dpy, 0, GL_TRUE);
1163
1164 XCloseDisplay(dpy);
1165
1166 return 0;
1167}