freeglut_ext.c
上传用户:gb3593
上传日期:2022-01-07
资源大小:3028k
文件大小:8k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2.  * freeglut_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. #define GLX_GLXEXT_PROTOTYPES
  28. #include <GL/freeglut.h>
  29. #include "freeglut_internal.h"
  30. static GLUTproc fghGetGLUTProcAddress( const char* procName )
  31. {
  32.     /* optimization: quick initial check */
  33.     if( strncmp( procName, "glut", 4 ) != 0 )
  34.         return NULL;
  35. #define CHECK_NAME(x) if( strcmp( procName, #x ) == 0) return (GLUTproc)x;
  36.     CHECK_NAME(glutInit);
  37.     CHECK_NAME(glutInitDisplayMode);
  38.     CHECK_NAME(glutInitDisplayString);
  39.     CHECK_NAME(glutInitWindowPosition);
  40.     CHECK_NAME(glutInitWindowSize);
  41.     CHECK_NAME(glutMainLoop);
  42.     CHECK_NAME(glutExit);
  43.     CHECK_NAME(glutCreateWindow);
  44.     CHECK_NAME(glutCreateSubWindow);
  45.     CHECK_NAME(glutDestroyWindow);
  46.     CHECK_NAME(glutPostRedisplay);
  47.     CHECK_NAME(glutPostWindowRedisplay);
  48.     CHECK_NAME(glutSwapBuffers);
  49.     CHECK_NAME(glutGetWindow);
  50.     CHECK_NAME(glutSetWindow);
  51.     CHECK_NAME(glutSetWindowTitle);
  52.     CHECK_NAME(glutSetIconTitle);
  53.     CHECK_NAME(glutPositionWindow);
  54.     CHECK_NAME(glutReshapeWindow);
  55.     CHECK_NAME(glutPopWindow);
  56.     CHECK_NAME(glutPushWindow);
  57.     CHECK_NAME(glutIconifyWindow);
  58.     CHECK_NAME(glutShowWindow);
  59.     CHECK_NAME(glutHideWindow);
  60.     CHECK_NAME(glutFullScreen);
  61.     CHECK_NAME(glutSetCursor);
  62.     CHECK_NAME(glutWarpPointer);
  63.     CHECK_NAME(glutEstablishOverlay);
  64.     CHECK_NAME(glutRemoveOverlay);
  65.     CHECK_NAME(glutUseLayer);
  66.     CHECK_NAME(glutPostOverlayRedisplay);
  67.     CHECK_NAME(glutPostWindowOverlayRedisplay);
  68.     CHECK_NAME(glutShowOverlay);
  69.     CHECK_NAME(glutHideOverlay);
  70.     CHECK_NAME(glutCreateMenu);
  71.     CHECK_NAME(glutDestroyMenu);
  72.     CHECK_NAME(glutGetMenu);
  73.     CHECK_NAME(glutSetMenu);
  74.     CHECK_NAME(glutAddMenuEntry);
  75.     CHECK_NAME(glutAddSubMenu);
  76.     CHECK_NAME(glutChangeToMenuEntry);
  77.     CHECK_NAME(glutChangeToSubMenu);
  78.     CHECK_NAME(glutRemoveMenuItem);
  79.     CHECK_NAME(glutAttachMenu);
  80.     CHECK_NAME(glutDetachMenu);
  81.     CHECK_NAME(glutDisplayFunc);
  82.     CHECK_NAME(glutReshapeFunc);
  83.     CHECK_NAME(glutKeyboardFunc);
  84.     CHECK_NAME(glutMouseFunc);
  85.     CHECK_NAME(glutMotionFunc);
  86.     CHECK_NAME(glutPassiveMotionFunc);
  87.     CHECK_NAME(glutEntryFunc);
  88.     CHECK_NAME(glutVisibilityFunc);
  89.     CHECK_NAME(glutIdleFunc);
  90.     CHECK_NAME(glutTimerFunc);
  91.     CHECK_NAME(glutMenuStateFunc);
  92.     CHECK_NAME(glutSpecialFunc);
  93.     CHECK_NAME(glutSpaceballMotionFunc);
  94.     CHECK_NAME(glutSpaceballRotateFunc);
  95.     CHECK_NAME(glutSpaceballButtonFunc);
  96.     CHECK_NAME(glutButtonBoxFunc);
  97.     CHECK_NAME(glutDialsFunc);
  98.     CHECK_NAME(glutTabletMotionFunc);
  99.     CHECK_NAME(glutTabletButtonFunc);
  100.     CHECK_NAME(glutMenuStatusFunc);
  101.     CHECK_NAME(glutOverlayDisplayFunc);
  102.     CHECK_NAME(glutWindowStatusFunc);
  103.     CHECK_NAME(glutKeyboardUpFunc);
  104.     CHECK_NAME(glutSpecialUpFunc);
  105. #if !defined(_WIN32_WCE)
  106.     CHECK_NAME(glutJoystickFunc);
  107. #endif /* !defined(_WIN32_WCE) */
  108.     CHECK_NAME(glutSetColor);
  109.     CHECK_NAME(glutGetColor);
  110.     CHECK_NAME(glutCopyColormap);
  111.     CHECK_NAME(glutGet);
  112.     CHECK_NAME(glutDeviceGet);
  113.     CHECK_NAME(glutExtensionSupported);
  114.     CHECK_NAME(glutGetModifiers);
  115.     CHECK_NAME(glutLayerGet);
  116.     CHECK_NAME(glutBitmapCharacter);
  117.     CHECK_NAME(glutBitmapWidth);
  118.     CHECK_NAME(glutStrokeCharacter);
  119.     CHECK_NAME(glutStrokeWidth);
  120.     CHECK_NAME(glutBitmapLength);
  121.     CHECK_NAME(glutStrokeLength);
  122.     CHECK_NAME(glutWireSphere);
  123.     CHECK_NAME(glutSolidSphere);
  124.     CHECK_NAME(glutWireCone);
  125.     CHECK_NAME(glutSolidCone);
  126.     CHECK_NAME(glutWireCube);
  127.     CHECK_NAME(glutSolidCube);
  128.     CHECK_NAME(glutWireTorus);
  129.     CHECK_NAME(glutSolidTorus);
  130.     CHECK_NAME(glutWireDodecahedron);
  131.     CHECK_NAME(glutSolidDodecahedron);
  132.     CHECK_NAME(glutWireTeapot);
  133.     CHECK_NAME(glutSolidTeapot);
  134.     CHECK_NAME(glutWireOctahedron);
  135.     CHECK_NAME(glutSolidOctahedron);
  136.     CHECK_NAME(glutWireTetrahedron);
  137.     CHECK_NAME(glutSolidTetrahedron);
  138.     CHECK_NAME(glutWireIcosahedron);
  139.     CHECK_NAME(glutSolidIcosahedron);
  140.     CHECK_NAME(glutVideoResizeGet);
  141.     CHECK_NAME(glutSetupVideoResizing);
  142.     CHECK_NAME(glutStopVideoResizing);
  143.     CHECK_NAME(glutVideoResize);
  144.     CHECK_NAME(glutVideoPan);
  145.     CHECK_NAME(glutReportErrors);
  146.     CHECK_NAME(glutIgnoreKeyRepeat);
  147.     CHECK_NAME(glutSetKeyRepeat);
  148. #if !defined(_WIN32_WCE)
  149.     CHECK_NAME(glutForceJoystickFunc);
  150.     CHECK_NAME(glutGameModeString);
  151.     CHECK_NAME(glutEnterGameMode);
  152.     CHECK_NAME(glutLeaveGameMode);
  153.     CHECK_NAME(glutGameModeGet);
  154. #endif /* !defined(_WIN32_WCE) */
  155.     /* freeglut extensions */
  156.     CHECK_NAME(glutMainLoopEvent);
  157.     CHECK_NAME(glutLeaveMainLoop);
  158.     CHECK_NAME(glutCloseFunc);
  159.     CHECK_NAME(glutWMCloseFunc);
  160.     CHECK_NAME(glutMenuDestroyFunc);
  161.     CHECK_NAME(glutFullScreenToggle);
  162.     CHECK_NAME(glutSetOption);
  163.     CHECK_NAME(glutGetModeValues);
  164.     CHECK_NAME(glutSetWindowData);
  165.     CHECK_NAME(glutGetWindowData);
  166.     CHECK_NAME(glutSetMenuData);
  167.     CHECK_NAME(glutGetMenuData);
  168.     CHECK_NAME(glutBitmapHeight);
  169.     CHECK_NAME(glutStrokeHeight);
  170.     CHECK_NAME(glutBitmapString);
  171.     CHECK_NAME(glutStrokeString);
  172.     CHECK_NAME(glutWireRhombicDodecahedron);
  173.     CHECK_NAME(glutSolidRhombicDodecahedron);
  174.     CHECK_NAME(glutWireSierpinskiSponge);
  175.     CHECK_NAME(glutSolidSierpinskiSponge);
  176.     CHECK_NAME(glutWireCylinder);
  177.     CHECK_NAME(glutSolidCylinder);
  178.     CHECK_NAME(glutGetProcAddress);
  179.     CHECK_NAME(glutMouseWheelFunc);
  180.     CHECK_NAME(glutJoystickGetNumAxes);
  181.     CHECK_NAME(glutJoystickGetNumButtons);
  182.     CHECK_NAME(glutJoystickNotWorking);
  183.     CHECK_NAME(glutJoystickGetDeadBand);
  184.     CHECK_NAME(glutJoystickSetDeadBand);
  185.     CHECK_NAME(glutJoystickGetSaturation);
  186.     CHECK_NAME(glutJoystickSetSaturation);
  187.     CHECK_NAME(glutJoystickSetMinRange);
  188.     CHECK_NAME(glutJoystickSetMaxRange);
  189.     CHECK_NAME(glutJoystickSetCenter);
  190.     CHECK_NAME(glutJoystickGetMinRange);
  191.     CHECK_NAME(glutJoystickGetMaxRange);
  192.     CHECK_NAME(glutJoystickGetCenter);
  193.     CHECK_NAME(glutInitContextVersion);
  194.     CHECK_NAME(glutInitContextFlags);
  195.     CHECK_NAME(glutInitContextProfile);
  196. #undef CHECK_NAME
  197.     return NULL;
  198. }
  199. SFG_Proc fghGetProcAddress( const char *procName )
  200. {
  201. #if TARGET_HOST_MS_WINDOWS
  202.     return (SFG_Proc)wglGetProcAddress( ( LPCSTR )procName );
  203. #elif TARGET_HOST_POSIX_X11 && defined( GLX_ARB_get_proc_address )
  204.     return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName );
  205. #else
  206.     return NULL;
  207. #endif
  208. }
  209. GLUTproc FGAPIENTRY
  210. glutGetProcAddress( const char *procName )
  211. {
  212.     GLUTproc p;
  213.     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetProcAddress" );
  214.     /* Try GLUT functions first, then core GL functions */
  215.     p = fghGetGLUTProcAddress( procName );
  216.     return ( p != NULL ) ? p : fghGetProcAddress( procName );
  217. }