GameMode
diff --git a/src/glut/dos/state.c b/src/glut/dos/state.c
index e9d854c..b245569 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 @@
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);
+ }
+}