Adding initialization checking to all GLUT interface functions and removing asserts...
[freeglut] / src / freeglut_state.c
index 325609b..42a6df4 100644 (file)
@@ -72,7 +72,7 @@ static int fghGetConfig( int attribute )
  */
 void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
 {
-    freeglut_assert_ready;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSetOption" );
 
     /*
      * XXX In chronological code add order.  (WHY in that order?)
@@ -118,7 +118,7 @@ void FGAPIENTRY glutSetOption( GLenum eWhat, int value )
         break;
 
     default:
-        fgWarning( "glutSetOption(): missing enum handle %i\n", eWhat );
+        fgWarning( "glutSetOption(): missing enum handle %d", eWhat );
         break;
     }
 }
@@ -142,7 +142,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
         return fgElapsedTime();
     }
 
-    freeglut_assert_ready;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGet" );
 
     /* XXX In chronological code add order.  (WHY in that order?) */
     switch( eWhat )
@@ -454,7 +454,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
         break;
 
     default:
-        fgWarning( "glutGet(): missing enum handle %i\n", eWhat );
+        fgWarning( "glutGet(): missing enum handle %d", eWhat );
         break;
     }
     return -1;
@@ -465,7 +465,7 @@ int FGAPIENTRY glutGet( GLenum eWhat )
  */
 int FGAPIENTRY glutDeviceGet( GLenum eWhat )
 {
-    freeglut_assert_ready;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutDeviceGet" );
 
     /* XXX WARNING: we are mostly lying in this function. */
     switch( eWhat )
@@ -528,13 +528,21 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
 
 #endif
 
-    case GLUT_JOYSTICK_POLL_RATE:
     case GLUT_HAS_JOYSTICK:
+        return fgJoystickDetect ();
+
     case GLUT_OWNS_JOYSTICK:
+        return fgState.JoysticksInitialised;
+
+    case GLUT_JOYSTICK_POLL_RATE:
+        return fgStructure.Window ? fgStructure.Window->State.JoystickPollRate : 0;
+
+    /* XXX The following two are only for Joystick 0 but this is an improvement */
     case GLUT_JOYSTICK_BUTTONS:
+        return glutJoystickGetNumButtons ( 0 );
+
     case GLUT_JOYSTICK_AXES:
-        /* XXX WARNING: THIS IS A BIG LIE! */
-        return 0;
+        return glutJoystickGetNumAxes ( 0 );
 
     case GLUT_HAS_SPACEBALL:
     case GLUT_HAS_DIAL_AND_BUTTON_BOX:
@@ -555,7 +563,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
         return GLUT_KEY_REPEAT_DEFAULT;
 
     default:
-        fgWarning( "glutDeviceGet(): missing enum handle %i\n", eWhat );
+        fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );
         break;
     }
 
@@ -568,6 +576,7 @@ int FGAPIENTRY glutDeviceGet( GLenum eWhat )
  */
 int FGAPIENTRY glutGetModifiers( void )
 {
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGetModifiers" );
     if( fgState.Modifiers == 0xffffffff )
     {
         fgWarning( "glutGetModifiers() called outside an input callback" );
@@ -582,7 +591,7 @@ int FGAPIENTRY glutGetModifiers( void )
  */
 int FGAPIENTRY glutLayerGet( GLenum eWhat )
 {
-    freeglut_assert_ready;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutLayerGet" );
 
     /*
      * This is easy as layers are not implemented ;-)
@@ -649,7 +658,7 @@ int FGAPIENTRY glutLayerGet( GLenum eWhat )
 #endif
 
     default:
-        fgWarning( "glutLayerGet(): missing enum handle %i\n", eWhat );
+        fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );
         break;
     }