#include "freeglut_internal.h"\r
\r
extern SFG_Proc fghGetProcAddress( const char *procName );\r
+extern GLUTproc fghGetPlatformSpecificGLUTProcAddress( const char *procName );\r
\r
static GLUTproc fghGetGLUTProcAddress( const char* procName )\r
{\r
CHECK_NAME(glutWindowStatusFunc);\r
CHECK_NAME(glutKeyboardUpFunc);\r
CHECK_NAME(glutSpecialUpFunc);\r
-#if !defined(_WIN32_WCE)\r
- CHECK_NAME(glutJoystickFunc);\r
-#endif /* !defined(_WIN32_WCE) */\r
CHECK_NAME(glutSetColor);\r
CHECK_NAME(glutGetColor);\r
CHECK_NAME(glutCopyColormap);\r
CHECK_NAME(glutReportErrors);\r
CHECK_NAME(glutIgnoreKeyRepeat);\r
CHECK_NAME(glutSetKeyRepeat);\r
-#if !defined(_WIN32_WCE)\r
- CHECK_NAME(glutForceJoystickFunc);\r
- CHECK_NAME(glutGameModeString);\r
- CHECK_NAME(glutEnterGameMode);\r
- CHECK_NAME(glutLeaveGameMode);\r
- CHECK_NAME(glutGameModeGet);\r
-#endif /* !defined(_WIN32_WCE) */\r
+\r
/* freeglut extensions */\r
CHECK_NAME(glutMainLoopEvent);\r
CHECK_NAME(glutLeaveMainLoop);\r
\r
\r
#if TARGET_HOST_POSIX_X11\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(glutJoystickFunc);\r
+ CHECK_NAME(glutForceJoystickFunc);\r
+ CHECK_NAME(glutGameModeString);\r
+ CHECK_NAME(glutEnterGameMode);\r
+ CHECK_NAME(glutLeaveGameMode);\r
+ CHECK_NAME(glutGameModeGet);\r
+#undef CHECK_NAME\r
+\r
+ return NULL;\r
+}\r
+\r
+\r
SFG_Proc fghGetProcAddress( const char *procName )\r
{\r
#if defined( GLX_ARB_get_proc_address )\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 = fghGetPlatformSpecificGLUTProcAddress( procName );\r
+\r
return ( p != NULL ) ? p : fghGetProcAddress( procName );\r
}\r
#include <GL/freeglut.h>\r
#include "freeglut_internal_mswin.h"\r
\r
+GLUTproc fghGetPlatformSpecificGLUTProcAddress( const char* procName )\r
+{\r
+#if !defined(_WIN32_WCE)\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(glutJoystickFunc);\r
+ CHECK_NAME(glutForceJoystickFunc);\r
+ CHECK_NAME(glutGameModeString);\r
+ CHECK_NAME(glutEnterGameMode);\r
+ CHECK_NAME(glutLeaveGameMode);\r
+ CHECK_NAME(glutGameModeGet);\r
+#undef CHECK_NAME\r
+#endif /* !defined(_WIN32_WCE) */\r
+\r
+ return NULL;\r
+}\r
+\r
\r
\r
SFG_Proc fghGetProcAddress( const char *procName )\r