X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_window.c;h=1a65c1f8460a0badde83e4ab2711b65f4d33c976;hb=99d53f15a4216240088132f6af9cb194b519b1cc;hp=9a980f8ad63440edce37afb318f762174b405e6e;hpb=39c957d9929f0aba775c4a07a70b6124bc4b50e6;p=freeglut diff --git a/src/fg_window.c b/src/fg_window.c index 9a980f8..1a65c1f 100644 --- a/src/fg_window.c +++ b/src/fg_window.c @@ -28,6 +28,7 @@ #define FREEGLUT_BUILDING_LIB #include #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 ---------------------------------------------------- */ @@ -147,6 +139,11 @@ void fgOpenWindow( SFG_Window* window, const char* title, #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; } /* @@ -295,7 +292,8 @@ 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; } @@ -308,7 +306,8 @@ 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; } @@ -321,9 +320,8 @@ 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; } @@ -369,9 +367,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 +386,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 +399,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 +411,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 +436,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 +453,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 +465,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; } /*