* the already-drawn part does not get drawn again and things look funny.
* But without this we get this bad behaviour whenever we resize the
* window.
+ * DN: Hmm.. the above sounds like a concern only in single buffered mode...
*/
window->State.Redisplay = GL_TRUE;
SFG_Window *current_window = fgStructure.CurrentWindow;
freeglut_return_if_fail( window );
+
+ if( window->State.NeedToInitContext ) {
+ INVOKE_WCB( *window, InitContext, ());
+ window->State.NeedToInitContext = GL_FALSE;
+ }
+
freeglut_return_if_fail( FETCH_WCB ( *window, Display ) );
window->State.Redisplay = GL_FALSE;
if( window->State.NeedToResize )
{
+ /* Set need to resize to false before calling fghReshapeWindow, otherwise
+ in the case the user's reshape callback calls glutReshapeWindow,
+ his request would get canceled after fghReshapeWindow gets called.
+ */
+ window->State.NeedToResize = GL_FALSE;
+
fghReshapeWindow(
window,
window->State.Width,
window->State.Height
);
-
- window->State.NeedToResize = GL_FALSE;
}
INVOKE_WCB( *window, Display, ( ) );
/* 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)
{
va_end( ap );
} else {
-
+#if FREEGLUT_ERRORS
va_start( ap, fmt );
fprintf( stderr, "freeglut ");
fprintf( stderr, "\n" );
va_end( ap );
+#endif
if ( fgState.Initialised )
fgDeinitialize ();
va_end( ap );
} else {
-
+#if FREEGLUT_WARNINGS
va_start( ap, fmt );
fprintf( stderr, "freeglut ");
fprintf( stderr, "\n" );
va_end( ap );
+#endif
}
}
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 ;