Removed invalid PDB install
[freeglut] / src / fg_window.c
index 9a980f8..09fcddf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * freeglut_window.c
+ * fg_window.c
  *
  * Window management methods.
  *
@@ -28,6 +28,7 @@
 #define FREEGLUT_BUILDING_LIB
 #include <GL/freeglut.h>
 #include "fg_internal.h"
+#include "fg_gl2.h"
 
 /*
  * TODO BEFORE THE STABLE RELEASE:
@@ -55,17 +56,8 @@ extern void fgPlatformOpenWindow( SFG_Window* window, const char* title,
                                   GLboolean sizeUse, int w, int h,
                                   GLboolean gameMode, GLboolean isSubWindow );
 extern void fgPlatformCloseWindow( SFG_Window* window );
-extern void fgPlatformGlutShowWindow( void );
-extern void fgPlatformGlutHideWindow( void );
-extern void fgPlatformGlutIconifyWindow( void );
 extern void fgPlatformGlutSetWindowTitle( const char* title );
 extern void fgPlatformGlutSetIconTitle( const char* title );
-extern void fgPlatformGlutPositionWindow( int x, int y );
-extern void fgPlatformGlutPushWindow( void );
-extern void fgPlatformGlutPopWindow( void );
-extern void fgPlatformGlutFullScreen( SFG_Window *win );
-extern void fgPlatformGlutLeaveFullScreen( SFG_Window *win );
-extern void fgPlatformGlutFullScreenToggle( SFG_Window *win );
 
 
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
@@ -114,7 +106,7 @@ void fghContextCreationError( void )
  */
 void fgSetWindow ( SFG_Window *window )
 {
-       fgPlatformSetWindow ( window );
+    fgPlatformSetWindow ( window );
 
     fgStructure.CurrentWindow = window;
 }
