Making the check for a current window in "glutPostRedisplay" more stringent
[freeglut] / src / freeglut_display.c
index a2168a3..2ba0ec5 100644 (file)
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "../include/GL/freeglut.h"
+#include <GL/freeglut.h>
 #include "freeglut_internal.h"
 
-
 /* -- INTERFACE FUNCTIONS -------------------------------------------------- */
 
 /*
  */
 void FGAPIENTRY glutPostRedisplay( void )
 {
-    freeglut_assert_ready;
-    freeglut_assert_window;
-    fgStructure.Window->State.Redisplay = TRUE;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostRedisplay" );
+    if ( ! fgStructure.CurrentWindow )
+       {
+      fgError ( " ERROR:  Function <%s> called"
+                " with no current window defined.", "glutPostRedisplay" ) ;
+       }
+
+    fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;
 }
 
 /*
@@ -50,17 +50,21 @@ void FGAPIENTRY glutPostRedisplay( void )
  */
 void FGAPIENTRY glutSwapBuffers( void )
 {
-    freeglut_assert_ready;
-    freeglut_assert_window;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutSwapBuffers" );
+    FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSwapBuffers" );
 
-    glFlush();
-    if ( ! fgStructure.Window->Window.DoubleBuffered )
+    /*
+     * "glXSwapBuffers" already performs an implicit call to "glFlush". What
+     * about "SwapBuffers"?
+     */
+    glFlush( );
+    if( ! fgStructure.CurrentWindow->Window.DoubleBuffered )
         return;
 
-#if TARGET_HOST_UNIX_X11
-    glXSwapBuffers( fgDisplay.Display, fgStructure.Window->Window.Handle );
-#elif TARGET_HOST_WIN32
-    SwapBuffers( fgStructure.Window->Window.Device );
+#if TARGET_HOST_POSIX_X11
+    glXSwapBuffers( fgDisplay.Display, fgStructure.CurrentWindow->Window.Handle );
+#elif TARGET_HOST_MS_WINDOWS
+    SwapBuffers( fgStructure.CurrentWindow->Window.Device );
 #endif
 
     /* GLUT_FPS env var support */
@@ -90,10 +94,10 @@ void FGAPIENTRY glutPostWindowRedisplay( int windowID )
 {
     SFG_Window* window;
 
-    freeglut_assert_ready;
+    FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPostWindowRedisplay" );
     window = fgWindowByID( windowID );
     freeglut_return_if_fail( window );
-    window->State.Redisplay = TRUE;
+    window->State.Redisplay = GL_TRUE;
 }
 
 /*** END OF FILE ***/