Moving the X11-specific code from "freeglut_menu.c" into its own file
[freeglut] / src / Common / freeglut_ext.c
index ef73481..917839a 100644 (file)
@@ -29,7 +29,8 @@
 #include <GL/freeglut.h>\r
 #include "freeglut_internal.h"\r
 \r
-extern SFG_Proc fghGetProcAddress( const char *procName );\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
@@ -111,9 +112,6 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName )
     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
@@ -154,13 +152,7 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName )
     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
@@ -212,7 +204,26 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName )
 \r
 \r
 #if TARGET_HOST_POSIX_X11\r
-SFG_Proc fghGetProcAddress( const char *procName )\r
+static GLUTproc fgPlatformGetGLUTProcAddress( 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 fgPlatformGetProcAddress( const char *procName )\r
 {\r
 #if defined( GLX_ARB_get_proc_address )\r
     return (SFG_Proc)glXGetProcAddressARB( ( const GLubyte * )procName );\r
@@ -231,5 +242,10 @@ glutGetProcAddress( const char *procName )
 \r
     /* Try GLUT functions first, then core GL functions */\r
     p = fghGetGLUTProcAddress( procName );\r
-    return ( p != NULL ) ? p : fghGetProcAddress( 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