Moving more Windows-specific code from "freeglut_ext.c" to the windows-specific file
authorJohn F. Fay <johnffay@nettally.com>
Fri, 20 Jan 2012 03:44:03 +0000 (03:44 +0000)
committerJohn F. Fay <johnffay@nettally.com>
Fri, 20 Jan 2012 03:44:03 +0000 (03:44 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@985 7f0cb862-5218-0410-a997-914c9d46530a

src/Common/freeglut_ext.c
src/mswin/freeglut_ext_mswin.c

index ef73481..5472e2a 100644 (file)
@@ -30,6 +30,7 @@
 #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
@@ -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,6 +204,25 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName )
 \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
@@ -231,5 +242,10 @@ glutGetProcAddress( const char *procName )
 \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
index 2df7d9b..5cdf0ad 100644 (file)
 #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