@@ -128,25 +120,34 @@ void fgOpenWindow( SFG_Window* window, const char* title,
                    GLboolean sizeUse, int w, int h,
                    GLboolean gameMode, GLboolean isSubWindow )
 {
-       fgPlatformOpenWindow( window, title,
-                   positionUse, x, y,
-                   sizeUse, w, h,
-                   gameMode, isSubWindow );
+    fgPlatformOpenWindow( window, title,
+                          positionUse, x, y,
+                          sizeUse, w, h,
+                          gameMode, isSubWindow );
 
     fgSetWindow( window );
 
+#ifndef EGL_VERSION_1_0
     window->Window.DoubleBuffered =
         ( fgState.DisplayMode & GLUT_DOUBLE ) ? 1 : 0;
 
-#ifndef EGL_VERSION_1_0  /* No glDrawBuffer/glReadBuffer in GLES */
     if ( ! window->Window.DoubleBuffered )
     {
         glDrawBuffer ( GL_FRONT );
         glReadBuffer ( GL_FRONT );
     }
+#else
+    /* - EGL is always double-buffered */
+    /* - No glDrawBuffer/glReadBuffer in GLES */
+    window->Window.DoubleBuffered = 1;
 #endif
     window->Window.attribute_v_coord = -1;
     window->Window.attribute_v_normal = -1;
+    window->Window.attribute_v_texture = -1;
+
+    fgInitGL2();
+
+    window->State.WorkMask |= GLUT_INIT_WORK;
 }
 
 /*
@@ -161,7 +162,7 @@ void fgCloseWindow( SFG_Window* window )
     if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==window->ID)
         glutLeaveGameMode();
 
-       fgPlatformCloseWindow ( window );
+    fgPlatformCloseWindow ( window );
 }
 
 
@@ -295,9 +296,10 @@ void FGAPIENTRY glutShowWindow( void )
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutShowWindow" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutShowWindow" );
 
-       fgPlatformGlutShowWindow ();
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK;
+    fgStructure.CurrentWindow->State.DesiredVisibility = DesireNormalState;
 
-    fgStructure.CurrentWindow->State.Redisplay = GL_TRUE;
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_DISPLAY_WORK;
 }
 
 /*
@@ -308,9 +310,10 @@ void FGAPIENTRY glutHideWindow( void )
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutHideWindow" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutHideWindow" );
 
-       fgPlatformGlutHideWindow ();
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK;
+    fgStructure.CurrentWindow->State.DesiredVisibility = DesireHiddenState;
 
-    fgStructure.CurrentWindow->State.Redisplay = GL_FALSE;
+    fgStructure.CurrentWindow->State.WorkMask &= ~GLUT_DISPLAY_WORK;
 }
 
 /*
@@ -321,11 +324,10 @@ void FGAPIENTRY glutIconifyWindow( void )
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutIconifyWindow" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIconifyWindow" );
 
-    fgStructure.CurrentWindow->State.Visible   = GL_FALSE;
-
-       fgPlatformGlutIconifyWindow ();
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_VISIBILITY_WORK;
+    fgStructure.CurrentWindow->State.DesiredVisibility = DesireIconicState;
 
-    fgStructure.CurrentWindow->State.Redisplay = GL_FALSE;
+    fgStructure.CurrentWindow->State.WorkMask &= ~GLUT_DISPLAY_WORK;
 }
 
 /*
@@ -337,7 +339,7 @@ void FGAPIENTRY glutSetWindowTitle( const char* title )
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowTitle" );
     if( ! fgStructure.CurrentWindow->Parent )
     {
-               fgPlatformGlutSetWindowTitle ( title );
+        fgPlatformGlutSetWindowTitle ( title );
     }
 }
 
@@ -351,7 +353,7 @@ void FGAPIENTRY glutSetIconTitle( const char* title )
 
     if( ! fgStructure.CurrentWindow->Parent )
     {
-               fgPlatformGlutSetIconTitle ( title );
+        fgPlatformGlutSetIconTitle ( title );
     }
 }
 
@@ -369,9 +371,9 @@ void FGAPIENTRY glutReshapeWindow( int width, int height )
       glutLeaveFullScreen();
     }
 
-    fgStructure.CurrentWindow->State.NeedToResize = GL_TRUE;
-    fgStructure.CurrentWindow->State.Width  = width ;
-    fgStructure.CurrentWindow->State.Height = height;
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_SIZE_WORK;
+    fgStructure.CurrentWindow->State.DesiredWidth  = width ;
+    fgStructure.CurrentWindow->State.DesiredHeight = height;
 }
 
 /*
@@ -388,7 +390,9 @@ void FGAPIENTRY glutPositionWindow( int x, int y )
       glutLeaveFullScreen();
     }
 
-       fgPlatformGlutPositionWindow ( x, y );
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_POSITION_WORK;
+    fgStructure.CurrentWindow->State.DesiredXpos = x;
+    fgStructure.CurrentWindow->State.DesiredYpos = y;
 }
 
 /*
@@ -399,7 +403,8 @@ void FGAPIENTRY glutPushWindow( void )
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPushWindow" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPushWindow" );
 
-       fgPlatformGlutPushWindow ();
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_ZORDER_WORK;
+    fgStructure.CurrentWindow->State.DesiredZOrder = -1;
 }
 
 /*
@@ -410,7 +415,8 @@ void FGAPIENTRY glutPopWindow( void )
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutPopWindow" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPopWindow" );
 
-       fgPlatformGlutPopWindow ();
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_ZORDER_WORK;
+    fgStructure.CurrentWindow->State.DesiredZOrder = 1;
 }
 
 /*
@@ -434,13 +440,16 @@ void FGAPIENTRY glutFullScreen( void )
         fgWarning("glutFullScreen called on a child window, ignoring...");
         return;
     }
-    else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID)
+    else if (fgStructure.GameModeWindow != NULL && fgStructure.GameModeWindow->ID==win->ID && win->State.IsFullscreen)
     {
-        /* Ignore fullscreen call on GameMode window, those are always fullscreen already */
+        /* Ignore fullscreen call on GameMode window, those are always fullscreen already
+         * only exception is when first entering GameMode
+         */
         return;
     }
 
-       fgPlatformGlutFullScreen ( win );
+    if (!win->State.IsFullscreen)
+        win->State.WorkMask |= GLUT_FULL_SCREEN_WORK;
 }
 
 /*
@@ -448,14 +457,11 @@ void FGAPIENTRY glutFullScreen( void )
  */
 void FGAPIENTRY glutLeaveFullScreen( void )
 {
-    SFG_Window *win;
-
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreen" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" );
 
-    win = fgStructure.CurrentWindow;
-
-       fgPlatformGlutLeaveFullScreen ( win );
+    if (fgStructure.CurrentWindow->State.IsFullscreen)
+        fgStructure.CurrentWindow->State.WorkMask |= GLUT_FULL_SCREEN_WORK;
 }
 
 /*
@@ -463,14 +469,10 @@ void FGAPIENTRY glutLeaveFullScreen( void )
  */
 void FGAPIENTRY glutFullScreenToggle( void )
 {
-    SFG_Window *win;
-
     FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutFullScreenToggle" );
     FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreenToggle" );
 
-    win = fgStructure.CurrentWindow;
-
-       fgPlatformGlutFullScreenToggle ( win );
+    fgStructure.CurrentWindow->State.WorkMask |= GLUT_FULL_SCREEN_WORK;
 }
 
 /*