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

📄 glut_get.c

📁 mesa-6.5-minigui源码
💻 C
字号:
/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. *//* This program is freely distributable without licensing fees   and is provided without guarantee or warrantee expressed or   implied. This program is -not- in the public domain. */#include <assert.h>#include <stdlib.h>  /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */#include "glutint.h"/* CENTRY */int GLUTAPIENTRY glutGet(GLenum param){  Window win, root;  int x, y, value;  unsigned int width, height, border, depth;  switch (param) {  case GLUT_INIT_WINDOW_X:    return __glutInitX;  case GLUT_INIT_WINDOW_Y:    return __glutInitY;  case GLUT_INIT_WINDOW_WIDTH:    return __glutInitWidth;  case GLUT_INIT_WINDOW_HEIGHT:    return __glutInitHeight;  case GLUT_INIT_DISPLAY_MODE:    return __glutDisplayMode;  case GLUT_WINDOW_X:    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,      __glutRoot, 0, 0, &x, &y, &win);    return x;  case GLUT_WINDOW_Y:    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,      __glutRoot, 0, 0, &x, &y, &win);    return y;  case GLUT_WINDOW_WIDTH:    if (!__glutCurrentWindow->reshape) {      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,        &root, &x, &y,        &width, &height, &border, &depth);      return width;    }    return __glutCurrentWindow->width;  case GLUT_WINDOW_HEIGHT:    if (!__glutCurrentWindow->reshape) {      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,        &root, &x, &y,        &width, &height, &border, &depth);      return height;    }    return __glutCurrentWindow->height;#define GET_CONFIG(attrib) { \  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \    glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \      attrib, &value); \  } else { \    glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \      attrib, &value); \  } \}  case GLUT_WINDOW_BUFFER_SIZE:    GET_CONFIG(GLX_BUFFER_SIZE);    return value;  case GLUT_WINDOW_STENCIL_SIZE:    GET_CONFIG(GLX_STENCIL_SIZE);    return value;  case GLUT_WINDOW_DEPTH_SIZE:    GET_CONFIG(GLX_DEPTH_SIZE);    return value;  case GLUT_WINDOW_RED_SIZE:    GET_CONFIG(GLX_RED_SIZE);    return value;  case GLUT_WINDOW_GREEN_SIZE:    GET_CONFIG(GLX_GREEN_SIZE);    return value;  case GLUT_WINDOW_BLUE_SIZE:    GET_CONFIG(GLX_BLUE_SIZE);    return value;  case GLUT_WINDOW_ALPHA_SIZE:    GET_CONFIG(GLX_ALPHA_SIZE);    return value;  case GLUT_WINDOW_ACCUM_RED_SIZE:    GET_CONFIG(GLX_ACCUM_RED_SIZE);    return value;  case GLUT_WINDOW_ACCUM_GREEN_SIZE:    GET_CONFIG(GLX_ACCUM_GREEN_SIZE);    return value;  case GLUT_WINDOW_ACCUM_BLUE_SIZE:    GET_CONFIG(GLX_ACCUM_BLUE_SIZE);    return value;  case GLUT_WINDOW_ACCUM_ALPHA_SIZE:    GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);    return value;  case GLUT_WINDOW_DOUBLEBUFFER:    GET_CONFIG(GLX_DOUBLEBUFFER);    return value;  case GLUT_WINDOW_RGBA:    GET_CONFIG(GLX_RGBA);    return value;  case GLUT_WINDOW_COLORMAP_SIZE:    GET_CONFIG(GLX_RGBA);    if (value) {      return 0;    } else {#if defined(_WIN32)      /* KLUDGE: we always assume 256 colors in CI mode on         Win32 */      return 256;#else      if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {         return __glutCurrentWindow->vis->visual->map_entries;      } else {        return __glutCurrentWindow->overlay->vis->visual->map_entries;      }#endif /* _WIN32 */    }  case GLUT_WINDOW_PARENT:    return __glutCurrentWindow->parent ?      __glutCurrentWindow->parent->num + 1 : 0;  case GLUT_WINDOW_NUM_CHILDREN:    {      int num = 0;      GLUTwindow *children = __glutCurrentWindow->children;      while (children) {        num++;        children = children->siblings;      }      return num;    }  case GLUT_WINDOW_NUM_SAMPLES:#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)    if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {      GET_CONFIG(GLX_SAMPLES_SGIS);      return value;    } else {      return 0;    }#else    /* Independent of GLX server support, multisampling not       supported by GLX client-side. */    return 0;#endif  case GLUT_WINDOW_STEREO:    GET_CONFIG(GLX_STEREO);    return value;  case GLUT_WINDOW_CURSOR:    return __glutCurrentWindow->cursor;  case GLUT_SCREEN_WIDTH:    return DisplayWidth(__glutDisplay, __glutScreen);  case GLUT_SCREEN_HEIGHT:    return DisplayHeight(__glutDisplay, __glutScreen);  case GLUT_SCREEN_WIDTH_MM:    return DisplayWidthMM(__glutDisplay, __glutScreen);  case GLUT_SCREEN_HEIGHT_MM:    return DisplayHeightMM(__glutDisplay, __glutScreen);  case GLUT_MENU_NUM_ITEMS:    return __glutCurrentMenu->num;  case GLUT_DISPLAY_MODE_POSSIBLE:    {      XVisualInfo *vi;      Bool dummy, visAlloced;      void *fbc;#if defined(_WIN32)            /* Our fake glXChooseVisual (which is called by         __glutDetermineVisual) needs an HDC to work with, so grab one         from the "root" window. */      XHDC = GetDC(GetDesktopWindow());#endif      vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);#if defined(_WIN32)            ReleaseDC(GetDesktopWindow(), XHDC);#endif      if (vi) {        if (visAlloced)          XFree(vi);        return 1;      }      return 0;    }  case GLUT_ELAPSED_TIME:    {#ifdef OLD_VMS       struct timeval6 elapsed, beginning, now;#else       struct timeval elapsed, beginning, now;#endif       __glutInitTime(&beginning);      GETTIMEOFDAY(&now);      TIMEDELTA(elapsed, now, beginning);      /* Return elapsed milliseconds. */#if defined(__vms) && ( __VMS_VER < 70000000 )      return (int) (elapsed.val / TICKS_PER_MILLISECOND);#else      return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));#endif    }  case GLUT_WINDOW_FORMAT_ID:#if defined(_WIN32)    return GetPixelFormat(__glutCurrentWindow->hdc);#else    if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {      return (int) __glutCurrentWindow->vis->visualid;    } else {      return (int) __glutCurrentWindow->overlay->vis->visualid;    }#endif  default:    __glutWarning("invalid glutGet parameter: %d", param);    return -1;  }}/* ENDCENTRY */

⌨️ 快捷键说明

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