X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2FCommon%2Ffreeglut_ext.c;h=72bdaf90e6cc146d073945662b5cb32315ee9cd0;hb=2dfbfbf7b7adf327e62b5f1e5c572c495cbb9063;hp=8dd1c135616361a4d01473826deae059325e0c50;hpb=d2f7ea29ea6d946f455f4363c3f058ff2bdfba35;p=freeglut diff --git a/src/Common/freeglut_ext.c b/src/Common/freeglut_ext.c index 8dd1c13..72bdaf9 100644 --- a/src/Common/freeglut_ext.c +++ b/src/Common/freeglut_ext.c @@ -29,6 +29,9 @@ #include #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 */ @@ -109,9 +112,6 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName ) CHECK_NAME(glutWindowStatusFunc); CHECK_NAME(glutKeyboardUpFunc); CHECK_NAME(glutSpecialUpFunc); -#if !defined(_WIN32_WCE) - CHECK_NAME(glutJoystickFunc); -#endif /* !defined(_WIN32_WCE) */ CHECK_NAME(glutSetColor); CHECK_NAME(glutGetColor); CHECK_NAME(glutCopyColormap); @@ -152,13 +152,7 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName ) CHECK_NAME(glutReportErrors); CHECK_NAME(glutIgnoreKeyRepeat); CHECK_NAME(glutSetKeyRepeat); -#if !defined(_WIN32_WCE) - CHECK_NAME(glutForceJoystickFunc); - CHECK_NAME(glutGameModeString); - CHECK_NAME(glutEnterGameMode); - CHECK_NAME(glutLeaveGameMode); - CHECK_NAME(glutGameModeGet); -#endif /* !defined(_WIN32_WCE) */ + /* freeglut extensions */ CHECK_NAME(glutMainLoopEvent); CHECK_NAME(glutLeaveMainLoop); @@ -209,16 +203,35 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName ) } -SFG_Proc fghGetProcAddress( const char *procName ) +#if TARGET_HOST_POSIX_X11 +GLUTproc fgPlatformGetGLUTProcAddress( const char* procName ) { -#if TARGET_HOST_MS_WINDOWS - return (SFG_Proc)wglGetProcAddress( ( LPCSTR )procName ); -#elif TARGET_HOST_POSIX_X11 && defined( GLX_ARB_get_proc_address ) + /* 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(glutJoystickFunc); + CHECK_NAME(glutForceJoystickFunc); + CHECK_NAME(glutGameModeString); + CHECK_NAME(glutEnterGameMode); + CHECK_NAME(glutLeaveGameMode); + CHECK_NAME(glutGameModeGet); +#undef CHECK_NAME + + return NULL; +} + + +SFG_Proc fgPlatformGetProcAddress( const char *procName ) +{ +#if defined( GLX_ARB_get_proc_address ) return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName ); #else return NULL; #endif } +#endif GLUTproc FGAPIENTRY @@ -229,5 +242,10 @@ glutGetProcAddress( const char *procName ) /* Try GLUT functions first, then core GL functions */ p = fghGetGLUTProcAddress( procName ); - return ( p != NULL ) ? p : fghGetProcAddress( procName ); + + /* Some GLUT functions are platform-specific: */ + if ( !p ) + p = fgPlatformGetGLUTProcAddress( procName ); + + return ( p != NULL ) ? p : fgPlatformGetProcAddress( procName ); }