| 1 | /* | 
|---|
| 2 | * fg_ext.c | 
|---|
| 3 | * | 
|---|
| 4 | * Functions related to OpenGL extensions. | 
|---|
| 5 | * | 
|---|
| 6 | * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. | 
|---|
| 7 | * Written by Pawel W. Olszta, <olszta@sourceforge.net> | 
|---|
| 8 | * Creation date: Thu Dec 9 1999 | 
|---|
| 9 | * | 
|---|
| 10 | * Permission is hereby granted, free of charge, to any person obtaining a | 
|---|
| 11 | * copy of this software and associated documentation files (the "Software"), | 
|---|
| 12 | * to deal in the Software without restriction, including without limitation | 
|---|
| 13 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | 
|---|
| 14 | * and/or sell copies of the Software, and to permit persons to whom the | 
|---|
| 15 | * Software is furnished to do so, subject to the following conditions: | 
|---|
| 16 | * | 
|---|
| 17 | * The above copyright notice and this permission notice shall be included | 
|---|
| 18 | * in all copies or substantial portions of the Software. | 
|---|
| 19 | * | 
|---|
| 20 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | 
|---|
| 21 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
|---|
| 22 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL | 
|---|
| 23 | * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | 
|---|
| 24 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | 
|---|
| 25 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | 
|---|
| 26 | */ | 
|---|
| 27 |  | 
|---|
| 28 | #define GLX_GLXEXT_PROTOTYPES | 
|---|
| 29 | #include <GL/freeglut.h> | 
|---|
| 30 | #include "fg_internal.h" | 
|---|
| 31 |  | 
|---|
| 32 | extern SFG_Proc fgPlatformGetProcAddress( const char *procName ); | 
|---|
| 33 | extern GLUTproc fgPlatformGetGLUTProcAddress( const char *procName ); | 
|---|
| 34 |  | 
|---|
| 35 | static GLUTproc fghGetGLUTProcAddress( const char* procName ) | 
|---|
| 36 | { | 
|---|
| 37 | /* optimization: quick initial check */ | 
|---|
| 38 | if( strncmp( procName, "glut", 4 ) != 0 ) | 
|---|
| 39 | return NULL; | 
|---|
| 40 |  | 
|---|
| 41 | #define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x; | 
|---|
| 42 | CHECK_NAME(glutInit); | 
|---|
| 43 | CHECK_NAME(glutInitDisplayMode); | 
|---|
| 44 | CHECK_NAME(glutInitDisplayString); | 
|---|
| 45 | CHECK_NAME(glutInitWindowPosition); | 
|---|
| 46 | CHECK_NAME(glutInitWindowSize); | 
|---|
| 47 | CHECK_NAME(glutMainLoop); | 
|---|
| 48 | CHECK_NAME(glutExit); | 
|---|
| 49 | CHECK_NAME(glutCreateWindow); | 
|---|
| 50 | CHECK_NAME(glutCreateSubWindow); | 
|---|
| 51 | CHECK_NAME(glutDestroyWindow); | 
|---|
| 52 | CHECK_NAME(glutPostRedisplay); | 
|---|
| 53 | CHECK_NAME(glutPostWindowRedisplay); | 
|---|
| 54 | CHECK_NAME(glutSwapBuffers); | 
|---|
| 55 | CHECK_NAME(glutGetWindow); | 
|---|
| 56 | CHECK_NAME(glutSetWindow); | 
|---|
| 57 | CHECK_NAME(glutSetWindowTitle); | 
|---|
| 58 | CHECK_NAME(glutSetIconTitle); | 
|---|
| 59 | CHECK_NAME(glutPositionWindow); | 
|---|
| 60 | CHECK_NAME(glutReshapeWindow); | 
|---|
| 61 | CHECK_NAME(glutPopWindow); | 
|---|
| 62 | CHECK_NAME(glutPushWindow); | 
|---|
| 63 | CHECK_NAME(glutIconifyWindow); | 
|---|
| 64 | CHECK_NAME(glutShowWindow); | 
|---|
| 65 | CHECK_NAME(glutHideWindow); | 
|---|
| 66 | CHECK_NAME(glutFullScreen); | 
|---|
| 67 | CHECK_NAME(glutSetCursor); | 
|---|
| 68 | CHECK_NAME(glutWarpPointer); | 
|---|
| 69 | CHECK_NAME(glutEstablishOverlay); | 
|---|
| 70 | CHECK_NAME(glutRemoveOverlay); | 
|---|
| 71 | CHECK_NAME(glutUseLayer); | 
|---|
| 72 | CHECK_NAME(glutPostOverlayRedisplay); | 
|---|
| 73 | CHECK_NAME(glutPostWindowOverlayRedisplay); | 
|---|
| 74 | CHECK_NAME(glutShowOverlay); | 
|---|
| 75 | CHECK_NAME(glutHideOverlay); | 
|---|
| 76 | CHECK_NAME(glutCreateMenu); | 
|---|
| 77 | CHECK_NAME(glutDestroyMenu); | 
|---|
| 78 | CHECK_NAME(glutGetMenu); | 
|---|
| 79 | CHECK_NAME(glutSetMenu); | 
|---|
| 80 | CHECK_NAME(glutAddMenuEntry); | 
|---|
| 81 | CHECK_NAME(glutAddSubMenu); | 
|---|
| 82 | CHECK_NAME(glutChangeToMenuEntry); | 
|---|
| 83 | CHECK_NAME(glutChangeToSubMenu); | 
|---|
| 84 | CHECK_NAME(glutRemoveMenuItem); | 
|---|
| 85 | CHECK_NAME(glutAttachMenu); | 
|---|
| 86 | CHECK_NAME(glutDetachMenu); | 
|---|
| 87 | CHECK_NAME(glutDisplayFunc); | 
|---|
| 88 | CHECK_NAME(glutReshapeFunc); | 
|---|
| 89 | CHECK_NAME(glutPositionFunc); | 
|---|
| 90 | CHECK_NAME(glutKeyboardFunc); | 
|---|
| 91 | CHECK_NAME(glutMouseFunc); | 
|---|
| 92 | CHECK_NAME(glutMultiEntryFunc); | 
|---|
| 93 | CHECK_NAME(glutMultiMotionFunc); | 
|---|
| 94 | CHECK_NAME(glutMultiButtonFunc); | 
|---|
| 95 | CHECK_NAME(glutMultiPassiveFunc); | 
|---|
| 96 | CHECK_NAME(glutMotionFunc); | 
|---|
| 97 | CHECK_NAME(glutPassiveMotionFunc); | 
|---|
| 98 | CHECK_NAME(glutEntryFunc); | 
|---|
| 99 | CHECK_NAME(glutVisibilityFunc); | 
|---|
| 100 | CHECK_NAME(glutIdleFunc); | 
|---|
| 101 | CHECK_NAME(glutTimerFunc); | 
|---|
| 102 | CHECK_NAME(glutMenuStateFunc); | 
|---|
| 103 | CHECK_NAME(glutSpecialFunc); | 
|---|
| 104 | CHECK_NAME(glutSpaceballMotionFunc); | 
|---|
| 105 | CHECK_NAME(glutSpaceballRotateFunc); | 
|---|
| 106 | CHECK_NAME(glutSpaceballButtonFunc); | 
|---|
| 107 | CHECK_NAME(glutButtonBoxFunc); | 
|---|
| 108 | CHECK_NAME(glutDialsFunc); | 
|---|
| 109 | CHECK_NAME(glutTabletMotionFunc); | 
|---|
| 110 | CHECK_NAME(glutTabletButtonFunc); | 
|---|
| 111 | CHECK_NAME(glutMenuStatusFunc); | 
|---|
| 112 | CHECK_NAME(glutOverlayDisplayFunc); | 
|---|
| 113 | CHECK_NAME(glutWindowStatusFunc); | 
|---|
| 114 | CHECK_NAME(glutKeyboardDownFunc); | 
|---|
| 115 | CHECK_NAME(glutKeyboardUpFunc); | 
|---|
| 116 | CHECK_NAME(glutSpecialUpFunc); | 
|---|
| 117 | CHECK_NAME(glutSetColor); | 
|---|
| 118 | CHECK_NAME(glutGetColor); | 
|---|
| 119 | CHECK_NAME(glutCopyColormap); | 
|---|
| 120 | CHECK_NAME(glutGet); | 
|---|
| 121 | CHECK_NAME(glutDeviceGet); | 
|---|
| 122 | CHECK_NAME(glutExtensionSupported); | 
|---|
| 123 | CHECK_NAME(glutGetModifiers); | 
|---|
| 124 | CHECK_NAME(glutLayerGet); | 
|---|
| 125 | CHECK_NAME(glutBitmapCharacter); | 
|---|
| 126 | CHECK_NAME(glutBitmapWidth); | 
|---|
| 127 | CHECK_NAME(glutStrokeCharacter); | 
|---|
| 128 | CHECK_NAME(glutStrokeWidth); | 
|---|
| 129 | CHECK_NAME(glutStrokeWidthf); | 
|---|
| 130 | CHECK_NAME(glutBitmapLength); | 
|---|
| 131 | CHECK_NAME(glutStrokeLength); | 
|---|
| 132 | CHECK_NAME(glutStrokeLengthf); | 
|---|
| 133 | CHECK_NAME(glutWireSphere); | 
|---|
| 134 | CHECK_NAME(glutSolidSphere); | 
|---|
| 135 | CHECK_NAME(glutWireCone); | 
|---|
| 136 | CHECK_NAME(glutSolidCone); | 
|---|
| 137 | CHECK_NAME(glutWireTorus); | 
|---|
| 138 | CHECK_NAME(glutSolidTorus); | 
|---|
| 139 | CHECK_NAME(glutWireCylinder); | 
|---|
| 140 | CHECK_NAME(glutSolidCylinder); | 
|---|
| 141 | CHECK_NAME(glutWireTeapot); | 
|---|
| 142 | CHECK_NAME(glutSolidTeapot); | 
|---|
| 143 | CHECK_NAME(glutWireTeacup); | 
|---|
| 144 | CHECK_NAME(glutSolidTeacup); | 
|---|
| 145 | CHECK_NAME(glutWireTeaspoon); | 
|---|
| 146 | CHECK_NAME(glutSolidTeaspoon); | 
|---|
| 147 | CHECK_NAME(glutWireCube); | 
|---|
| 148 | CHECK_NAME(glutSolidCube); | 
|---|
| 149 | CHECK_NAME(glutWireDodecahedron); | 
|---|
| 150 | CHECK_NAME(glutSolidDodecahedron); | 
|---|
| 151 | CHECK_NAME(glutWireOctahedron); | 
|---|
| 152 | CHECK_NAME(glutSolidOctahedron); | 
|---|
| 153 | CHECK_NAME(glutWireTetrahedron); | 
|---|
| 154 | CHECK_NAME(glutSolidTetrahedron); | 
|---|
| 155 | CHECK_NAME(glutWireIcosahedron); | 
|---|
| 156 | CHECK_NAME(glutSolidIcosahedron); | 
|---|
| 157 | CHECK_NAME(glutWireRhombicDodecahedron); | 
|---|
| 158 | CHECK_NAME(glutSolidRhombicDodecahedron); | 
|---|
| 159 | CHECK_NAME(glutWireSierpinskiSponge); | 
|---|
| 160 | CHECK_NAME(glutSolidSierpinskiSponge); | 
|---|
| 161 | CHECK_NAME(glutVideoResizeGet); | 
|---|
| 162 | CHECK_NAME(glutSetupVideoResizing); | 
|---|
| 163 | CHECK_NAME(glutStopVideoResizing); | 
|---|
| 164 | CHECK_NAME(glutVideoResize); | 
|---|
| 165 | CHECK_NAME(glutVideoPan); | 
|---|
| 166 | CHECK_NAME(glutReportErrors); | 
|---|
| 167 | CHECK_NAME(glutIgnoreKeyRepeat); | 
|---|
| 168 | CHECK_NAME(glutSetKeyRepeat); | 
|---|
| 169 |  | 
|---|
| 170 | /* freeglut extensions */ | 
|---|
| 171 | CHECK_NAME(glutMainLoopEvent); | 
|---|
| 172 | CHECK_NAME(glutLeaveMainLoop); | 
|---|
| 173 | CHECK_NAME(glutCloseFunc); | 
|---|
| 174 | CHECK_NAME(glutWMCloseFunc); | 
|---|
| 175 | CHECK_NAME(glutMenuDestroyFunc); | 
|---|
| 176 | CHECK_NAME(glutFullScreenToggle); | 
|---|
| 177 | CHECK_NAME(glutLeaveFullScreen); | 
|---|
| 178 | CHECK_NAME(glutSetMenuFont); | 
|---|
| 179 | CHECK_NAME(glutSetOption); | 
|---|
| 180 | CHECK_NAME(glutGetModeValues); | 
|---|
| 181 | CHECK_NAME(glutSetWindowData); | 
|---|
| 182 | CHECK_NAME(glutGetWindowData); | 
|---|
| 183 | CHECK_NAME(glutSetMenuData); | 
|---|
| 184 | CHECK_NAME(glutGetMenuData); | 
|---|
| 185 | CHECK_NAME(glutBitmapHeight); | 
|---|
| 186 | CHECK_NAME(glutStrokeHeight); | 
|---|
| 187 | CHECK_NAME(glutBitmapString); | 
|---|
| 188 | CHECK_NAME(glutStrokeString); | 
|---|
| 189 | CHECK_NAME(glutGetProcAddress); | 
|---|
| 190 | CHECK_NAME(glutKeyboardExtFunc); | 
|---|
| 191 | CHECK_NAME(glutMouseWheelFunc); | 
|---|
| 192 | CHECK_NAME(glutGetClipboard); | 
|---|
| 193 | CHECK_NAME(glutSetClipboard); | 
|---|
| 194 | CHECK_NAME(glutJoystickGetNumAxes); | 
|---|
| 195 | CHECK_NAME(glutJoystickGetNumButtons); | 
|---|
| 196 | CHECK_NAME(glutJoystickNotWorking); | 
|---|
| 197 | CHECK_NAME(glutJoystickGetDeadBand); | 
|---|
| 198 | CHECK_NAME(glutJoystickSetDeadBand); | 
|---|
| 199 | CHECK_NAME(glutJoystickGetSaturation); | 
|---|
| 200 | CHECK_NAME(glutJoystickSetSaturation); | 
|---|
| 201 | CHECK_NAME(glutJoystickSetMinRange); | 
|---|
| 202 | CHECK_NAME(glutJoystickSetMaxRange); | 
|---|
| 203 | CHECK_NAME(glutJoystickSetCenter); | 
|---|
| 204 | CHECK_NAME(glutJoystickGetMinRange); | 
|---|
| 205 | CHECK_NAME(glutJoystickGetMaxRange); | 
|---|
| 206 | CHECK_NAME(glutJoystickGetCenter); | 
|---|
| 207 | CHECK_NAME(glutInitContextVersion); | 
|---|
| 208 | CHECK_NAME(glutInitContextFlags); | 
|---|
| 209 | CHECK_NAME(glutInitContextProfile); | 
|---|
| 210 | CHECK_NAME(glutInitErrorFunc); | 
|---|
| 211 | CHECK_NAME(glutInitWarningFunc); | 
|---|
| 212 | CHECK_NAME(glutInitContextFunc); | 
|---|
| 213 | CHECK_NAME(glutAppStatusFunc); | 
|---|
| 214 | CHECK_NAME(glutSetVertexAttribCoord3); | 
|---|
| 215 | CHECK_NAME(glutSetVertexAttribNormal); | 
|---|
| 216 | CHECK_NAME(glutSetVertexAttribTexCoord2); | 
|---|
| 217 | #undef CHECK_NAME | 
|---|
| 218 |  | 
|---|
| 219 | return NULL; | 
|---|
| 220 | } | 
|---|
| 221 |  | 
|---|
| 222 |  | 
|---|
| 223 |  | 
|---|
| 224 | GLUTproc FGAPIENTRY | 
|---|
| 225 | glutGetProcAddress( const char *procName ) | 
|---|
| 226 | { | 
|---|
| 227 | GLUTproc p; | 
|---|
| 228 | FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress"); | 
|---|
| 229 |  | 
|---|
| 230 | /* Try GLUT functions first, then core GL functions */ | 
|---|
| 231 | p = fghGetGLUTProcAddress( procName ); | 
|---|
| 232 |  | 
|---|
| 233 | /* Some GLUT functions are platform-specific: */ | 
|---|
| 234 | if ( !p ) | 
|---|
| 235 | p = fgPlatformGetGLUTProcAddress( procName ); | 
|---|
| 236 |  | 
|---|
| 237 | return ( p != NULL ) ? p : fgPlatformGetProcAddress( procName ); | 
|---|
| 238 | } | 
|---|
| 239 |  | 
|---|