Moving an X11-specific function call to destroy a context to the X11-specific file
[freeglut] / src / mswin / freeglut_init_mswin.c
index 1777ebd..c7457de 100644 (file)
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
  */\r
 \r
+#define FREEGLUT_BUILDING_LIB\r
 #include <GL/freeglut.h>\r
-#include "freeglut_internal_mswin.h"\r
+#include "../Common/freeglut_internal.h"\r
+\r
+\r
+\r
+extern LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg,\r
+                               WPARAM wParam, LPARAM lParam );\r
 \r
 \r
 /*\r
@@ -38,9 +44,9 @@ void fgPlatformInitialize( const char* displayName )
     ATOM atom;\r
 \r
     /* What we need to do is to initialize the fgDisplay global structure here. */\r
-    fgDisplay.Instance = GetModuleHandle( NULL );\r
-    fgDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;\r
-    atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );\r
+    fgDisplay.pDisplay.Instance = GetModuleHandle( NULL );\r
+    fgDisplay.pDisplay.DisplayName= displayName ? strdup(displayName) : 0 ;\r
+    atom = GetClassInfo( fgDisplay.pDisplay.Instance, _T("FREEGLUT"), &wc );\r
 \r
     if( atom == 0 )\r
     {\r
@@ -57,8 +63,8 @@ void fgPlatformInitialize( const char* displayName )
         wc.lpfnWndProc    = fgPlatformWindowProc;\r
         wc.cbClsExtra     = 0;\r
         wc.cbWndExtra     = 0;\r
-        wc.hInstance      = fgDisplay.Instance;\r
-        wc.hIcon          = LoadIcon( fgDisplay.Instance, _T("GLUT_ICON") );\r
+        wc.hInstance      = fgDisplay.pDisplay.Instance;\r
+        wc.hIcon          = LoadIcon( fgDisplay.pDisplay.Instance, _T("GLUT_ICON") );\r
 \r
 #if defined(_WIN32_WCE)\r
         wc.style          = CS_HREDRAW | CS_VREDRAW;\r
@@ -92,9 +98,9 @@ void fgPlatformInitialize( const char* displayName )
         ReleaseDC( desktop, context );\r
     }\r
     /* If we have a DisplayName try to use it for metrics */\r
-    if( fgDisplay.DisplayName )\r
+    if( fgDisplay.pDisplay.DisplayName )\r
     {\r
-        HDC context = CreateDC(fgDisplay.DisplayName,0,0,0);\r
+        HDC context = CreateDC(fgDisplay.pDisplay.DisplayName,0,0,0);\r
         if( context )\r
         {\r
            fgDisplay.ScreenWidth  = GetDeviceCaps( context, HORZRES );\r
@@ -142,17 +148,20 @@ void fgPlatformDeinitialiseInputDevices ( void )
 \r
 void fgPlatformCloseDisplay ( void )\r
 {\r
-    if( fgDisplay.DisplayName )\r
+    if( fgDisplay.pDisplay.DisplayName )\r
     {\r
-        free( fgDisplay.DisplayName );\r
-        fgDisplay.DisplayName = NULL;\r
+        free( fgDisplay.pDisplay.DisplayName );\r
+        fgDisplay.pDisplay.DisplayName = NULL;\r
     }\r
 \r
     /* Reset the timer granularity */\r
     timeEndPeriod ( 1 );\r
 }\r
 \r
-\r
+void fgPlatformDestroyContext ( SFG_PlatformDisplay pDisplay, SFG_WindowContextType MContext )\r
+{\r
+       /* Do nothing -- this is required for X11 */\r
+}\r
 \r
 /*\r
  * Everything down to the end of the next two functions is copied from the X sources.\r
@@ -324,3 +333,13 @@ int XParseGeometry (
 \r
 \r
 \r
+/* -- PLATFORM-SPECIFIC INTERFACE FUNCTION -------------------------------------------------- */\r
+\r
+void (__cdecl *__glutExitFunc)( int return_value ) = NULL;\r
+\r
+void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) )\r
+{\r
+  __glutExitFunc = exit_function;\r
+  glutInit(pargc, argv);\r
+}\r
+\r