⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 state.c

📁 mesa-6.5-minigui源码
💻 C
字号:
/* * DOS/DJGPP Mesa Utility Toolkit * Version:  1.0 * * Copyright (C) 2005  Daniel Borca   All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * DANIEL BORCA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */#include <stdio.h>#include "internal.h"#define FREQUENCY 100 /* set this to zero to use the default timer */static int timer_installed;#if FREQUENCYstatic volatile int ticks;static voidticks_timer (void *p){   (void)p;   ticks++;} ENDOFUNC(ticks_timer)#else#include <time.h>static struct timeval then;#endifint APIENTRYglutGet (GLenum type){   switch (type) {      case GLUT_WINDOW_X:         return _glut_current->xpos;      case GLUT_WINDOW_Y:         return _glut_current->ypos;      case GLUT_WINDOW_WIDTH:         return _glut_current->width;      case GLUT_WINDOW_HEIGHT:         return _glut_current->height;      case GLUT_WINDOW_STENCIL_SIZE:         return _glut_visual.stencil;      case GLUT_WINDOW_DEPTH_SIZE:         return _glut_visual.depth;      case GLUT_WINDOW_RGBA:         return !(_glut_default.mode & GLUT_INDEX);      case GLUT_WINDOW_COLORMAP_SIZE:         return (_glut_default.mode & GLUT_INDEX) ? (256 - RESERVED_COLORS) : 0;      case GLUT_SCREEN_WIDTH:         return _glut_visual.geometry[0];      case GLUT_SCREEN_HEIGHT:         return _glut_visual.geometry[1];      case GLUT_INIT_WINDOW_X:         return _glut_default.x;      case GLUT_INIT_WINDOW_Y:         return _glut_default.y;      case GLUT_INIT_WINDOW_WIDTH:         return _glut_default.width;      case GLUT_INIT_WINDOW_HEIGHT:         return _glut_default.height;      case GLUT_INIT_DISPLAY_MODE:         return _glut_default.mode;      case GLUT_ELAPSED_TIME:#if FREQUENCY         if (!timer_installed) {            timer_installed = GL_TRUE;            LOCKDATA(ticks);            LOCKFUNC(ticks_timer);            pc_install_int(ticks_timer, NULL, FREQUENCY);         }         return ticks * 1000 / FREQUENCY;#else         if (!timer_installed) {            timer_installed = GL_TRUE;            gettimeofday(&then, NULL);            return 0;         } else {            struct timeval now;            gettimeofday(&now, NULL);            return (now.tv_usec - then.tv_usec) / 1000 +                   (now.tv_sec  - then.tv_sec)  * 1000;         }#endif      default:         return -1;   }}int APIENTRYglutDeviceGet (GLenum type){   switch (type) {      case GLUT_HAS_KEYBOARD:         return GL_TRUE;      case GLUT_HAS_MOUSE:         return (_glut_mouse != 0);      case GLUT_NUM_MOUSE_BUTTONS:         return _glut_mouse;      case GLUT_HAS_SPACEBALL:      case GLUT_HAS_DIAL_AND_BUTTON_BOX:      case GLUT_HAS_TABLET:         return GL_FALSE;      case GLUT_NUM_SPACEBALL_BUTTONS:      case GLUT_NUM_BUTTON_BOX_BUTTONS:      case GLUT_NUM_DIALS:      case GLUT_NUM_TABLET_BUTTONS:         return 0;      default:         return -1;   }}int APIENTRYglutGetModifiers (void){   int mod = 0;   int shifts = pc_keyshifts();   if (shifts & (KB_SHIFT_FLAG | KB_CAPSLOCK_FLAG)) {      mod |= GLUT_ACTIVE_SHIFT;   }   if (shifts & KB_ALT_FLAG) {      mod |= GLUT_ACTIVE_ALT;   }   if (shifts & KB_CTRL_FLAG) {      mod |= GLUT_ACTIVE_CTRL;   }   return mod;}void APIENTRYglutReportErrors (void){   /* reports all the OpenGL errors that happened till now */}/* GAME MODE * Hack alert: incomplete... what is GameMode, anyway? */static GLint 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 APIENTRYglutGameModeString (const char *string){   if (sscanf(string, "%ux%u:%u@%u", &game_width, &game_height, &game_bpp, &game_refresh) == 4) {      game_possible = GL_TRUE;   }}int APIENTRYglutGameModeGet (GLenum mode){   switch (mode) {      case GLUT_GAME_MODE_ACTIVE:         return game_active;      case GLUT_GAME_MODE_POSSIBLE:         return game_possible && !_glut_current;      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 APIENTRYglutEnterGameMode (void){   if (glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) {      _glut_visual.bpp = game_bpp;      _glut_visual.refresh = game_refresh;      glutInitWindowSize(game_width, game_height);      if ((game = glutCreateWindow("<game>")) > 0) {         game_active = GL_TRUE;      }      return game;   } else {      return 0;   }}void GLUTAPIENTRYglutLeaveGameMode (void){   if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {      game_active = GL_FALSE;      glutDestroyWindow(game);   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -