+void game_resize(int x, int y)
+{
+ if(x == win_width && y == win_height) return;
+
+ glutReshapeWindow(x, y);
+}
+
+void game_fullscreen(int fs)
+{
+ static int prev_w, prev_h;
+ static int prev_grab;
+
+ if(fs == -1) {
+ fs = !fullscr;
+ }
+
+ if(fs == fullscr) return;
+
+ if(fs) {
+ prev_w = glutGet(GLUT_WINDOW_WIDTH);
+ prev_h = glutGet(GLUT_WINDOW_HEIGHT);
+ prev_grab = mouse_grabbed;
+ game_grabmouse(1);
+ glutFullScreen();
+ } else {
+ glutReshapeWindow(prev_w, prev_h);
+ if(!prev_grab) {
+ game_grabmouse(0);
+ }
+ }
+ fullscr = fs;
+}
+
+void game_grabmouse(int grab)
+{
+ static int prev_x, prev_y;
+
+ if(grab == -1) {
+ grab = !mouse_grabbed;
+ }
+
+ if(grab == mouse_grabbed) return;
+
+ if(grab) {
+ warping = 1;
+ prev_x = mouse_x;
+ prev_y = mouse_y;
+ glutWarpPointer(win_width / 2, win_height / 2);
+ glutSetCursor(GLUT_CURSOR_NONE);
+ } else {
+ warping = 1;
+ glutWarpPointer(prev_x, prev_y);
+ glutSetCursor(GLUT_CURSOR_INHERIT);
+ }
+ mouse_grabbed = grab;
+}
+
+#if defined(__unix__) || defined(unix)
+void game_vsync(int vsync)
+{
+ vsync = vsync ? 1 : 0;
+ if(glx_swap_interval_ext) {
+ glx_swap_interval_ext(xdpy, xwin, vsync);
+ } else if(glx_swap_interval_sgi) {
+ glx_swap_interval_sgi(vsync);
+ }
+}
+#endif
+#ifdef WIN32
+void game_vsync(int vsync)
+{
+ if(wgl_swap_interval_ext) {
+ wgl_swap_interval_ext(vsync ? 1 : 0);
+ }
+}
+#endif
+
+