2 /* Copyright (c) Mark J. Kilgard, 1994, 1997. */
4 /* This program is freely distributable without licensing fees
5 and is provided without guarantee or warrantee expressed or
6 implied. This program is -not- in the public domain. */
15 glutExtensionSupported(const char *extension
)
17 static const GLubyte
*extensions
= NULL
;
19 GLubyte
*where
, *terminator
;
21 /* Extension names should not have spaces. */
22 where
= (GLubyte
*) strchr(extension
, ' ');
23 if (where
|| *extension
== '\0')
27 extensions
= glGetString(GL_EXTENSIONS
);
29 /* It takes a bit of care to be fool-proof about parsing the
30 OpenGL extensions string. Don't be fooled by sub-strings,
34 /* If your application crashes in the strstr routine below,
35 you are probably calling glutExtensionSupported without
36 having a current window. Calling glGetString without
37 a current OpenGL context has unpredictable results.
38 Please fix your program. */
39 where
= (GLubyte
*) strstr((const char *) start
, extension
);
42 terminator
= where
+ strlen(extension
);
43 if (where
== start
|| *(where
- 1) == ' ') {
44 if (*terminator
== ' ' || *terminator
== '\0') {
54 struct name_address_pair
{
59 static struct name_address_pair glut_functions
[] = {
60 { "glutInit", (const void *) glutInit
},
61 { "glutInitDisplayMode", (const void *) glutInitDisplayMode
},
62 { "glutInitDisplayString", (const void *) glutInitDisplayString
},
63 { "glutInitWindowPosition", (const void *) glutInitWindowPosition
},
64 { "glutInitWindowSize", (const void *) glutInitWindowSize
},
65 { "glutMainLoop", (const void *) glutMainLoop
},
66 { "glutCreateWindow", (const void *) glutCreateWindow
},
67 { "glutCreateSubWindow", (const void *) glutCreateSubWindow
},
68 { "glutDestroyWindow", (const void *) glutDestroyWindow
},
69 { "glutPostRedisplay", (const void *) glutPostRedisplay
},
70 { "glutPostWindowRedisplay", (const void *) glutPostWindowRedisplay
},
71 { "glutSwapBuffers", (const void *) glutSwapBuffers
},
72 { "glutGetWindow", (const void *) glutGetWindow
},
73 { "glutSetWindow", (const void *) glutSetWindow
},
74 { "glutSetWindowTitle", (const void *) glutSetWindowTitle
},
75 { "glutSetIconTitle", (const void *) glutSetIconTitle
},
76 { "glutPositionWindow", (const void *) glutPositionWindow
},
77 { "glutReshapeWindow", (const void *) glutReshapeWindow
},
78 { "glutPopWindow", (const void *) glutPopWindow
},
79 { "glutPushWindow", (const void *) glutPushWindow
},
80 { "glutIconifyWindow", (const void *) glutIconifyWindow
},
81 { "glutShowWindow", (const void *) glutShowWindow
},
82 { "glutHideWindow", (const void *) glutHideWindow
},
83 { "glutFullScreen", (const void *) glutFullScreen
},
84 { "glutSetCursor", (const void *) glutSetCursor
},
85 { "glutWarpPointer", (const void *) glutWarpPointer
},
86 { "glutEstablishOverlay", (const void *) glutEstablishOverlay
},
87 { "glutRemoveOverlay", (const void *) glutRemoveOverlay
},
88 { "glutUseLayer", (const void *) glutUseLayer
},
89 { "glutPostOverlayRedisplay", (const void *) glutPostOverlayRedisplay
},
90 { "glutPostWindowOverlayRedisplay", (const void *) glutPostWindowOverlayRedisplay
},
91 { "glutShowOverlay", (const void *) glutShowOverlay
},
92 { "glutHideOverlay", (const void *) glutHideOverlay
},
93 { "glutCreateMenu", (const void *) glutCreateMenu
},
94 { "glutDestroyMenu", (const void *) glutDestroyMenu
},
95 { "glutGetMenu", (const void *) glutGetMenu
},
96 { "glutSetMenu", (const void *) glutSetMenu
},
97 { "glutAddMenuEntry", (const void *) glutAddMenuEntry
},
98 { "glutAddSubMenu", (const void *) glutAddSubMenu
},
99 { "glutChangeToMenuEntry", (const void *) glutChangeToMenuEntry
},
100 { "glutChangeToSubMenu", (const void *) glutChangeToSubMenu
},
101 { "glutRemoveMenuItem", (const void *) glutRemoveMenuItem
},
102 { "glutAttachMenu", (const void *) glutAttachMenu
},
103 { "glutDetachMenu", (const void *) glutDetachMenu
},
104 { "glutDisplayFunc", (const void *) glutDisplayFunc
},
105 { "glutReshapeFunc", (const void *) glutReshapeFunc
},
106 { "glutKeyboardFunc", (const void *) glutKeyboardFunc
},
107 { "glutMouseFunc", (const void *) glutMouseFunc
},
108 { "glutMotionFunc", (const void *) glutMotionFunc
},
109 { "glutPassiveMotionFunc", (const void *) glutPassiveMotionFunc
},
110 { "glutEntryFunc", (const void *) glutEntryFunc
},
111 { "glutVisibilityFunc", (const void *) glutVisibilityFunc
},
112 { "glutIdleFunc", (const void *) glutIdleFunc
},
113 { "glutTimerFunc", (const void *) glutTimerFunc
},
114 { "glutMenuStateFunc", (const void *) glutMenuStateFunc
},
115 { "glutSpecialFunc", (const void *) glutSpecialFunc
},
116 { "glutSpaceballMotionFunc", (const void *) glutSpaceballMotionFunc
},
117 { "glutSpaceballRotateFunc", (const void *) glutSpaceballRotateFunc
},
118 { "glutSpaceballButtonFunc", (const void *) glutSpaceballButtonFunc
},
119 { "glutButtonBoxFunc", (const void *) glutButtonBoxFunc
},
120 { "glutDialsFunc", (const void *) glutDialsFunc
},
121 { "glutTabletMotionFunc", (const void *) glutTabletMotionFunc
},
122 { "glutTabletButtonFunc", (const void *) glutTabletButtonFunc
},
123 { "glutMenuStatusFunc", (const void *) glutMenuStatusFunc
},
124 { "glutOverlayDisplayFunc", (const void *) glutOverlayDisplayFunc
},
125 { "glutWindowStatusFunc", (const void *) glutWindowStatusFunc
},
126 // { "glutKeyboardUpFunc", (const void *) glutKeyboardUpFunc },
127 // { "glutSpecialUpFunc", (const void *) glutSpecialUpFunc },
128 // { "glutJoystickFunc", (const void *) glutJoystickFunc },
129 { "glutSetColor", (const void *) glutSetColor
},
130 { "glutGetColor", (const void *) glutGetColor
},
131 { "glutCopyColormap", (const void *) glutCopyColormap
},
132 { "glutGet", (const void *) glutGet
},
133 { "glutDeviceGet", (const void *) glutDeviceGet
},
134 { "glutExtensionSupported", (const void *) glutExtensionSupported
},
135 { "glutGetModifiers", (const void *) glutGetModifiers
},
136 { "glutLayerGet", (const void *) glutLayerGet
},
137 { "glutGetProcAddress", (const void *) glutGetProcAddress
},
138 { "glutBitmapCharacter", (const void *) glutBitmapCharacter
},
139 { "glutBitmapWidth", (const void *) glutBitmapWidth
},
140 { "glutStrokeCharacter", (const void *) glutStrokeCharacter
},
141 { "glutStrokeWidth", (const void *) glutStrokeWidth
},
142 { "glutBitmapLength", (const void *) glutBitmapLength
},
143 { "glutStrokeLength", (const void *) glutStrokeLength
},
144 { "glutWireSphere", (const void *) glutWireSphere
},
145 { "glutSolidSphere", (const void *) glutSolidSphere
},
146 { "glutWireCone", (const void *) glutWireCone
},
147 { "glutSolidCone", (const void *) glutSolidCone
},
148 { "glutWireCube", (const void *) glutWireCube
},
149 { "glutSolidCube", (const void *) glutSolidCube
},
150 { "glutWireTorus", (const void *) glutWireTorus
},
151 { "glutSolidTorus", (const void *) glutSolidTorus
},
152 { "glutWireDodecahedron", (const void *) glutWireDodecahedron
},
153 { "glutSolidDodecahedron", (const void *) glutSolidDodecahedron
},
154 { "glutWireTeapot", (const void *) glutWireTeapot
},
155 { "glutSolidTeapot", (const void *) glutSolidTeapot
},
156 { "glutWireOctahedron", (const void *) glutWireOctahedron
},
157 { "glutSolidOctahedron", (const void *) glutSolidOctahedron
},
158 { "glutWireTetrahedron", (const void *) glutWireTetrahedron
},
159 { "glutSolidTetrahedron", (const void *) glutSolidTetrahedron
},
160 { "glutWireIcosahedron", (const void *) glutWireIcosahedron
},
161 { "glutSolidIcosahedron", (const void *) glutSolidIcosahedron
},
162 { "glutVideoResizeGet", (const void *) glutVideoResizeGet
},
163 { "glutSetupVideoResizing", (const void *) glutSetupVideoResizing
},
164 { "glutStopVideoResizing", (const void *) glutStopVideoResizing
},
165 { "glutVideoResize", (const void *) glutVideoResize
},
166 { "glutVideoPan", (const void *) glutVideoPan
},
167 { "glutReportErrors", (const void *) glutReportErrors
},
168 // { "glutIgnoreKeyRepeat", (const void *) glutIgnoreKeyRepeat },
169 // { "glutSetKeyRepeat", (const void *) glutSetKeyRepeat },
170 // { "glutForceJoystickFunc", (const void *) glutForceJoystickFunc },
171 // { "glutGameModeString", (const void *) glutGameModeString },
172 // { "glutEnterGameMode", (const void *) glutEnterGameMode },
173 // { "glutLeaveGameMode", (const void *) glutLeaveGameMode },
174 // { "glutGameModeGet", (const void *) glutGameModeGet },
179 /* XXX This isn't an official GLUT function, yet */
181 glutGetProcAddress(const char *procName
)
183 /* Try GLUT functions first */
185 for (i
= 0; glut_functions
[i
].name
; i
++) {
186 if (strcmp(glut_functions
[i
].name
, procName
) == 0)
187 return (void *) glut_functions
[i
].address
;
190 /* Try core GL functions */
192 return (void *) wglGetProcAddress((LPCSTR
) procName
);
193 #elif defined(GLX_ARB_get_proc_address)
194 return (void *) glXGetProcAddressARB((const GLubyte
*) procName
);