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