blob: ee0a0f8d0346e764c1399e06ff7595f34b30e49b [file] [log] [blame]
Brian Paul1cfae1a2002-11-07 16:23:40 +00001/* $Id: getprocaddress.c,v 1.4 2002/11/07 16:23:40 brianp Exp $ */
Brian Paul17fe22d2001-11-18 23:16:56 +00002
3/*
Brian Paul1cfae1a2002-11-07 16:23:40 +00004 * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
Brian Paul17fe22d2001-11-18 23:16:56 +00005 *
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",
Brian Paul1cfae1a2002-11-07 16:23:40 +0000467 "-1.4",
468 "glFogCoordf",
469 "glFogCoordfv",
470 "glFogCoordd",
471 "glFogCoorddv",
472 "glFogCoordPointer",
473 "glPointParameterf",
474 "glPointParameterfv",
475 "glPointParameteri",
476 "glPointParameteriv",
477 "glSecondaryColor3b",
478 "glSecondaryColor3bv",
479 "glSecondaryColor3d",
480 "glSecondaryColor3dv",
481 "glSecondaryColor3f",
482 "glSecondaryColor3fv",
483 "glSecondaryColor3i",
484 "glSecondaryColor3iv",
485 "glSecondaryColor3s",
486 "glSecondaryColor3sv",
487 "glSecondaryColor3ub",
488 "glSecondaryColor3ubv",
489 "glSecondaryColor3ui",
490 "glSecondaryColor3uiv",
491 "glSecondaryColor3us",
492 "glSecondaryColor3usv",
493 "glSecondaryColorPointer",
494 "glWindowPos2d",
495 "glWindowPos2dv",
496 "glWindowPos2f",
497 "glWindowPos2fv",
498 "glWindowPos2i",
499 "glWindowPos2iv",
500 "glWindowPos2s",
501 "glWindowPos2sv",
502 "glWindowPos3d",
503 "glWindowPos3dv",
504 "glWindowPos3f",
505 "glWindowPos3fv",
506 "glWindowPos3i",
507 "glWindowPos3iv",
508 "glWindowPos3s",
509 "glWindowPos3sv",
Brian Paul17fe22d2001-11-18 23:16:56 +0000510 "-GL_ARB_multitexture",
511 "glActiveTextureARB",
512 "glClientActiveTextureARB",
513 "glMultiTexCoord1dARB",
514 "glMultiTexCoord1dvARB",
515 "glMultiTexCoord1fARB",
516 "glMultiTexCoord1fvARB",
517 "glMultiTexCoord1iARB",
518 "glMultiTexCoord1ivARB",
519 "glMultiTexCoord1sARB",
520 "glMultiTexCoord1svARB",
521 "glMultiTexCoord2dARB",
522 "glMultiTexCoord2dvARB",
523 "glMultiTexCoord2fARB",
524 "glMultiTexCoord2fvARB",
525 "glMultiTexCoord2iARB",
526 "glMultiTexCoord2ivARB",
527 "glMultiTexCoord2sARB",
528 "glMultiTexCoord2svARB",
529 "glMultiTexCoord3dARB",
530 "glMultiTexCoord3dvARB",
531 "glMultiTexCoord3fARB",
532 "glMultiTexCoord3fvARB",
533 "glMultiTexCoord3iARB",
534 "glMultiTexCoord3ivARB",
535 "glMultiTexCoord3sARB",
536 "glMultiTexCoord3svARB",
537 "glMultiTexCoord4dARB",
538 "glMultiTexCoord4dvARB",
539 "glMultiTexCoord4fARB",
540 "glMultiTexCoord4fvARB",
541 "glMultiTexCoord4iARB",
542 "glMultiTexCoord4ivARB",
543 "glMultiTexCoord4sARB",
544 "glMultiTexCoord4svARB",
545 "-GL_ARB_transpose_matrix",
546 "glLoadTransposeMatrixfARB",
547 "glLoadTransposeMatrixdARB",
548 "glMultTransposeMatrixfARB",
549 "glMultTransposeMatrixdARB",
550 "-GL_ARB_multisample",
551 "glSampleCoverageARB",
552 "-unused",
553 "gl__unused413",
554 "-GL_ARB_texture_compression",
555 "glCompressedTexImage3DARB",
556 "glCompressedTexImage2DARB",
557 "glCompressedTexImage1DARB",
558 "glCompressedTexSubImage3DARB",
559 "glCompressedTexSubImage2DARB",
560 "glCompressedTexSubImage1DARB",
561 "glGetCompressedTexImageARB",
562 "-GL_ARB_vertex_blend",
563 "glWeightbvARB",
564 "glWeightsvARB",
565 "glWeightivARB",
566 "glWeightfvARB",
567 "glWeightdvARB",
568 "glWeightubvARB",
569 "glWeightusvARB",
570 "glWeightuivARB",
571 "glWeightPointerARB",
572 "glVertexBlendARB",
573 "-GL_ARB_matrix_palette",
574 "glCurrentPaletteMatrixARB",
575 "glMatrixIndexubvARB",
576 "glMatrixIndexusvARB",
577 "glMatrixIndexuivARB",
578 "glMatrixIndexPointerARB",
579 "-GL_EXT_blend_color",
580 "glBlendColorEXT",
581 "-GL_EXT_polygon_offset",
582 "glPolygonOffsetEXT",
583 "-GL_EXT_texture3D",
584 "glTexImage3DEXT",
585 "glTexSubImage3DEXT",
586 "-GL_SGIS_texture_filter4",
587 "glGetTexFilterFuncSGIS",
588 "glTexFilterFuncSGIS",
589 "-GL_EXT_subtexture",
590 "glTexSubImage1DEXT",
591 "glTexSubImage2DEXT",
592 "-GL_EXT_copy_texture",
593 "glCopyTexImage1DEXT",
594 "glCopyTexImage2DEXT",
595 "glCopyTexSubImage1DEXT",
596 "glCopyTexSubImage2DEXT",
597 "glCopyTexSubImage3DEXT",
598 "-GL_EXT_histogram",
599 "glGetHistogramEXT",
600 "glGetHistogramParameterfvEXT",
601 "glGetHistogramParameterivEXT",
602 "glGetMinmaxEXT",
603 "glGetMinmaxParameterfvEXT",
604 "glGetMinmaxParameterivEXT",
605 "glHistogramEXT",
606 "glMinmaxEXT",
607 "glResetHistogramEXT",
608 "glResetMinmaxEXT",
609 "-GL_EXT_convolution",
610 "glConvolutionFilter1DEXT",
611 "glConvolutionFilter2DEXT",
612 "glConvolutionParameterfEXT",
613 "glConvolutionParameterfvEXT",
614 "glConvolutionParameteriEXT",
615 "glConvolutionParameterivEXT",
616 "glCopyConvolutionFilter1DEXT",
617 "glCopyConvolutionFilter2DEXT",
618 "glGetConvolutionFilterEXT",
619 "glGetConvolutionParameterfvEXT",
620 "glGetConvolutionParameterivEXT",
621 "glGetSeparableFilterEXT",
622 "glSeparableFilter2DEXT",
623 "-GL_SGI_color_table",
624 "glColorTableSGI",
625 "glColorTableParameterfvSGI",
626 "glColorTableParameterivSGI",
627 "glCopyColorTableSGI",
628 "glGetColorTableSGI",
629 "glGetColorTableParameterfvSGI",
630 "glGetColorTableParameterivSGI",
631 "-GL_SGIX_pixel_texture",
632 "glPixelTexGenSGIX",
633 "-GL_SGIS_pixel_texture",
634 "glPixelTexGenParameteriSGIS",
635 "glPixelTexGenParameterivSGIS",
636 "glPixelTexGenParameterfSGIS",
637 "glPixelTexGenParameterfvSGIS",
638 "glGetPixelTexGenParameterivSGIS",
639 "glGetPixelTexGenParameterfvSGIS",
640 "-GL_SGIS_texture4D",
641 "glTexImage4DSGIS",
642 "glTexSubImage4DSGIS",
643 "-GL_EXT_texture_object",
644 "glAreTexturesResidentEXT",
645 "glBindTextureEXT",
646 "glDeleteTexturesEXT",
647 "glGenTexturesEXT",
648 "glIsTextureEXT",
649 "glPrioritizeTexturesEXT",
650 "-GL_SGIS_detail_texture",
651 "glDetailTexFuncSGIS",
652 "glGetDetailTexFuncSGIS",
653 "-GL_SGIS_sharpen_texture",
654 "glSharpenTexFuncSGIS",
655 "glGetSharpenTexFuncSGIS",
656 "-GL_SGIS_multisample",
657 "glSampleMaskSGIS",
658 "glSamplePatternSGIS",
659 "-GL_EXT_vertex_array",
660 "glArrayElementEXT",
661 "glColorPointerEXT",
662 "glDrawArraysEXT",
663 "glEdgeFlagPointerEXT",
664 "glGetPointervEXT",
665 "glIndexPointerEXT",
666 "glNormalPointerEXT",
667 "glTexCoordPointerEXT",
668 "glVertexPointerEXT",
669 "-GL_EXT_blend_minmax",
670 "glBlendEquationEXT",
671 "-GL_SGIX_sprite",
672 "glSpriteParameterfSGIX",
673 "glSpriteParameterfvSGIX",
674 "glSpriteParameteriSGIX",
675 "glSpriteParameterivSGIX",
676 "-GL_ARB_point_parameters",
677 "glPointParameterfARB",
678 "glPointParameterfvARB",
679 "-GL_EXT_point_parameters",
680 "glPointParameterfEXT",
681 "glPointParameterfvEXT",
682 "-GL_SGIS_point_parameters",
683 "glPointParameterfSGIS",
684 "glPointParameterfvSGIS",
685 "-GL_SGIX_instruments",
686 "glGetInstrumentsSGIX",
687 "glInstrumentsBufferSGIX",
688 "glPollInstrumentsSGIX",
689 "glReadInstrumentsSGIX",
690 "glStartInstrumentsSGIX",
691 "glStopInstrumentsSGIX",
692 "-GL_SGIX_framezoom",
693 "glFrameZoomSGIX",
694 "-GL_SGIX_tag_sample_buffer",
695 "glTagSampleBufferSGIX",
696 "-GL_SGIX_polynomial_ffd",
697 "glDeformationMap3dSGIX",
698 "glDeformationMap3fSGIX",
699 "glDeformSGIX",
700 "glLoadIdentityDeformationMapSGIX",
701 "-GL_SGIX_reference_plane",
702 "glReferencePlaneSGIX",
703 "-GL_SGIX_flush_raster",
704 "glFlushRasterSGIX",
705 "-GL_SGIS_fog_function",
706 "glFogFuncSGIS",
707 "glGetFogFuncSGIS",
708 "-GL_HP_image_transform",
709 "glImageTransformParameteriHP",
710 "glImageTransformParameterfHP",
711 "glImageTransformParameterivHP",
712 "glImageTransformParameterfvHP",
713 "glGetImageTransformParameterivHP",
714 "glGetImageTransformParameterfvHP",
715 "-GL_EXT_color_subtable",
716 "glColorSubTableEXT",
717 "glCopyColorSubTableEXT",
718 "-GL_PGI_misc_hints",
719 "glHintPGI",
720 "-GL_EXT_paletted_texture",
721 "glColorTableEXT",
722 "glGetColorTableEXT",
723 "glGetColorTableParameterivEXT",
724 "glGetColorTableParameterfvEXT",
725 "-GL_SGIX_list_priority",
726 "glGetListParameterfvSGIX",
727 "glGetListParameterivSGIX",
728 "glListParameterfSGIX",
729 "glListParameterfvSGIX",
730 "glListParameteriSGIX",
731 "glListParameterivSGIX",
732 "-GL_EXT_index_material",
733 "glIndexMaterialEXT",
734 "-GL_EXT_index_func",
735 "glIndexFuncEXT",
736 "-GL_EXT_compiled_vertex_array",
737 "glLockArraysEXT",
738 "glUnlockArraysEXT",
739 "-GL_EXT_cull_vertex",
740 "glCullParameterdvEXT",
741 "glCullParameterfvEXT",
742 "-GL_SGIX_fragment_lighting",
743 "glFragmentColorMaterialSGIX",
744 "glFragmentLightfSGIX",
745 "glFragmentLightfvSGIX",
746 "glFragmentLightiSGIX",
747 "glFragmentLightivSGIX",
748 "glFragmentLightModelfSGIX",
749 "glFragmentLightModelfvSGIX",
750 "glFragmentLightModeliSGIX",
751 "glFragmentLightModelivSGIX",
752 "glFragmentMaterialfSGIX",
753 "glFragmentMaterialfvSGIX",
754 "glFragmentMaterialiSGIX",
755 "glFragmentMaterialivSGIX",
756 "glGetFragmentLightfvSGIX",
757 "glGetFragmentLightivSGIX",
758 "glGetFragmentMaterialfvSGIX",
759 "glGetFragmentMaterialivSGIX",
760 "glLightEnviSGIX",
761 "-GL_EXT_draw_range_elements",
762 "glDrawRangeElementsEXT",
763 "-GL_EXT_light_texture",
764 "glApplyTextureEXT",
765 "glTextureLightEXT",
766 "glTextureMaterialEXT",
767 "-GL_SGIX_async",
768 "glAsyncMarkerSGIX",
769 "glFinishAsyncSGIX",
770 "glPollAsyncSGIX",
771 "glGenAsyncMarkersSGIX",
772 "glDeleteAsyncMarkersSGIX",
773 "glIsAsyncMarkerSGIX",
774 "-GL_INTEL_parallel_arrays",
775 "glVertexPointervINTEL",
776 "glNormalPointervINTEL",
777 "glColorPointervINTEL",
778 "glTexCoordPointervINTEL",
779 "-GL_EXT_pixel_transform",
780 "glPixelTransformParameteriEXT",
781 "glPixelTransformParameterfEXT",
782 "glPixelTransformParameterivEXT",
783 "glPixelTransformParameterfvEXT",
784 "-GL_EXT_secondary_color",
785 "glSecondaryColor3bEXT",
786 "glSecondaryColor3bvEXT",
787 "glSecondaryColor3dEXT",
788 "glSecondaryColor3dvEXT",
789 "glSecondaryColor3fEXT",
790 "glSecondaryColor3fvEXT",
791 "glSecondaryColor3iEXT",
792 "glSecondaryColor3ivEXT",
793 "glSecondaryColor3sEXT",
794 "glSecondaryColor3svEXT",
795 "glSecondaryColor3ubEXT",
796 "glSecondaryColor3ubvEXT",
797 "glSecondaryColor3uiEXT",
798 "glSecondaryColor3uivEXT",
799 "glSecondaryColor3usEXT",
800 "glSecondaryColor3usvEXT",
801 "glSecondaryColorPointerEXT",
802 "-GL_EXT_texture_perturb_normal",
803 "glTextureNormalEXT",
804 "-GL_EXT_multi_draw_arrays",
805 "glMultiDrawArraysEXT",
806 "glMultiDrawElementsEXT",
807 "-GL_EXT_fog_coord",
808 "glFogCoordfEXT",
809 "glFogCoordfvEXT",
810 "glFogCoorddEXT",
811 "glFogCoorddvEXT",
812 "glFogCoordPointerEXT",
813 "-GL_EXT_coordinate_frame",
814 "glTangent3bEXT",
815 "glTangent3bvEXT",
816 "glTangent3dEXT",
817 "glTangent3dvEXT",
818 "glTangent3fEXT",
819 "glTangent3fvEXT",
820 "glTangent3iEXT",
821 "glTangent3ivEXT",
822 "glTangent3sEXT",
823 "glTangent3svEXT",
824 "glBinormal3bEXT",
825 "glBinormal3bvEXT",
826 "glBinormal3dEXT",
827 "glBinormal3dvEXT",
828 "glBinormal3fEXT",
829 "glBinormal3fvEXT",
830 "glBinormal3iEXT",
831 "glBinormal3ivEXT",
832 "glBinormal3sEXT",
833 "glBinormal3svEXT",
834 "glTangentPointerEXT",
835 "glBinormalPointerEXT",
836 "-GL_SUNX_constant_data",
837 "glFinishTextureSUNX",
838 "-GL_SUN_global_alpha",
839 "glGlobalAlphaFactorbSUN",
840 "glGlobalAlphaFactorsSUN",
841 "glGlobalAlphaFactoriSUN",
842 "glGlobalAlphaFactorfSUN",
843 "glGlobalAlphaFactordSUN",
844 "glGlobalAlphaFactorubSUN",
845 "glGlobalAlphaFactorusSUN",
846 "glGlobalAlphaFactoruiSUN",
847 "-GL_SUN_triangle_list",
848 "glReplacementCodeuiSUN",
849 "glReplacementCodeusSUN",
850 "glReplacementCodeubSUN",
851 "glReplacementCodeuivSUN",
852 "glReplacementCodeusvSUN",
853 "glReplacementCodeubvSUN",
854 "glReplacementCodePointerSUN",
855 "-GL_SUN_vertex",
856 "glColor4ubVertex2fSUN",
857 "glColor4ubVertex2fvSUN",
858 "glColor4ubVertex3fSUN",
859 "glColor4ubVertex3fvSUN",
860 "glColor3fVertex3fSUN",
861 "glColor3fVertex3fvSUN",
862 "glNormal3fVertex3fSUN",
863 "glNormal3fVertex3fvSUN",
864 "glColor4fNormal3fVertex3fSUN",
865 "glColor4fNormal3fVertex3fvSUN",
866 "glTexCoord2fVertex3fSUN",
867 "glTexCoord2fVertex3fvSUN",
868 "glTexCoord4fVertex4fSUN",
869 "glTexCoord4fVertex4fvSUN",
870 "glTexCoord2fColor4ubVertex3fSUN",
871 "glTexCoord2fColor4ubVertex3fvSUN",
872 "glTexCoord2fColor3fVertex3fSUN",
873 "glTexCoord2fColor3fVertex3fvSUN",
874 "glTexCoord2fNormal3fVertex3fSUN",
875 "glTexCoord2fNormal3fVertex3fvSUN",
876 "glTexCoord2fColor4fNormal3fVertex3fSUN",
877 "glTexCoord2fColor4fNormal3fVertex3fvSUN",
878 "glTexCoord4fColor4fNormal3fVertex4fSUN",
879 "glTexCoord4fColor4fNormal3fVertex4fvSUN",
880 "glReplacementCodeuiVertex3fSUN",
881 "glReplacementCodeuiVertex3fvSUN",
882 "glReplacementCodeuiColor4ubVertex3fSUN",
883 "glReplacementCodeuiColor4ubVertex3fvSUN",
884 "glReplacementCodeuiColor3fVertex3fSUN",
885 "glReplacementCodeuiColor3fVertex3fvSUN",
886 "glReplacementCodeuiNormal3fVertex3fSUN",
887 "glReplacementCodeuiNormal3fVertex3fvSUN",
888 "glReplacementCodeuiColor4fNormal3fVertex3fSUN",
889 "glReplacementCodeuiColor4fNormal3fVertex3fvSUN",
890 "glReplacementCodeuiTexCoord2fVertex3fSUN",
891 "glReplacementCodeuiTexCoord2fVertex3fvSUN",
892 "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN",
893 "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN",
894 "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN",
895 "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN",
896 "-GL_EXT_blend_func_separate",
897 "glBlendFuncSeparateEXT",
898 "glBlendFuncSeparateINGR",
899 "-GL_EXT_vertex_weighting",
900 "glVertexWeightfEXT",
901 "glVertexWeightfvEXT",
902 "glVertexWeightPointerEXT",
903 "-GL_NV_vertex_array_range",
904 "glFlushVertexArrayRangeNV",
905 "glVertexArrayRangeNV",
906 "-GL_NV_register_combiners",
907 "glCombinerParameterfvNV",
908 "glCombinerParameterfNV",
909 "glCombinerParameterivNV",
910 "glCombinerParameteriNV",
911 "glCombinerInputNV",
912 "glCombinerOutputNV",
913 "glFinalCombinerInputNV",
914 "glGetCombinerInputParameterfvNV",
915 "glGetCombinerInputParameterivNV",
916 "glGetCombinerOutputParameterfvNV",
917 "glGetCombinerOutputParameterivNV",
918 "glGetFinalCombinerInputParameterfvNV",
919 "glGetFinalCombinerInputParameterivNV",
920 "-GL_MESA_resize_buffers",
921 "glResizeBuffersMESA",
922 "-GL_MESA_window_pos",
923 "glWindowPos2dMESA",
924 "glWindowPos2dvMESA",
925 "glWindowPos2fMESA",
926 "glWindowPos2fvMESA",
927 "glWindowPos2iMESA",
928 "glWindowPos2ivMESA",
929 "glWindowPos2sMESA",
930 "glWindowPos2svMESA",
931 "glWindowPos3dMESA",
932 "glWindowPos3dvMESA",
933 "glWindowPos3fMESA",
934 "glWindowPos3fvMESA",
935 "glWindowPos3iMESA",
936 "glWindowPos3ivMESA",
937 "glWindowPos3sMESA",
938 "glWindowPos3svMESA",
939 "glWindowPos4dMESA",
940 "glWindowPos4dvMESA",
941 "glWindowPos4fMESA",
942 "glWindowPos4fvMESA",
943 "glWindowPos4iMESA",
944 "glWindowPos4ivMESA",
945 "glWindowPos4sMESA",
946 "glWindowPos4svMESA",
947 "-GL_IBM_multimode_draw_arrays",
948 "glMultiModeDrawArraysIBM",
949 "glMultiModeDrawElementsIBM",
950 "-GL_IBM_vertex_array_lists",
951 "glColorPointerListIBM",
952 "glSecondaryColorPointerListIBM",
953 "glEdgeFlagPointerListIBM",
954 "glFogCoordPointerListIBM",
955 "glIndexPointerListIBM",
956 "glNormalPointerListIBM",
957 "glTexCoordPointerListIBM",
958 "glVertexPointerListIBM",
959 "-GL_3DFX_tbuffer",
960 "glTbufferMask3DFX",
961 "-GL_EXT_multisample",
962 "glSampleMaskEXT",
963 "glSamplePatternEXT",
964 "-GL_SGIS_texture_color_mask",
965 "glTextureColorMaskSGIS",
966 "-GL_SGIX_igloo_interface",
967 "glIglooInterfaceSGIX",
968 "-GL_NV_fence",
969 "glGenFencesNV",
970 "glDeleteFencesNV",
971 "glSetFenceNV",
972 "glTestFenceNV",
973 "glFinishFenceNV",
974 "glIsFenceNV",
975 "glGetFenceivNV",
976 "-GL_NV_evaluators",
977 "glMapControlPointsNV",
978 "glMapParameterivNV",
979 "glMapParameterfvNV",
980 "glGetMapControlPointsNV",
981 "glGetMapParameterivNV",
982 "glGetMapParameterfvNV",
983 "glGetMapAttribParameterivNV",
984 "glGetMapAttribParameterfvNV",
985 "glEvalMapsNV",
986 "-GL_NV_register_combiners2",
987 "glCombinerStageParameterfvNV",
988 "glGetCombinerStageParameterfvNV",
989 "-GL_NV_vertex_program",
990 "glBindProgramNV",
991 "glDeleteProgramsNV",
992 "glExecuteProgramNV",
993 "glGenProgramsNV",
994 "glAreProgramsResidentNV",
995 "glRequestResidentProgramsNV",
996 "glGetProgramParameterfvNV",
997 "glGetProgramParameterdvNV",
998 "glGetProgramivNV",
999 "glGetProgramStringNV",
1000 "glGetTrackMatrixivNV",
1001 "glGetVertexAttribdvNV",
1002 "glGetVertexAttribfvNV",
1003 "glGetVertexAttribivNV",
1004 "glGetVertexAttribPointervNV",
1005 "glIsProgramNV",
1006 "glLoadProgramNV",
1007 "glProgramParameter4fNV",
1008 "glProgramParameter4dNV",
1009 "glProgramParameter4dvNV",
1010 "glProgramParameter4fvNV",
1011 "glProgramParameters4dvNV",
1012 "glProgramParameters4fvNV",
1013 "glTrackMatrixNV",
1014 "glVertexAttribPointerNV",
1015 "glVertexAttrib1sNV",
1016 "glVertexAttrib1fNV",
1017 "glVertexAttrib1dNV",
1018 "glVertexAttrib2sNV",
1019 "glVertexAttrib2fNV",
1020 "glVertexAttrib2dNV",
1021 "glVertexAttrib3sNV",
1022 "glVertexAttrib3fNV",
1023 "glVertexAttrib3dNV",
1024 "glVertexAttrib4sNV",
1025 "glVertexAttrib4fNV",
1026 "glVertexAttrib4dNV",
1027 "glVertexAttrib4ubNV",
1028 "glVertexAttrib1svNV",
1029 "glVertexAttrib1fvNV",
1030 "glVertexAttrib1dvNV",
1031 "glVertexAttrib2svNV",
1032 "glVertexAttrib2fvNV",
1033 "glVertexAttrib2dvNV",
1034 "glVertexAttrib3svNV",
1035 "glVertexAttrib3fvNV",
1036 "glVertexAttrib3dvNV",
1037 "glVertexAttrib4svNV",
1038 "glVertexAttrib4fvNV",
1039 "glVertexAttrib4dvNV",
1040 "glVertexAttrib4ubvNV",
1041 "glVertexAttribs1svNV",
1042 "glVertexAttribs1fvNV",
1043 "glVertexAttribs1dvNV",
1044 "glVertexAttribs2svNV",
1045 "glVertexAttribs2fvNV",
1046 "glVertexAttribs2dvNV",
1047 "glVertexAttribs3svNV",
1048 "glVertexAttribs3fvNV",
1049 "glVertexAttribs3dvNV",
1050 "glVertexAttribs4svNV",
1051 "glVertexAttribs4fvNV",
1052 "glVertexAttribs4dvNV",
1053 "glVertexAttribs4ubvNV",
1054 "-GL_ARB_window_pos",
1055 "glWindowPos2dARB",
1056 "glWindowPos2fARB",
1057 "glWindowPos2iARB",
1058 "glWindowPos2sARB",
1059 "glWindowPos2dvARB",
1060 "glWindowPos2fvARB",
1061 "glWindowPos2ivARB",
1062 "glWindowPos2svARB",
1063 "glWindowPos3dARB",
1064 "glWindowPos3fARB",
1065 "glWindowPos3iARB",
1066 "glWindowPos3sARB",
1067 "glWindowPos3dvARB",
1068 "glWindowPos3fvARB",
1069 "glWindowPos3ivARB",
Brian Paul7c5282d2002-10-15 14:43:55 +00001070 "glWindowPos3svARB",
1071 "-EXT_stencil_two_side",
1072 "glActiveStencilFaceEXT",
Brian Paul17fe22d2001-11-18 23:16:56 +00001073
1074 NULL
1075};
1076
1077
Brian Paul17fe22d2001-11-18 23:16:56 +00001078static int
1079extension_supported(const char *haystack, const char *needle)
1080{
1081 if (strstr(haystack, needle))
1082 return 1;
1083 else
1084 return 0;
1085}
1086
1087
1088static void
1089test_functions( const char *extensions )
1090{
1091 int failures = 0, passes = 0;
1092 int doTests;
1093 int i;
1094
1095 for (i = 0; functions[i]; i++) {
1096 if (functions[i][0] == '-') {
1097 if (functions[i][1] == '1') {
1098 doTests = 1;
1099 }
1100 else {
1101 /* check if the named extension is available */
1102 doTests = extension_supported(extensions, functions[i]+1);
1103 }
1104 if (doTests)
1105 printf("Testing %s functions\n", functions[i] + 1);
1106 failures = 0;
1107 passes = 0;
1108 }
1109 else if (doTests) {
Brian Pauld4ece7b2001-11-21 17:21:41 +00001110 void *p = (void *) glXGetProcAddressARB((const GLubyte *) functions[i]);
Brian Paul17fe22d2001-11-18 23:16:56 +00001111 if (p) {
1112 passes++;
1113 }
1114 else {
1115 printf(" glXGetProcAddress(%s) failed!\n", functions[i]);
1116 failures++;
1117 }
1118 }
1119
1120 if (doTests && (!functions[i + 1] || functions[i + 1][0] == '-')) {
1121 if (failures > 0) {
1122 printf(" %d failures\n", failures);
1123 }
1124 else if (i > 0) {
1125 printf(" %d passed.\n", passes);
1126 }
1127 }
1128 }
1129}
1130
1131
1132
1133static void
1134print_screen_info(Display *dpy, int scrnum, Bool allowDirect)
1135{
1136 Window win;
1137 int attribSingle[] = {
1138 GLX_RGBA,
1139 GLX_RED_SIZE, 1,
1140 GLX_GREEN_SIZE, 1,
1141 GLX_BLUE_SIZE, 1,
1142 None };
1143 int attribDouble[] = {
1144 GLX_RGBA,
1145 GLX_RED_SIZE, 1,
1146 GLX_GREEN_SIZE, 1,
1147 GLX_BLUE_SIZE, 1,
1148 GLX_DOUBLEBUFFER,
1149 None };
1150
1151 XSetWindowAttributes attr;
1152 unsigned long mask;
1153 Window root;
1154 GLXContext ctx;
1155 XVisualInfo *visinfo;
1156 int width = 100, height = 100;
1157
1158 root = RootWindow(dpy, scrnum);
1159
1160 visinfo = glXChooseVisual(dpy, scrnum, attribSingle);
1161 if (!visinfo) {
1162 visinfo = glXChooseVisual(dpy, scrnum, attribDouble);
1163 if (!visinfo) {
1164 fprintf(stderr, "Error: couldn't find RGB GLX visual\n");
1165 return;
1166 }
1167 }
1168
1169 attr.background_pixel = 0;
1170 attr.border_pixel = 0;
1171 attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
1172 attr.event_mask = StructureNotifyMask | ExposureMask;
1173 mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
1174 win = XCreateWindow(dpy, root, 0, 0, width, height,
1175 0, visinfo->depth, InputOutput,
1176 visinfo->visual, mask, &attr);
1177
1178 ctx = glXCreateContext( dpy, visinfo, NULL, allowDirect );
1179 if (!ctx) {
1180 fprintf(stderr, "Error: glXCreateContext failed\n");
1181 XDestroyWindow(dpy, win);
1182 return;
1183 }
1184
1185 if (glXMakeCurrent(dpy, win, ctx)) {
1186 test_functions( (const char *) glGetString(GL_EXTENSIONS) );
1187 }
1188 else {
1189 fprintf(stderr, "Error: glXMakeCurrent failed\n");
1190 }
1191
1192 glXDestroyContext(dpy, ctx);
1193 XDestroyWindow(dpy, win);
1194}
1195
1196
1197int
1198main(int argc, char *argv[])
1199{
1200 char *displayName = NULL;
1201 Display *dpy;
1202
1203 dpy = XOpenDisplay(displayName);
1204 if (!dpy) {
1205 fprintf(stderr, "Error: unable to open display %s\n", displayName);
1206 return -1;
1207 }
1208
1209 print_screen_info(dpy, 0, GL_TRUE);
1210
1211 XCloseDisplay(dpy);
1212
1213 return 0;
1214}