-/*\r
- * freeglut_ext.c\r
- *\r
- * Functions related to OpenGL extensions.\r
- *\r
- * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.\r
- * Written by Pawel W. Olszta, <olszta@sourceforge.net>\r
- * Creation date: Thu Dec 9 1999\r
- *\r
- * Permission is hereby granted, free of charge, to any person obtaining a\r
- * copy of this software and associated documentation files (the "Software"),\r
- * to deal in the Software without restriction, including without limitation\r
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
- * and/or sell copies of the Software, and to permit persons to whom the\r
- * Software is furnished to do so, subject to the following conditions:\r
- *\r
- * The above copyright notice and this permission notice shall be included\r
- * in all copies or substantial portions of the Software.\r
- *\r
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
- * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
- */\r
-\r
-#define GLX_GLXEXT_PROTOTYPES\r
-#include <GL/freeglut.h>\r
-#include "freeglut_internal.h"\r
-\r
-extern SFG_Proc fgPlatformGetProcAddress( const char *procName );\r
-extern GLUTproc fgPlatformGetGLUTProcAddress( const char *procName );\r
-\r
-static GLUTproc fghGetGLUTProcAddress( const char* procName )\r
-{\r
- /* optimization: quick initial check */\r
- if( strncmp( procName, "glut", 4 ) != 0 )\r
- return NULL;\r
-\r
-#define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x;\r
- CHECK_NAME(glutInit);\r
- CHECK_NAME(glutInitDisplayMode);\r
- CHECK_NAME(glutInitDisplayString);\r
- CHECK_NAME(glutInitWindowPosition);\r
- CHECK_NAME(glutInitWindowSize);\r
- CHECK_NAME(glutMainLoop);\r
- CHECK_NAME(glutExit);\r
- CHECK_NAME(glutCreateWindow);\r
- CHECK_NAME(glutCreateSubWindow);\r
- CHECK_NAME(glutDestroyWindow);\r
- CHECK_NAME(glutPostRedisplay);\r
- CHECK_NAME(glutPostWindowRedisplay);\r
- CHECK_NAME(glutSwapBuffers);\r
- CHECK_NAME(glutGetWindow);\r
- CHECK_NAME(glutSetWindow);\r
- CHECK_NAME(glutSetWindowTitle);\r
- CHECK_NAME(glutSetIconTitle);\r
- CHECK_NAME(glutPositionWindow);\r
- CHECK_NAME(glutReshapeWindow);\r
- CHECK_NAME(glutPopWindow);\r
- CHECK_NAME(glutPushWindow);\r
- CHECK_NAME(glutIconifyWindow);\r
- CHECK_NAME(glutShowWindow);\r
- CHECK_NAME(glutHideWindow);\r
- CHECK_NAME(glutFullScreen);\r
- CHECK_NAME(glutSetCursor);\r
- CHECK_NAME(glutWarpPointer);\r
- CHECK_NAME(glutEstablishOverlay);\r
- CHECK_NAME(glutRemoveOverlay);\r
- CHECK_NAME(glutUseLayer);\r
- CHECK_NAME(glutPostOverlayRedisplay);\r
- CHECK_NAME(glutPostWindowOverlayRedisplay);\r
- CHECK_NAME(glutShowOverlay);\r
- CHECK_NAME(glutHideOverlay);\r
- CHECK_NAME(glutCreateMenu);\r
- CHECK_NAME(glutDestroyMenu);\r
- CHECK_NAME(glutGetMenu);\r
- CHECK_NAME(glutSetMenu);\r
- CHECK_NAME(glutAddMenuEntry);\r
- CHECK_NAME(glutAddSubMenu);\r
- CHECK_NAME(glutChangeToMenuEntry);\r
- CHECK_NAME(glutChangeToSubMenu);\r
- CHECK_NAME(glutRemoveMenuItem);\r
- CHECK_NAME(glutAttachMenu);\r
- CHECK_NAME(glutDetachMenu);\r
- CHECK_NAME(glutDisplayFunc);\r
- CHECK_NAME(glutReshapeFunc);\r
- CHECK_NAME(glutKeyboardFunc);\r
- CHECK_NAME(glutMouseFunc);\r
- CHECK_NAME(glutMultiEntryFunc);\r
- CHECK_NAME(glutMultiMotionFunc);\r
- CHECK_NAME(glutMultiButtonFunc);\r
- CHECK_NAME(glutMultiPassiveFunc);\r
- CHECK_NAME(glutMotionFunc);\r
- CHECK_NAME(glutPassiveMotionFunc);\r
- CHECK_NAME(glutEntryFunc);\r
- CHECK_NAME(glutVisibilityFunc);\r
- CHECK_NAME(glutIdleFunc);\r
- CHECK_NAME(glutTimerFunc);\r
- CHECK_NAME(glutMenuStateFunc);\r
- CHECK_NAME(glutSpecialFunc);\r
- CHECK_NAME(glutSpaceballMotionFunc);\r
- CHECK_NAME(glutSpaceballRotateFunc);\r
- CHECK_NAME(glutSpaceballButtonFunc);\r
- CHECK_NAME(glutButtonBoxFunc);\r
- CHECK_NAME(glutDialsFunc);\r
- CHECK_NAME(glutTabletMotionFunc);\r
- CHECK_NAME(glutTabletButtonFunc);\r
- CHECK_NAME(glutMenuStatusFunc);\r
- CHECK_NAME(glutOverlayDisplayFunc);\r
- CHECK_NAME(glutWindowStatusFunc);\r
- CHECK_NAME(glutKeyboardUpFunc);\r
- CHECK_NAME(glutSpecialUpFunc);\r
- CHECK_NAME(glutSetColor);\r
- CHECK_NAME(glutGetColor);\r
- CHECK_NAME(glutCopyColormap);\r
- CHECK_NAME(glutGet);\r
- CHECK_NAME(glutDeviceGet);\r
- CHECK_NAME(glutExtensionSupported);\r
- CHECK_NAME(glutGetModifiers);\r
- CHECK_NAME(glutLayerGet);\r
- CHECK_NAME(glutBitmapCharacter);\r
- CHECK_NAME(glutBitmapWidth);\r
- CHECK_NAME(glutStrokeCharacter);\r
- CHECK_NAME(glutStrokeWidth);\r
- CHECK_NAME(glutBitmapLength);\r
- CHECK_NAME(glutStrokeLength);\r
- CHECK_NAME(glutWireSphere);\r
- CHECK_NAME(glutSolidSphere);\r
- CHECK_NAME(glutWireCone);\r
- CHECK_NAME(glutSolidCone);\r
- CHECK_NAME(glutWireCube);\r
- CHECK_NAME(glutSolidCube);\r
- CHECK_NAME(glutWireTorus);\r
- CHECK_NAME(glutSolidTorus);\r
- CHECK_NAME(glutWireDodecahedron);\r
- CHECK_NAME(glutSolidDodecahedron);\r
- CHECK_NAME(glutWireTeapot);\r
- CHECK_NAME(glutSolidTeapot);\r
- CHECK_NAME(glutWireOctahedron);\r
- CHECK_NAME(glutSolidOctahedron);\r
- CHECK_NAME(glutWireTetrahedron);\r
- CHECK_NAME(glutSolidTetrahedron);\r
- CHECK_NAME(glutWireIcosahedron);\r
- CHECK_NAME(glutSolidIcosahedron);\r
- CHECK_NAME(glutVideoResizeGet);\r
- CHECK_NAME(glutSetupVideoResizing);\r
- CHECK_NAME(glutStopVideoResizing);\r
- CHECK_NAME(glutVideoResize);\r
- CHECK_NAME(glutVideoPan);\r
- CHECK_NAME(glutReportErrors);\r
- CHECK_NAME(glutIgnoreKeyRepeat);\r
- CHECK_NAME(glutSetKeyRepeat);\r
-\r
- /* freeglut extensions */\r
- CHECK_NAME(glutMainLoopEvent);\r
- CHECK_NAME(glutLeaveMainLoop);\r
- CHECK_NAME(glutCloseFunc);\r
- CHECK_NAME(glutWMCloseFunc);\r
- CHECK_NAME(glutMenuDestroyFunc);\r
- CHECK_NAME(glutFullScreenToggle);\r
- CHECK_NAME(glutLeaveFullScreen);\r
- CHECK_NAME(glutSetOption);\r
- CHECK_NAME(glutGetModeValues);\r
- CHECK_NAME(glutSetWindowData);\r
- CHECK_NAME(glutGetWindowData);\r
- CHECK_NAME(glutSetMenuData);\r
- CHECK_NAME(glutGetMenuData);\r
- CHECK_NAME(glutBitmapHeight);\r
- CHECK_NAME(glutStrokeHeight);\r
- CHECK_NAME(glutBitmapString);\r
- CHECK_NAME(glutStrokeString);\r
- CHECK_NAME(glutWireRhombicDodecahedron);\r
- CHECK_NAME(glutSolidRhombicDodecahedron);\r
- CHECK_NAME(glutWireSierpinskiSponge);\r
- CHECK_NAME(glutSolidSierpinskiSponge);\r
- CHECK_NAME(glutWireCylinder);\r
- CHECK_NAME(glutSolidCylinder);\r
- CHECK_NAME(glutGetProcAddress);\r
- CHECK_NAME(glutMouseWheelFunc);\r
- CHECK_NAME(glutJoystickGetNumAxes);\r
- CHECK_NAME(glutJoystickGetNumButtons);\r
- CHECK_NAME(glutJoystickNotWorking);\r
- CHECK_NAME(glutJoystickGetDeadBand);\r
- CHECK_NAME(glutJoystickSetDeadBand);\r
- CHECK_NAME(glutJoystickGetSaturation);\r
- CHECK_NAME(glutJoystickSetSaturation);\r
- CHECK_NAME(glutJoystickSetMinRange);\r
- CHECK_NAME(glutJoystickSetMaxRange);\r
- CHECK_NAME(glutJoystickSetCenter);\r
- CHECK_NAME(glutJoystickGetMinRange);\r
- CHECK_NAME(glutJoystickGetMaxRange);\r
- CHECK_NAME(glutJoystickGetCenter);\r
- CHECK_NAME(glutInitContextVersion);\r
- CHECK_NAME(glutInitContextFlags);\r
- CHECK_NAME(glutInitContextProfile);\r
- CHECK_NAME(glutInitErrorFunc);\r
- CHECK_NAME(glutInitWarningFunc);\r
-#undef CHECK_NAME\r
-\r
- return NULL;\r
-}\r
-\r
-\r
-\r
-GLUTproc FGAPIENTRY\r
-glutGetProcAddress( const char *procName )\r
-{\r
- GLUTproc p;\r
- FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" );\r
-\r
- /* Try GLUT functions first, then core GL functions */\r
- p = fghGetGLUTProcAddress( procName );\r
-\r
- /* Some GLUT functions are platform-specific: */\r
- if ( !p )\r
- p = fgPlatformGetGLUTProcAddress( procName );\r
-\r
- return ( p != NULL ) ? p : fgPlatformGetProcAddress( procName );\r
-}\r
+/*
+ * freeglut_ext.c
+ *
+ * Functions related to OpenGL extensions.
+ *
+ * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
+ * Written by Pawel W. Olszta, <olszta@sourceforge.net>
+ * Creation date: Thu Dec 9 1999
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#define GLX_GLXEXT_PROTOTYPES
+#include <GL/freeglut.h>
+#include "freeglut_internal.h"
+
+extern SFG_Proc fgPlatformGetProcAddress( const char *procName );
+extern GLUTproc fgPlatformGetGLUTProcAddress( const char *procName );
+
+static GLUTproc fghGetGLUTProcAddress( const char* procName )
+{
+ /* optimization: quick initial check */
+ if( strncmp( procName, "glut", 4 ) != 0 )
+ return NULL;
+
+#define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x;
+ CHECK_NAME(glutInit);
+ CHECK_NAME(glutInitDisplayMode);
+ CHECK_NAME(glutInitDisplayString);
+ CHECK_NAME(glutInitWindowPosition);
+ CHECK_NAME(glutInitWindowSize);
+ CHECK_NAME(glutMainLoop);
+ CHECK_NAME(glutExit);
+ CHECK_NAME(glutCreateWindow);
+ CHECK_NAME(glutCreateSubWindow);
+ CHECK_NAME(glutDestroyWindow);
+ CHECK_NAME(glutPostRedisplay);
+ CHECK_NAME(glutPostWindowRedisplay);
+ CHECK_NAME(glutSwapBuffers);
+ CHECK_NAME(glutGetWindow);
+ CHECK_NAME(glutSetWindow);
+ CHECK_NAME(glutSetWindowTitle);
+ CHECK_NAME(glutSetIconTitle);
+ CHECK_NAME(glutPositionWindow);
+ CHECK_NAME(glutReshapeWindow);
+ CHECK_NAME(glutPopWindow);
+ CHECK_NAME(glutPushWindow);
+ CHECK_NAME(glutIconifyWindow);
+ CHECK_NAME(glutShowWindow);
+ CHECK_NAME(glutHideWindow);
+ CHECK_NAME(glutFullScreen);
+ CHECK_NAME(glutSetCursor);
+ CHECK_NAME(glutWarpPointer);
+ CHECK_NAME(glutEstablishOverlay);
+ CHECK_NAME(glutRemoveOverlay);
+ CHECK_NAME(glutUseLayer);
+ CHECK_NAME(glutPostOverlayRedisplay);
+ CHECK_NAME(glutPostWindowOverlayRedisplay);
+ CHECK_NAME(glutShowOverlay);
+ CHECK_NAME(glutHideOverlay);
+ CHECK_NAME(glutCreateMenu);
+ CHECK_NAME(glutDestroyMenu);
+ CHECK_NAME(glutGetMenu);
+ CHECK_NAME(glutSetMenu);
+ CHECK_NAME(glutAddMenuEntry);
+ CHECK_NAME(glutAddSubMenu);
+ CHECK_NAME(glutChangeToMenuEntry);
+ CHECK_NAME(glutChangeToSubMenu);
+ CHECK_NAME(glutRemoveMenuItem);
+ CHECK_NAME(glutAttachMenu);
+ CHECK_NAME(glutDetachMenu);
+ CHECK_NAME(glutDisplayFunc);
+ CHECK_NAME(glutReshapeFunc);
+ CHECK_NAME(glutKeyboardFunc);
+ CHECK_NAME(glutMouseFunc);
+ CHECK_NAME(glutMultiEntryFunc);
+ CHECK_NAME(glutMultiMotionFunc);
+ CHECK_NAME(glutMultiButtonFunc);
+ CHECK_NAME(glutMultiPassiveFunc);
+ CHECK_NAME(glutMotionFunc);
+ CHECK_NAME(glutPassiveMotionFunc);
+ CHECK_NAME(glutEntryFunc);
+ CHECK_NAME(glutVisibilityFunc);
+ CHECK_NAME(glutIdleFunc);
+ CHECK_NAME(glutTimerFunc);
+ CHECK_NAME(glutMenuStateFunc);
+ CHECK_NAME(glutSpecialFunc);
+ CHECK_NAME(glutSpaceballMotionFunc);
+ CHECK_NAME(glutSpaceballRotateFunc);
+ CHECK_NAME(glutSpaceballButtonFunc);
+ CHECK_NAME(glutButtonBoxFunc);
+ CHECK_NAME(glutDialsFunc);
+ CHECK_NAME(glutTabletMotionFunc);
+ CHECK_NAME(glutTabletButtonFunc);
+ CHECK_NAME(glutMenuStatusFunc);
+ CHECK_NAME(glutOverlayDisplayFunc);
+ CHECK_NAME(glutWindowStatusFunc);
+ CHECK_NAME(glutKeyboardUpFunc);
+ CHECK_NAME(glutSpecialUpFunc);
+ CHECK_NAME(glutSetColor);
+ CHECK_NAME(glutGetColor);
+ CHECK_NAME(glutCopyColormap);
+ CHECK_NAME(glutGet);
+ CHECK_NAME(glutDeviceGet);
+ CHECK_NAME(glutExtensionSupported);
+ CHECK_NAME(glutGetModifiers);
+ CHECK_NAME(glutLayerGet);
+ CHECK_NAME(glutBitmapCharacter);
+ CHECK_NAME(glutBitmapWidth);
+ CHECK_NAME(glutStrokeCharacter);
+ CHECK_NAME(glutStrokeWidth);
+ CHECK_NAME(glutBitmapLength);
+ CHECK_NAME(glutStrokeLength);
+ CHECK_NAME(glutWireSphere);
+ CHECK_NAME(glutSolidSphere);
+ CHECK_NAME(glutWireCone);
+ CHECK_NAME(glutSolidCone);
+ CHECK_NAME(glutWireCube);
+ CHECK_NAME(glutSolidCube);
+ CHECK_NAME(glutWireTorus);
+ CHECK_NAME(glutSolidTorus);
+ CHECK_NAME(glutWireDodecahedron);
+ CHECK_NAME(glutSolidDodecahedron);
+ CHECK_NAME(glutWireTeapot);
+ CHECK_NAME(glutSolidTeapot);
+ CHECK_NAME(glutWireOctahedron);
+ CHECK_NAME(glutSolidOctahedron);
+ CHECK_NAME(glutWireTetrahedron);
+ CHECK_NAME(glutSolidTetrahedron);
+ CHECK_NAME(glutWireIcosahedron);
+ CHECK_NAME(glutSolidIcosahedron);
+ CHECK_NAME(glutVideoResizeGet);
+ CHECK_NAME(glutSetupVideoResizing);
+ CHECK_NAME(glutStopVideoResizing);
+ CHECK_NAME(glutVideoResize);
+ CHECK_NAME(glutVideoPan);
+ CHECK_NAME(glutReportErrors);
+ CHECK_NAME(glutIgnoreKeyRepeat);
+ CHECK_NAME(glutSetKeyRepeat);
+
+ /* freeglut extensions */
+ CHECK_NAME(glutMainLoopEvent);
+ CHECK_NAME(glutLeaveMainLoop);
+ CHECK_NAME(glutCloseFunc);
+ CHECK_NAME(glutWMCloseFunc);
+ CHECK_NAME(glutMenuDestroyFunc);
+ CHECK_NAME(glutFullScreenToggle);
+ CHECK_NAME(glutLeaveFullScreen);
+ CHECK_NAME(glutSetOption);
+ CHECK_NAME(glutGetModeValues);
+ CHECK_NAME(glutSetWindowData);
+ CHECK_NAME(glutGetWindowData);
+ CHECK_NAME(glutSetMenuData);
+ CHECK_NAME(glutGetMenuData);
+ CHECK_NAME(glutBitmapHeight);
+ CHECK_NAME(glutStrokeHeight);
+ CHECK_NAME(glutBitmapString);
+ CHECK_NAME(glutStrokeString);
+ CHECK_NAME(glutWireRhombicDodecahedron);
+ CHECK_NAME(glutSolidRhombicDodecahedron);
+ CHECK_NAME(glutWireSierpinskiSponge);
+ CHECK_NAME(glutSolidSierpinskiSponge);
+ CHECK_NAME(glutWireCylinder);
+ CHECK_NAME(glutSolidCylinder);
+ CHECK_NAME(glutGetProcAddress);
+ CHECK_NAME(glutMouseWheelFunc);
+ CHECK_NAME(glutJoystickGetNumAxes);
+ CHECK_NAME(glutJoystickGetNumButtons);
+ CHECK_NAME(glutJoystickNotWorking);
+ CHECK_NAME(glutJoystickGetDeadBand);
+ CHECK_NAME(glutJoystickSetDeadBand);
+ CHECK_NAME(glutJoystickGetSaturation);
+ CHECK_NAME(glutJoystickSetSaturation);
+ CHECK_NAME(glutJoystickSetMinRange);
+ CHECK_NAME(glutJoystickSetMaxRange);
+ CHECK_NAME(glutJoystickSetCenter);
+ CHECK_NAME(glutJoystickGetMinRange);
+ CHECK_NAME(glutJoystickGetMaxRange);
+ CHECK_NAME(glutJoystickGetCenter);
+ CHECK_NAME(glutInitContextVersion);
+ CHECK_NAME(glutInitContextFlags);
+ CHECK_NAME(glutInitContextProfile);
+ CHECK_NAME(glutInitErrorFunc);
+ CHECK_NAME(glutInitWarningFunc);
+#undef CHECK_NAME
+
+ return NULL;
+}
+
+
+
+GLUTproc FGAPIENTRY
+glutGetProcAddress( const char *procName )
+{
+ GLUTproc p;
+ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" );
+
+ /* Try GLUT functions first, then core GL functions */
+ p = fghGetGLUTProcAddress( procName );
+
+ /* Some GLUT functions are platform-specific: */
+ if ( !p )
+ p = fgPlatformGetGLUTProcAddress( procName );
+
+ return ( p != NULL ) ? p : fgPlatformGetProcAddress( procName );
+}