fghSleepForEvents immediately returns if we have an idle callback, so simply don...
[freeglut] / src / fg_main.c
index b664fa3..9dda2a3 100644 (file)
@@ -103,10 +103,8 @@ static void fghReshapeWindow ( SFG_Window *window, int width, int height )
 void fghRedrawWindow ( SFG_Window *window )
 {
     SFG_Window *current_window = fgStructure.CurrentWindow;
-    printf("fghRedrawWindow\n");
 
     freeglut_return_if_fail( window );
-    printf("got window\n");
 
     if( window->State.NeedToInitContext ) {
         INVOKE_WCB( *window, InitContext, ());
@@ -114,12 +112,10 @@ void fghRedrawWindow ( SFG_Window *window )
     }
 
     freeglut_return_if_fail( FETCH_WCB ( *window, Display ) );
-    printf("got displayCB\n");
 
     window->State.Redisplay = GL_FALSE;
 
     freeglut_return_if_fail( window->State.Visible );
-    printf("we're visible\n");
 
     fgSetWindow( window );
 
@@ -138,7 +134,6 @@ void fghRedrawWindow ( SFG_Window *window )
         );
     }
 
-    printf("invoking displayCB\n");
     INVOKE_WCB( *window, Display, ( ) );
 
     fgSetWindow( current_window );
@@ -148,12 +143,10 @@ void fghRedrawWindow ( SFG_Window *window )
 static void fghcbDisplayWindow( SFG_Window *window,
                                 SFG_Enumerator *enumerator )
 {
-    printf("window %p, %i\n",window,window->State.Redisplay);
     if( window->State.Redisplay &&
         window->State.Visible )
     {
         window->State.Redisplay = GL_FALSE;
-        printf("redisplaying...\n");
                fgPlatformDisplayWindow ( window );
     }
 
@@ -231,12 +224,8 @@ static void fghCheckTimers( void )
 /* Platform-dependent time in milliseconds, as an unsigned 64-bit integer.
  * This doesn't overflow in any reasonable time, so no need to worry about
  * that. The GLUT API return value will however overflow after 49.7 days,
- * and on Windows we (currently) do not have access to a 64-bit timestamp,
- * which means internal time will still get in trouble when running the
+ * which means you will still get in trouble when running the
  * application for more than 49.7 days.
- * This value wraps every 49.7 days, but integer overflows cancel
- * when subtracting an initial start time, unless the total time exceeds
- * 32-bit, where the GLUT API return value is also overflowed.
  */  
 fg_time_t fgSystemTime(void)
 {
@@ -268,7 +257,7 @@ void fgError( const char *fmt, ... )
         va_end( ap );
 
     } else {
-
+#if FREEGLUT_ERRORS
         va_start( ap, fmt );
 
         fprintf( stderr, "freeglut ");
@@ -278,6 +267,7 @@ void fgError( const char *fmt, ... )
         fprintf( stderr, "\n" );
 
         va_end( ap );
+#endif
 
         if ( fgState.Initialised )
             fgDeinitialize ();
@@ -300,7 +290,7 @@ void fgWarning( const char *fmt, ... )
         va_end( ap );
 
     } else {
-
+#if FREEGLUT_WARNINGS
         va_start( ap, fmt );
 
         fprintf( stderr, "freeglut ");
@@ -310,6 +300,7 @@ void fgWarning( const char *fmt, ... )
         fprintf( stderr, "\n" );
 
         va_end( ap );
+#endif
     }
 }
 
@@ -383,7 +374,7 @@ static void fghSleepForEvents( void )
 {
     fg_time_t msec;
 
-    if( fgState.IdleCallback || fghHavePendingRedisplays( ) )
+    if( fghHavePendingRedisplays( ) )
         return;
 
     msec = fghNextTimer( );
@@ -423,6 +414,9 @@ void FGAPIENTRY glutMainLoop( void )
 
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutMainLoop" );
 
+    if (!fgStructure.Windows.First)
+        fgError(" ERROR:  glutMainLoop called with no windows created.");
+
        fgPlatformMainLoopPreliminaryWork ();
 
     fgState.ExecState = GLUT_EXEC_STATE_RUNNING ;
@@ -453,8 +447,8 @@ void FGAPIENTRY glutMainLoop( void )
                     fgSetWindow( window );
                 fgState.IdleCallback( );
             }
-
-            fghSleepForEvents( );
+            else
+                fghSleepForEvents( );
         }
     }