diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/glut/dos/state.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/glut/dos/state.c b/src/glut/dos/state.c index e9d854cd4e1..b2455696102 100644 --- a/src/glut/dos/state.c +++ b/src/glut/dos/state.c @@ -27,6 +27,8 @@ */ +#include <stdio.h> + #include "glutint.h" @@ -140,3 +142,78 @@ int APIENTRY glutGetModifiers (void) return mod; } + + + +/* GAME MODE + * Hack alert: incomplete... what is GameMode, anyway? + */ +GLint g_game; +static GLboolean game_possible; +static GLboolean game_active; +static GLuint game_width; +static GLuint game_height; +static GLuint game_bpp; +static GLuint game_refresh; + + + +void APIENTRY glutGameModeString (const char *string) +{ + if (sscanf(string, "%ux%u:%u@%u", &game_width, &game_height, &game_bpp, &game_refresh) == 4) { + game_possible = GL_TRUE; + } +} + + + +int APIENTRY glutGameModeGet (GLenum mode) +{ + switch (mode) { + case GLUT_GAME_MODE_ACTIVE: + return game_active; + case GLUT_GAME_MODE_POSSIBLE: + return game_possible && !g_curwin; + case GLUT_GAME_MODE_WIDTH: + return game_active ? (int)game_width : -1; + case GLUT_GAME_MODE_HEIGHT: + return game_active ? (int)game_height : -1; + case GLUT_GAME_MODE_PIXEL_DEPTH: + return game_active ? (int)game_bpp : -1; + case GLUT_GAME_MODE_REFRESH_RATE: + return game_active ? (int)game_refresh : -1; + default: + return -1; + } +} + + + +int APIENTRY glutEnterGameMode (void) +{ + if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) { + g_bpp = game_bpp; + g_refresh = game_refresh; + + glutInitWindowSize(game_width, game_height); + + if ((g_game = glutCreateWindow("<game>")) > 0) { + game_active = GL_TRUE; + } + + return g_game; + } else { + return 0; + } +} + + + +void GLUTAPIENTRY glutLeaveGameMode (void) +{ + if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) { + game_active = GL_FALSE; + + glutDestroyWindow(g_game); + } +} |