Fixing a 'gamemode at_exit' bug courtesy of Diederick Niehorster per e-mail dated...
[freeglut] / src / freeglut_init.c
index c96ca10..cdb9e66 100644 (file)
@@ -86,12 +86,15 @@ SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
                       GL_FALSE,               /* JoysticksInitialised */
                       0,                      /* NumActiveJoysticks */
                       GL_FALSE,               /* InputDevsInitialised */
+                      0,                      /* MouseWheelTicks */
                       1,                      /* AuxiliaryBufferNumber */
                       4,                      /* SampleNumber */
                       1,                      /* MajorVersion */
-                      0,                      /* MajorVersion */
+                      0,                      /* MinorVersion */
                       0,                      /* ContextFlags */
-                      0                       /* ContextProfile */
+                      0,                      /* ContextProfile */
+                      NULL,                   /* ErrorFunc */
+                      NULL                    /* WarningFunc */
 };
 
 
@@ -377,7 +380,8 @@ static void fghInitialize( const char* displayName )
         }
         else
            fgWarning("fghInitialize: "
-                     "CreateDC failed, Screen size info may be incorrect");
+                     "CreateDC failed, Screen size info may be incorrect\n"
+          "This is quite likely caused by a bad '-display' parameter");
       
     }
     /* Set the timer granularity to 1 ms */
@@ -386,6 +390,7 @@ static void fghInitialize( const char* displayName )
 #endif
 
     fgState.Initialised = GL_TRUE;
+    atexit(fgDeinitialize);
 
     /* InputDevice uses GlutTimerFunc(), so fgState.Initialised must be TRUE */
     fgInitialiseInputDevices();
@@ -400,8 +405,6 @@ void fgDeinitialize( void )
 
     if( !fgState.Initialised )
     {
-        fgWarning( "fgDeinitialize(): "
-                   "no valid initialization has been performed" );
         return;
     }
 
@@ -440,6 +443,8 @@ void fgDeinitialize( void )
     fgState.JoysticksInitialised = GL_FALSE;
     fgState.InputDevsInitialised = GL_FALSE;
 
+       fgState.MouseWheelTicks = 0;
+
     fgState.MajorVersion = 1;
     fgState.MinorVersion = 0;
     fgState.ContextFlags = 0;
@@ -1142,4 +1147,24 @@ void FGAPIENTRY glutInitContextProfile( int profile )
     fgState.ContextProfile = profile;
 }
 
+/* -------------- User Defined Error/Warning Handler Support -------------- */
+
+/*
+ * Sets the user error handler (note the use of va_list for the args to the fmt)
+ */
+void FGAPIENTRY glutInitErrorFunc( void (* vfgError) ( const char *fmt, va_list ap ) )
+{
+    /* This allows user programs to handle freeglut errors */
+    fgState.ErrorFunc = vfgError;
+}
+
+/*
+ * Sets the user warning handler (note the use of va_list for the args to the fmt)
+ */
+void FGAPIENTRY glutInitWarningFunc( void (* vfgWarning) ( const char *fmt, va_list ap ) )
+{
+    /* This allows user programs to handle freeglut warnings */
+    fgState.WarningFunc = vfgWarning;
+}
+
 /*** END OF FILE ***/